Initial import from local backup (Documents-Playground/pakerpale)

This commit is contained in:
jeonghwa
2026-07-03 05:27:41 +09:00
commit 5b1bfe3390
2223 changed files with 561621 additions and 0 deletions

View File

@@ -0,0 +1,121 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Main class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자 메인 controller 입니다.
*/
class Main extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = '';
/**
* 모델을 로딩합니다
*/
protected $models = array('Post', 'Comment', 'Point');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = '';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('querystring'));
}
/**
* 관리자 메인 페이지입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_main_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$view['view']['latest_member'] = $this->Member_model->get_admin_list(7, '', '', '', 'mem_id', 'desc', '', '');
if (isset($view['view']['latest_member']['list']) && is_array($view['view']['latest_member']['list'])) {
foreach ($view['view']['latest_member']['list'] as $key => $val) {
$view['view']['latest_member']['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val)
);
}
}
$view['view']['latest_point'] = $this->Point_model->get_admin_list(7, '', '', '', 'poi_id', 'desc', '', '');
if (isset($view['view']['latest_point']['list']) && is_array($view['view']['latest_point']['list'])) {
foreach ($view['view']['latest_point']['list'] as $key => $val) {
$view['view']['latest_point']['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val)
);
}
}
$view['view']['latest_post'] = $this->Post_model->get_admin_list(7, '', '', '', 'post_id', 'desc', '', '');
if (isset($view['view']['latest_post']['list']) && is_array($view['view']['latest_post']['list'])) {
foreach ($view['view']['latest_post']['list'] as $key => $val) {
$brd_key = $this->board->item_id('brd_key', element('brd_id', $val));
$view['view']['latest_post']['list'][$key]['post_url'] = post_url($brd_key, element('post_id', $val));
$view['view']['latest_post']['list'][$key]['display_name'] = display_username(
element('post_userid', $val),
element('post_nickname', $val)
);
}
}
$view['view']['latest_comment'] = $this->Comment_model->get_admin_list(7, '', '', '', 'cmt_id', 'desc', '', '');
if (isset($view['view']['latest_comment']['list']) && is_array($view['view']['latest_comment']['list'])) {
foreach ($view['view']['latest_comment']['list'] as $key => $val) {
$post = $this->Post_model->get_one(element('post_id', $val), 'brd_id');
$brd_key = $this->board->item_id('brd_key', element('brd_id', $post));
$view['view']['latest_comment']['list'][$key]['post_url'] = post_url($brd_key, element('post_id', $val)) . '#comment_' . element('cmt_id', $val);
$view['view']['latest_comment']['list'][$key]['display_name'] = display_username(
element('cmt_userid', $val),
element('cmt_nickname', $val)
);
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'main');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,380 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Blame class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>게시판설정>신고 controller 입니다.
*/
class Blame extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'board/blame';
/**
* 모델을 로딩합니다
*/
protected $models = array('Blame', 'Board', 'Post', 'Comment');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Blame_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_blame_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('bla_id', 'target_id', 'target_type', 'blame.mem_id', 'target_mem_id', 'bla_ip'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('bla_id', 'target_id', 'blame.mem_id', 'target_mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('bla_id'); // 정렬이 가능한 필드
$where = array();
if ($brdid = (int) $this->input->get('brd_id')) {
$where['blame.brd_id'] = $brdid;
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
$select = 'mem_id, mem_userid, mem_nickname, mem_icon';
$result['list'][$key]['target_member'] = $target_member = $this->Member_model->get_by_memid(element('target_mem_id', $val), $select);
$result['list'][$key]['target_display_name'] = display_username(
element('mem_userid', $target_member),
element('mem_nickname', $target_member),
element('mem_icon', $target_member)
);
$result['list'][$key]['num'] = $list_num--;
$select = 'post_id, brd_id, post_title, post_datetime, post_ip';
if (element('target_type', $val) === '1') {
$result['list'][$key]['target_name'] = '원글';
$result['list'][$key]['post'] = $post = $this->Post_model->get_one(element('target_id', $val), $select);
if ($post) {
$result['list'][$key]['board'] = $board = $this->board->item_all(element('brd_id', $post));
$result['list'][$key]['origin_content'] = element('post_title', $post);
$result['list'][$key]['origin_datetime'] = element('post_datetime', $post);
$result['list'][$key]['origin_ip'] = element('post_ip', $post);
$result['list'][$key]['posturl'] = post_url(element('brd_key', $board), element('post_id', $post));
}
} elseif (element('target_type', $val) === '2') {
$result['list'][$key]['target_name'] = '댓글';
$commentselect = 'cmt_id, post_id, cmt_content, cmt_datetime, cmt_ip';
$result['list'][$key]['comment'] = $comment
= $this->Comment_model->get_one(element('target_id', $val), $commentselect);
if ($comment) {
$result['list'][$key]['post'] = $post
= $this->Post_model->get_one(element('post_id', $comment), $select);
$result['list'][$key]['origin_content'] = cut_str(element('cmt_content', $comment),40);
$result['list'][$key]['origin_datetime'] = element('cmt_datetime', $comment);
$result['list'][$key]['origin_ip'] = element('cmt_ip', $comment);
if ($post) {
$result['list'][$key]['board'] = $board = $this->board->item_all(element('brd_id', $post));
$result['list'][$key]['posturl'] = post_url(element('brd_key', $board), element('post_id', $post)) . '#comment_id=' . element('cmt_id', $comment);
}
}
}
}
}
$view['view']['data'] = $result;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('bla_ip' => '신고IP');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 신고현황을 그래프 형식으로 보는 페이지입니다
*/
public function graph($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_blame_graph';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$datetype = $this->input->get('datetype', null, 'd');
if ($datetype !== 'm' && $datetype !== 'y') {
$datetype = 'd';
}
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
if ($datetype === 'y' OR $datetype === 'm') {
$start_year = substr($start_date, 0, 4);
$end_year = substr($end_date, 0, 4);
}
if ($datetype === 'm') {
$start_month = substr($start_date, 5, 2);
$end_month = substr($end_date, 5, 2);
$start_year_month = $start_year * 12 + $start_month;
$end_year_month = $end_year * 12 + $end_month;
}
$orderby = (strtolower($this->input->get('orderby')) === 'desc') ? 'desc' : 'asc';
$brd_id = $this->input->get('brd_id', null, '');
$result = $this->{$this->modelname}->get_blame_count($datetype, $start_date, $end_date, $brd_id, $orderby);
$sum_count = 0;
$arr = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
$s = element('day', $value);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s] += element('cnt', $value);
if ($arr[$s] > $max) {
$max = $arr[$s];
}
$sum_count += element('cnt', $value);
}
}
$result = array();
$i = 0;
$save_count = -1;
$tot_count = 0;
if (count($arr)) {
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$result[$key]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$result[$key]['no'] = $no;
$result[$key]['key'] = $key;
$rate = ($count / $sum_count * 100);
$result[$key]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$result[$key]['s_rate'] = $s_rate;
$bar = (int) ($count / $max * 100);
$result[$key]['bar'] = $bar;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
if ($datetype === 'y') {
for ($i = $start_year; $i <= $end_year; $i++) {
if( ! isset($result[$i])) $result[$i] = '';
}
} elseif ($datetype === 'm') {
for ($i = $start_year_month; $i <= $end_year_month; $i++) {
$year = floor($i / 12);
if ($year * 12 == $i) $year--;
$month = sprintf("%02d", ($i - ($year * 12)));
$date = $year . '-' . $month;
if( ! isset($result[$date])) $result[$date] = '';
}
} elseif ($datetype === 'd') {
$date = $start_date;
while ($date <= $end_date) {
if( ! isset($result[$date])) $result[$date] = '';
$date = cdate('Y-m-d', strtotime($date) + 86400);
}
}
if ($orderby === 'desc') {
krsort($result);
} else {
ksort($result);
}
$view['view']['list'] = $result;
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
$view['view']['datetype'] = $datetype;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=신고현황_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/graph_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'graph');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_blame_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$getdata = $this->{$this->modelname}->get_one($val);
if ( ! element('bla_id', $getdata)) {
continue;
}
$this->{$this->modelname}->delete($val);
$where = array(
'target_id' => element('target_id', $getdata),
'target_type' => element('target_type', $getdata),
);
$blame_cnt = $this->{$this->modelname}->count_by($where);
if (element('target_type', $getdata) === '1') { // 원글 신고의 경우
$updatedata = array(
'post_blame' => $blame_cnt,
);
$this->Post_model->update(element('target_id', $getdata), $updatedata);
} elseif (element('target_type', $getdata) === '2') { // 댓글 신고의 경우
$updatedata = array(
'cmt_blame' => $blame_cnt,
);
$this->Comment_model->update(element('target_id', $getdata), $updatedata);
}
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}

View File

@@ -0,0 +1,727 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Boardgroup class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>게시판설정>게시판그룹관리 controller 입니다.
*/
class Boardgroup extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'board/boardgroup';
/**
* 모델을 로딩합니다
*/
protected $models = array('Board_group', 'Board_group_meta', 'Board', 'Board_group_admin');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Board_group_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_boardgroup_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$view['view']['sort'] = array(
'bgr_id' => $param->sort('bgr_id', 'asc'),
'bgr_key' => $param->sort('bgr_key', 'asc'),
'bgr_name' => $param->sort('bgr_name', 'asc'),
'bgr_order' => $param->sort('bgr_order', 'asc'),
);
$findex = $this->input->get('findex', null, 'bgr_order');
$forder = $this->input->get('forder', null, 'asc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('bgr_id', 'bgr_key', 'bgr_name', 'bgr_order'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('bgr_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('bgr_id', 'bgr_key', 'bgr_name', 'bgr_order'); // 정렬이 가능한 필드
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, '', '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$countwhere = array(
'bgr_id' => element('bgr_id', $val),
);
$result['list'][$key]['brd_cnt'] = $this->Board_model->count_by($countwhere);
$result['list'][$key]['meta'] = $this->Board_group_meta_model
->get_all_meta(element('bgr_id', $val));
$result['list'][$key]['group_skin_option'] = get_skin_name(
'group',
element('group_skin', $result['list'][$key]['meta']),
'기본설정따름'
);
$result['list'][$key]['group_mobile_skin_option'] = get_skin_name(
'group',
element('group_mobile_skin', $result['list'][$key]['meta']),
'기본설정따름'
);
$result['list'][$key]['group_layout_option'] = get_skin_name(
'_layout',
element('group_layout', $result['list'][$key]['meta']),
'기본설정따름'
);
$result['list'][$key]['group_mobile_layout_option'] = get_skin_name(
'_layout',
element('group_mobile_layout', $result['list'][$key]['meta']),
'기본설정따름'
);
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('bgr_key' => 'KEY', 'bgr_name' => '제목', 'bgr_order' => '정렬순서');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['write_url'] = admin_url($this->pagedir . '/write');
$view['view']['list_update_url'] = admin_url($this->pagedir . '/listupdate/?' . $param->output());
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 게시판 글쓰기 또는 수정 페이지를 가져오는 메소드입니다
*/
public function write($pid = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_boardgroup_write';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 프라이머리키에 숫자형이 입력되지 않으면 에러처리합니다
*/
if ($pid) {
$pid = (int) $pid;
if (empty($pid) OR $pid < 1) {
show_404();
}
}
$primary_key = $this->{$this->modelname}->primary_key;
/**
* 수정 페이지일 경우 기존 데이터를 가져옵니다
*/
if ($pid) {
$getdata = $this->{$this->modelname}->get_one($pid);
$board_group_meta = $this->Board_group_meta_model->get_all_meta($getdata['bgr_id']);
if (is_array($board_group_meta)) {
$getdata = array_merge($getdata, $board_group_meta);
}
}
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'bgr_name',
'label' => '그룹명',
'rules' => 'trim|required',
),
array(
'field' => 'bgr_order',
'label' => '그룹정렬순서',
'rules' => 'trim|required|numeric|is_natural',
),
array(
'field' => 'group_layout',
'label' => '레이아웃',
'rules' => 'trim',
),
array(
'field' => 'group_mobile_layout',
'label' => '모바일레이아웃',
'rules' => 'trim',
),
array(
'field' => 'group_sidebar',
'label' => '사이드바',
'rules' => 'trim',
),
array(
'field' => 'group_mobile_sidebar',
'label' => '모바일사이드바',
'rules' => 'trim',
),
array(
'field' => 'group_skin',
'label' => '스킨',
'rules' => 'trim',
),
array(
'field' => 'group_mobile_skin',
'label' => '모바일스킨',
'rules' => 'trim',
),
array(
'field' => 'header_content',
'label' => '상단내용',
'rules' => 'trim',
),
array(
'field' => 'footer_content',
'label' => '하단내용',
'rules' => 'trim',
),
array(
'field' => 'mobile_header_content',
'label' => '모바일상단내용',
'rules' => 'trim',
),
array(
'field' => 'mobile_footer_content',
'label' => '모바일하단내용',
'rules' => 'trim',
),
);
if ($this->input->post($primary_key)) {
$config[] = array(
'field' => 'bgr_key',
'label' => '페이지주소',
'rules' => 'trim|required|alpha_dash|min_length[3]|max_length[50]|is_unique[board_group.bgr_key.bgr_id.' . $getdata['bgr_id'] . ']',
);
} else {
$config[] = array(
'field' => 'bgr_key',
'label' => '페이지주소',
'rules' => 'trim|required|alpha_dash|min_length[3]|max_length[50]|is_unique[board_group.bgr_key]',
);
}
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$bgr_order = $this->input->post('bgr_order') ? $this->input->post('bgr_order') : 0;
$updatedata = array(
'bgr_key' => $this->input->post('bgr_key', null, ''),
'bgr_name' => $this->input->post('bgr_name', null, ''),
'bgr_order' => $bgr_order,
);
$array = array(
'group_layout', 'group_mobile_layout', 'group_sidebar', 'group_mobile_sidebar',
'group_skin', 'group_mobile_skin', 'header_content', 'footer_content',
'mobile_header_content', 'mobile_footer_content',);
$metadata = array();
if ($array) {
foreach ($array as $value) {
$metadata[$value] = $this->input->post($value, null, '');
}
}
/**
* 게시물을 수정하는 경우입니다
*/
if ($this->input->post($primary_key)) {
$this->{$this->modelname}->update($this->input->post($primary_key), $updatedata);
$this->Board_group_meta_model->save($pid, $metadata);
$view['view']['alert_message'] = '기본정보 설정이 저장되었습니다';
} else {
/**
* 게시물을 새로 입력하는 경우입니다
*/
$pid = $this->{$this->modelname}->insert($updatedata);
$this->Board_group_meta_model->save($pid, $metadata);
$this->session->set_flashdata(
'message',
'기본정보 설정이 저장되었습니다'
);
$redirecturl = admin_url($this->pagedir . '/write/' . $pid);
redirect($redirecturl);
}
}
$getdata = array();
if ($pid) {
$getdata = $this->{$this->modelname}->get_one($pid);
$board_group_meta = $this->Board_group_meta_model->get_all_meta($getdata['bgr_id']);
if (is_array($board_group_meta)) {
$getdata = array_merge($getdata, $board_group_meta);
}
}
$view['view']['data'] = $getdata;
$view['view']['data']['group_layout_option'] = get_skin_name(
'_layout',
set_value('group_layout', element('group_layout', $getdata)),
'기본설정따름'
);
$view['view']['data']['group_mobile_layout_option'] = get_skin_name(
'_layout',
set_value('group_mobile_layout', element('group_mobile_layout', $getdata)),
'기본설정따름'
);
$view['view']['data']['group_skin_option'] = get_skin_name(
'group',
set_value('group_skin', element('group_skin', $getdata)),
'기본설정따름'
);
$view['view']['data']['group_mobile_skin_option'] = get_skin_name(
'group',
set_value('group_mobile_skin', element('group_mobile_skin', $getdata)),
'기본설정따름'
);
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $primary_key;
$view['view']['grouplist'] = $this->Board_group_model->get_group_list();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'write');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 그룹관리자를 관리하는 페이지입니다
*/
public function write_admin($pid = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_boardgroup_write_admin';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 프라이머리키에 숫자형이 입력되지 않으면 에러처리합니다
*/
$pid = (int) $pid;
if (empty($pid) OR $pid < 1) {
show_404();
}
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'bgr_id',
'label' => '그룹아이디',
'rules' => 'trim|required|numeric|is_natural',
),
array(
'field' => 'userid',
'label' => '회원아이디',
'rules' => 'trim|required|alpha_dash|min_length[3]|max_length[50]|callback__userid_check[' . $pid . ']',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$memdata = $this->Member_model
->get_by_userid($this->input->post('userid'), 'mem_id');
$mem_id = element('mem_id', $memdata);
$insertdata = array(
'bgr_id' => $this->input->post('bgr_id'),
'mem_id' => $mem_id,
);
$this->Board_group_admin_model->insert($insertdata);
}
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->Board_group_admin_model->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$getdata = $this->{$this->modelname}->get_one($pid);
$where = array(
'bgr_id' => $pid,
);
$result = $this->Board_group_admin_model
->get('', '', $where, '', '', $findex, $forder);
if ($result && is_array($result)) {
foreach ($result as $key => $val) {
$select = 'mem_id, mem_userid, mem_nickname, mem_email, mem_icon';
$result[$key]['member'] = $dbmember = $this->Member_model->get_by_memid(element('mem_id', $val), $select);
$result[$key]['display_name'] = display_username(
element('mem_userid', $dbmember),
element('mem_nickname', $dbmember),
element('mem_icon', $dbmember)
);
}
}
$view['view']['list'] = $result;
$view['view']['data'] = $getdata;
$primary_key = $this->Board_group_admin_model->primary_key;
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/write_admin_delete/' . $pid . '?' . $param->output());
$view['view']['primary_key'] = $primary_key;
$view['view']['grouplist'] = $this->Board_group_model->get_group_list();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'write_admin');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 그룹 관리자 추가시 실제 존재하는 회원인지 체크합니다.
*/
public function _userid_check($str, $pid)
{
if (empty($str)) {
$this->form_validation->set_message(
'_userid_check',
'회원아이디가 입력되지 않았습니다'
);
return false;
}
$select = 'mem_id, mem_denied';
$getdata = $this->Member_model->get_by_userid($str, $select);
if ( ! element('mem_id', $getdata)) {
$this->form_validation->set_message(
'_userid_check',
$str . ' 은(는) 존재하지 않는 회원아이디입니다'
);
return false;
} elseif (element('mem_denied', $getdata)) {
$this->form_validation->set_message(
'_userid_check',
$str . ' 은(는) 탈퇴 또는 차단된 회원아이디입니다'
);
return false;
} else {
$where = array(
'bgr_id' => $pid,
'mem_id' => element('mem_id', $getdata),
);
$chkdata = $this->Board_group_admin_model->get_one('', '', $where);
if (element('mem_id', $chkdata)) {
$this->form_validation->set_message(
'_userid_check',
$str . ' 은(는) 이미 입력된 회원아이디입니다'
);
return false;
}
return true;
}
}
/**
* 목록 페이지에서 선택수정을 하는 경우 실행되는 메소드입니다
*/
public function listupdate()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_boardgroup_listupdate';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 업데이트를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
$bgr_name = $this->input->post('bgr_name');
$bgr_order = $this->input->post('bgr_order');
$group_layout = $this->input->post('group_layout');
$group_mobile_layout = $this->input->post('group_mobile_layout');
$group_sidebar = $this->input->post('group_sidebar');
$group_mobile_sidebar = $this->input->post('group_mobile_sidebar');
$group_skin = $this->input->post('group_skin');
$group_mobile_skin = $this->input->post('group_mobile_skin');
foreach ($this->input->post('chk') as $val) {
if ($val) {
$bgr_order_update = element($val, $bgr_order) ? element($val, $bgr_order) : 0;
$updatedata = array(
'bgr_name' => element($val, $bgr_name),
'bgr_order' => $bgr_order_update,
);
$this->{$this->modelname}->update($val, $updatedata);
$metadata = array(
'group_layout' => element($val, $group_layout),
'group_mobile_layout' => element($val, $group_mobile_layout),
'group_sidebar' => element($val, $group_sidebar),
'group_mobile_sidebar' => element($val, $group_mobile_sidebar),
'group_skin' => element($val, $group_skin),
'group_mobile_skin' => element($val, $group_mobile_skin),
);
$this->Board_group_meta_model->save($val, $metadata);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 업데이트가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 수정되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_boardgroup_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
$msg = '';
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$countwhere = array(
'bgr_id' => $val,
);
$cnt = $this->Board_model->count_by($countwhere);
if ($cnt > 0) {
$this->session->set_flashdata(
'message',
'게시판이 존재하는 그룹은 삭제할 수 없습니다'
);
$msg = 1;
}
if ($cnt === 0) {
$this->{$this->modelname}->delete($val);
$deletewhere = array(
'bgr_id' => $val,
);
$this->Board_group_admin_model->delete_where($deletewhere);
$this->Board_group_meta_model->deletemeta($val);
}
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
if (empty($msg)) {
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
}
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 그룹관리자 삭제를 할 경우 실행되는 메소드입니다
*/
public function write_admin_delete($pid = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_boardgroup_write_admin_delete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
$pid = (int) $pid;
if (empty($pid) OR $pid < 1) {
show_404();
}
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->Board_group_admin_model->delete($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '/write_admin/' . $pid . '?' . $param->output());
redirect($redirecturl);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,239 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Comment class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>게시판설정>댓글관리 controller 입니다.
*/
class Comment extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'board/comment';
/**
* 모델을 로딩합니다
*/
protected $models = array('Comment', 'Board', 'Comment_meta');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Comment_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_comment_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = 'cmt_id';
$forder = 'desc';
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('cmt_id', 'comment.post_id', 'cmt_content', 'comment.mem_id', 'post.mem_id', 'cmt_username', 'cmt_nickname', 'cmt_datetime', 'cmt_ip', 'cmt_device'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('cmt_id', 'comment.post_id', 'comment.mem_id', 'post.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('cmt_id'); // 정렬이 가능한 필드
$where = array(
'cmt_del <>' => 2,
);
if ($brdid = (int) $this->input->get('brd_id')) {
$where['post.brd_id'] = $brdid;
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('cmt_userid', $val),
element('cmt_nickname', $val)
);
$result['list'][$key]['post_display_name'] = display_username(
element('post_userid', $val),
element('post_nickname', $val)
);
$result['list'][$key]['board'] = $board = $this->board->item_all(element('brd_id', $val));
$result['list'][$key]['num'] = $list_num--;
if ($board) {
$result['list'][$key]['boardurl'] = board_url(element('brd_key', $board));
$result['list'][$key]['posturl'] = post_url(element('brd_key', $board), element('post_id', $val));
$result['list'][$key]['commenturl'] = post_url(element('brd_key', $board), element('post_id', $val)) . '#comment_' . element('cmt_id', $val);
}
}
}
$view['view']['data'] = $result;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('cmt_content' => '내용', 'cmt_username' => '실명', 'cmt_nickname' => '닉네임', 'cmt_datetime' => '날짜', 'cmt_ip' => 'IP');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
$view['view']['list_trash_url'] = admin_url($this->pagedir . '/listtrash/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_comment_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->board->delete_comment($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 목록 페이지에서 휴지통을 클릭한 경우 실행되는 메소드입니다
*/
public function listtrash()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_comment_listtrash';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$updatedata = array(
'cmt_del' => 2,
);
$this->Comment_model->update($val, $updatedata);
$metadata = array(
'trash_mem_id' => $this->member->item('mem_id'),
'trash_datetime' => cdate('Y-m-d H:i:s'),
'trash_ip' => $this->input->ip_address(),
);
$this->Comment_meta_model->save($val, $metadata);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 휴지통으로 이동되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}

View File

@@ -0,0 +1,356 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Editorimage class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>게시판설정>에디터이미지 controller 입니다.
*/
class Editorimage extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'board/editorimage';
/**
* 모델을 로딩합니다
*/
protected $models = array('Editor_image');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Editor_image_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array', 'number');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_editorimage_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$view['view']['sort'] = array(
'eim_id' => $param->sort('eim_id', 'asc'),
'eim_filesize' => $param->sort('eim_filesize', 'asc'),
'eim_datetime' => $param->sort('eim_datetime', 'asc'),
);
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('eim_id', 'editor_image.mem_id', 'eim_originname', 'eim_filename', 'eim_datetime', 'eim_ip'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('eim_id', 'editor_image.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('eim_id', 'eim_filesize', 'eim_datetime'); // 정렬이 가능한 필드
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, '', '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
$result['list'][$key]['download_link'] = admin_url($this->pagedir . '/download/' . element('eim_id', $val));
$result['list'][$key]['origin_image_url'] = thumb_url('editor', element('eim_filename', $val));
$result['list'][$key]['thumb_url'] = thumb_url('editor', element('eim_filename', $val), '80');
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('eim_originname' => '파일명', 'eim_datetime' => '올린날짜', 'eim_ip' => 'IP');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 파일 업로드 현황을 그래프 형식으로 페이지입니다
*/
public function graph($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_editorimage_graph';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$datetype = $this->input->get('datetype', null, 'd');
if ($datetype !== 'm' && $datetype !== 'y') {
$datetype = 'd';
}
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
if ($datetype === 'y' OR $datetype === 'm') {
$start_year = substr($start_date, 0, 4);
$end_year = substr($end_date, 0, 4);
}
if ($datetype === 'm') {
$start_month = substr($start_date, 5, 2);
$end_month = substr($end_date, 5, 2);
$start_year_month = $start_year * 12 + $start_month;
$end_year_month = $end_year * 12 + $end_month;
}
$orderby = (strtolower($this->input->get('orderby')) === 'desc') ? 'desc' : 'asc';
$brd_id = $this->input->get('brd_id', null, '');
$result = $this->{$this->modelname}->get_editor_file_by_date($datetype, $start_date, $end_date, $orderby);
$sum_count = 0;
$arr = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
$s = element('day', $value);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s] += element('cnt', $value);
if ($arr[$s] > $max) {
$max = $arr[$s];
}
$sum_count += element('cnt', $value);
}
}
$result = array();
$i = 0;
$save_count = -1;
$tot_count = 0;
if (count($arr)) {
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$result[$key]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$result[$key]['no'] = $no;
$result[$key]['key'] = $key;
$rate = ($count / $sum_count * 100);
$result[$key]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$result[$key]['s_rate'] = $s_rate;
$bar = (int)($count / $max * 100);
$result[$key]['bar'] = $bar;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
if ($datetype === 'y') {
for ($i = $start_year; $i <= $end_year; $i++) {
if( ! isset($result[$i])) $result[$i] = '';
}
} elseif ($datetype === 'm') {
for ($i = $start_year_month; $i <= $end_year_month; $i++) {
$year = floor($i / 12);
if ($year * 12 == $i) $year--;
$month = sprintf("%02d", ($i - ($year * 12)));
$date = $year . '-' . $month;
if( ! isset($result[$date])) $result[$date] = '';
}
} elseif ($datetype === 'd') {
$date = $start_date;
while ($date <= $end_date) {
if( ! isset($result[$date])) $result[$date] = '';
$date = cdate('Y-m-d', strtotime($date) + 86400);
}
}
if ($orderby === 'desc') {
krsort($result);
} else {
ksort($result);
}
$view['view']['list'] = $result;
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
$view['view']['datetype'] = $datetype;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=에디터이미지_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/graph_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'graph');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_editorimage_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 파일다운로드시 실행되는 함수입니다
*/
public function download($eim_id = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_editorimage_download';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
$eim_id = (int) $eim_id;
if (empty($eim_id) OR $eim_id < 1) {
show_404();
}
$file = $this->{$this->modelname}->get_one($eim_id);
if ( ! element('eim_id', $file)) {
show_404();
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
$this->load->helper('download');
$data = file_get_contents(config_item('uploads_dir') . '/editor/' . element('eim_filename', $file)); // Read the file's contents
$name = element('eim_originname', $file);
if ($name && $data) {
force_download($name, $data);
}
}
}

View File

@@ -0,0 +1,427 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Filedownload class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>게시판설정>파일다운로드 controller 입니다.
*/
class Filedownload extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'board/filedownload';
/**
* 모델을 로딩합니다
*/
protected $models = array('Board', 'Post_file_download_log');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Post_file_download_log_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array', 'number');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_filedownload_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('pfd_id', 'pfi_id', 'post.post_id', 'post.mem_id', 'post_file_download_log.mem_id', 'pfd_datetime', 'pfd_ip'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('pfd_id', 'pfi_id', 'post.post_id', 'post.mem_id', 'post_file_download_log.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('pfd_id'); // 정렬이 가능한 필드
$where = array();
if ($brdid = (int) $this->input->get('brd_id')) {
$where['post.brd_id'] = $brdid;
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$select = 'mem_id, mem_userid, mem_nickname, mem_icon';
$result['list'][$key]['member'] = $dbmember = $this->Member_model->get_by_memid(element('mem_id', $val), $select);
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $dbmember),
element('mem_nickname', $dbmember),
element('mem_icon', $dbmember)
);
$result['list'][$key]['post_display_name'] = display_username(
element('post_userid', $val),
element('post_nickname', $val)
);
$brd_key = $this->board->item_id('brd_key', element('brd_id', $val));
$result['list'][$key]['posturl'] = post_url($brd_key, element('post_id', $val));
$result['list'][$key]['download_link'] = admin_url('board/fileupload/download/' . element('pfi_id', $val));
$result['list'][$key]['board'] = $board = $this->board->item_all(element('brd_id', $val));
if ($board) {
$result['list'][$key]['boardurl'] = board_url(element('brd_key', $board));
}
if (element('pfd_useragent', $val)) {
$userAgent = get_useragent_info(element('pfd_useragent', $val));
$result['list'][$key]['browsername'] = $userAgent['browsername'];
$result['list'][$key]['browserversion'] = $userAgent['browserversion'];
$result['list'][$key]['os'] = $userAgent['os'];
$result['list'][$key]['engine'] = $userAgent['engine'];
}
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('pfd_datetime' => '날짜', 'pfd_ip' => 'IP');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 파일 다운로드 현황을 그래프 형식으로 페이지입니다
*/
public function graph($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_filedownload_graph';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$datetype = $this->input->get('datetype', null, 'd');
if ($datetype !== 'm' && $datetype !== 'y') {
$datetype = 'd';
}
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
if ($datetype === 'y' OR $datetype === 'm') {
$start_year = substr($start_date, 0, 4);
$end_year = substr($end_date, 0, 4);
}
if ($datetype === 'm') {
$start_month = substr($start_date, 5, 2);
$end_month = substr($end_date, 5, 2);
$start_year_month = $start_year * 12 + $start_month;
$end_year_month = $end_year * 12 + $end_month;
}
$orderby = (strtolower($this->input->get('orderby')) === 'desc') ? 'desc' : 'asc';
$brd_id = $this->input->get('brd_id', null, '');
$result = $this->{$this->modelname}->get_post_file_download_count($datetype, $start_date, $end_date, $brd_id, $orderby);
$sum_count = 0;
$arr = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
$s = element('day', $value);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s] += element('cnt', $value);
if ($arr[$s] > $max) {
$max = $arr[$s];
}
$sum_count += element('cnt', $value);
}
}
$result = array();
$i = 0;
$save_count = -1;
$tot_count = 0;
if (count($arr)) {
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$result[$key]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$result[$key]['no'] = $no;
$result[$key]['key'] = $key;
$rate = ($count / $sum_count * 100);
$result[$key]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$result[$key]['s_rate'] = $s_rate;
$bar = (int)($count / $max * 100);
$result[$key]['bar'] = $bar;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
if ($datetype === 'y') {
for ($i = $start_year; $i <= $end_year; $i++) {
if( ! isset($result[$i])) $result[$i] = '';
}
} elseif ($datetype === 'm') {
for ($i = $start_year_month; $i <= $end_year_month; $i++) {
$year = floor($i / 12);
if ($year * 12 == $i) $year--;
$month = sprintf("%02d", ($i - ($year * 12)));
$date = $year . '-' . $month;
if( ! isset($result[$date])) $result[$date] = '';
}
} elseif ($datetype === 'd') {
$date = $start_date;
while ($date <= $end_date) {
if( ! isset($result[$date])) $result[$date] = '';
$date = cdate('Y-m-d', strtotime($date) + 86400);
}
}
if ($orderby === 'desc') {
krsort($result);
} else {
ksort($result);
}
$view['view']['list'] = $result;
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
$view['view']['datetype'] = $datetype;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=파일다운로드_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/graph_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'graph');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_filedownload_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 오래된 파일다운로드로그 페이지입니다
*/
public function cleanlog()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_filedownload_cleanlog';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'pfd_datetime <=' => $this->input->post('criterion'),
);
$this->Post_file_download_log_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 ' . $this->input->post('day') . '일 이상된 파일다운로드로그가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d H:i:s', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'pfd_datetime <=' => $criterion,
);
$log_count = $this->Post_file_download_log_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day') . '일 이상된 파일다운로드로그가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 파일다운로드로그가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'cleanlog');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,379 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Fileupload class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>게시판설정>파일업로드 controller 입니다.
*/
class Fileupload extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'board/fileupload';
/**
* 모델을 로딩합니다
*/
protected $models = array('Board', 'Post_file', 'Post_file_download_log');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Post_file_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array', 'number');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_fileupload_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$view['view']['sort'] = array(
'pfi_id' => $param->sort('pfi_id', 'asc'),
'pfi_filesize' => $param->sort('pfi_filesize', 'asc'),
'pfi_download' => $param->sort('pfi_download', 'asc'),
'pfi_datetime' => $param->sort('pfi_datetime', 'asc'),
);
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('pfi_id', 'post.post_id', 'post.mem_id', 'pfi_originname', 'pfi_filename', 'pfi_datetime', 'pfi_ip'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('pfi_id', 'post.post_id', 'post.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('pfi_id', 'pfi_filesize', 'pfi_download', 'pfi_datetime'); // 정렬이 가능한 필드
$where = array();
if ($brdid = (int) $this->input->get('brd_id')) {
$where['post.brd_id'] = $brdid;
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['post_display_name'] = display_username(
element('post_userid', $val),
element('post_nickname', $val)
);
$brd_key = $this->board->item_id('brd_key', element('brd_id', $val));
$result['list'][$key]['posturl'] = post_url($brd_key, element('post_id', $val));
$result['list'][$key]['download_link'] = admin_url($this->pagedir . '/download/' . element('pfi_id', $val));
if (element('pfi_is_image', $val)) {
$result['list'][$key]['origin_image_url'] = thumb_url('post', element('pfi_filename', $val));
$result['list'][$key]['thumb_url'] = thumb_url('post', element('pfi_filename', $val), '80');
}
$result['list'][$key]['board'] = $board = $this->board->item_all(element('brd_id', $val));
if ($board) {
$result['list'][$key]['boardurl'] = board_url(element('brd_key', $board));
}
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('pfi_originname' => '파일명', 'pfi_datetime' => '올린날짜', 'pfi_ip' => 'IP');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 파일 업로드 현황을 그래프 형식으로 페이지입니다
*/
public function graph($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_fileupload_graph';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$datetype = $this->input->get('datetype', null, 'd');
if ($datetype !== 'm' && $datetype !== 'y') {
$datetype = 'd';
}
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
if ($datetype === 'y' OR $datetype === 'm') {
$start_year = substr($start_date, 0, 4);
$end_year = substr($end_date, 0, 4);
}
if ($datetype === 'm') {
$start_month = substr($start_date, 5, 2);
$end_month = substr($end_date, 5, 2);
$start_year_month = $start_year * 12 + $start_month;
$end_year_month = $end_year * 12 + $end_month;
}
$orderby = (strtolower($this->input->get('orderby')) === 'desc') ? 'desc' : 'asc';
$brd_id = $this->input->get('brd_id', null, '');
$result = $this->{$this->modelname}->get_post_file_by_date($datetype, $start_date, $end_date, $brd_id, $orderby);
$sum_count = 0;
$arr = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
$s = element('day', $value);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s] += element('cnt', $value);
if ($arr[$s] > $max) {
$max = $arr[$s];
}
$sum_count += element('cnt', $value);
}
}
$result = array();
$i = 0;
$save_count = -1;
$tot_count = 0;
if (count($arr)) {
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$result[$key]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$result[$key]['no'] = $no;
$result[$key]['key'] = $key;
$rate = ($count / $sum_count * 100);
$result[$key]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$result[$key]['s_rate'] = $s_rate;
$bar = (int)($count / $max * 100);
$result[$key]['bar'] = $bar;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
if ($datetype === 'y') {
for ($i = $start_year; $i <= $end_year; $i++) {
if( ! isset($result[$i])) $result[$i] = '';
}
} elseif ($datetype === 'm') {
for ($i = $start_year_month; $i <= $end_year_month; $i++) {
$year = floor($i / 12);
if ($year * 12 == $i) $year--;
$month = sprintf("%02d", ($i - ($year * 12)));
$date = $year . '-' . $month;
if( ! isset($result[$date])) $result[$date] = '';
}
} elseif ($datetype === 'd') {
$date = $start_date;
while ($date <= $end_date) {
if( ! isset($result[$date])) $result[$date] = '';
$date = cdate('Y-m-d', strtotime($date) + 86400);
}
}
if ($orderby === 'desc') {
krsort($result);
} else {
ksort($result);
}
$view['view']['list'] = $result;
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
$view['view']['datetype'] = $datetype;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=파일업로드_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/graph_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'graph');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_fileupload_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
$deletewhere = array(
'pfi_id' => $val,
);
$this->Post_file_download_log_model->delete_where($deletewhere);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 파일다운로드시 실행되는 함수입니다
*/
public function download($pfi_id = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_fileupload_download';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
$pfi_id = (int) $pfi_id;
if (empty($pfi_id) OR $pfi_id < 1) {
show_404();
}
$file = $this->{$this->modelname}->get_one($pfi_id);
if ( ! element('pfi_id', $file)) {
show_404();
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
$this->load->helper('download');
// Read the file's contents
$data = file_get_contents(config_item('uploads_dir') . '/post/' . element('pfi_filename', $file));
$name = element('pfi_originname', $file);
if ($name && $data) {
force_download($name, $data);
}
}
}

View File

@@ -0,0 +1,534 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Like class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>게시판설정>추천/비추 controller 입니다.
*/
class Like extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'board/like';
/**
* 모델을 로딩합니다
*/
protected $models = array('Like', 'Board', 'Post', 'Comment');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Like_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_like_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('lik_id', 'target_id', 'target_type', 'post_id', 'like.mem_id', 'target_mem_id', 'lik_type', 'lik_datetime', 'lik_ip'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('lik_id', 'target_id', 'target_type', 'post_id', 'like.mem_id', 'target_mem_id', 'lik_type'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('lik_id'); // 정렬이 가능한 필드
$where = array();
if ($brdid = (int) $this->input->get('brd_id')) {
$where['like.brd_id'] = $brdid;
}
if ($this->input->get('target_type')) {
$where['like.target_type'] = $this->input->get('target_type');
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
$result['list'][$key]['target_member'] = $target_member
= $this->Member_model->get_by_memid(element('target_mem_id', $val), 'mem_id, mem_userid, mem_nickname, mem_icon');
$result['list'][$key]['target_display_name'] = display_username(
element('mem_userid', $target_member),
element('mem_nickname', $target_member),
element('mem_icon', $target_member)
);
$result['list'][$key]['num'] = $list_num--;
if (element('target_type', $val) === '1') {
$result['list'][$key]['target_name'] = '원글';
$result['list'][$key]['post'] = $post = $this->Post_model->get_one(element('target_id', $val), 'post_id, brd_id, post_title');
if ($post) {
$result['list'][$key]['board'] = $board = $this->board->item_all(element('brd_id', $post));
$result['list'][$key]['origin_content'] = element('post_title', $post);
$result['list'][$key]['posturl'] = post_url(element('brd_key', $board), element('post_id', $post));
}
} elseif (element('target_type', $val) === '2') {
$result['list'][$key]['target_name'] = '댓글';
$result['list'][$key]['comment'] = $comment = $this->Comment_model->get_one(element('target_id', $val), 'cmt_id, post_id, cmt_content');
if ($comment) {
$result['list'][$key]['post'] = $post = $this->Post_model->get_one(element('post_id', $comment));
$result['list'][$key]['origin_content'] = cut_str(element('cmt_content', $comment),40);
if ($post) {
$result['list'][$key]['board'] = $board = $this->board->item_all(element('brd_id', $post));
$result['list'][$key]['posturl'] = post_url(element('brd_key', $board), element('post_id', $post)) . '#comment_id=' . element('cmt_id', $comment);
}
}
}
if (element('lik_type', $val) === '1') {
$result['list'][$key]['like_or_dislike'] = '<span class="label label-success">추천</span>';
} elseif (element('lik_type', $val) === '2') {
$result['list'][$key]['like_or_dislike'] = '<span class="label label-warning">비추</span>';
}
}
}
$view['view']['data'] = $result;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('lik_datetime' => '날짜', 'lik_ip' => 'IP');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 추천수를 그래프 형식으로 보는 페이지입니다
*/
public function graph($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_like_graph';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$datetype = $this->input->get('datetype', null, 'd');
if ($datetype !== 'm' && $datetype !== 'y') {
$datetype = 'd';
}
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
if ($datetype === 'y' OR $datetype === 'm') {
$start_year = substr($start_date, 0, 4);
$end_year = substr($end_date, 0, 4);
}
if ($datetype === 'm') {
$start_month = substr($start_date, 5, 2);
$end_month = substr($end_date, 5, 2);
$start_year_month = $start_year * 12 + $start_month;
$end_year_month = $end_year * 12 + $end_month;
}
$orderby = (strtolower($this->input->get('orderby')) === 'desc') ? 'desc' : 'asc';
$brd_id = $this->input->get('brd_id', null, '');
$result = $this->{$this->modelname}->get_like_count($datetype, $start_date, $end_date, $brd_id, $orderby);
$sum_count = 0;
$arr = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
$s = element('day', $value);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s] += element('cnt', $value);
if ($arr[$s] > $max) {
$max = $arr[$s];
}
$sum_count += element('cnt', $value);
}
}
$result = array();
$i = 0;
$save_count = -1;
$tot_count = 0;
if (count($arr)) {
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$result[$key]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$result[$key]['no'] = $no;
$result[$key]['key'] = $key;
$rate = ($count / $sum_count * 100);
$result[$key]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$result[$key]['s_rate'] = $s_rate;
$bar = (int)($count / $max * 100);
$result[$key]['bar'] = $bar;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
if ($datetype === 'y') {
for ($i = $start_year; $i <= $end_year; $i++) {
if( ! isset($result[$i])) $result[$i] = '';
}
} elseif ($datetype === 'm') {
for ($i = $start_year_month; $i <= $end_year_month; $i++) {
$year = floor($i / 12);
if ($year * 12 == $i) $year--;
$month = sprintf("%02d", ($i - ($year * 12)));
$date = $year . '-' . $month;
if( ! isset($result[$date])) $result[$date] = '';
}
} elseif ($datetype === 'd') {
$date = $start_date;
while ($date <= $end_date) {
if( ! isset($result[$date])) $result[$date] = '';
$date = cdate('Y-m-d', strtotime($date) + 86400);
}
}
if ($orderby === 'desc') {
krsort($result);
} else {
ksort($result);
}
$view['view']['list'] = $result;
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
$view['view']['datetype'] = $datetype;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=추천_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/graph_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'graph');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
/**
* 비추천 수를 그래프 형식으로 보는 페이지입니다
*/
public function graph_dislike($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_like_graph_dislike';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$datetype = $this->input->get('datetype', null, 'd');
if ($datetype !== 'm' && $datetype !== 'y') {
$datetype = 'd';
}
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
if ($datetype === 'y' OR $datetype === 'm') {
$start_year = substr($start_date, 0, 4);
$end_year = substr($end_date, 0, 4);
}
if ($datetype === 'm') {
$start_month = substr($start_date, 5, 2);
$end_month = substr($end_date, 5, 2);
$start_year_month = $start_year * 12 + $start_month;
$end_year_month = $end_year * 12 + $end_month;
}
$orderby = (strtolower($this->input->get('orderby')) === 'desc') ? 'desc' : 'asc';
$brd_id = $this->input->get('brd_id', null, '');
$result = $this->{$this->modelname}->get_dislike_count($datetype, $start_date, $end_date, $brd_id, $orderby);
$sum_count = 0;
$arr = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
$s = element('day', $value);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s] += element('cnt', $value);
if ($arr[$s] > $max) {
$max = $arr[$s];
}
$sum_count += element('cnt', $value);
}
}
$result = array();
$i = 0;
$save_count = -1;
$tot_count = 0;
if (count($arr)) {
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$result[$key]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$result[$key]['no'] = $no;
$result[$key]['key'] = $key;
$rate = ($count / $sum_count * 100);
$result[$key]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$result[$key]['s_rate'] = $s_rate;
$bar = (int)($count / $max * 100);
$result[$key]['bar'] = $bar;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
if ($datetype === 'y') {
for ($i = $start_year; $i <= $end_year; $i++) {
if( ! isset($result[$i])) $result[$i] = '';
}
} elseif ($datetype === 'm') {
for ($i = $start_year_month; $i <= $end_year_month; $i++) {
$year = floor($i / 12);
if ($year * 12 == $i) $year--;
$month = sprintf("%02d", ($i - ($year * 12)));
$date = $year . '-' . $month;
if( ! isset($result[$date])) $result[$date] = '';
}
} elseif ($datetype === 'd') {
$date = $start_date;
while ($date <= $end_date) {
if( ! isset($result[$date])) $result[$date] = '';
$date = cdate('Y-m-d', strtotime($date) + 86400);
}
}
if ($orderby === 'desc') {
krsort($result);
} else {
ksort($result);
}
$view['view']['list'] = $result;
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
$view['view']['datetype'] = $datetype;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=비추천_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/graph_dislike_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'graph_dislike');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_like_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$getdata = $this->{$this->modelname}->get_one($val);
$this->{$this->modelname}->delete($val);
$where = array(
'target_id' => element('target_id', $getdata),
'target_type' => element('target_type', $getdata),
'lik_type' => element('lik_type', $getdata),
);
$like_cnt = $this->{$this->modelname}->count_by($where);
if (element('target_type', $getdata) === '1') { // 원글 추천의 경우
if (element('lik_type', $getdata) === '1') {
$updatedata = array(
'post_like' => $like_cnt,
);
$this->Post_model->update(element('target_id', $getdata), $updatedata);
} elseif (element('lik_type', $getdata) === '2') {
$updatedata = array(
'post_dislike' => $like_cnt,
);
$this->Post_model->update(element('target_id', $getdata), $updatedata);
}
} elseif (element('target_type', $getdata) === '2') { // 댓글 추천의 경우
if (element('lik_type', $getdata) === '1') {
$updatedata = array(
'cmt_like' => $like_cnt,
);
$this->Comment_model->update(element('target_id', $getdata), $updatedata);
} elseif (element('lik_type', $getdata) === '2') {
$updatedata = array(
'cmt_dislike' => $like_cnt,
);
$this->Comment_model->update(element('target_id', $getdata), $updatedata);
}
}
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}

View File

@@ -0,0 +1,429 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Linkclick class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>게시판설정>링크 클릭 controller 입니다.
*/
class Linkclick extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'board/linkclick';
/**
* 모델을 로딩합니다
*/
protected $models = array('Post_link_click_log', 'Post_link', 'Board');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Post_link_click_log_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_linkclick_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('plc_id', 'pln_id', 'post.post_id', 'post.mem_id', 'post_link_click_log.mem_id', 'plc_datetime', 'plc_ip'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('plc_id', 'pln_id', 'post.post_id', 'post.mem_id', 'post_link_click_log.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('plc_id'); // 정렬이 가능한 필드
$where = array();
if ($brdid = (int) $this->input->get('brd_id')) {
$where['post.brd_id'] = $brdid;
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$select = 'mem_id, mem_userid, mem_nickname, mem_icon';
$result['list'][$key]['member'] = $dbmember = $this->Member_model->get_by_memid(element('mem_id', $val), $select);
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $dbmember),
element('mem_nickname', $dbmember),
element('mem_icon', $dbmember)
);
$result['list'][$key]['post_display_name'] = display_username(
element('post_userid', $val),
element('post_nickname', $val)
);
$brd_key = $this->board->item_id('brd_key', element('brd_id', $val));
$result['list'][$key]['posturl'] = post_url($brd_key, element('post_id', $val));
$result['list'][$key]['post_link'] = $this->Post_link_model->get_one(element('pln_id', $val));
$result['list'][$key]['board'] = $board = $this->board->item_all(element('brd_id', $val));
if ($board) {
$result['list'][$key]['boardurl'] = board_url(element('brd_key', $board));
}
if (element('plc_useragent', $val)) {
$userAgent = get_useragent_info(element('plc_useragent', $val));
$result['list'][$key]['browsername'] = $userAgent['browsername'];
$result['list'][$key]['browserversion'] = $userAgent['browserversion'];
$result['list'][$key]['os'] = $userAgent['os'];
$result['list'][$key]['engine'] = $userAgent['engine'];
}
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('plc_datetime' => '날짜', 'plc_ip' => 'IP');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 그래프 형식으로 보는 페이지입니다
*/
public function graph($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_linkclick_graph';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$datetype = $this->input->get('datetype', null, 'd');
if ($datetype !== 'm' && $datetype !== 'y') {
$datetype = 'd';
}
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
if ($datetype === 'y' OR $datetype === 'm') {
$start_year = substr($start_date, 0, 4);
$end_year = substr($end_date, 0, 4);
}
if ($datetype === 'm') {
$start_month = substr($start_date, 5, 2);
$end_month = substr($end_date, 5, 2);
$start_year_month = $start_year * 12 + $start_month;
$end_year_month = $end_year * 12 + $end_month;
}
$orderby = (strtolower($this->input->get('orderby')) === 'desc') ? 'desc' : 'asc';
$brd_id = $this->input->get('brd_id', null, '');
$result = $this->{$this->modelname}->get_link_click_count($datetype, $start_date, $end_date, $brd_id, $orderby);
$sum_count = 0;
$arr = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
$s = element('day', $value);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s] += element('cnt', $value);
if ($arr[$s] > $max) {
$max = $arr[$s];
}
$sum_count += element('cnt', $value);
}
}
$result = array();
$i = 0;
$save_count = -1;
$tot_count = 0;
if (count($arr)) {
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$result[$key]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$result[$key]['no'] = $no;
$result[$key]['key'] = $key;
$rate = ($count / $sum_count * 100);
$result[$key]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$result[$key]['s_rate'] = $s_rate;
$bar = (int)($count / $max * 100);
$result[$key]['bar'] = $bar;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
if ($datetype === 'y') {
for ($i = $start_year; $i <= $end_year; $i++) {
if( ! isset($result[$i])) $result[$i] = '';
}
} elseif ($datetype === 'm') {
for ($i = $start_year_month; $i <= $end_year_month; $i++) {
$year = floor($i / 12);
if ($year * 12 == $i) $year--;
$month = sprintf("%02d", ($i - ($year * 12)));
$date = $year . '-' . $month;
if( ! isset($result[$date])) $result[$date] = '';
}
} elseif ($datetype === 'd') {
$date = $start_date;
while ($date <= $end_date) {
if( ! isset($result[$date])) $result[$date] = '';
$date = cdate('Y-m-d', strtotime($date) + 86400);
}
}
if ($orderby === 'desc') {
krsort($result);
} else {
ksort($result);
}
$view['view']['list'] = $result;
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
$view['view']['datetype'] = $datetype;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=링크클릭_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/graph_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'graph');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_linkclick_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 오래된 링크클릭로그삭제 페이지입니다
*/
public function cleanlog()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_linkclick_cleanlog';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'plc_datetime <=' => $this->input->post('criterion'),
);
$this->Post_link_click_log_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 ' . $this->input->post('day') . '일 이상된 링크클릭로그가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d H:i:s', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'plc_datetime <=' => $criterion,
);
$log_count = $this->Post_link_click_log_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day') . '일 이상된 링크클릭로그가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 링크클릭로그가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'cleanlog');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,281 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Naversyndilog class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>게시판설정>네이버 신디케이션 핑전송로그 controller 입니다.
*/
class Naversyndilog extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'board/naversyndilog';
/**
* 모델을 로딩합니다
*/
protected $models = array('Post_naver_syndi_log', 'Board');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Post_naver_syndi_log_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_naversyndilog_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('pns_id', 'post_naver_syndi_log.post_id', 'post_naver_syndi_log.mem_id', 'pns_status', 'pns_return_code', 'pns_return_message', 'pns_receipt_number', 'pns_datetime'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('pns_id', 'post_naver_syndi_log.post_id', 'post_naver_syndi_log.mem_id', 'pns_return_code'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('pns_id', 'post_naver_syndi_log.post_id'); // 정렬이 가능한 필드
$where = array();
if ($brdid = (int) $this->input->get('brd_id')) {
$where['post.brd_id'] = $brdid;
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$select = 'mem_id, mem_userid, mem_nickname, mem_icon';
$result['list'][$key]['member'] = $dbmember = $this->Member_model->get_by_memid(element('mem_id', $val), $select);
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $dbmember),
element('mem_nickname', $dbmember),
element('mem_icon', $dbmember)
);
$result['list'][$key]['post_display_name'] = display_username(
element('post_userid', $val),
element('post_nickname', $val)
);
$brd_key = $this->board->item_id('brd_key', element('brd_id', $val));
$result['list'][$key]['posturl'] = post_url($brd_key, element('post_id', $val));
$result['list'][$key]['board'] = $board = $this->board->item_all(element('brd_id', $val));
if ($board) {
$result['list'][$key]['boardurl'] = board_url(element('brd_key', $board));
}
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('pns_return_code' => 'Return Code', 'pns_return_message' => 'Return Message', 'pns_receipt_number' => 'Receipt Number', 'pns_datetime' => '날짜');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_naversyndilog_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 오래된 링크클릭로그삭제 페이지입니다
*/
public function cleanlog()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_naversyndilog_cleanlog';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'pns_datetime <=' => $this->input->post('criterion'),
);
$this->Post_naver_syndi_log_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 ' . $this->input->post('day') . '일 이상된 네이버신디케이션전송로그가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d H:i:s', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'pns_datetime <=' => $criterion,
);
$log_count = $this->Post_naver_syndi_log_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day') . '일 이상된 네이버신디케이션전송로그가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 네이버신디케이션전송로그가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'cleanlog');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,248 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Post class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>게시판설정>게시물관리 controller 입니다.
*/
class Post extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'board/post';
/**
* 모델을 로딩합니다
*/
protected $models = array('Post', 'Board', 'Post_file', 'Post_meta', 'Board_category');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Post_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_post_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = 'post_id';
$forder = 'desc';
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('post_id', 'post_title', 'post_content', 'mem_id', 'post_username', 'post_nickname', 'post_email', 'post_homepage', 'post_datetime', 'post_ip', 'post_device'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('post_id', 'mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('post_id'); // 정렬이 가능한 필드
$where = array(
'post_del <>' => 2,
);
if ($brdid = (int) $this->input->get('brd_id')) {
$where['brd_id'] = $brdid;
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['post_display_name'] = display_username(
element('post_userid', $val),
element('post_nickname', $val)
);
$result['list'][$key]['board'] = $board = $this->board->item_all(element('brd_id', $val));
$result['list'][$key]['num'] = $list_num--;
if ($board) {
$result['list'][$key]['boardurl'] = board_url(element('brd_key', $board));
$result['list'][$key]['posturl'] = post_url(element('brd_key', $board), element('post_id', $val));
}
$result['list'][$key]['category'] = '';
if (element('post_category', $val)) {
$result['list'][$key]['category'] = $this->Board_category_model->get_category_info(element('brd_id', $val), element('post_category', $val));
}
if (element('post_image', $val)) {
$imagewhere = array(
'post_id' => element('post_id', $val),
'pfi_is_image' => 1,
);
$file = $this->Post_file_model->get_one('', '', $imagewhere, '', '', 'pfi_id', 'ASC');
$result['list'][$key]['thumb_url'] = thumb_url('post', element('pfi_filename', $file), 80);
} else {
$result['list'][$key]['thumb_url'] = get_post_image_url(element('post_content', $val), 80);
}
}
}
$view['view']['data'] = $result;
$select = 'brd_id, brd_name';
$view['view']['boardlist'] = $this->Board_model->get_board_list();
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('post_title' => '제목', 'post_content' => '내용', 'post_username' => '실명', 'post_nickname' => '닉네임', 'post_email' => '이메일', 'post_homepage' => '홈페이지', 'post_datetime' => '작성일', 'post_ip' => 'IP');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
$view['view']['list_trash_url'] = admin_url($this->pagedir . '/listtrash/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_post_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->board->delete_post($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 목록 페이지에서 휴지통을 클릭한 경우 실행되는 메소드입니다
*/
public function listtrash()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_post_listtrash';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$updatedata = array(
'post_del' => 2,
);
$this->Post_model->update($val, $updatedata);
$metadata = array(
'trash_mem_id' => $this->member->item('mem_id'),
'trash_datetime' => cdate('Y-m-d H:i:s'),
'trash_ip' => $this->input->ip_address(),
);
$board = $this->Post_model->get_one($val, 'brd_id');
$this->Post_meta_model->save($val, element('brd_id', $board), $metadata);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 휴지통으로 이동되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}

View File

@@ -0,0 +1,394 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Posthistory class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>게시판설정>게시물변경로그 controller 입니다.
*/
class Posthistory extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'board/posthistory';
/**
* 모델을 로딩합니다
*/
protected $models = array('Post_history', 'Post', 'Board');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Post_history_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 함수입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_posthistory_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('phi_id', 'post_history.post_id', 'post_history.mem_id', 'phi_title', 'phi_content', 'phi_ip', 'phi_datetime'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('phi_id', 'post_history.post_id', 'post_history.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('phi_id'); // 정렬이 가능한 필드
$where = array(
'post.post_del' => 0,
);
if ($brdid = (int) $this->input->get('brd_id')) {
$where['post.brd_id'] = $brdid;
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
$result['list'][$key]['board'] = $board = $this->board->item_all(element('brd_id', $val));
$result['list'][$key]['num'] = $list_num--;
if ($board) {
$result['list'][$key]['boardurl'] = board_url(element('brd_key', $board));
$result['list'][$key]['posturl'] = post_url(element('brd_key', $board), element('post_id', $val));
}
$result['list'][$key]['post_display_name'] = display_username(
element('post_userid', $val),
element('post_nickname', $val)
);
}
}
$view['view']['data'] = $result;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('phi_title' => '제목', 'phi_content' => '내용', 'phi_ip' => 'IP', 'phi_datetime' => '변경일');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 상세보기 페이지를 가져오는 함수입니다
*/
public function view($phi_id = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_posthistory_view';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$phi_id = (int) $phi_id;
if (empty($phi_id) OR $phi_id < 1) {
show_404();
}
$view = array();
$view['view'] = array();
$param =& $this->querystring;
$result = $this->{$this->modelname}->get_one($phi_id);
if ( ! element('phi_id', $result)) {
show_404();
}
$select = 'mem_id, mem_userid, mem_nickname, mem_icon';
$result['member'] = $dbmember = $this->Member_model->get_by_memid(element('mem_id', $result), $select);
$result['display_name'] = display_username(
element('mem_userid', $dbmember),
element('mem_nickname', $dbmember),
element('mem_icon', $dbmember)
);
$select = 'post_id, brd_id, post_title, post_userid, post_nickname, post_datetime, post_ip, post_hit, post_secret';
$result['post'] = $post = $this->Post_model->get_one(element('post_id', $result), $select);
if ($post) {
$result['board'] = $board = $this->board->item_all(element('brd_id', $post));
}
$result['post_display_name'] = display_username(
element('post_userid', $post),
element('post_nickname', $post)
);
$image_width = ($this->cbconfig->get_device_view_type() === 'mobile') ? element('post_mobile_image_width', $board) : element('post_image_width', $board);
$result['content'] = display_html_content(
element('phi_content', $result),
element('phi_content_html_type', $result),
$image_width
);
$where = array(
'post_id' => element('post_id', $result),
'phi_id <' => element('phi_id', $result),
);
$prev = $this->{$this->modelname}->get('', '', $where, 1, 0, 'phi_id', 'DESC');
if ($prev && element(0, $prev)) {
$prev[0]['content'] = display_html_content(
$prev[0]['phi_content'],
$prev[0]['phi_content_html_type'],
$image_width
);
$result['prev'] = $prev[0];
}
$view['view']['data'] = $result;
$view['view']['delete_url'] = admin_url($this->pagedir . '/delete/' . $phi_id . '?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'view');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_posthistory_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 상세페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function delete($phi_id = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_posthistory_delete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
$phi_id = (int) $phi_id;
if (empty($phi_id) OR $phi_id < 1) {
show_404();
}
$this->{$this->modelname}->delete($phi_id);
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 오래된 게시물변경로그 페이지입니다
*/
public function cleanlog()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_posthistory_cleanlog';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'phi_datetime <=' => $this->input->post('criterion'),
);
$this->Post_history_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 ' . $this->input->post('day') . '일 이상된 게시물변경로그가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d H:i:s', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'phi_datetime <=' => $criterion,
);
$log_count = $this->Post_history_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day') . '일 이상된 게시물변경로그가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 게시물변경로그가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'cleanlog');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,293 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Tag class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>게시판설정>태그관리 controller 입니다.
*/
class Tag extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'board/tag';
/**
* 모델을 로딩합니다
*/
protected $models = array('Post_tag', 'Post', 'Board');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Post_tag_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_tag_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$view['view']['sort'] = array(
'pta_id' => $param->sort('pta_id', 'asc'),
'pta_tag' => $param->sort('pta_tag', 'asc'),
);
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('pta_id', 'post_tag.post_id', 'post_tag.mem_id', 'post.mem_id', 'pta_tag', 'pta_datetime', 'post_title'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('pta_id', 'post_tag.post_id', 'pta_tag', 'post_tag.mem_id', 'post.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('pta_id', 'pta_tag'); // 정렬이 가능한 필드
$where = array(
'post.post_del' => 0,
);
if ($brdid = (int) $this->input->get('brd_id')) {
$where['post.brd_id'] = $brdid;
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$brd_key = $this->board->item_id('brd_key', element('brd_id', $val));
$result['list'][$key]['post_display_name'] = display_username(
element('post_userid', $val),
element('post_nickname', $val)
);
$result['list'][$key]['posturl'] = post_url($brd_key, element('post_id', $val));
$result['list'][$key]['board'] = $board = $this->board->item_all(element('brd_id', $val));
if ($board) {
$result['list'][$key]['boardurl'] = board_url(element('brd_key', $board));
}
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('pta_tag' => '태그명', 'post_title' => '게시물제목', 'pta_datetime' => '태그입력일');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 그래프 형식으로 보는 페이지입니다
*/
public function graph($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_tag_graph';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$datetype = $this->input->get('datetype', null, 'd');
if ($datetype !== 'm' && $datetype !== 'y') {
$datetype = 'd';
}
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
$brd_id = $this->input->get('brd_id', null, '');
$result = $this->{$this->modelname}->get_post_tag_count($datetype, $start_date, $end_date, $brd_id);
$sum_count = 0;
$arr = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
$s = element('pta_tag', $value);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s] += element('cnt', $value);
if ($arr[$s] > $max) {
$max = $arr[$s];
}
$sum_count += element('cnt', $value);
}
}
$view['view']['list'] = array();
$i = 0;
$k = 0;
$save_count = -1;
$tot_count = 0;
if (count($arr)) {
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$view['view']['list'][$k]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$view['view']['list'][$k]['no'] = $no;
$view['view']['list'][$k]['key'] = $key;
$rate = ($count / $sum_count * 100);
$view['view']['list'][$k]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$view['view']['list'][$k]['s_rate'] = $s_rate;
$bar = (int)($count / $max * 100);
$view['view']['list'][$k]['bar'] = $bar;
$k++;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=태그_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/graph_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'graph');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_tag_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}

View File

@@ -0,0 +1,466 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Trash class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>게시판설정>휴지통 controller 입니다.
*/
class Trash extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'board/trash';
/**
* 모델을 로딩합니다
*/
protected $models = array('Post', 'Comment', 'Board', 'Post_file', 'Post_meta', 'Comment_meta');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Post_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_trash_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = 'post_id';
$forder = 'desc';
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('post_id', 'post_title', 'post_content', 'mem_id', 'post_username', 'post_nickname', 'post_email', 'post_homepage', 'post_datetime', 'post_ip', 'post_device'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('post_id', 'mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('post_id desc'); // 정렬이 가능한 필드
$where = array(
'post_del' => 2,
);
if ($brdid = (int) $this->input->get('brd_id')) {
$where['brd_id'] = $brdid;
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['meta'] = $meta = $this->Post_meta_model->get_all_meta(element('post_id', $val));
if (element('trash_mem_id', $meta)) {
$select = 'mem_id, mem_userid, mem_nickname, mem_icon';
$result['list'][$key]['member'] = $dbmember = $this->Member_model->get_by_memid(element('trash_mem_id', $meta), $select);
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $dbmember),
element('mem_nickname', $dbmember)
);
}
$result['list'][$key]['board'] = $board = $this->board->item_all(element('brd_id', $val));
$result['list'][$key]['num'] = $list_num--;
if ($board) {
$result['list'][$key]['boardurl'] = board_url(element('brd_key', $board));
$result['list'][$key]['posturl'] = post_url(element('brd_key', $board), element('post_id', $val));
$filewhere = array(
'post_id' => element('post_id', $val),
'pfi_is_image' => 1,
);
$file = $this->Post_file_model->get_one('', '', $filewhere, '', '', 'pfi_id', 'ASC');
if (element('pfi_filename', $file)) {
$result['list'][$key]['origin_image_url'] = thumb_url('post', element('pfi_filename', $file));
$result['list'][$key]['thumb_url'] = thumb_url('post', element('pfi_filename', $file), '80');
}
}
}
}
$view['view']['data'] = $result;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('post_title' => '제목', 'post_content' => '내용', 'post_username' => '실명', 'post_nickname' => '닉네임', 'post_email' => '이메일', 'post_homepage' => '홈페이지', 'post_datetime' => '작성일', 'post_ip' => 'IP');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
$view['view']['list_truncate_url'] = admin_url($this->pagedir . '/truncate/?' . $param->output());
$view['view']['list_recover_url'] = admin_url($this->pagedir . '/listrecover/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 상세 페이지입니다
*/
public function view($post_id = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_trash_view';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$post_id = (int) $post_id;
if (empty($post_id) OR $post_id < 1) {
show_404();
}
$param =& $this->querystring;
$result = $this->{$this->modelname}->get_one($post_id);
$result['meta'] = $this->Post_meta_model->get_all_meta($post_id);
if ( ! element('post_id', $result)) {
show_404();
}
if (element('post_del', $result) !== '2') {
show_404();
}
$result['post_display_name'] = display_username(
element('post_userid', $result),
element('post_nickname', $result)
);
$select = 'mem_id, mem_userid, mem_nickname, mem_icon';
$result['member'] = $dbmember
= $this->Member_model->get_by_memid($result['meta']['trash_mem_id'], $select);
$result['display_name'] = display_username(
element('mem_userid', $dbmember),
element('mem_nickname', $dbmember),
element('mem_icon', $dbmember)
);
$result['board'] = $board = $this->board->item_all($result['brd_id']);
if ($board) {
$result['boardurl'] = board_url(element('brd_key', $board));
}
$image_width = element('post_image_width', $board);
$result['content'] = display_html_content(
$result['post_content'],
$result['post_html'],
$image_width
);
$view['view']['data'] = $result;
$view['view']['delete_url'] = admin_url($this->pagedir . '/delete/' . $post_id . '?' . $param->output());
$view['view']['recover_url'] = admin_url($this->pagedir . '/recover/' . $post_id . '?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'view');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_trash_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->board->delete_post($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 목록 페이지에서 복원을 하는 경우 실행되는 메소드입니다
*/
public function listrecover()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_trash_listrecover';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$updatedata = array(
'post_del' => 0,
);
$this->Post_model->update($val, $updatedata);
$this->Post_meta_model->delete_meta_column('trash_ip');
$this->Post_meta_model->delete_meta_column('trash_mem_id');
$this->Post_meta_model->delete_meta_column('trash_datetime');
$where = array(
'post_id' => $val,
);
$cmts = $this->Comment_model->get('', 'cmt_id', $where);
if ($cmts && is_array($cmts)) {
foreach ($cmts as $cmt) {
$cmt_id = element('cmt_id', $cmt);
$updatedata = array(
'cmt_del' => 0,
);
$this->Comment_model->update($cmt_id, $updatedata);
$this->Comment_meta_model->delete_meta_column('trash_ip');
$this->Comment_meta_model->delete_meta_column('trash_mem_id');
$this->Comment_meta_model->delete_meta_column('trash_datetime');
}
}
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 복원되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 휴지통을 비웁니다
*/
public function truncate()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_trash_truncate';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
$where = array(
'post_del' => 2,
);
$result = $this->Post_model->get('', '', $where);
if ($result && is_array($result)) {
foreach ($result as $val) {
if (element('post_id', $val)) {
$post_id = element('post_id', $val);
$this->board->delete_post($post_id);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 뷰페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function delete($post_id = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_trash_delete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
$post_id = (int) $post_id;
if (empty($post_id) OR $post_id < 1) {
show_404();
}
$this->board->delete_post($post_id);
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 뷰페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function recover($post_id = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_trash_recover';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
$post_id = (int) $post_id;
if (empty($post_id) OR $post_id < 1) {
show_404();
}
$updatedata = array(
'post_del' => 0,
);
$this->Post_model->update($post_id, $updatedata);
$this->Post_meta_model->delete_meta_column('trash_ip');
$this->Post_meta_model->delete_meta_column('trash_mem_id');
$this->Post_meta_model->delete_meta_column('trash_datetime');
$where = array(
'post_id' => $post_id,
);
$cmts = $this->Comment_model->get('', 'cmt_id', $where);
if ($cmts && is_array($cmts)) {
foreach ($cmts as $cmt) {
$cmt_id = element('cmt_id', $cmt);
$updatedata = array(
'cmt_del' => 0,
);
$this->Comment_model->update($cmt_id, $updatedata);
$this->Comment_meta_model->delete_meta_column('trash_ip');
$this->Comment_meta_model->delete_meta_column('trash_mem_id');
$this->Comment_meta_model->delete_meta_column('trash_datetime');
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 복원되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}

View File

@@ -0,0 +1,429 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Trash_comment class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>게시판설정>휴지통(댓글) controller 입니다.
*/
class Trash_comment extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'board/trash_comment';
/**
* 모델을 로딩합니다
*/
protected $models = array('Post', 'Comment', 'Board', 'Comment_meta');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Comment_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_trash_comment_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = 'cmt_id';
$forder = 'desc';
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('cmt_id', 'cmt_content', 'mem_id', 'cmt_username', 'cmt_nickname', 'cmt_email', 'cmt_datetime', 'cmt_ip', 'cmt_device'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('cmt_id', 'mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('cmt_id desc'); // 정렬이 가능한 필드
$where = array(
'cmt_del' => 2,
);
if ($brdid = (int) $this->input->get('brd_id')) {
$where['post.brd_id'] = $brdid;
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['meta'] = $meta = $this->Comment_meta_model->get_all_meta(element('cmt_id', $val));
$result['list'][$key]['member'] = $dbmember = $this->Member_model->get_by_memid($meta['trash_mem_id'], 'mem_id, mem_userid, mem_nickname, mem_icon');
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $dbmember),
element('mem_nickname', $dbmember)
);
$result['list'][$key]['post'] = $post = $this->Post_model->get_one(element('post_id', $val));
$result['list'][$key]['board'] = $board = $this->board->item_all(element('brd_id', $post));
$result['list'][$key]['content'] = display_html_content(
$val['cmt_content'],
$val['cmt_html'],
element('post_image_width', $board)
);
$result['list'][$key]['num'] = $list_num--;
if ($board) {
$result['list'][$key]['boardurl'] = board_url(element('brd_key', $board));
$result['list'][$key]['posturl'] = post_url(element('brd_key', $board), element('post_id', $val) . '#comment_id=' . element('cmt_id', $val));
}
}
}
$view['view']['data'] = $result;
$view['view']['boardlist'] = $this->Board_model->get_board_list();
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('cmt_content' => '내용', 'cmt_nickname' => '닉네임', 'cmt_email' => '이메일', 'cmt_datetime' => '작성일', 'cmt_ip' => 'IP');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
$view['view']['list_truncate_url'] = admin_url($this->pagedir . '/truncate/?' . $param->output());
$view['view']['list_recover_url'] = admin_url($this->pagedir . '/listrecover/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 상세 페이지입니다
*/
public function view($cmt_id = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_trash_comment_view';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$cmt_id = (int) $cmt_id;
if (empty($cmt_id) OR $cmt_id < 1) {
show_404();
}
$param =& $this->querystring;
$result = $this->{$this->modelname}->get_one($cmt_id);
$result['meta'] = $this->Comment_meta_model->get_all_meta($cmt_id);
if ( ! element('cmt_id', $result)) {
show_404();
}
if (element('cmt_del', $result) !== '2') {
show_404();
}
$result['cmt_display_name'] = display_username(
element('cmt_userid', $result),
element('cmt_nickname', $result)
);
$select = 'mem_id, mem_userid, mem_nickname, mem_icon';
$result['member'] = $dbmember
= $this->Member_model->get_by_memid($result['meta']['trash_mem_id'], $select);
$result['display_name'] = display_username(
element('mem_userid', $dbmember),
element('mem_nickname', $dbmember),
element('mem_icon', $dbmember)
);
$result['post'] = $post = $this->Post_model->get_one(element('post_id', $result));
$result['board'] = $board = $this->board->item_all($post['brd_id']);
if ($board) {
$result['boardurl'] = board_url(element('brd_key', $board));
$result['posturl'] = post_url(element('brd_key', $board), element('post_id', $result) . '#comment_id=' . element('cmt_id', $result));
}
$result['content'] = display_html_content(
$result['cmt_content'],
$result['cmt_html'],
element('post_image_width', $board)
);
$view['view']['data'] = $result;
$view['view']['delete_url'] = admin_url($this->pagedir . '/delete/' . $cmt_id . '?' . $param->output());
$view['view']['recover_url'] = admin_url($this->pagedir . '/recover/' . $cmt_id . '?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'view');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_trash_comment_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->board->delete_comment($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 목록 페이지에서 복원을 하는 경우 실행되는 메소드입니다
*/
public function listrecover()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_trash_comment_listrecover';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$updatedata = array(
'cmt_del' => 0,
);
$this->Comment_model->update($val, $updatedata);
$this->Comment_meta_model->delete_meta_column('trash_ip');
$this->Comment_meta_model->delete_meta_column('trash_mem_id');
$this->Comment_meta_model->delete_meta_column('trash_datetime');
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 복원되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 휴지통을 비웁니다
*/
public function truncate()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_trash_comment_truncate';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
$where = array(
'cmt_del' => 2,
);
$result = $this->Comment_model->get('', '', $where);
if ($result && is_array($result)) {
foreach ($result as $val) {
if (element('cmt_id', $val)) {
$post_id = element('cmt_id', $val);
$this->board->delete_comment($cmt_id);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 뷰페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function delete($cmt_id = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_trash_comment_delete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
$cmt_id = (int) $cmt_id;
if (empty($cmt_id) OR $cmt_id < 1) {
show_404();
}
$this->board->delete_comment($cmt_id);
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 뷰페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function recover($cmt_id = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_board_trash_comment_recover';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
$cmt_id = (int) $cmt_id;
if (empty($cmt_id) OR $cmt_id < 1) {
show_404();
}
$updatedata = array(
'cmt_del' => 0,
);
$this->Comment_model->update($cmt_id, $updatedata);
$this->Comment_meta_model->delete_meta_column('trash_ip');
$this->Comment_meta_model->delete_meta_column('trash_mem_id');
$this->Comment_meta_model->delete_meta_column('trash_datetime');
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 복원되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}

View File

@@ -0,0 +1,101 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Browscapupdate class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>환경설정>Browscap 업데이트 controller 입니다.
*/
class Browscapupdate extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'config/browscapupdate';
/**
* 모델을 로딩합니다
*/
protected $models = array();
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = '';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('querystring'));
}
/**
* Browscap 업데이트 페이지입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_browscapupdate_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
public function update()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_browscapupdate_update';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
$dir = FCPATH . 'plugin/browscap';
if ( ! (is_readable($dir) && is_writeable($dir))) {
exit(json_encode(array('success' => 'no', 'message' => 'plugin/browscap 경로가 파일쓰기가 금지되어있습니다. 퍼미션 확인 후에 다시 실행바랍니다')));
}
ini_set('memory_limit', '-1');
require_once FCPATH . 'plugin/browscap/Browscap.php';
$browscap = new phpbrowscap\Browscap($dir);
$browscap->updateMethod = 'cURL';
$browscap->cacheFilename = 'browscap_cache.php';
$browscap->updateCache();
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
exit(json_encode(array('success' => 'ok', 'message' => 'Browscap 업데이트가 완료되었습니다')));
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,94 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Cbversion class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>환경설정>버전정보 controller 입니다.
*/
class Cbversion extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'config/cbversion';
/**
* 모델을 로딩합니다
*/
protected $models = array();
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = '';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array', 'file');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('requests'));
}
/**
* 버전정보 페이지입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_cbversion_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
Requests::register_autoloader();
$headers = array('Accept' => 'application/json');
$postdata = array('requesturl' => current_full_url(), 'package' => CB_PACKAGE, 'version' => CB_VERSION);
try {
$request = Requests::post(config_item('ciboard_check_latest_version'), $headers, $postdata);
$view['view']['latest_versions'] = json_decode($request->body, true);
if (strtolower(CB_PACKAGE) === 'pro') {
$view['view']['latest_version_name'] = $view['view']['latest_versions']['pro_version'];
$view['view']['latest_download_url'] = $view['view']['latest_versions']['pro_downloadurl'];
} else {
$view['view']['latest_version_name'] = $view['view']['latest_versions']['lite_version'];
$view['view']['latest_download_url'] = $view['view']['latest_versions']['lite_downloadurl'];
}
} catch (Exception $e) {
log_message('error', 'Caught exception: '.$e->getMessage());
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,848 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Cleanlog class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>환경설정>오래된로그삭제 controller 입니다.
*/
class Cleanlog extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'config/cleanlog';
/**
* 모델을 로딩합니다
*/
protected $models = array();
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = '';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array', 'file');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('querystring'));
}
/**
* 오래된로그 삭제>캐시삭제 페이지입니다
*/
public function index()
{
$this->cache();
}
/**
* 오래된로그 삭제>캐시삭제 페이지입니다
*/
public function cache()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_cleanlog_cache';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'execute',
'label' => '실행',
'rules' => 'trim',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$result = $this->cache->clean();
if ($result !== false) {
$view['view']['alert_message'] = '캐시가 삭제되었습니다';
} else {
$view['view']['alert_message'] = '캐시 삭제에 실패했습니다';
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'cache');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 오래된로그 삭제>썸네일삭제 페이지입니다
*/
public function thumbnail()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_cleanlog_thumbnail';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'execute',
'label' => '실행',
'rules' => 'trim',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$result = delete_files(config_item('uploads_dir') . '/cache/', true);
if ($result !== false) {
$view['view']['alert_message'] = '썸네일이 모두 삭제되었습니다';
} else {
$view['view']['alert_message'] = '썸네일 삭제에 실패했습니다';
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'thumbnail');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 오래된로그 삭제>방문자로그삭제 페이지입니다
*/
public function visitlog()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_cleanlog_visitlog';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$this->load->model(array('Stat_count_model', 'Stat_count_date_model'));
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'sco_date <=' => $this->input->post('criterion'),
);
$this->Stat_count_model->delete_where($deletewhere);
$deletewhere = array(
'scd_date <=' => $this->input->post('criterion')
);
$this->Stat_count_date_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 '
. $this->input->post('day') . '일 이상된 방문자로그가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'sco_date <=' => $criterion,
);
$log_count = $this->Stat_count_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day')
. '일 이상된 방문자로그가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day')
. '일 이상된 방문자로그가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'visitlog');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 오래된로그 삭제>로그인로그삭제 페이지입니다
*/
public function loginlog()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_cleanlog_loginlog';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$this->load->model('Member_login_log_model');
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'mll_datetime <=' => $this->input->post('criterion'),
);
$this->Member_login_log_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 '
. $this->input->post('day') . '일 이상된 로그인로그가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d H:i:s', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'mll_datetime <=' => $criterion,
);
$log_count = $this->Member_login_log_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day')
. '일 이상된 로그인로그가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 로그인로그가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'loginlog');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 오래된로그 삭제>파일다운로드로그삭제 페이지입니다
*/
public function filedownloadlog()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_cleanlog_filedownloadlog';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$this->load->model('Post_file_download_log_model');
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'pfd_datetime <=' => $this->input->post('criterion'),
);
$this->Post_file_download_log_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 '
. $this->input->post('day') . '일 이상된 파일 다운로드 로그가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d H:i:s', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'pfd_datetime <=' => $criterion,
);
$log_count = $this->Post_file_download_log_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day') . '일 이상된 파일 다운로드 로그가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 파일 다운로드 로그가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'filedownloadlog');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 오래된로그 삭제>게시물변경로그삭제 페이지입니다
*/
public function posthistory()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_cleanlog_posthistory';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$this->load->model('Post_history_model');
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'phi_datetime <=' => $this->input->post('criterion'),
);
$this->Post_history_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 ' . $this->input->post('day') . '일 이상된 게시물변경로그가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d H:i:s', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'phi_datetime <=' => $criterion,
);
$log_count = $this->Post_history_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day') . '일 이상된 게시물변경로그가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 게시물변경로그로그가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'posthistory');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 오래된로그 삭제>링크클릭로그 삭제 페이지입니다
*/
public function linkclicklog()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_cleanlog_linkclicklog';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$this->load->model('Post_link_click_log_model');
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'plc_datetime <=' => $this->input->post('criterion'),
);
$this->Post_link_click_log_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 ' . $this->input->post('day') . '일 이상된 링크클릭로그가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d H:i:s', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'plc_datetime <=' => $criterion,
);
$log_count = $this->Post_link_click_log_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day') . '일 이상된 링크클릭로그가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 링크클릭로그가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'linkclicklog');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 오래된로그 삭제>오래된쪽지삭제 페이지입니다
*/
public function note()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_cleanlog_note';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$this->load->model('Note_model');
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'nte_datetime <=' => $this->input->post('criterion')
);
$this->Note_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 ' . $this->input->post('day') . '일 이상된 쪽지가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d H:i:s', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'nte_datetime <=' => $criterion,
);
$log_count = $this->Note_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day') . '일 이상된 쪽지가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 쪽지가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'note');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 오래된로그 삭제>자동로그인로그삭제 페이지입니다
*/
public function autologin()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_cleanlog_autologin';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$this->load->model('Autologin_model');
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'aul_datetime <=' => $this->input->post('criterion'),
);
$this->Autologin_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 ' . $this->input->post('day') . '일 이상된 자동로그인로그가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d H:i:s', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'aul_datetime <=' => $criterion,
);
$log_count = $this->Autologin_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day') . '일 이상된 자동로그인로그가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 자동로그인로그가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'autologin');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,130 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Dbupgrade class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>환경설정>DB 업그레이드 controller 입니다.
*/
class Dbupgrade extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'config/dbupgrade';
/**
* 모델을 로딩합니다
*/
protected $models = array();
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = '';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('querystring'));
}
/**
* 디비 업그레이드 페이지입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_dbupgrade_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 마이그레이션 라이브러리를 가져옵니다
*/
$this->load->library('migration');
$this->config->load('migration');
$row = $this->db->get('migrations')->row();
$view['view']['current_version'] = $row ? $row->version : 0;
$view['view']['latest_version'] = $latest_version = config_item('migration_version');
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'execute',
'label' => '실행',
'rules' => 'trim',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->migration->version($latest_version) === false) {
$view['view']['alert_message'] = $this->migration->error_string();
} else {
$row = $this->db->get('migrations')->row();
$view['view']['current_version'] = $row ? $row->version : 0;
$view['view']['latest_version'] = config_item('migration_version');
$view['view']['alert_message'] = '최신버전으로 업그레이드가 완료되었습니다';
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,124 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Optimize class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>환경설정>복구/최적화 controller 입니다.
*/
class Optimize extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'config/optimize';
/**
* 모델을 로딩합니다
*/
protected $models = array();
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = '';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('querystring'));
}
/**
* 복구/최적화 페이지입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_optimize_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'execute',
'label' => '실행',
'rules' => 'trim',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$view['view']['alert_message'] = '';
$this->load->dbutil();
$result = $this->dbutil->optimize_database();
if ($result !== false) {
foreach ($result as $key => $val) {
$view['view']['alert_message'] .= $key . ' : ' . $val['Msg_text'] . '<br />';
}
$view['view']['alert_message'] .= '복구/ 최적화가 완료되었습니다';
} else {
$view['view']['alert_message'] .= '복구/ 최적화에 실패했습니다';
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,68 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Phpinfo class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>환경설정>phpinfo controller 입니다.
*/
class Phpinfo extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'config/phpinfo';
/**
* 모델을 로딩합니다
*/
protected $models = array();
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = '';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
}
/**
* phpinfo 페이지입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_phpinfo_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = false;
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,216 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Preview class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>환경설정>Preview controller 입니다.
*/
class Preview extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'config/preview';
/**
* 모델을 로딩합니다
*/
protected $models = array();
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = '';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
}
/**
* Preview 페이지입니다
*/
public function preview($pagetype)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_preview_preview';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$pagename = array(
'main' => '메인페이지',
'board' => '게시판',
'group' => '게시판그룹',
'document' => '일반문서페이지',
'faq' => 'FAQ',
'register' => '회원가입',
'findaccount' => '아이디패스워드찾기',
'login' => '로그인',
'mypage' => '마이페이지',
'currentvisitor' => '현재접속자',
'search' => '검색페이지',
'tag' => '태그페이지',
'note' => '쪽지',
'profile' => '프로필',
'formmail' => '폼메일',
'notification' => '알림페이지',
'helptool' => '헬프툴',
);
if ( ! element($pagetype, $pagename)) {
alert('잘못된 접근입니다');
}
$previewurl = '';
$pageurl = '';
$use_sidebar_option = true;
if ($pagetype === 'main'
OR $pagetype === 'mypage'
OR $pagetype === 'currentvisitor'
OR $pagetype === 'notification'
OR $pagetype === 'login'
OR $pagetype === 'findaccount') {
$pageurl = $pagetype;
}
if ($pagetype === 'board') {
$this->load->model('Post_model');
$where = array('post_del' => 0);
$latest = $this->Post_model->get('', '', $where, 1, '', 'post_id', 'desc');
$val = element(0, $latest);
if (empty($val)) {
alert_close('최소 1개 이상의 게시물이 작성된 후에 미리보기가 가능합니다');
}
$pageurl = 'board_post/post/' . element('post_id', $val);
}
if ($pagetype === 'group') {
$this->load->model('Board_group_model');
$val = $this->Board_group_model->get_one();
if (empty($val)) {
alert_close('최소 1개 이상의 그룹이 생성된 후에 미리보기가 가능합니다');
}
$pageurl = 'group/index/' . element('bgr_key', $val);
}
if ($pagetype === 'document') {
$this->load->model('Document_model');
$latest = $this->Document_model->get('', '', '', 1, '', 'doc_id', 'desc');
$val = element(0, $latest);
if (empty($val)) {
alert_close('최소 1개 이상의 일반문서가 작성된 후에 미리보기가 가능합니다');
}
$pageurl = 'document/index/' . element('doc_key', $val);
}
if ($pagetype === 'faq') {
$this->load->model('Faq_group_model');
$latest = $this->Faq_group_model->get('', '', '', 1, '', 'fgr_id', 'desc');
$val = element(0, $latest);
if (empty($val)) {
alert_close('최소 1개 이상의 FAQ가 작성된 후에 미리보기가 가능합니다');
}
$pageurl = 'faq/index/' . element('fgr_key', $val);
}
if ($pagetype === 'search') {
$pageurl = 'search/?skeyword=검색&';
}
if ($pagetype === 'tag') {
$this->load->model('Post_tag_model');
$latest = $this->Post_tag_model->get('', '', '', 1, '', 'pta_id', 'desc');
$val = element(0, $latest);
if (empty($val)) {
alert_close('최소 1개 이상의 태그가 작성된 후에 미리보기가 가능합니다');
}
$pageurl = 'tags/?tag=' . element('pta_tag', $val) . '&';
}
if ($pagetype === 'note') {
$use_sidebar_option = false;
$this->load->model('Note_model');
$where = array(
'recv_mem_id' => $this->member->item('mem_id'),
'nte_type' => 1,
);
$latest = $this->Note_model->get('', '', $where, 1, '', 'nte_id', 'desc');
$val = element(0, $latest);
if (empty($val)) {
alert_close('최소 1개 이상의 쪽지를 수신한 후에 미리보기가 가능합니다');
}
$pageurl = 'note/view/recv/' . element('nte_id', $val);
}
if ($pagetype === 'profile') {
$use_sidebar_option = false;
$pageurl = 'profile/index/' . $this->member->item('mem_userid');
}
if ($pagetype === 'formmail') {
$use_sidebar_option = false;
$pageurl = 'formmail/write/' . $this->member->item('mem_userid');
}
if ($pagetype === 'helptool') {
$use_sidebar_option = false;
$pageurl = 'helptool/emoticon';
}
if ($pagetype === 'register') {
$pageurl = 'register/form';
}
$previewurl = admin_url('preview/adminshow/' . $pageurl);
$previewurl .= '?layout=' . $this->input->get('layout', null, '') . '&sidebar=' . $this->input->get('sidebar', null, '') . '&skin=' . $this->input->get('skin', null, '') . '&is_mobile=' . $this->input->get('is_mobile', null, '');
$view['view']['pagetype'] = $pagetype;
$view['view']['previewurl'] = $previewurl;
$view['view']['use_sidebar_option'] = $use_sidebar_option;
$view['view']['pagename'] = element($pagetype, $pagename);
$view['view']['layout_option'] = get_skin_name(
'_layout',
$this->input->get('layout', null, ''),
'기본설정따름'
);
$view['view']['skin_option'] = get_skin_name(
$pagetype,
$this->input->get('skin', null, ''),
'기본설정따름'
);
$view['view']['mobile_layout_option'] = get_skin_name(
'_layout',
$this->input->get('mobile_layout', null, ''),
'기본설정따름'
);
$view['view']['mobile_skin_option'] = get_skin_name(
$pagetype,
$this->input->get('mobile_skin', null, ''),
'기본설정따름'
);
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout_popup', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,416 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Rssconfig class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>환경설정>RSS 피드 controller 입니다.
*/
class Rssconfig extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'config/rssconfig';
/**
* 모델을 로딩합니다
*/
protected $models = array('Config', 'Board');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Config_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
}
/**
* 환경설정>RSS 피드 페이지입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_rssconfig_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'is_submit',
'label' => '전송',
'rules' => 'trim|numeric',
),
array(
'field' => 'use_total_rss_feed',
'label' => '통합 RSS 피드사용',
'rules' => 'trim|numeric',
),
array(
'field' => 'total_rss_feed_content',
'label' => '통합 RSS 내용공개',
'rules' => 'trim|numeric',
),
array(
'field' => 'total_rss_feed_title',
'label' => '통합 RSS 제목',
'rules' => 'trim',
),
array(
'field' => 'total_rss_feed_description',
'label' => '통합 RSS 설명',
'rules' => 'trim',
),
array(
'field' => 'total_rss_feed_copyright',
'label' => 'RSS 표시 저작권',
'rules' => 'trim',
),
array(
'field' => 'total_rss_feed_count',
'label' => 'RSS 출력 게시물수',
'rules' => 'trim|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$array = array(
'use_total_rss_feed', 'total_rss_feed_content', 'total_rss_feed_title',
'total_rss_feed_description', 'total_rss_feed_copyright', 'total_rss_feed_count'
);
foreach ($array as $value) {
$savedata[$value] = $this->input->post($value, null, '');
}
$post_brd_id = $this->input->post('brd_id');
$boardlist = $this->Board_model->get_board_list();
if ($boardlist && is_array($boardlist)) {
$this->load->model('Board_meta_model');
foreach ($boardlist as $key => $val) {
if (element(element('brd_id', $val), $post_brd_id)) {
$metadata = array('use_rss_total_feed' => '1');
} else {
$metadata = array('use_rss_total_feed' => '');
}
$this->Board_meta_model->save(element('brd_id', $val), $metadata);
}
}
$this->Config_model->save($savedata);
$view['view']['alert_message'] = 'RSS 피드설정이 저장되었습니다';
}
$getdata = $this->Config_model->get_all_meta();
$view['view']['data'] = $getdata;
$boardlist = $this->Board_model->get_board_list();
if ($boardlist && is_array($boardlist)) {
$this->load->model('Board_meta_model');
foreach ($boardlist as $key => $val) {
$whereboard = array(
'brd_id' => element('brd_id', $val),
'bmt_key' => 'use_rss_total_feed',
);
$userss = $this->Board_meta_model->get_one('', '', $whereboard);
$boardlist[$key]['userss'] = element('bmt_value', $userss);
}
}
$view['view']['boardlist'] = $boardlist;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 환경설정>사이트맵 페이지입니다
*/
public function sitemap()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_rssconfig_sitemap';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'is_submit',
'label' => '전송',
'rules' => 'trim|numeric',
),
array(
'field' => 'use_sitemap',
'label' => '사이트맵 사용',
'rules' => 'trim|numeric',
),
array(
'field' => 'sitemap_count',
'label' => '사이트맵 출력 게시물수',
'rules' => 'trim|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$array = array(
'use_sitemap', 'sitemap_count'
);
foreach ($array as $value) {
$savedata[$value] = $this->input->post($value, null, '');
}
$post_brd_id = $this->input->post('brd_id');
$boardlist = $this->Board_model->get_board_list();
if ($boardlist && is_array($boardlist)) {
$this->load->model('Board_meta_model');
foreach ($boardlist as $key => $val) {
if (element(element('brd_id', $val), $post_brd_id)) {
$metadata = array('use_sitemap' => '1');
} else {
$metadata = array('use_sitemap' => '');
}
$this->Board_meta_model->save(element('brd_id', $val), $metadata);
}
}
$this->Config_model->save($savedata);
$view['view']['alert_message'] = '사이트맵 설정이 저장되었습니다';
}
$getdata = $this->Config_model->get_all_meta();
if ( ! element('sitemap_count', $getdata)) {
$getdata['sitemap_count'] = 100;
}
$view['view']['data'] = $getdata;
$boardlist = $this->Board_model->get_board_list();
if ($boardlist && is_array($boardlist)) {
$this->load->model('Board_meta_model');
foreach ($boardlist as $key => $val) {
$whereboard = array(
'brd_id' => element('brd_id', $val),
'bmt_key' => 'use_sitemap',
);
$usesitemap = $this->Board_meta_model->get_one('', '', $whereboard);
$boardlist[$key]['usesitemap'] = element('bmt_value', $usesitemap);
}
}
$view['view']['boardlist'] = $boardlist;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'sitemap');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 환경설정>네이버 블로그 글쓰기 관리 페이지입니다
*/
public function naverblog()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_rssconfig_naverblog';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'is_submit',
'label' => '전송',
'rules' => 'trim|numeric',
),
array(
'field' => 'use_naver_blog_post',
'label' => '네이버 블로그 자동 글쓰기 기능 사용',
'rules' => 'trim|numeric',
),
array(
'field' => 'naver_blog_userid',
'label' => '네이버 블로그 회원 아이디',
'rules' => 'trim',
),
array(
'field' => 'naver_blog_api_key',
'label' => '네이버 블로그 글쓰기 API',
'rules' => 'trim',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$array = array(
'use_naver_blog_post', 'naver_blog_userid', 'naver_blog_api_key'
);
foreach ($array as $value) {
$savedata[$value] = $this->input->post($value, null, '');
}
$post_brd_id = $this->input->post('brd_id');
$boardlist = $this->Board_model->get_board_list();
if ($boardlist && is_array($boardlist)) {
$this->load->model('Board_meta_model');
foreach ($boardlist as $key => $val) {
if (element(element('brd_id', $val), $post_brd_id)) {
$metadata = array('use_naver_blog_post' => '1');
} else {
$metadata = array('use_naver_blog_post' => '');
}
$this->Board_meta_model->save(element('brd_id', $val), $metadata);
}
}
$this->Config_model->save($savedata);
$view['view']['alert_message'] = '네이버 블로그 자동 글쓰기 설정이 저장되었습니다';
}
$getdata = $this->Config_model->get_all_meta();
$view['view']['data'] = $getdata;
$boardlist = $this->Board_model->get_board_list();
if ($boardlist && is_array($boardlist)) {
$this->load->model('Board_meta_model');
foreach ($boardlist as $key => $val) {
$whereboard = array(
'brd_id' => element('brd_id', $val),
'bmt_key' => 'use_naver_blog_post',
);
$usenaverblog = $this->Board_meta_model->get_one('', '', $whereboard);
$boardlist[$key]['usenaverblog'] = element('bmt_value', $usenaverblog);
}
}
$view['view']['boardlist'] = $boardlist;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'naverblog');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,391 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Scheduler class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>환경설정>스케쥴러 관리 controller 입니다.
*/
class Scheduler extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'config/scheduler';
/**
* 모델을 로딩합니다
*/
protected $models = array('Config');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Config_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
}
/**
* 스케쥴러 관리 페이지입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_scheduler_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 's',
'label' => '스케쥴러',
'rules' => 'trim',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$updatedata = $this->input->post();
if ( ! isset($updatedata['library_name']) OR ! is_array($updatedata['library_name'])) {
$savedata = array(
'scheduler' => '',
);
$this->Config_model->save($savedata);
$view['view']['alert_message'] = '정상적으로 저장되었습니다';
} else {
$array_count_values = array_count_values($updatedata['library_name']);
$fail = false;
if ($fail === false) {
foreach ($array_count_values as $akey => $aval) {
if ($aval > 1) {
$view['view']['warning_message'] = $akey . ' 값이 ' . $aval . ' 회 중복 입력되었습니다. 라이브러리명이 중복되지 않게 입력해주세요';
$fail = true;
break;
}
}
}
if ($fail === false) {
foreach (element('library_name', $updatedata) as $fkey => $fval) {
if (empty($fval)) {
$view['view']['warning_message'] = '비어있는 라이브러리명이 있습니다. 라이브러리 값을 빠뜨리지 말고 입력해주세요';
$fail = true;
break;
}
}
}
if ($fail === false) {
$order = 0;
$update = array();
$alldata = $this->Config_model->get_all_meta();
$origindata = json_decode(element('scheduler', $alldata), true);
foreach (element('key', $updatedata) as $key => $value) {
if ($value) {
$update[$value] = array(
'library_name' => element($order, element('library_name', $updatedata)),
'interval_field_name' => element($value, element('interval_field_name', $updatedata)),
'lasttime' => element('lasttime', element(element($order, element('library_name', $updatedata)), $origindata)),
);
} else {
$update[$updatedata['library_name'][$order]] = array(
'library_name' => element($order, element('library_name', $updatedata)),
'interval_field_name' => element($key, element('interval_field_name', $updatedata)),
);
}
$order++;
}
$savedata = array(
'scheduler' => json_encode($update),
);
$this->Config_model->save($savedata);
$view['view']['alert_message'] = '정상적으로 저장되었습니다';
}
}
}
$getdata = $this->Config_model->get_all_meta();
$getdata['result'] = json_decode(element('scheduler', $getdata), true);
$getdata['scheduler_interval'] = json_decode(element('scheduler_interval', $getdata), true);
if ( ! element('scheduler_interval', $getdata) ) {
alert('스케쥴 주기명을 먼저 생성하신 후에 스케쥴러 등록이 가능합니다. 스케쥴 주기명 생성 페이지로 이동합니다', admin_url($this->pagedir . '/interval'));
}
if ($getdata['result'] && is_array($getdata['result'])) {
foreach ($getdata['result'] as $key => $value) {
$getdata['result'][$key]['class_exists'] = '';
if (file_exists(APPPATH . 'libraries/Scheduler/' . $key . '.php')) {
$this->load->library('Scheduler/' . $key);
if (class_exists($key)) {
$getdata['result'][$key]['class_exists'] = '1';
}
}
$getdata['result'][$key]['lastexecutetime'] = element('lasttime', $value) ? cdate("Y-m-d H:i:s", element('lasttime', $value)) : '-';
$getdata['result'][$key]['nextexecutetime'] = '-';
if (
element('lasttime', $value)
&& ($scheduler_interval = element('scheduler_interval', $getdata))
&& ($field_name = element(element('interval_field_name', $value), $scheduler_interval))
&& element('interval', $field_name)
) {
$nexttime = element('lasttime', $value) + element('interval', $field_name);
$getdata['result'][$key]['nextexecutetime'] = $nexttime ? cdate("Y-m-d H:i:s", $nexttime) : '-';
}
}
}
$view['view']['data'] = $getdata;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 스케쥴러 주기 관리 페이지입니다
*/
public function interval()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_scheduler_interval';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 's',
'label' => '스케쥴러',
'rules' => 'trim',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$updatedata = $this->input->post();
if ( ! isset($updatedata['field_name']) OR ! is_array($updatedata['field_name'])) {
$savedata = array(
'scheduler_interval' => '',
);
$this->Config_model->save($savedata);
$view['view']['alert_message'] = '정상적으로 저장되었습니다';
} else {
$array_count_values = array_count_values($updatedata['field_name']);
$fail = false;
if ($fail === false) {
foreach ($array_count_values as $akey => $aval) {
if ($aval > 1) {
$view['view']['warning_message'] = $akey . ' 값이 ' . $aval . ' 회 중복 입력되었습니다. ID 값이 중복되지 않게 입력해주세요';
$fail = true;
break;
}
}
}
if ($fail === false) {
foreach (element('field_name', $updatedata) as $fkey => $fval) {
if (empty($fval)) {
$view['view']['warning_message'] = '비어있는 ID 값이 있습니다. ID 값을 빠뜨리지 말고 입력해주세요';
$fail = true;
break;
}
}
}
if ($fail === false) {
foreach (element('display_name', $updatedata) as $fkey => $fval) {
if (empty($fval)) {
$view['view']['warning_message'] = '비어있는 주기명이 있습니다. 입력항목제목 값을 빠뜨리지 말고 입력해주세요';
$fail = true;
break;
}
}
}
if ($fail === false) {
$order = 0;
$update = array();
foreach (element('key', $updatedata) as $key => $value) {
if ($value) {
$update[$value] = array(
'field_name' => element($order, element('field_name', $updatedata)),
'interval' => element($order, element('interval', $updatedata)),
'display_name' => element($order, element('display_name', $updatedata)),
);
} else {
$update[$updatedata['field_name'][$order]] = array(
'field_name' => element($order, element('field_name', $updatedata)),
'interval' => element($order, element('interval', $updatedata)),
'display_name' => element($order, element('display_name', $updatedata)),
);
}
$order++;
}
$savedata = array(
'scheduler_interval' => json_encode($update),
);
$this->Config_model->save($savedata);
$view['view']['alert_message'] = '정상적으로 저장되었습니다';
}
}
}
$getdata = $this->Config_model->get_all_meta();
$getdata['scheduler'] = json_decode(element('scheduler', $getdata), true);
$getdata['result'] = json_decode(element('scheduler_interval', $getdata), true);
if ($getdata['scheduler'] && is_array($getdata['scheduler'])) {
foreach ($getdata['scheduler'] as $key => $value) {
if ( ! isset($getdata['result'][element('interval_field_name', $value)]['registered_scheduler'])) {
$getdata['result'][element('interval_field_name', $value)]['registered_scheduler'] = 0;
}
$getdata['result'][element('interval_field_name', $value)]['registered_scheduler']++;
}
}
$view['view']['data'] = $getdata;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'interval');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 스케쥴러 실행 페이지입니다
*/
public function execute($libraryname)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_scheduler_execute';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
if (file_exists(APPPATH . 'libraries/Scheduler/' . $libraryname . '.php')) {
$this->load->library('Scheduler/' . $libraryname);
$s = new $libraryname();
if (method_exists($s, 'scheduler')) {
$s->scheduler();
$scheduler_data = $this->cbconfig->item('scheduler');
$scheduler_array = json_decode($scheduler_data, true);
$interval_data = $this->cbconfig->item('scheduler_interval');
$interval_array = json_decode($interval_data, true);
$scheduler_array[$libraryname]['lasttime'] = ctimestamp();
$savedata['scheduler'] = json_encode($scheduler_array);
$this->load->model('Config_model');
$this->Config_model->save($savedata);
exit(json_encode(array('success' => 'ok', 'message' => $libraryname . ' 라이브러리가 실행되었습니다.')));
} else {
exit(json_encode(array('success' => 'fail', 'message' => $libraryname . ' 클래스 안에 scheduler 메소드가 존재하지 않습니다.')));
}
} else {
exit(json_encode(array('success' => 'fail', 'message' => $libraryname . ' 라이브러리가 존재하지 않습니다.')));
}
}
}

View File

@@ -0,0 +1,135 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Testemail class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>환경설정>메일발송테스트 controller 입니다.
*/
class Testemail extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'config/testemail';
/**
* 모델을 로딩합니다
*/
protected $models = array();
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = '';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('querystring'));
}
/**
* 테스트 이메일을 보내는 페이지입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_testemail_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$getdata['webmaster_email'] = $this->cbconfig->item('webmaster_email');
$getdata['webmaster_name'] = $this->cbconfig->item('webmaster_name');
$getdata['site_title'] = $this->cbconfig->item('site_title');
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'recv_email',
'label' => '받는이 이메일 주소',
'rules' => 'trim|required|valid_email',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$this->load->library('email');
$this->email->from(element('webmaster_email', $getdata), element('webmaster_name', $getdata));
$this->email->to($this->input->post('recv_email'));
$this->email->subject('이메일 발송 테스트입니다');
$emailform['emailform'] = $getdata;
$message = $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/email_form', $emailform, true);
$this->email->message($message);
if ($this->email->send() === false) {
$view['view']['alert_message'] = '이메일을 발송하지 못하였습니다. 메일 설정을 확인하여주세요';
} else {
$view['view']['alert_message'] = '이메일을 발송하였습니다';
}
//echo $this->email->print_debugger();
}
$view['view']['data'] = $getdata;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,538 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Loginlog class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>회원설정>로그인현황 controller 입니다.
*/
class Loginlog extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'member/loginlog';
/**
* 모델을 로딩합니다
*/
protected $models = array('Member_login_log');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Member_login_log_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_loginlog_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('mll_id', 'mll_userid', 'mll_success', 'member_login_log.mem_id', 'mll_datetime', 'mll_ip', 'mll_reason', 'mll_log_agent', 'mll_url', 'mll_referer'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('mll_id', 'member_login_log.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('mll_id'); // 정렬이 가능한 필드
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, '', '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
if (element('mll_useragent', $val)) {
$userAgent = get_useragent_info(element('mll_useragent', $val));
$result['list'][$key]['browsername'] = $userAgent['browsername'];
$result['list'][$key]['browserversion'] = $userAgent['browserversion'];
$result['list'][$key]['os'] = $userAgent['os'];
$result['list'][$key]['engine'] = $userAgent['engine'];
}
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('mll_datetime' => '날짜', 'mll_ip' => 'IP', 'mll_reason' => '이유');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 로그인 성공 기록을 그래프 형식으로 보는 페이지입니다
*/
public function graph($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_loginlog_graph';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$datetype = $this->input->get('datetype', null, 'd');
if ($datetype !== 'm' && $datetype !== 'y') {
$datetype = 'd';
}
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
if ($datetype === 'y' OR $datetype === 'm') {
$start_year = substr($start_date, 0, 4);
$end_year = substr($end_date, 0, 4);
}
if ($datetype === 'm') {
$start_month = substr($start_date, 5, 2);
$end_month = substr($end_date, 5, 2);
$start_year_month = $start_year * 12 + $start_month;
$end_year_month = $end_year * 12 + $end_month;
}
$orderby = (strtolower($this->input->get('orderby')) === 'desc') ? 'desc' : 'asc';
$result = $this->{$this->modelname}->get_login_success_count($datetype, $start_date, $end_date, $orderby);
$sum_count = 0;
$arr = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
$s = element('day', $value);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s] += element('cnt', $value);
if ($arr[$s] > $max) {
$max = $arr[$s];
}
$sum_count += element('cnt', $value);
}
}
$result = array();
$i = 0;
$save_count = -1;
$tot_count = 0;
if (count($arr)) {
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$result[$key]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$result[$key]['no'] = $no;
$result[$key]['key'] = $key;
$rate = ($count / $sum_count * 100);
$result[$key]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$result[$key]['s_rate'] = $s_rate;
$bar = (int)($count / $max * 100);
$result[$key]['bar'] = $bar;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
if ($datetype === 'y') {
for ($i = $start_year; $i <= $end_year; $i++) {
if( ! isset($result[$i])) $result[$i] = '';
}
} elseif ($datetype === 'm') {
for ($i = $start_year_month; $i <= $end_year_month; $i++) {
$year = floor($i / 12);
if ($year * 12 == $i) $year--;
$month = sprintf("%02d", ($i - ($year * 12)));
$date = $year . '-' . $month;
if( ! isset($result[$date])) $result[$date] = '';
}
} elseif ($datetype === 'd') {
$date = $start_date;
while ($date <= $end_date) {
if( ! isset($result[$date])) $result[$date] = '';
$date = cdate('Y-m-d', strtotime($date) + 86400);
}
}
if ($orderby === 'desc') {
krsort($result);
} else {
ksort($result);
}
$view['view']['list'] = $result;
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
$view['view']['datetype'] = $datetype;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=로그인성공기록_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/graph_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'graph');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
/**
* 로그인 실패 기록을 그래프 형식으로 보는 페이지입니다
*/
public function graph_fail($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_loginlog_graph_fail';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$datetype = $this->input->get('datetype', null, 'd');
if ($datetype !== 'm' && $datetype !== 'y') {
$datetype = 'd';
}
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
if ($datetype === 'y' OR $datetype === 'm') {
$start_year = substr($start_date, 0, 4);
$end_year = substr($end_date, 0, 4);
}
if ($datetype === 'm') {
$start_month = substr($start_date, 5, 2);
$end_month = substr($end_date, 5, 2);
$start_year_month = $start_year * 12 + $start_month;
$end_year_month = $end_year * 12 + $end_month;
}
$orderby = (strtolower($this->input->get('orderby')) === 'desc') ? 'desc' : 'asc';
$result = $this->{$this->modelname}->get_login_fail_count($datetype, $start_date, $end_date, $orderby);
$sum_count = 0;
$arr = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
$s = element('day', $value);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s] += element('cnt', $value);
if ($arr[$s] > $max) {
$max = $arr[$s];
}
$sum_count += element('cnt', $value);
}
}
$result = array();
$i = 0;
$save_count = -1;
$tot_count = 0;
if (count($arr)) {
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$result[$key]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$result[$key]['no'] = $no;
$result[$key]['key'] = $key;
$rate = ($count / $sum_count * 100);
$result[$key]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$result[$key]['s_rate'] = $s_rate;
$bar = (int)($count / $max * 100);
$result[$key]['bar'] = $bar;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
if ($datetype === 'y') {
for ($i = $start_year; $i <= $end_year; $i++) {
if( ! isset($result[$i])) $result[$i] = '';
}
} elseif ($datetype === 'm') {
for ($i = $start_year_month; $i <= $end_year_month; $i++) {
$year = floor($i / 12);
if ($year * 12 == $i) $year--;
$month = sprintf("%02d", ($i - ($year * 12)));
$date = $year . '-' . $month;
if( ! isset($result[$date])) $result[$date] = '';
}
} elseif ($datetype === 'd') {
$date = $start_date;
while ($date <= $end_date) {
if( ! isset($result[$date])) $result[$date] = '';
$date = cdate('Y-m-d', strtotime($date) + 86400);
}
}
if ($orderby === 'desc') {
krsort($result);
} else {
ksort($result);
}
$view['view']['list'] = $result;
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
$view['view']['datetype'] = $datetype;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=로그인실패기록_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/graph_fail_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'graph_fail');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_loginlog_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 오래된 로그인로그삭제 페이지입니다
*/
public function cleanlog()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_loginlog_cleanlog';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'mll_datetime <=' => $this->input->post('criterion'),
);
$this->Member_login_log_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 ' . $this->input->post('day') . '일 이상된 로그인로그가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d H:i:s', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'mll_datetime <=' => $criterion,
);
$log_count = $this->Member_login_log_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day') . '일 이상된 로그인로그가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 로그인로그가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'cleanlog');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,143 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Memberfollow class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>회원설정>팔로우현황 controller 입니다.
*/
class Memberfollow extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'member/memberfollow';
/**
* 모델을 로딩합니다
*/
protected $models = array('Follow');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Follow_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_memberfollow_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('mfo_id', 'mfg_id', 'mem_id', 'target_mem_id', 'mfo_datetime'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('mfo_id', 'mfg_id', 'mem_id', 'target_mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('mfo_id'); // 정렬이 가능한 필드
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, '', '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['member'] = $dbmember = $this->Member_model->get_by_memid(element('mem_id', $val), 'mem_id, mem_userid, mem_nickname, mem_icon');
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $dbmember),
element('mem_nickname', $dbmember),
element('mem_icon', $dbmember)
);
$result['list'][$key]['target_member'] = $target_member = $this->Member_model->get_by_memid(element('target_mem_id', $val), 'mem_id, mem_userid, mem_nickname, mem_icon');
$result['list'][$key]['target_display_name'] = display_username(
element('mem_userid', $target_member),
element('mem_nickname', $target_member),
element('mem_icon', $target_member)
);
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('mfo_datetime' => '날짜');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['write_url'] = admin_url($this->pagedir . '/write');
$view['view']['list_update_url'] = admin_url($this->pagedir . '/listupdate/?' . $param->output());
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,147 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Membergroup class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>회원설정>회원그룹관리 controller 입니다.
*/
class Membergroup extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'member/membergroup';
/**
* 모델을 로딩합니다
*/
protected $models = array('Member_group', 'Member_group_member');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Member_group_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('querystring'));
}
/**
* 회원 그룹 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_membergroup_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$findex = 'mgr_order';
$forder = 'asc';
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 's',
'label' => '그룹명',
'rules' => 'trim',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$updatedata = $this->input->post();
$this->{$this->modelname}->update_group($updatedata);
$view['view']['alert_message'] = '정상적으로 저장되었습니다';
}
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_order_field = array('mgr_order'); // 정렬이 가능한 필드
$result = $this->{$this->modelname}
->get_admin_list('', '', '', '', $findex, $forder);
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$countwhere = array(
'mgr_id' => element('mgr_id', $val),
);
$result['list'][$key]['member_count'] = $this->Member_group_member_model->count_by($countwhere);
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,143 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Memberlevelhistory class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>회원설정>레벨히스토리 controller 입니다.
*/
class Memberlevelhistory extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'member/memberlevelhistory';
/**
* 모델을 로딩합니다
*/
protected $models = array('Member_level_history');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Member_level_history_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_memberlevelhistory_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('mlh_id', 'member_level_history.mem_id', 'member.mem_userid', 'member.mem_nickname', 'mlh_from', 'mlh_to', 'mll_datetime', 'mlh_reason', 'mlh_ip'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('mlh_id', 'member_level_history.mem_id', 'mlh_from', 'mlh_to'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('mlh_id'); // 정렬이 가능한 필드
$where = array();
if (is_numeric($this->input->get('mlh_from'))) {
$where['mlh_from'] = $this->input->get('mlh_from');
}
if (is_numeric($this->input->get('mlh_to'))) {
$where['mlh_to'] = $this->input->get('mlh_to');
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('member.mem_userid' => '회원아이디', 'member.mem_nickname' => '회원닉네임', 'mlh_datetime' => '날짜', 'mlh_reason' => '이유', 'mlh_ip' => 'IP');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,151 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Nickname class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>회원설정>닉네임변경이력 controller 입니다.
*/
class Nickname extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'member/nickname';
/**
* 모델을 로딩합니다
*/
protected $models = array('Member_nickname');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Member_nickname_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_nickname_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$view['view']['sort'] = array(
'mni_nickname' => $param->sort('mni_nickname', 'asc'),
'mni_start_datetime' => $param->sort('mni_start_datetime', 'asc'),
'mni_end_datetime' => $param->sort('mni_end_datetime', 'asc'),
);
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('mni_id', 'member_nickname.mem_id', 'member.mem_userid', 'member.mem_nickname', 'mni_nickname'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('mni_id', 'member_nickname.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('mni_id', 'mni_nickname', 'mni_start_datetime', 'mni_end_datetime'); // 정렬이 가능한 필드
$where = array();
if ($this->input->get('use') === 'Y') {
$where['mni_end_datetime'] = null;
}
if ($this->input->get('use') === 'N') {
$where['mni_end_datetime >'] = '0000-00-00 00:00:00';
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('member.mem_userid' => '회원아이디', 'member.mem_nickname' => '현재닉네임', 'mni_nickname' => '닉네임');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['write_url'] = admin_url($this->pagedir . '/write');
$view['view']['list_update_url'] = admin_url($this->pagedir . '/listupdate/?' . $param->output());
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,461 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Point class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>회원설정>포인트관리 controller 입니다.
*/
class Points extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'member/points';
/**
* 모델을 로딩합니다
*/
protected $models = array('Point');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Point_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring', 'point'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_points_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('poi_id', 'point.mem_id', 'poi_datetime', 'poi_content', 'poi_type', 'poi_action'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('poi_id', 'point.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('poi_id'); // 정렬이 가능한 필드
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, '', '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('poi_datetime' => '날짜', 'poi_content' => '내용');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['write_url'] = admin_url($this->pagedir . '/write');
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 게시판 글쓰기 또는 수정 페이지를 가져오는 메소드입니다
*/
public function write()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_points_write';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$primary_key = $this->{$this->modelname}->primary_key;
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array();
if ($this->input->post('poi_type') === 'toall') {
$config = array(
array(
'field' => 'poi_point_all',
'label' => '포인트',
'rules' => 'trim|required|numeric',
),
array(
'field' => 'poi_content_all',
'label' => '내용',
'rules' => 'trim|required',
),
);
} elseif ($this->input->post('poi_type') === 'toone') {
$config = array(
array(
'field' => 'mem_userid',
'label' => '회원아이디',
'rules' => 'trim|required|callback__real_userid',
),
array(
'field' => 'poi_point',
'label' => '포인트',
'rules' => 'trim|required|numeric',
),
array(
'field' => 'poi_content',
'label' => '내용',
'rules' => 'trim|required',
),
);
}
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $primary_key;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'write');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('poi_type') === 'toall') {
$where = array(
'mem_denied' => 0,
);
$mball = $this->Member_model->get('', 'mem_id', $where);
if ($mball && is_array($mball)) {
foreach ($mball as $mb) {
if (element('mem_id', $mb)) {
$this->point->insert_point(
element('mem_id', $mb),
$this->input->post('poi_point_all'),
$this->input->post('poi_content_all'),
'@byadmin',
element('mem_id', $mb),
$this->member->item('mem_id') . '-' . uniqid('')
);
}
}
}
} elseif ($this->input->post('poi_type') === 'toone') {
$mb = $this->Member_model->get_by_userid($this->input->post('mem_userid'), 'mem_id');
if (element('mem_id', $mb)) {
$this->point->insert_point(
element('mem_id', $mb),
$this->input->post('poi_point'),
$this->input->post('poi_content'),
'@byadmin',
element('mem_id', $mb),
$this->member->item('mem_id') . '-' . uniqid('')
);
}
}
$this->session->set_flashdata(
'message',
'정상적으로 입력되었습니다'
);
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 게시물의 신규입력 또는 수정작업이 끝난 후 목록 페이지로 이동합니다
*/
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_points_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
$this->load->library('Point');
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->point->delete_point_by_pk($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 실제로 존재하는 회원인지를 체크합니다
*/
public function _real_userid($str)
{
$mb = $this->Member_model->get_by_userid($str, 'mem_id, mem_denied');
if ( ! element('mem_id', $mb)) {
$this->form_validation->set_message(
'_real_userid',
$str . ' 은 존재하지 않는 회원아이디입니다'
);
return false;
}
if (element('mem_denied', $mb)) {
$this->form_validation->set_message(
'_real_userid',
$str . ' 은 탈퇴, 차단된 회원아이디입니다'
);
return false;
}
return true;
}
/**
* 오래된 포인트로그 정리 페이지입니다
*/
public function cleanlog()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_point_cleanlog';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$criterion = $this->input->post('criterion');
$result = $this->Point_model->member_list_by_point_count(10, $criterion);
$mem_count = 0;
$poi_count = 0;
if ($result) {
foreach ($result as $value) {
$mem_count++;
$poi_count += element('cnt', $value);
$where = array(
'mem_id' => element('mem_id', $value),
'poi_datetime <=' => $criterion,
);
$this->Point_model->delete_where($where);
$this->point->insert_point(
element('mem_id', $value),
element('sum_point', $value),
$criterion . ' 까지의 포인트 ' . number_format(element('cnt', $value)) . '건 정리',
'@clean',
element('mem_id', $value),
element('mem_id', $value) . '-' . uniqid('')
);
}
}
$view['view']['alert_message'] = '총 ' . number_format($mem_count) . ' 명의 포인트 ' . number_format($poi_count) . ' 건이 정리되었습니다';
} else {
$criterion = cdate('Y-m-d H:i:s', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$result = $this->Point_model->member_count_by_point_count(1, $criterion);
$member_count = count($result);
$point_sum = 0;
if ($result) {
foreach ($result as $k => $v) {
$point_sum += element('cnt', $v);
}
}
if ($member_count > 0) {
$view['view']['msg'] = '총 ' . number_format($member_count) . ' 명의 회원, ' . number_format($point_sum) . ' 건의 ' . $this->input->post('day') . '일 이상된 포인트 데이터가 발견되었습니다.<br />';
if ($member_count > 100) {
$view['view']['msg'] .= '이중 100명 회원의 포인트를 정리하시겠습니까?';
} else {
$view['view']['msg'] .= '이를 정리하시겠습니까?';
}
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 포인트 데이터가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'cleanlog');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,616 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Banner class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>페이지설정>팝업관리 controller 입니다.
*/
class Banner extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'page/banner';
/**
* 모델을 로딩합니다
*/
protected $models = array('Banner', 'Banner_group');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Banner_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_banner_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$view['view']['sort'] = array(
'ban_id' => $param->sort('ban_id', 'asc'),
'ban_title' => $param->sort('ban_title', 'asc'),
'ban_url' => $param->sort('ban_url', 'asc'),
'ban_start_date' => $param->sort('ban_start_date', 'asc'),
'ban_end_date' => $param->sort('ban_end_date', 'asc'),
'ban_hit' => $param->sort('ban_hit', 'asc'),
'ban_order' => $param->sort('ban_order', 'asc'),
'ban_activated' => $param->sort('ban_activated', 'asc'),
);
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('ban_id', 'ban_title', 'ban_url'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('ban_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('ban_id', 'ban_start_date', 'ban_end_date', 'ban_title', 'ban_url', 'ban_hit', 'ban_order', 'ban_activated'); // 정렬이 가능한 필드
$where = array();
if ($this->input->get('ban_activated') === 'Y') {
$where['ban_activated'] = '1';
}
if ($this->input->get('ban_activated') === 'N') {
$where['ban_activated'] = '0';
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
if (element('ban_image', $val)) {
$result['list'][$key]['thumb_url'] = thumb_url('banner', element('ban_image', $val), '80');
}
if (empty($val['ban_start_date']) OR $val['ban_start_date'] === '0000-00-00') {
$result['list'][$key]['ban_start_date'] = '미지정';
}
if (empty($val['ban_end_date']) OR $val['ban_end_date'] === '0000-00-00') {
$result['list'][$key]['ban_end_date'] = '미지정';
}
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('ban_title' => '이미지 설명', 'ban_url' => '이미지 URL');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['write_url'] = admin_url($this->pagedir . '/write');
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 게시판 글쓰기 또는 수정 페이지를 가져오는 메소드입니다
*/
public function write($pid = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_banner_write';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 프라이머리키에 숫자형이 입력되지 않으면 에러처리합니다
*/
if ($pid) {
$pid = (int) $pid;
if (empty($pid) OR $pid < 1) {
show_404();
}
}
$primary_key = $this->{$this->modelname}->primary_key;
/**
* 수정 페이지일 경우 기존 데이터를 가져옵니다
*/
$getdata = array();
if ($pid) {
$getdata = $this->{$this->modelname}->get_one($pid);
}
$group = $this->Banner_group_model->get_all_group();
if (empty($group)) {
alert('배너 위치를 먼저 생성하신 후에 배너 추가가 가능합니다. 배너위치 생성 페이지로 이동합니다', admin_url($this->pagedir . '/group'));
}
$view['view']['group'] = $group;
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'bng_name',
'label' => '배너위치',
'rules' => 'trim|required',
),
array(
'field' => 'ban_start_date',
'label' => '배너시작일',
'rules' => 'trim|alpha_dash|exact_length[10]',
),
array(
'field' => 'ban_end_date',
'label' => '배너종료일',
'rules' => 'trim|alpha_dash|exact_length[10]',
),
array(
'field' => 'ban_title',
'label' => '이미지 설명',
'rules' => 'trim|required',
),
array(
'field' => 'ban_url',
'label' => '이미지 URL',
'rules' => 'trim|valid_url',
),
array(
'field' => 'ban_target',
'label' => '타겟',
'rules' => 'trim',
),
array(
'field' => 'ban_device',
'label' => '배너표시기기',
'rules' => 'trim|required',
),
array(
'field' => 'ban_width',
'label' => '이미지 가로값',
'rules' => 'trim|required|numeric|is_natural',
),
array(
'field' => 'ban_height',
'label' => '이미지 세로값',
'rules' => 'trim|required|numeric|is_natural',
),
array(
'field' => 'ban_order',
'label' => '정렬순서',
'rules' => 'trim|required|numeric|is_natural',
),
array(
'field' => 'ban_activated',
'label' => '배너활성화',
'rules' => 'trim',
),
);
$this->form_validation->set_rules($config);
$form_validation = $this->form_validation->run();
$file_error = '';
$updatephoto = '';
if ($form_validation) {
$this->load->library('upload');
if (isset($_FILES) && isset($_FILES['ban_image']) && isset($_FILES['ban_image']['name']) && $_FILES['ban_image']['name']) {
$upload_path = config_item('uploads_dir') . '/banner/';
if (is_dir($upload_path) === false) {
mkdir($upload_path, 0707);
$file = $upload_path . 'index.php';
$f = @fopen($file, 'w');
@fwrite($f, '');
@fclose($f);
@chmod($file, 0644);
}
$upload_path .= cdate('Y') . '/';
if (is_dir($upload_path) === false) {
mkdir($upload_path, 0707);
$file = $upload_path . 'index.php';
$f = @fopen($file, 'w');
@fwrite($f, '');
@fclose($f);
@chmod($file, 0644);
}
$upload_path .= cdate('m') . '/';
if (is_dir($upload_path) === false) {
mkdir($upload_path, 0707);
$file = $upload_path . 'index.php';
$f = @fopen($file, 'w');
@fwrite($f, '');
@fclose($f);
@chmod($file, 0644);
}
$uploadconfig = array();
$uploadconfig['upload_path'] = $upload_path;
$uploadconfig['allowed_types'] = 'jpg|jpeg|png|gif';
$uploadconfig['max_size'] = '2000';
$uploadconfig['max_width'] = '1000';
$uploadconfig['max_height'] = '1000';
$uploadconfig['encrypt_name'] = true;
$this->upload->initialize($uploadconfig);
if ($this->upload->do_upload('ban_image')) {
$img = $this->upload->data();
$updatephoto = cdate('Y') . '/' . cdate('m') . '/' . element('file_name', $img);
} else {
$file_error = $this->upload->display_errors();
}
}
}
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($form_validation === false OR $file_error !== '') {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
$view['view']['message'] = $file_error;
if ($pid) {
if (empty($getdata['ban_start_date']) OR $getdata['ban_start_date'] === '0000-00-00') {
$getdata['ban_start_date'] = '';
}
if (empty($getdata['ban_end_date']) OR $getdata['ban_end_date'] === '0000-00-00') {
$getdata['ban_end_date'] = '';
}
$view['view']['data'] = $getdata;
}
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $primary_key;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'write');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$content_type = $this->cbconfig->item('use_popup_dhtml') ? 1 : 0;
$ban_start_date = $this->input->post('ban_start_date');
if ( ! $ban_start_date) $ban_start_date = null;
$ban_end_date = $this->input->post('ban_end_date');
if ( ! $ban_end_date) $ban_end_date = null;
$ban_width = $this->input->post('ban_width') ? $this->input->post('ban_width') : 0;
$ban_height = $this->input->post('ban_height') ? $this->input->post('ban_height') : 0;
$ban_order = $this->input->post('ban_order') ? $this->input->post('ban_order') : 0;
$ban_activated = $this->input->post('ban_activated') ? 1 : 0;
$updatedata = array(
'ban_start_date' => $ban_start_date,
'ban_end_date' => $ban_end_date,
'ban_title' => $this->input->post('ban_title', null, ''),
'bng_name' => $this->input->post('bng_name', null, ''),
'ban_url' => $this->input->post('ban_url', null, ''),
'ban_target' => $this->input->post('ban_target', null, ''),
'ban_device' => $this->input->post('ban_device', null, ''),
'ban_width' => $ban_width,
'ban_height' => $ban_height,
'ban_order' => $ban_order,
'ban_activated' => $ban_activated,
);
if ($this->input->post('ban_image_del')) {
$updatedata['ban_image'] = '';
} elseif ($updatephoto) {
$updatedata['ban_image'] = $updatephoto;
}
if (element('ban_image', $getdata) && ($this->input->post('ban_image_del') OR $updatephoto)) {
// 기존 파일 삭제
@unlink(config_item('uploads_dir') . '/banner/' . element('ban_image', $getdata));
}
/**
* 게시물을 수정하는 경우입니다
*/
if ($this->input->post($primary_key)) {
$this->cache->delete('banner/banner-' . element('bng_name', $getdata) . '-random-' . cdate('Y-m-d'));
$this->cache->delete('banner/banner-' . element('bng_name', $getdata) . '-order-' . cdate('Y-m-d'));
$this->{$this->modelname}->update($this->input->post($primary_key), $updatedata);
$this->session->set_flashdata(
'message',
'정상적으로 수정되었습니다'
);
} else {
/**
* 게시물을 새로 입력하는 경우입니다
*/
$updatedata['ban_datetime'] = cdate('Y-m-d H:i:s');
$updatedata['ban_ip'] = $this->input->ip_address();
$updatedata['mem_id'] = $this->member->item('mem_id');
$this->{$this->modelname}->insert($updatedata);
$this->session->set_flashdata(
'message',
'정상적으로 입력되었습니다'
);
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 게시물의 신규입력 또는 수정작업이 끝난 후 목록 페이지로 이동합니다
*/
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}
/**
* 배너 위치관리 페이지를 가져오는 메소드입니다
*/
public function group()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_banner_group';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'bng_name',
'label' => '위치명',
'rules' => 'trim|required|alpha_dash|is_unique[banner_group.bng_name]',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$insertdata = array(
'bng_name' => $this->input->post('bng_name', null, ''),
);
$this->Banner_group_model->insert($insertdata);
}
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$findex = $this->input->get('findex', null, 'bng_group');
$forder = $this->input->get('forder', null, 'asc');
$result = $this->Banner_group_model
->get_admin_list(1000, 0, '', '', $findex, $forder);
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$countwhere = array(
'bng_name' => element('bng_name', $val),
);
$result['list'][$key]['banner_count'] = $this->Banner_model->count_by($countwhere);
}
}
$view['view']['data'] = $result;
$primary_key = $this->Banner_group_model->primary_key;
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/groupdelete/?' . $param->output());
$view['view']['primary_key'] = $primary_key;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'group');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_banner_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$getdata = $this->{$this->modelname}->get_one($val);
$this->cache->delete('banner/banner-' . element('bng_name', $getdata) . '-random-' . cdate('Y-m-d'));
$this->cache->delete('banner/banner-' . element('bng_name', $getdata) . '-order-' . cdate('Y-m-d'));
$this->{$this->modelname}->delete($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function groupdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_banner_groupdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->Banner_group_model->delete($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '/group?' . $param->output());
redirect($redirecturl);
}
}

View File

@@ -0,0 +1,407 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Bannerclick class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>페이지설정>배너 클릭 controller 입니다.
*/
class Bannerclick extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'page/bannerclick';
/**
* 모델을 로딩합니다
*/
protected $models = array('Banner_click_log');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Banner_click_log_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_bannerclick_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('bcl_id', 'ban_id', 'bng_name', 'banner.mem_id', 'banner_click_log.mem_id', 'bcl_datetime', 'bcl_ip'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('bcl_id', 'ban_id', 'banner.mem_id', 'banner_click_log.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('bcl_id'); // 정렬이 가능한 필드
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, '', '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['member'] = $dbmember = $this->Member_model->get_by_memid(element('mem_id', $val), 'mem_id, mem_userid, mem_nickname, mem_icon');
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $dbmember),
element('mem_nickname', $dbmember),
element('mem_icon', $dbmember)
);
if (element('ban_image', $val)) {
$result['list'][$key]['thumb_url'] = thumb_url('banner', element('ban_image', $val), '80');
}
if (element('bcl_useragent', $val)) {
$userAgent = get_useragent_info(element('bcl_useragent', $val));
$result['list'][$key]['browsername'] = $userAgent['browsername'];
$result['list'][$key]['browserversion'] = $userAgent['browserversion'];
$result['list'][$key]['os'] = $userAgent['os'];
$result['list'][$key]['engine'] = $userAgent['engine'];
}
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('bcl_datetime' => '날짜', 'bcl_ip' => 'IP');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 그래프 형식으로 보는 페이지입니다
*/
public function graph($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_bannerclick_graph';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$datetype = $this->input->get('datetype', null, 'd');
if ($datetype !== 'm' && $datetype !== 'y') {
$datetype = 'd';
}
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
if ($datetype === 'y' OR $datetype === 'm') {
$start_year = substr($start_date, 0, 4);
$end_year = substr($end_date, 0, 4);
}
if ($datetype === 'm') {
$start_month = substr($start_date, 5, 2);
$end_month = substr($end_date, 5, 2);
$start_year_month = $start_year * 12 + $start_month;
$end_year_month = $end_year * 12 + $end_month;
}
$orderby = (strtolower($this->input->get('orderby')) === 'desc') ? 'desc' : 'asc';
$result = $this->{$this->modelname}->get_banner_click_count($datetype, $start_date, $end_date, $orderby);
$sum_count = 0;
$arr = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
$s = element('day', $value);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s] += element('cnt', $value);
if ($arr[$s] > $max) {
$max = $arr[$s];
}
$sum_count += element('cnt', $value);
}
}
$result = array();
$i = 0;
$save_count = -1;
$tot_count = 0;
if (count($arr)) {
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$result[$key]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$result[$key]['no'] = $no;
$result[$key]['key'] = $key;
$rate = ($count / $sum_count * 100);
$result[$key]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$result[$key]['s_rate'] = $s_rate;
$bar = (int)($count / $max * 100);
$result[$key]['bar'] = $bar;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
if ($datetype === 'y') {
for ($i = $start_year; $i <= $end_year; $i++) {
if( ! isset($result[$i])) $result[$i] = '';
}
} elseif ($datetype === 'm') {
for ($i = $start_year_month; $i <= $end_year_month; $i++) {
$year = floor($i / 12);
if ($year * 12 == $i) $year--;
$month = sprintf("%02d", ($i - ($year * 12)));
$date = $year . '-' . $month;
if( ! isset($result[$date])) $result[$date] = '';
}
} elseif ($datetype === 'd') {
$date = $start_date;
while ($date <= $end_date) {
if( ! isset($result[$date])) $result[$date] = '';
$date = cdate('Y-m-d', strtotime($date) + 86400);
}
}
if ($orderby === 'desc') {
krsort($result);
} else {
ksort($result);
}
$view['view']['list'] = $result;
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
$view['view']['datetype'] = $datetype;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=배너클릭_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/graph_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'graph');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_bannerclick_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 오래된 배너클릭로그삭제 페이지입니다
*/
public function cleanlog()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_bannerclick_cleanlog';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'bcl_datetime <=' => $this->input->post('criterion'),
);
$this->Banner_click_log_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 ' . $this->input->post('day') . '일 이상된 배너클릭로그가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d H:i:s', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'bcl_datetime <=' => $criterion,
);
$log_count = $this->Banner_click_log_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day') . '일 이상된 배너클릭로그가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 배너클릭로그가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'cleanlog');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,424 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Document class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>페이지설정>일반페이지 controller 입니다.
*/
class Document extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'page/document';
/**
* 모델을 로딩합니다
*/
protected $models = array('Document');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Document_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array', 'dhtml_editor');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_document_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$view['view']['sort'] = array(
'doc_id' => $param->sort('doc_id', 'asc'),
'doc_key' => $param->sort('doc_key', 'asc'),
'doc_title' => $param->sort('doc_title', 'asc'),
'doc_layout' => $param->sort('doc_layout', 'asc'),
'doc_mobile_layout' => $param->sort('doc_mobile_layout', 'asc'),
'doc_skin' => $param->sort('doc_skin', 'asc'),
'doc_mobile_skin' => $param->sort('doc_mobile_skin', 'asc'),
'doc_updated_datetime' => $param->sort('doc_updated_datetime', 'asc'),
'doc_hit' => $param->sort('doc_hit', 'asc'),
);
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('doc_id', 'doc_key', 'doc_title', 'doc_layout', 'doc_mobile_layout', 'doc_skin', 'doc_mobile_skin', 'doc_datetime', 'doc_updated_datetime', 'document.mem_id', 'doc_content', 'doc_mobile_content'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('doc_id', 'document.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('doc_id', 'doc_key', 'doc_title', 'doc_layout', 'doc_mobile_layout', 'doc_skin', 'doc_mobile_skin', 'doc_updated_datetime', 'doc_hit'); // 정렬이 가능한 필드
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, '', '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('doc_key' => 'KEY', 'doc_title' => '제목', 'doc_content' => '내용', 'doc_mobile_content' => '모바일용내용', 'doc_datetime' => '입력일', 'doc_updated_datetime' => '최종수정일');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['write_url'] = admin_url($this->pagedir . '/write');
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 게시판 글쓰기 또는 수정 페이지를 가져오는 메소드입니다
*/
public function write($pid = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_document_write';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 프라이머리키에 숫자형이 입력되지 않으면 에러처리합니다
*/
if ($pid) {
$pid = (int) $pid;
if (empty($pid) OR $pid < 1) {
show_404();
}
}
$primary_key = $this->{$this->modelname}->primary_key;
/**
* 수정 페이지일 경우 기존 데이터를 가져옵니다
*/
$getdata = array();
if ($pid) {
$getdata = $this->{$this->modelname}->get_one($pid);
}
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'doc_title',
'label' => '제목',
'rules' => 'trim|required',
),
array(
'field' => 'doc_content',
'label' => '내용',
'rules' => 'trim|required',
),
array(
'field' => 'doc_mobile_content',
'label' => '모바일내용',
'rules' => 'trim',
),
array(
'field' => 'doc_layout',
'label' => '레이아웃',
'rules' => 'trim',
),
array(
'field' => 'doc_sidebar',
'label' => '사이드바',
'rules' => 'trim',
),
array(
'field' => 'doc_skin',
'label' => '스킨',
'rules' => 'trim',
),
array(
'field' => 'doc_mobile_layout',
'label' => '모바일레이아웃',
'rules' => 'trim',
),
array(
'field' => 'doc_mobile_sidebar',
'label' => '모바일사이드바',
'rules' => 'trim',
),
array(
'field' => 'doc_mobile_skin',
'label' => '모바일스킨',
'rules' => 'trim',
),
);
if ($this->input->post($primary_key)) {
$config[] = array(
'field' => 'doc_key',
'label' => '페이지주소',
'rules' => 'trim|required|alpha_dash|min_length[3]|max_length[50]|is_unique[document.doc_key.doc_id.' . $getdata['doc_id'] . ']',
);
} else {
$config[] = array(
'field' => 'doc_key',
'label' => '페이지주소',
'rules' => 'trim|required|alpha_dash|min_length[3]|max_length[50]|is_unique[document.doc_key]',
);
}
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
$view['view']['data'] = $getdata;
$view['view']['data']['doc_layout_option'] = get_skin_name(
'_layout',
set_value('doc_layout', element('doc_layout', $getdata)),
'기본설정따름'
);
$view['view']['data']['doc_mobile_layout_option'] = get_skin_name(
'_layout',
set_value('doc_mobile_layout', element('doc_mobile_layout', $getdata)),
'기본설정따름'
);
$view['view']['data']['doc_skin_option'] = get_skin_name(
'document',
set_value('doc_skin', element('doc_skin', $getdata)),
'기본설정따름'
);
$view['view']['data']['doc_mobile_skin_option'] = get_skin_name(
'document',
set_value('doc_mobile_skin', element('doc_mobile_skin', $getdata)),
'기본설정따름'
);
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $primary_key;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'write');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$content_type = $this->cbconfig->item('use_document_dhtml') ? 1 : 0;
$doc_sidebar = $this->input->post('doc_sidebar') ? $this->input->post('doc_sidebar') : 0;
$doc_mobile_sidebar = $this->input->post('doc_mobile_sidebar') ? $this->input->post('doc_mobile_sidebar') : 0;
$updatedata = array(
'doc_key' => $this->input->post('doc_key', null, ''),
'doc_title' => $this->input->post('doc_title', null, ''),
'doc_content' => $this->input->post('doc_content', null, ''),
'doc_mobile_content' => $this->input->post('doc_mobile_content', null, ''),
'doc_content_html_type' => $content_type,
'doc_layout' => $this->input->post('doc_layout', null, ''),
'doc_mobile_layout' => $this->input->post('doc_mobile_layout', null, ''),
'doc_sidebar' => $doc_sidebar,
'doc_mobile_sidebar' => $doc_mobile_sidebar,
'doc_skin' => $this->input->post('doc_skin', null, ''),
'doc_mobile_skin' => $this->input->post('doc_mobile_skin', null, ''),
'doc_updated_mem_id' => $this->member->item('mem_id'),
'doc_updated_datetime' => cdate('Y-m-d H:i:s'),
);
if ( $this->input->post($primary_key) != $pid ){
}
/**
* 게시물을 수정하는 경우입니다
*/
if ($pid) {
$this->{$this->modelname}->update($pid, $updatedata);
$this->session->set_flashdata(
'message',
'정상적으로 수정되었습니다'
);
} else {
/**
* 게시물을 새로 입력하는 경우입니다
*/
$updatedata['doc_datetime'] = cdate('Y-m-d H:i:s');
$updatedata['mem_id'] = $this->member->item('mem_id');
$this->{$this->modelname}->insert($updatedata);
$this->session->set_flashdata(
'message',
'정상적으로 입력되었습니다'
);
}
$list = $this->{$this->modelname}->get('', 'doc_id, doc_key');
$cachedata = '';
if ($list && is_array($list)) {
foreach ($list as $key => $val) {
$cachedata[$val['doc_key']] = element('doc_id', $val);
}
}
$this->cache->save('document-key-id-info', $cachedata, 86400*365);
// 이벤트가 존재하면 실행합니다
$view['view']['event']['after'] = Events::trigger('after', $eventname);
/**
* 게시물의 신규입력 또는 수정작업이 끝난 후 목록 페이지로 이동합니다
*/
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_document_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
}
}
}
$list = $this->{$this->modelname}->get('', 'doc_id, doc_key');
$cachedata = '';
if ($list && is_array($list)) {
foreach ($list as $key => $val) {
$cachedata[$val['doc_key']] = element('doc_id', $val);
}
}
$this->cache->save('document-key-id-info', $cachedata, 86400*365);
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}

View File

@@ -0,0 +1,349 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Faq class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>페이지설정>FAQ관리 controller 입니다.
*/
class Faq extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'page/faq';
/**
* 모델을 로딩합니다
*/
protected $models = array('Faq', 'Faq_group');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Faq_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array', 'dhtml_editor');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_faq_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$view['view']['sort'] = array(
'faq_id' => $param->sort('faq_id', 'asc'),
'faq_title' => $param->sort('faq_title', 'asc'),
'faq_order' => $param->sort('faq_order', 'asc'),
'faq_datetime' => $param->sort('faq_datetime', 'asc'),
);
$findex = $this->input->get('findex', null, 'faq_order');
$forder = $this->input->get('forder', null, 'asc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$fgr_id = $this->input->get('fgr_id', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
$where = array();
if ($fgr_id) {
$where = array('fgr_id' => $fgr_id);
}
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('faq_id', 'fgr_id', 'faq_title', 'faq_content', 'faq_mobile_content', 'faq_datetime', 'faq.mem_id'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('faq_id', 'fgr_id', 'faq.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('faq_id', 'faq_title', 'faq_order', 'faq_datetime'); // 정렬이 가능한 필드
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
$result['list'][$key]['faqgroup'] = $this->Faq_group_model->get_one(element('fgr_id', $val));
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('faq_title' => '제목', 'faq_content' => '내용', 'faq_mobile_content' => '모바일내용', 'faq_datetime' => '날짜');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url('page/faqgroup');
$view['view']['write_url'] = admin_url($this->pagedir . '/write?fgr_id=' . $fgr_id);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 게시판 글쓰기 또는 수정 페이지를 가져오는 메소드입니다
*/
public function write($pid = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_faq_write';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 프라이머리키에 숫자형이 입력되지 않으면 에러처리합니다
*/
if ($pid) {
$pid = (int) $pid;
if (empty($pid) OR $pid < 1) {
show_404();
}
}
$fgr_id = (int) $this->input->get('fgr_id');
if (empty($fgr_id) OR $fgr_id < 1) {
show_404();
}
$primary_key = $this->{$this->modelname}->primary_key;
/**
* 수정 페이지일 경우 기존 데이터를 가져옵니다
*/
if ($pid) {
$getdata = $this->{$this->modelname}->get_one($pid);
}
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'fgr_id',
'label' => 'FAQ그룹',
'rules' => 'trim|required|numeric',
),
array(
'field' => 'faq_order',
'label' => '정렬순서',
'rules' => 'trim|required|numeric',
),
array(
'field' => 'faq_title',
'label' => '질문',
'rules' => 'trim|required',
),
array(
'field' => 'faq_content',
'label' => '답변',
'rules' => 'trim|required',
),
array(
'field' => 'faq_mobile_content',
'label' => '모바일답변',
'rules' => 'trim',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
if ($pid) {
$view['view']['data'] = $getdata;
}
$view['view']['data']['faqgroup'] = $this->Faq_group_model->get_one($fgr_id);
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $primary_key;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'write');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$content_type = $this->cbconfig->item('use_faq_dhtml') ? 1 : 0;
$faq_order = $this->input->post('faq_order') ? $this->input->post('faq_order') : 0;
$updatedata = array(
'fgr_id' => $this->input->post('fgr_id', null, 0),
'faq_title' => $this->input->post('faq_title', null, ''),
'faq_content' => $this->input->post('faq_content', null, ''),
'faq_mobile_content' => $this->input->post('faq_mobile_content', null, ''),
'faq_content_html_type' => $content_type,
'faq_order' => $faq_order,
);
/**
* 게시물을 수정하는 경우입니다
*/
if ($this->input->post($primary_key)) {
$this->{$this->modelname}->update($this->input->post($primary_key), $updatedata);
$this->session->set_flashdata(
'message',
'정상적으로 수정되었습니다'
);
} else {
/**
* 게시물을 새로 입력하는 경우입니다
*/
$updatedata['faq_datetime'] = cdate('Y-m-d H:i:s');
$updatedata['faq_ip'] = $this->input->ip_address();
$updatedata['mem_id'] = $this->member->item('mem_id');
$this->{$this->modelname}->insert($updatedata);
$this->session->set_flashdata(
'message',
'정상적으로 입력되었습니다'
);
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 게시물의 신규입력 또는 수정작업이 끝난 후 목록 페이지로 이동합니다
*/
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_faq_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}

View File

@@ -0,0 +1,393 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Faqgroup class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>페이지설정>FAQ관리 controller 입니다.
*/
class Faqgroup extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'page/faqgroup';
/**
* 모델을 로딩합니다
*/
protected $models = array('Faq', 'Faq_group');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Faq_group_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_faqgroup_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$view['view']['sort'] = array(
'fgr_id' => $param->sort('fgr_id', 'asc'),
'fgr_title' => $param->sort('fgr_title', 'asc'),
'fgr_key' => $param->sort('fgr_key', 'asc'),
'fgr_layout' => $param->sort('fgr_layout', 'asc'),
'fgr_mobile_layout' => $param->sort('fgr_mobile_layout', 'asc'),
'fgr_skin' => $param->sort('fgr_skin', 'asc'),
'fgr_mobile_skin' => $param->sort('fgr_mobile_skin', 'asc'),
'fgr_datetime' => $param->sort('fgr_datetime', 'asc'),
);
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('fgr_id', 'fgr_key', 'fgr_layout', 'sfield', 'fgr_skin', 'fgr_mobile_skin', 'faq_group.mem_id', 'fgr_title'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('fgr_id', 'faq_group.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('fgr_id', 'fgr_key', 'fgr_layout', 'fgr_mobile_layout', 'fgr_skin', 'fgr_mobile_skin', 'fgr_datetime'); // 정렬이 가능한 필드
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, '', '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
$countwhere = array(
'fgr_id' => element('fgr_id', $val),
);
$result['list'][$key]['faqcount'] = $this->Faq_model->count_by($countwhere);
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('fgr_title' => '제목', 'fgr_datetime' => '날짜');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['write_url'] = admin_url($this->pagedir . '/write');
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 게시판 글쓰기 또는 수정 페이지를 가져오는 메소드입니다
*/
public function write($pid = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_faqgroup_write';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 프라이머리키에 숫자형이 입력되지 않으면 에러처리합니다
*/
if ($pid) {
$pid = (int) $pid;
if (empty($pid) OR $pid < 1) {
show_404();
}
}
$primary_key = $this->{$this->modelname}->primary_key;
/**
* 수정 페이지일 경우 기존 데이터를 가져옵니다
*/
$getdata = array();
if ($pid) {
$getdata = $this->{$this->modelname}->get_one($pid);
}
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'fgr_title',
'label' => '제목',
'rules' => 'trim|required',
),
array(
'field' => 'fgr_layout',
'label' => '레이아웃',
'rules' => 'trim',
),
array(
'field' => 'fgr_sidebar',
'label' => '사이드바 사용',
'rules' => 'trim',
),
array(
'field' => 'fgr_skin',
'label' => '스킨',
'rules' => 'trim',
),
array(
'field' => 'fgr_mobile_layout',
'label' => '모바일레이아웃',
'rules' => 'trim',
),
array(
'field' => 'fgr_mobile_sidebar',
'label' => '모바일사이드바사용',
'rules' => 'trim',
),
array(
'field' => 'fgr_mobile_skin',
'label' => '모바일스킨',
'rules' => 'trim',
),
);
if ($this->input->post($primary_key)) {
$config[] = array(
'field' => 'fgr_key',
'label' => 'FAQ 주소',
'rules' => 'trim|required|alpha_dash|min_length[3]|max_length[50]|is_unique[faq_group.fgr_key.fgr_id.' . $getdata['fgr_id'] . ']',
);
} else {
$config[] = array(
'field' => 'fgr_key',
'label' => 'FAQ 주소',
'rules' => 'trim|required|alpha_dash|min_length[3]|max_length[50]|is_unique[faq_group.fgr_key]',
);
}
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
$view['view']['data'] = $getdata;
$view['view']['data']['fgr_layout_option'] = get_skin_name(
'_layout',
set_value('fgr_layout', element('fgr_layout', $getdata)),
'기본설정따름'
);
$view['view']['data']['fgr_mobile_layout_option'] = get_skin_name(
'_layout',
set_value('fgr_mobile_layout', element('fgr_mobile_layout', $getdata)),
'기본설정따름'
);
$view['view']['data']['fgr_skin_option'] = get_skin_name(
'faq',
set_value('fgr_skin', element('fgr_skin', $getdata)),
'기본설정따름'
);
$view['view']['data']['fgr_mobile_skin_option'] = get_skin_name(
'faq',
set_value('fgr_mobile_skin', element('fgr_mobile_skin', $getdata)),
'기본설정따름'
);
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $primary_key;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'write');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$fgr_sidebar = $this->input->post('fgr_sidebar') ? $this->input->post('fgr_sidebar') : 0;
$fgr_mobile_sidebar = $this->input->post('fgr_mobile_sidebar') ? $this->input->post('fgr_mobile_sidebar') : 0;
$updatedata = array(
'fgr_title' => $this->input->post('fgr_title', null, ''),
'fgr_key' => $this->input->post('fgr_key', null, ''),
'fgr_layout' => $this->input->post('fgr_layout', null, ''),
'fgr_mobile_layout' => $this->input->post('fgr_mobile_layout', null, ''),
'fgr_sidebar' => $fgr_sidebar,
'fgr_mobile_sidebar' => $fgr_mobile_sidebar,
'fgr_skin' => $this->input->post('fgr_skin', null, ''),
'fgr_mobile_skin' => $this->input->post('fgr_mobile_skin', null, ''),
);
/**
* 게시물을 수정하는 경우입니다
*/
if ($this->input->post($primary_key)) {
$this->{$this->modelname}->update($this->input->post($primary_key), $updatedata);
$this->session->set_flashdata(
'message',
'정상적으로 수정되었습니다'
);
} else {
/**
* 게시물을 새로 입력하는 경우입니다
*/
$updatedata['fgr_datetime'] = cdate('Y-m-d H:i:s');
$updatedata['fgr_ip'] = $this->input->ip_address();
$updatedata['mem_id'] = $this->member->item('mem_id');
$this->{$this->modelname}->insert($updatedata);
$this->session->set_flashdata(
'message',
'정상적으로 입력되었습니다'
);
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 게시물의 신규입력 또는 수정작업이 끝난 후 목록 페이지로 이동합니다
*/
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_faqgroup_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
$deletewhere = array(
'fgr_id' => $val,
);
$this->Faq_model->delete_where($deletewhere);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}

View File

@@ -0,0 +1,316 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Pagemenu class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>페이지설정>메뉴관리 controller 입니다.
*/
class Pagemenu extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'page/pagemenu';
/**
* 모델을 로딩합니다
*/
protected $models = array('Menu');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Menu_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_pagemenu_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'men_name',
'label' => '메뉴명',
'rules' => 'trim|required',
),
array(
'field' => 'men_parent',
'label' => '메뉴위치',
'rules' => 'trim|numeric|is_natural',
),
array(
'field' => 'men_target',
'label' => '새창여부',
'rules' => 'trim',
),
array(
'field' => 'men_custom',
'label' => '커스텀',
'rules' => 'trim',
),
array(
'field' => 'men_order',
'label' => '순서',
'rules' => 'trim|numeric|is_natural',
),
array(
'field' => 'men_desktop',
'label' => 'PC사용',
'rules' => 'trim',
),
array(
'field' => 'men_mobile',
'label' => '모바일사용',
'rules' => 'trim',
),
array(
'field' => 'men_link',
'label' => '링크주소',
'rules' => 'trim|required|prep_url|valid_url',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$men_parent = $this->input->post('men_parent') ? $this->input->post('men_parent') : 0;
$men_desktop = $this->input->post('men_desktop') ? $this->input->post('men_desktop') : 0;
$men_mobile = $this->input->post('men_mobile') ? $this->input->post('men_mobile') : 0;
$men_order = $this->input->post('men_order') ? $this->input->post('men_order') : 0;
$updatedata = array(
'men_parent' => $men_parent,
'men_name' => $this->input->post('men_name', null, ''),
'men_link' => $this->input->post('men_link', null, ''),
'men_target' => $this->input->post('men_target', null, ''),
'men_desktop' => $men_desktop,
'men_mobile' => $men_mobile,
'men_custom' => $this->input->post('men_custom', null, ''),
'men_order' => $men_order,
);
$this->{$this->modelname}->insert($updatedata);
$view['view']['alert_message'] = '메뉴가 추가되었습니다';
$this->_delete_cache();
redirect(admin_url('page/pagemenu'), 'refresh');
}
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_order_field = array('men_order'); // 정렬이 가능한 필드
$where = array('men_parent' => 0);
$result = $this->{$this->modelname}
->get_admin_list($per_page = 1000, '', $where, '', $findex = 'men_order', $forder = 'ASC', '', '');
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$subwhere = array('men_parent' => element('men_id', $val));
$subresult = $this->{$this->modelname}
->get_admin_list($per_page = 1000, '', $subwhere, '', $findex = 'men_order', $forder = 'ASC', '', '');
$result['list'][$key]['subresult'] = $subresult;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$view['view']['list_update_url'] = admin_url($this->pagedir . '/listupdate/?' . $param->output());
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 목록 페이지에서 선택수정을 하는 경우 실행되는 메소드입니다
*/
public function listupdate()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_pagemenu_listupdate';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 업데이트를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
$men_name = $this->input->post('men_name');
$men_target = $this->input->post('men_target');
$men_custom = $this->input->post('men_custom');
$men_order = $this->input->post('men_order');
$men_desktop = $this->input->post('men_desktop');
$men_mobile = $this->input->post('men_mobile');
$men_link = $this->input->post('men_link');
foreach ($this->input->post('chk') as $val) {
if ($val) {
$men_order_update = element($val, $men_order) ? element($val, $men_order) : 0;
$men_desktop_update = element($val, $men_desktop) ? element($val, $men_desktop) : 0;
$men_mobile_update = element($val, $men_mobile) ? element($val, $men_mobile) : 0;
$updatedata = array(
'men_name' => element($val, $men_name),
'men_target' => element($val, $men_target),
'men_custom' => element($val, $men_custom),
'men_order' => $men_order_update,
'men_desktop' => $men_desktop_update,
'men_mobile' => $men_mobile_update,
'men_link' => element($val, $men_link),
);
$this->{$this->modelname}->update($val, $updatedata);
}
}
}
$this->_delete_cache();
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 업데이트가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 수정되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_pagemenu_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
}
}
}
$this->_delete_cache();
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 메뉴관련 캐시를 삭제합니다
*/
public function _delete_cache()
{
$this->cache->delete('pagemenu-mobile');
$this->cache->delete('pagemenu-desktop');
}
}

View File

@@ -0,0 +1,420 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Popup class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>페이지설정>팝업관리 controller 입니다.
*/
class Popup extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'page/popup';
/**
* 모델을 로딩합니다
*/
protected $models = array('Popup');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Popup_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array', 'dhtml_editor');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_popup_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$view['view']['sort'] = array(
'pop_title' => $param->sort('pop_title', 'asc'),
'pop_device' => $param->sort('pop_device', 'asc'),
'pop_start_date' => $param->sort('pop_start_date', 'asc'),
'pop_end_date' => $param->sort('pop_end_date', 'asc'),
'pop_activated' => $param->sort('pop_activated', 'asc'),
);
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('pop_id', 'pop_title', 'pop_content'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('pop_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('pop_title', 'pop_device', 'pop_start_date', 'pop_end_date', 'pop_activated'); // 정렬이 가능한 필드
$where = array();
if ($this->input->get('pop_activated') === 'Y') {
$where['pop_activated'] = '1';
}
if ($this->input->get('pop_activated') === 'N') {
$where['pop_activated'] = '0';
}
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
if (empty($val['pop_start_date']) OR $val['pop_start_date'] === '0000-00-00') {
$result['list'][$key]['pop_start_date'] = '미지정';
}
if (empty($val['pop_end_date']) OR $val['pop_end_date'] === '0000-00-00') {
$result['list'][$key]['pop_end_date'] = '미지정';
}
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('pop_title' => '제목', 'pop_content' => '내용');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['write_url'] = admin_url($this->pagedir . '/write');
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 게시판 글쓰기 또는 수정 페이지를 가져오는 메소드입니다
*/
public function write($pid = 0)
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_popup_write';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 프라이머리키에 숫자형이 입력되지 않으면 에러처리합니다
*/
if ($pid) {
$pid = (int) $pid;
if (empty($pid) OR $pid < 1) {
show_404();
}
}
$primary_key = $this->{$this->modelname}->primary_key;
/**
* 수정 페이지일 경우 기존 데이터를 가져옵니다
*/
$getdata = array();
if ($pid) {
$getdata = $this->{$this->modelname}->get_one($pid);
}
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'pop_title',
'label' => '팝업명',
'rules' => 'trim|required',
),
array(
'field' => 'pop_start_date',
'label' => '팝업시작일',
'rules' => 'trim|alpha_dash|exact_length[10]',
),
array(
'field' => 'pop_end_date',
'label' => '팝업종료일',
'rules' => 'trim|alpha_dash|exact_length[10]',
),
array(
'field' => 'pop_is_center',
'label' => '팝업정렬',
'rules' => 'trim|required|numeric',
),
array(
'field' => 'pop_left',
'label' => '좌측위치',
'rules' => 'trim|numeric',
),
array(
'field' => 'pop_top',
'label' => '상단위치',
'rules' => 'trim|required|numeric',
),
array(
'field' => 'pop_width',
'label' => '팝업가로길이',
'rules' => 'trim|required|numeric',
),
array(
'field' => 'pop_height',
'label' => '팝업세로길이',
'rules' => 'trim|required|numeric',
),
array(
'field' => 'pop_device',
'label' => '팝업표시기기',
'rules' => 'trim|required',
),
array(
'field' => 'pop_page',
'label' => '팝업이뜨는페이지',
'rules' => 'trim|required|numeric',
),
array(
'field' => 'pop_disable_hours',
'label' => '시간',
'rules' => 'trim|required|numeric',
),
array(
'field' => 'pop_activated',
'label' => '팝업활성화',
'rules' => 'trim|required|numeric',
),
array(
'field' => 'pop_content',
'label' => '팝업내용',
'rules' => 'trim|required',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
if ($pid) {
if (empty($getdata['pop_start_date']) OR $getdata['pop_start_date'] === '0000-00-00') {
$getdata['pop_start_date'] = '';
}
if (empty($getdata['pop_end_date']) OR $getdata['pop_end_date'] === '0000-00-00') {
$getdata['pop_end_date'] = '';
}
$view['view']['data'] = $getdata;
}
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $primary_key;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'write');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$pop_start_date = $this->input->post('pop_start_date') ? $this->input->post('pop_start_date') : null;
$pop_end_date = $this->input->post('pop_end_date') ? $this->input->post('pop_end_date') : null;
$pop_is_center = $this->input->post('pop_is_center') ? $this->input->post('pop_is_center') : 0;
$pop_left = $this->input->post('pop_left') ? $this->input->post('pop_left') : 0;
$pop_top = $this->input->post('pop_top') ? $this->input->post('pop_top') : 0;
$pop_width = $this->input->post('pop_width') ? $this->input->post('pop_width') : 0;
$pop_height = $this->input->post('pop_height') ? $this->input->post('pop_height') : 0;
$content_type = $this->cbconfig->item('use_popup_dhtml') ? 1 : 0;
$pop_page = $this->input->post('pop_page') ? $this->input->post('pop_page') : 0;
$pop_disable_hours = $this->input->post('pop_disable_hours') ? $this->input->post('pop_disable_hours') : 0;
$pop_activated = $this->input->post('pop_activated') ? $this->input->post('pop_activated') : 0;
$updatedata = array(
'pop_title' => $this->input->post('pop_title', null, ''),
'pop_start_date' => $pop_start_date,
'pop_end_date' => $pop_end_date,
'pop_is_center' => $pop_is_center,
'pop_left' => $pop_left,
'pop_top' => $pop_top,
'pop_width' => $pop_width,
'pop_height' => $pop_height,
'pop_device' => $this->input->post('pop_device', null, ''),
'pop_page' => $pop_page,
'pop_disable_hours' => $pop_disable_hours,
'pop_activated' => $pop_activated,
'pop_content' => $this->input->post('pop_content', null, ''),
'pop_content_html_type' => $content_type,
);
/**
* 게시물을 수정하는 경우입니다
*/
if ($this->input->post($primary_key)) {
$this->{$this->modelname}->update($this->input->post($primary_key), $updatedata);
$this->session->set_flashdata(
'message',
'정상적으로 수정되었습니다'
);
} else {
/**
* 게시물을 새로 입력하는 경우입니다
*/
$updatedata['pop_datetime'] = cdate('Y-m-d H:i:s');
$updatedata['pop_ip'] = $this->input->ip_address();
$updatedata['mem_id'] = $this->member->item('mem_id');
$this->{$this->modelname}->insert($updatedata);
$this->session->set_flashdata(
'message',
'정상적으로 입력되었습니다'
);
}
//오늘 생성된 팝업 캐시를 삭제합니다.
$this->cache->delete('popup/popup-info-' . cdate('Y-m-d'));
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 게시물의 신규입력 또는 수정작업이 끝난 후 목록 페이지로 이동합니다
*/
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_page_popup_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
}
}
}
//오늘 생성된 팝업 캐시를 삭제합니다.
$this->cache->delete('popup/popup-info-' . cdate('Y-m-d'));
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
}

View File

@@ -0,0 +1,302 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Boardcounter class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>통계관리>게시판별접속자 controller 입니다.
*/
class Boardcounter extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'stat/boardcounter';
/**
* 모델을 로딩합니다
*/
protected $models = array('Stat_count_board', 'Board');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Stat_count_board_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_stat_boardcounter_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$datetype = $this->input->get('datetype', null, 'd');
if ($datetype !== 'm' && $datetype !== 'y') {
$datetype = 'd';
}
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
if ($datetype === 'y' OR $datetype === 'm') {
$start_year = substr($start_date, 0, 4);
$end_year = substr($end_date, 0, 4);
}
if ($datetype === 'm') {
$start_month = substr($start_date, 5, 2);
$end_month = substr($end_date, 5, 2);
$start_year_month = $start_year * 12 + $start_month;
$end_year_month = $end_year * 12 + $end_month;
}
$orderby = (strtolower($this->input->get('orderby')) === 'desc') ? 'desc' : 'asc';
$brd_id = $this->input->get('brd_id', null, '');
$result = $this->{$this->modelname}->get_board_count($datetype, $start_date, $end_date, $brd_id, $orderby);
$sum_count = 0;
$arr = array();
$_day = array();
$_brd = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
$s = element('day', $value) . '_' . element('brd_id', $value);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s] += element('scb_count', $value);
if ( ! isset($_day[$s])) {
$_day[$s] = element('day', $value);
}
if ( ! isset($_brd[$s])) {
$brdresult = $this->board->item_id('brd_name', element('brd_id', $value));
$_brd[$s] = $brdresult ? $brdresult : '-';
}
if (element('scb_count', $value) > $max) {
$max = element('scb_count', $value);
}
$sum_count += element('scb_count', $value);
}
}
$result = array();
$result2 = array();
$i = 0;
$save_count = -1;
$tot_count = 0;
if (count($arr)) {
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$result[$key]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$result[$key]['day'] = $_day[$key];
$result[$key]['boardname'] = $_brd[$key];
$rate = ($count / $sum_count * 100);
$result[$key]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$result[$key]['s_rate'] = $s_rate;
$bar = (int)($count / $max * 100);
$result[$key]['bar'] = $bar;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
$view['view']['boardlist'] = $boardlist = $this->Board_model->get_board_list();
$result2 = array();
if ($datetype === 'y') {
for ($i = $start_year; $i <= $end_year; $i++) {
if ($boardlist) {
foreach ($boardlist as $bkey => $bval) {
if( ! isset($result[$i . '_' . element('brd_id', $bval)])) $result[$i . '_' . element('brd_id', $bval)] = '';
}
}
if( ! isset($result2[$i])) $result2[$i] = '1';
}
} elseif ($datetype === 'm') {
for ($i = $start_year_month; $i <= $end_year_month; $i++) {
$year = floor($i / 12);
if ($year * 12 == $i) $year--;
$month = sprintf("%02d", ($i - ($year * 12)));
$date = $year . '-' . $month;
if ($boardlist) {
foreach ($boardlist as $bkey => $bval) {
if( ! isset($result[$date . '_' . element('brd_id', $bval)])) $result[$date . '_' . element('brd_id', $bval)] = '';
}
}
if( ! isset($result2[$date])) $result2[$date] = '1';
}
} elseif ($datetype === 'd') {
$date = $start_date;
while ($date <= $end_date) {
if ($boardlist) {
foreach ($boardlist as $bkey => $bval) {
if( ! isset($result[$date . '_' . element('brd_id', $bval)])) $result[$date . '_' . element('brd_id', $bval)] = '';
}
}
if( ! isset($result2[$date])) $result2[$date] = '1';
$date = cdate('Y-m-d', strtotime($date) + 86400);
}
}
if ($orderby === 'desc') {
krsort($result);
} else {
ksort($result);
}
$view['view']['list'] = $result;
$view['view']['list_date'] = $result2;
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=게시판별접속자_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/index_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
/**
* 오래된 링크클릭로그삭제 페이지입니다
*/
public function cleanlog()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_stat_boardcounter_cleanlog';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'scb_date <=' => $this->input->post('criterion'),
);
$this->Stat_count_board_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 '
. $this->input->post('day') . '일 이상된 게시판별접속자로그가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'scb_date <=' => $criterion,
);
$log_count = $this->Stat_count_board_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day')
. '일 이상된 게시판별접속자로그가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 게시판별접속자로그가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'cleanlog');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,171 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Currentvisitor class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>통계관리>현재접속자 controller 입니다.
*/
class Currentvisitor extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'stat/currentvisitor';
/**
* 모델을 로딩합니다
*/
protected $models = array('Currentvisitor');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Currentvisitor_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_stat_currentvisitor_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$view['view']['sort'] = array(
'cur_ip' => $param->sort('cur_ip', 'asc'),
'cur_datetime' => $param->sort('cur_datetime', 'asc'),
'cur_page' => $param->sort('cur_page', 'asc'),
'cur_url' => $param->sort('cur_url', 'asc'),
'cur_referer' => $param->sort('cur_referer', 'asc'),
);
$findex = $this->input->get('findex', null, 'cur_datetime');
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = 100;
$offset = ($page - 1) * $per_page;
$minute = (int) $this->cbconfig->item('currentvisitor_minute');
if ($minute < 1) {
$minute = 10;
}
$curdatetime = cdate('Y-m-d H:i:s', ctimestamp() - $minute * 60);
$cachename = 'delete_old_currentvisitor_cache';
$cachetime = 60;
if ( ! $result = $this->cache->get($cachename)) {
$deletewhere = array(
'cur_datetime < ' => $curdatetime,
);
$this->Currentvisitor_model->delete_where($deletewhere);
$this->cache->save($cachename, cdate('Y-m-d H:i:s'), $cachetime);
}
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('cur_ip', 'cur_mem_name', 'cur_datetime', 'cur_page', 'cur_url', 'cur_referer', 'cur_useragent', 'currentvisitor.mem_id'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('currentvisitor.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('cur_ip', 'cur_datetime', 'cur_page', 'cur_url', 'cur_referer'); // 정렬이 가능한 필드
$where = array(
'cur_datetime >' => $curdatetime,
);
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, $where, '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
if (element('cur_useragent', $val)) {
$userAgent = get_useragent_info(element('cur_useragent', $val));
$result['list'][$key]['browsername'] = $userAgent['browsername'];
$result['list'][$key]['browserversion'] = $userAgent['browserversion'];
$result['list'][$key]['os'] = $userAgent['os'];
$result['list'][$key]['engine'] = $userAgent['engine'];
}
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('cur_ip' => '아이피', 'cur_datetime' => '날짜', 'cur_page' => '페이지이름', 'cur_url' => '현재주소', 'cur_referer' => '이전주소', 'cur_useragent' => '운영체제/브라우저');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

View File

@@ -0,0 +1,184 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Registercounter class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>통계관리>회원가입통계 controller 입니다.
*/
class Registercounter extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'stat/registercounter';
/**
* 모델을 로딩합니다
*/
protected $models = array();
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Member_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_stat_registercounter_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$datetype = $this->input->get('datetype', null, 'd');
if ($datetype !== 'm' && $datetype !== 'y') {
$datetype = 'd';
}
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
if ($datetype === 'y' OR $datetype === 'm') {
$start_year = substr($start_date, 0, 4);
$end_year = substr($end_date, 0, 4);
}
if ($datetype === 'm') {
$start_month = substr($start_date, 5, 2);
$end_month = substr($end_date, 5, 2);
$start_year_month = $start_year * 12 + $start_month;
$end_year_month = $end_year * 12 + $end_month;
}
$orderby = (strtolower($this->input->get('orderby')) === 'desc') ? 'desc' : 'asc';
$result = $this->{$this->modelname}->get_register_count($datetype, $start_date, $end_date, $orderby);
$sum_count = 0;
$arr = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
$s = element('day', $value);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s] += element('cnt', $value);
if ($arr[$s] > $max) {
$max = $arr[$s];
}
$sum_count += element('cnt', $value);
}
}
$result = array();
$i = 0;
$save_count = -1;
$tot_count = 0;
if (count($arr)) {
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$result[$key]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$result[$key]['no'] = $no;
$result[$key]['key'] = $key;
$rate = ($count / $sum_count * 100);
$result[$key]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$result[$key]['s_rate'] = $s_rate;
$bar = (int)($count / $max * 100);
$result[$key]['bar'] = $bar;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
if ($datetype === 'y') {
for ($i = $start_year; $i <= $end_year; $i++) {
if( ! isset($result[$i])) $result[$i] = '';
}
} elseif ($datetype === 'm') {
for ($i = $start_year_month; $i <= $end_year_month; $i++) {
$year = floor($i / 12);
if ($year * 12 == $i) $year--;
$month = sprintf("%02d", ($i - ($year * 12)));
$date = $year . '-' . $month;
if( ! isset($result[$date])) $result[$date] = '';
}
} elseif ($datetype === 'd') {
$date = $start_date;
while ($date <= $end_date) {
if( ! isset($result[$date])) $result[$date] = '';
$date = cdate('Y-m-d', strtotime($date) + 86400);
}
}
if ($orderby === 'desc') {
krsort($result);
} else {
ksort($result);
}
$view['view']['list'] = $result;
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
$view['view']['datetype'] = $datetype;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=회원가입통계_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/index_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
}

View File

@@ -0,0 +1,261 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Registerlog class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>통계관리>회원가입경로 controller 입니다.
*/
class Registerlog extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'stat/registerlog';
/**
* 모델을 로딩합니다
*/
protected $models = array('Member_register');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Member_register_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_stat_registerlog_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('mrg_id', 'member_register.mem_id', 'mrg_ip', 'mrg_datetime', 'mrg_recommend_mem_id', 'mrg_useragent', 'mrg_referer'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('mrg_id', 'member_register.mem_id', 'mrg_recommend_mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('mrg_id'); // 정렬이 가능한 필드
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, '', '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
if (element('mrg_recommend_mem_id', $val)) {
$result['list'][$key]['recommend'] = $recommend
= $this->Member_model->get_by_memid(element('mrg_recommend_mem_id', $val), 'mem_id, mem_userid, mem_nickname, mem_icon');
$result['list'][$key]['recommend_display_name'] = display_username(
element('mem_userid', $recommend),
element('mem_nickname', $recommend),
element('mem_icon', $recommend)
);
}
if (element('mrg_useragent', $val)) {
$userAgent = get_useragent_info(element('mrg_useragent', $val));
$result['list'][$key]['browsername'] = $userAgent['browsername'];
$result['list'][$key]['browserversion'] = $userAgent['browserversion'];
$result['list'][$key]['os'] = $userAgent['os'];
$result['list'][$key]['engine'] = $userAgent['engine'];
}
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('mrg_ip' => '아이피', 'mrg_datetime' => '날짜', 'mrg_useragent' => '운영체제/브라우저', 'mrg_referer' => '접속경로');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 회원가입경로를을 그래프 형식으로 보는 페이지입니다
*/
public function graph($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_stat_registerlog_graph';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
$result = $this->{$this->modelname}->get_graph($start_date, $end_date);
$sum_count = 0;
$arr = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
preg_match(
"/^http[s]*:\/\/([\.\-\_0-9a-zA-Z]*)\//",
element('mrg_referer', $value),
$match
);
$s = $match ? $match[1] : '-';
$s = preg_replace(
"/^(www\.|search\.|dirsearch\.|dir\.search\.|dir\.|kr\.search\.|myhome\.)(.*)/",
"\\2",
$s
);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s]++;
if ($arr[$s] > $max) {
$max = $arr[$s];
}
$sum_count++;
}
}
$view['view']['list'] = array();
$i = 0;
$k = 0;
$save_count = -1;
if (count($arr)) {
arsort($arr);
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$view['view']['list'][$k]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$view['view']['list'][$k]['no'] = $no;
if ($key === '-') {
$key = '직접';
}
$view['view']['list'][$k]['key'] = $key;
$rate = ($count / $sum_count * 100);
$view['view']['list'][$k]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$view['view']['list'][$k]['s_rate'] = $s_rate;
$bar = (int)($count / $max * 100);
$view['view']['list'][$k]['bar'] = $bar;
$k++;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=회원가입경로_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/graph_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'graph');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
}

View File

@@ -0,0 +1,365 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Searchkeyword class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>통계관리>인기검색어현황 controller 입니다.
*/
class Searchkeyword extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'stat/searchkeyword';
/**
* 모델을 로딩합니다
*/
protected $models = array('Search_keyword');
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = 'Search_keyword_model';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
}
/**
* 목록을 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_stat_searchkeyword_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$view['view']['sort'] = array(
'sek_id' => $param->sort('sek_id', 'asc'),
'sek_keyword' => $param->sort('sek_keyword', 'asc'),
'sek_datetime' => $param->sort('sek_datetime', 'asc'),
'sek_ip' => $param->sort('sek_ip', 'asc'),
);
$findex = $this->input->get('findex') ? $this->input->get('findex') : $this->{$this->modelname}->primary_key;
$forder = $this->input->get('forder', null, 'desc');
$sfield = $this->input->get('sfield', null, '');
$skeyword = $this->input->get('skeyword', null, '');
$per_page = admin_listnum();
$offset = ($page - 1) * $per_page;
/**
* 게시판 목록에 필요한 정보를 가져옵니다.
*/
$this->{$this->modelname}->allow_search_field = array('sek_id', 'sek_keyword', 'sek_datetime', 'sek_ip', 'search_keyword.mem_id'); // 검색이 가능한 필드
$this->{$this->modelname}->search_field_equal = array('sek_id', 'search_keyword.mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->{$this->modelname}->allow_order_field = array('sek_id', 'sek_keyword', 'sek_datetime', 'sek_ip'); // 정렬이 가능한 필드
$result = $this->{$this->modelname}
->get_admin_list($per_page, $offset, '', '', $findex, $forder, $sfield, $skeyword);
$list_num = $result['total_rows'] - ($page - 1) * $per_page;
if (element('list', $result)) {
foreach (element('list', $result) as $key => $val) {
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->{$this->modelname}->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '?' . $param->replace('page');
$config['total_rows'] = $result['total_rows'];
$config['per_page'] = $per_page;
$this->pagination->initialize($config);
$view['view']['paging'] = $this->pagination->create_links();
$view['view']['page'] = $page;
/**
* 쓰기 주소, 삭제 주소등 필요한 주소를 구합니다
*/
$search_option = array('sek_keyword' => '검색어', 'sek_datetime' => '날짜', 'sek_ip' => '아이피');
$view['view']['skeyword'] = ($sfield && array_key_exists($sfield, $search_option)) ? $skeyword : '';
$view['view']['search_option'] = search_option($search_option, $sfield);
$view['view']['listall_url'] = admin_url($this->pagedir);
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'index');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
/**
* 인기검색어 현황을 그래프 형식으로 보는 페이지입니다
*/
public function rank($export = '')
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_stat_searchkeyword_rank';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$param =& $this->querystring;
$start_date = $this->input->get('start_date') ? $this->input->get('start_date') : cdate('Y-m-01');
$end_date = $this->input->get('end_date') ? $this->input->get('end_date') : cdate('Y-m-d');
$result = $this->{$this->modelname}->get_rank($start_date, $end_date);
$sum_count = 0;
$arr = array();
$max = 0;
if ($result && is_array($result)) {
foreach ($result as $key => $value) {
$s = element('sek_keyword', $value);
if ( ! isset($arr[$s])) {
$arr[$s] = 0;
}
$arr[$s]++;
if ($arr[$s] > $max) {
$max = $arr[$s];
}
$sum_count++;
}
}
$view['view']['list'] = array();
$i = 0;
$k = 0;
$save_count = -1;
$tot_count = 0;
if (count($arr)) {
arsort($arr);
foreach ($arr as $key => $value) {
$count = (int) $arr[$key];
$view['view']['list'][$k]['count'] = $count;
$i++;
if ($save_count !== $count) {
$no = $i;
$save_count = $count;
}
$view['view']['list'][$k]['no'] = $no;
$view['view']['list'][$k]['key'] = $key;
$rate = ($count / $sum_count * 100);
$view['view']['list'][$k]['rate'] = $rate;
$s_rate = number_format($rate, 1);
$view['view']['list'][$k]['s_rate'] = $s_rate;
$bar = (int)($count / $max * 100);
$view['view']['list'][$k]['bar'] = $bar;
$k++;
}
$view['view']['max_value'] = $max;
$view['view']['sum_count'] = $sum_count;
}
$view['view']['start_date'] = $start_date;
$view['view']['end_date'] = $end_date;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
if ($export === 'excel') {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename=인기검색어_' . cdate('Y_m_d') . '.xls');
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/rank_excel', $view, true);
} else {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'rank');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}
/**
* 목록 페이지에서 선택삭제를 하는 경우 실행되는 메소드입니다
*/
public function listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_stat_searchkeyword_listdelete';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
/**
* 체크한 게시물의 삭제를 실행합니다
*/
if ($this->input->post('chk') && is_array($this->input->post('chk'))) {
foreach ($this->input->post('chk') as $val) {
if ($val) {
$this->{$this->modelname}->delete($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '?' . $param->output());
redirect($redirecturl);
}
/**
* 오래된 링크클릭로그삭제 페이지입니다
*/
public function cleanlog()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_stat_searchkeyword_cleanlog';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'day',
'label' => '기간',
'rules' => 'trim|required|numeric|is_natural',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
if ($this->input->post('criterion') && $this->input->post('day')) {
$deletewhere = array(
'sek_datetime <=' => $this->input->post('criterion'),
);
$this->Search_keyword_model->delete_where($deletewhere);
$view['view']['alert_message'] = '총 ' . number_format($this->input->post('log_count')) . ' 건의 ' . $this->input->post('day') . '일 이상된 검색어로그가 모두 삭제되었습니다';
} else {
$criterion = cdate('Y-m-d H:i:s', ctimestamp() - $this->input->post('day') * 24 * 60 * 60);
$countwhere = array(
'sek_datetime <=' => $criterion,
);
$log_count = $this->Search_keyword_model->count_by($countwhere);
$view['view']['criterion'] = $criterion;
$view['view']['day'] = $this->input->post('day');
$view['view']['log_count'] = $log_count;
if ($log_count > 0) {
$view['view']['msg'] = '총 ' . number_format($log_count) . ' 건의 ' . $this->input->post('day')
. '일 이상된 검색어로그가 발견되었습니다. 이를 모두 삭제하시겠습니까?';
} else {
$view['view']['alert_message'] = $this->input->post('day') . '일 이상된 검색어로그가 발견되지 않았습니다';
}
}
}
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'cleanlog');
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
$this->data = $view;
$this->layout = element('layout_skin_file', element('layout', $view));
$this->view = element('view_skin_file', element('layout', $view));
}
}

File diff suppressed because it is too large Load Diff