Files

1078 lines
39 KiB
PHP

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Dormant class
*
* Copyright (c) CIBoard <www.ciboard.co.kr>
*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 관리자>회원설정>휴면계정관리 controller 입니다.
*/
class Dormant extends CB_Controller
{
/**
* 관리자 페이지 상의 현재 디렉토리입니다
* 페이지 이동시 필요한 정보입니다
*/
public $pagedir = 'member/dormant';
public $dormant_days_text;
/**
* 모델을 로딩합니다
*/
protected $models = array();
/**
* 이 컨트롤러의 메인 모델 이름입니다
*/
protected $modelname = '';
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('pagination', 'querystring'));
$this->dormant_days_text = array(
'30' => '30일',
'90' => '90일',
'180' => '180일',
'365' => '1년',
'730' => '2년',
'1095' => '3년',
'1460' => '4년',
'1825' => '5년',
);
}
/**
* 기본정보를 가져오는 메소드입니다
*/
public function index()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_dormant_index';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 모델을 로딩합니다
*/
$this->load->model('Config_model');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'is_submit',
'label' => '전송',
'rules' => 'trim|required',
),
array(
'field' => 'member_dormant_days',
'label' => '휴면계정 전환 조건',
'rules' => 'trim|required|numeric|is_natural',
),
array(
'field' => 'member_dormant_method',
'label' => '휴면계정 정리 방법',
'rules' => 'trim',
),
array(
'field' => 'member_dormant_auto_clean',
'label' => '자동정리여부',
'rules' => 'trim',
),
array(
'field' => 'member_dormant_auto_email',
'label' => '자동메일발송여부',
'rules' => 'trim',
),
array(
'field' => 'member_dormant_auto_email_days',
'label' => '자동메일발송 기간',
'rules' => 'trim|required|numeric|is_natural',
),
array(
'field' => 'member_dormant_reset_point',
'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);
$array = array(
'member_dormant_days', 'member_dormant_method', 'member_dormant_auto_clean',
'member_dormant_auto_email', 'member_dormant_auto_email_days', 'member_dormant_reset_point'
);
foreach ($array as $value) {
$savedata[$value] = $this->input->post($value, null, '');
}
$this->Config_model->save($savedata);
$view['view']['alert_message'] = '기본정보 설정이 저장되었습니다';
}
$getdata = $this->Config_model->get_all_meta();
if ( ! isset($getdata['member_dormant_days']) OR ! $getdata['member_dormant_days']) $getdata['member_dormant_days'] = '365';
if ( ! isset($getdata['member_dormant_auto_email_days']) OR ! $getdata['member_dormant_auto_email_days']) $getdata['member_dormant_auto_email_days'] = '30';
$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 cleantodormant()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_dormant_cleantodormant';
$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);
$where = array();
$dormant_days = $this->cbconfig->item('member_dormant_days') ? $this->cbconfig->item('member_dormant_days') : 365;
$gap = $dormant_days * 24 * 60 * 60;
$lastlogin = ctimestamp() - $gap;
$lastlogin_datetime = cdate('Y-m-d H:i:s', $lastlogin);
$where['mem_lastlogin_datetime <='] = $lastlogin_datetime;
$where['mem_register_datetime <='] = $lastlogin_datetime;
$view['view']['count'] = $this->Member_model->count_by($where);
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'cleantodormant');
$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);
$where = array();
$dormant_days = $this->cbconfig->item('member_dormant_days') ? $this->cbconfig->item('member_dormant_days') : 365;
$gap = $dormant_days * 24 * 60 * 60;
$lastlogin = ctimestamp() - $gap;
$lastlogin_datetime = cdate('Y-m-d H:i:s', $lastlogin);
$where['mem_lastlogin_datetime <='] = $lastlogin_datetime;
$where['mem_register_datetime <='] = $lastlogin_datetime;
$result = $this->Member_model->get('', 'mem_id', $where);
if ($result) {
foreach ($result as $value) {
$mem_id = element('mem_id', $value);
if ($this->cbconfig->item('member_dormant_method') === 'delete') {
$this->member->delete_member($mem_id);
} else {
$this->member->archive_to_dormant($mem_id);
}
}
exit(json_encode(array('success' => 'ok', 'message' => '정리가 완료되었습니다')));
} else {
exit(json_encode(array('success' => 'fail', 'message' => '정리할 대상이 없습니다')));
}
}
}
/**
* 안내메일 일괄발송 하는 페이지입니다
*/
public function emailtowaiting()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_dormant_emailtowaiting';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 모델을 로딩합니다
*/
$this->load->model('Member_dormant_notify_model');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'execute',
'label' => '실행',
'rules' => 'trim',
),
);
$this->form_validation->set_rules($config);
$view['view']['period_text'] = $this->dormant_days_text[$this->cbconfig->item('member_dormant_days')];
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname);
$where = array();
$dormant_days = $this->cbconfig->item('member_dormant_days') ? $this->cbconfig->item('member_dormant_days') : 365;
$email_days = $this->cbconfig->item('member_dormant_auto_email_days') ? $this->cbconfig->item('member_dormant_auto_email_days') : 365;
$gap = $dormant_days * 24 * 60 * 60;
$email_gap = $email_days * 24 * 60 * 60;
$lastlogin = ctimestamp() - $gap + $email_gap;
$lastlogin_datetime = cdate('Y-m-d H:i:s', $lastlogin);
$view['view']['count_unsent_email_member'] = $this->Member_dormant_notify_model->count_unsent_email_member($lastlogin_datetime);
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'emailtowaiting');
$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);
/**
* Email 라이브러리를 가져옵니다
*/
$this->load->library('email');
$where = array();
$dormant_days = $this->cbconfig->item('member_dormant_days') ? $this->cbconfig->item('member_dormant_days') : 365;
$email_days = $this->cbconfig->item('member_dormant_auto_email_days') ? $this->cbconfig->item('member_dormant_auto_email_days') : 365;
$gap = $dormant_days * 24 * 60 * 60;
$email_gap = $email_days * 24 * 60 * 60;
$lastlogin = ctimestamp() - $gap + $email_gap;
$lastlogin_datetime = cdate('Y-m-d H:i:s', $lastlogin);
$result = $this->Member_dormant_notify_model->get_unsent_email_member($lastlogin_datetime);
if ($result) {
foreach ($result as $value) {
$mem_id = element('mem_id', $value);
// 메일 발송하기
$searchconfig = array(
'{홈페이지명}',
'{회사명}',
'{홈페이지주소}',
'{회원아이디}',
'{회원닉네임}',
'{회원실명}',
'{회원이메일}',
'{메일수신여부}',
'{쪽지수신여부}',
'{문자수신여부}',
'{최종로그인시간}',
'{정리예정날짜}',
'{정리기준}',
'{정리방법}',
);
$receive_email = element('mem_receive_email', $value) ? '동의' : '거부';
$receive_note = element('mem_use_note', $value) ? '동의' : '거부';
$receive_sms = element('mem_receive_sms', $value) ? '동의' : '거부';
$dormant_timestamp = strtotime(element('mem_lastlogin_datetime', $value)) + ($this->cbconfig->item('member_dormant_days') * 24 * 60 * 60);
$dormant_date = cdate('Y년 m월 d일', $dormant_timestamp);
$dormant_datetime = cdate('Y-m-d H:i:s', $dormant_timestamp);
$replaceconfig = array(
$this->cbconfig->item('site_title'),
$this->cbconfig->item('company_name'),
site_url(),
element('mem_userid', $value),
element('mem_nickname', $value),
element('mem_username', $value),
element('mem_email', $value),
$receive_email,
$receive_note,
$receive_sms,
cdate('Y년 m월 d일 H시 i분', strtotime(element('mem_lastlogin_datetime', $value))),
$dormant_date,
$this->dormant_days_text[$this->cbconfig->item('member_dormant_days')],
($this->cbconfig->item('member_dormant_method') === 'delete' ? '삭제' : '별도의 저장소에 보관'),
);
$replaceconfig_escape = array(
html_escape($this->cbconfig->item('site_title')),
html_escape($this->cbconfig->item('company_name')),
site_url(),
html_escape(element('mem_userid', $value)),
html_escape(element('mem_nickname', $value)),
html_escape(element('mem_username', $value)),
html_escape(element('mem_email', $value)),
$receive_email,
$receive_note,
$receive_sms,
cdate('Y년 m월 d일 H시 i분', strtotime(element('mem_lastlogin_datetime', $value))),
$dormant_date,
$this->dormant_days_text[$this->cbconfig->item('member_dormant_days')],
($this->cbconfig->item('member_dormant_method') === 'delete' ? '삭제' : '별도의 저장소에 보관'),
);
$title = str_replace(
$searchconfig,
$replaceconfig,
$this->cbconfig->item('send_email_dormant_notify_user_title')
);
$content = str_replace(
$searchconfig,
$replaceconfig_escape,
$this->cbconfig->item('send_email_dormant_notify_user_content')
);
$this->email->clear(true);
$this->email->from($this->cbconfig->item('webmaster_email'), $this->cbconfig->item('webmaster_name'));
$this->email->to(element('mem_email', $value));
$this->email->subject($title);
$this->email->message($content);
$this->email->send();
$insertdata = array(
'mem_id' => element('mem_id', $value),
'mem_userid' => element('mem_userid', $value),
'mem_email' => element('mem_email', $value),
'mem_username' => element('mem_username', $value),
'mem_nickname' => element('mem_nickname', $value),
'mem_register_datetime' => element('mem_register_datetime', $value),
'mem_lastlogin_datetime' => element('mem_lastlogin_datetime', $value),
'mdn_dormant_datetime' => $dormant_datetime,
'mdn_dormant_notify_datetime' => cdate('Y-m-d H:i:s'),
);
$this->Member_dormant_notify_model->insert($insertdata);
}
exit(json_encode(array('success' => 'ok', 'message' => '메일발송이 완료되었습니다')));
} else {
exit(json_encode(array('success' => 'fail', 'message' => '메일발송할 대상이 없습니다')));
}
}
}
/**
* 휴면대상에게 보낼 안내메일내용을 관리합니다
*/
public function emailcontent()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_config_dormant_emailcontent';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 모델을 로딩합니다
*/
$this->load->model('Config_model');
/**
* Editor 헬퍼를 가져옵니다
*/
$this->load->helper('dhtml_editor');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'is_submit',
'label' => '전송',
'rules' => 'trim|numeric',
),
array(
'field' => 'send_email_dormant_notify_user_title',
'label' => '발송메일 제목',
'rules' => 'trim|required',
),
array(
'field' => 'send_email_dormant_notify_user_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);
} else {
/**
* 유효성 검사를 통과한 경우입니다.
* 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
*/
// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);
$array = array(
'send_email_dormant_notify_user_title', 'send_email_dormant_notify_user_content'
);
foreach ($array as $value) {
$savedata[$value] = $this->input->post($value, null, '');
}
$this->Config_model->save($savedata);
$view['view']['alert_message'] = '이메일변경시인증메일 발송양식 설정이 저장되었습니다';
}
$getdata = $this->Config_model->get_all_meta();
$view['view']['data'] = $getdata;
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'emailcontent');
$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 emailsendlist()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_dormant_emailsendlist';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
/**
* 모델을 로딩합니다
*/
$this->load->model('Member_dormant_notify_model');
// 이벤트가 존재하면 실행합니다
$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(
'mem_id' => $param->sort('mem_id', 'asc'),
'mem_userid' => $param->sort('mem_userid', 'asc'),
'mem_username' => $param->sort('mem_username', 'asc'),
'mem_nickname' => $param->sort('mem_nickname', 'asc'),
'mem_email' => $param->sort('mem_email', 'asc'),
'mem_register_datetime' => $param->sort('mem_register_datetime', 'asc'),
'mem_lastlogin_datetime' => $param->sort('mem_lastlogin_datetime', 'asc'),
'mdn_dormant_datetime' => $param->sort('mdn_dormant_datetime', 'asc'),
'mdn_dormant_notify_datetime' => $param->sort('mdn_dormant_notify_datetime', 'asc'),
);
$findex = $this->input->get('findex', null, 'mdn_id');
$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->Member_model->allow_search_field = array('mdn_id', 'mem_id', 'mem_userid', 'mem_email', 'mem_username', 'mem_nickname', 'mem_register_datetime', 'mem_lastlogin_datetime', 'mdn_dormant_datetime', 'mdn_dormant_notify_datetime'); // 검색이 가능한 필드
$this->Member_model->search_field_equal = array('mdn_id', 'mem_id'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->Member_model->allow_order_field = array('mdn_id', 'mem_id', 'mem_userid', 'mem_username', 'mem_nickname', 'mem_email', 'mem_register_datetime', 'mem_lastlogin_datetime', 'mdn_dormant_datetime', 'mdn_dormant_notify_datetime'); // 정렬이 가능한 필드
$where = array();
$result = $this->Member_dormant_notify_model
->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]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->Member_model->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '/emailsendlist?' . $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('mem_userid' => '회원아이디', 'mem_email' => '이메일', 'mem_username' => '회원명', 'mem_nickname' => '닉네임', 'mem_register_datetime' => '회원가입날짜', 'mem_lastlogin_datetime' => '최종로그인날짜', 'mdn_dormant_datetime' => '전환예정일', 'mdn_dormant_notify_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 . '/emailsendlist');
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'emailsendlist');
$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 waitinglist()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_dormant_waitinglist';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
/**
* 모델을 로딩합니다
*/
$this->load->model(array('Member_dormant_notify_model', 'Member_meta_model'));
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$view['view']['period_text'] = $this->dormant_days_text[$this->cbconfig->item('member_dormant_days')];
if ($this->cbconfig->item('member_dormant_auto_clean')) {
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'waitinglist');
$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));
return;
}
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$view['view']['sort'] = array(
'mem_id' => $param->sort('mem_id', 'asc'),
'mem_userid' => $param->sort('mem_userid', 'asc'),
'mem_username' => $param->sort('mem_username', 'asc'),
'mem_nickname' => $param->sort('mem_nickname', 'asc'),
'mem_email' => $param->sort('mem_email', 'asc'),
'mem_point' => $param->sort('mem_point', 'asc'),
'mem_register_datetime' => $param->sort('mem_register_datetime', 'asc'),
'mem_lastlogin_datetime' => $param->sort('mem_lastlogin_datetime', 'asc'),
'mem_level' => $param->sort('mem_level', 'asc'),
);
$findex = $this->input->get('findex', null, 'member.mem_id');
$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->Member_model->allow_search_field = array('mem_id', 'mem_userid', 'mem_email', 'mem_username', 'mem_nickname', 'mem_level', 'mem_homepage', 'mem_register_datetime', 'mem_register_ip', 'mem_lastlogin_datetime', 'mem_lastlogin_ip', 'mem_is_admin'); // 검색이 가능한 필드
$this->Member_model->search_field_equal = array('mem_id', 'mem_level', 'mem_is_admin'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->Member_model->allow_order_field = array('member.mem_id', 'mem_userid', 'mem_username', 'mem_nickname', 'mem_email', 'mem_point', 'mem_register_datetime', 'mem_lastlogin_datetime', 'mem_level'); // 정렬이 가능한 필드
$where = array();
$dormant_days = $this->cbconfig->item('member_dormant_days') ? $this->cbconfig->item('member_dormant_days') : 365;
$gap = $dormant_days * 24 * 60 * 60;
$lastlogin = ctimestamp() - $gap;
$lastlogin_datetime = cdate('Y-m-d H:i:s', $lastlogin);
$where['mem_lastlogin_datetime <='] = $lastlogin_datetime;
$where['mem_register_datetime <='] = $lastlogin_datetime;
$result = $this->Member_model
->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) {
$where = array(
'mem_id' => element('mem_id', $val),
);
$result['list'][$key]['display_name'] = display_username(
element('mem_userid', $val),
element('mem_nickname', $val),
element('mem_icon', $val)
);
$result['list'][$key]['meta'] = $this->Member_meta_model->get_all_meta(element('mem_id', $val));
$result['list'][$key]['mdn_dormant_notify_datetime'] = '';
$notify_where = array(
'mem_id' => element('mem_id', $val),
);
$notify = $this->Member_dormant_notify_model->get('', '', $notify_where);
if ($notify && is_array($notify)) {
foreach ($notify as $nval) {
$result['list'][$key]['mdn_dormant_notify_datetime'] .= display_datetime(element('mdn_dormant_notify_datetime', $nval), 'full') . '<br />';
}
}
$lastloginday = new DateTime(substr(element('mem_lastlogin_datetime', $val), 0, 10));
$today = new DateTime(cdate('Y-m-d'));
$date_diff = date_diff($lastloginday, $today);
$result['list'][$key]['daygap'] = $date_diff->days;
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->Member_model->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '/waitinglist?' . $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('mem_userid' => '회원아이디', 'mem_email' => '이메일', 'mem_username' => '회원명', 'mem_nickname' => '닉네임', 'mem_level' => '회원레벨', 'mem_homepage' => '홈페이지', 'mem_register_datetime' => '회원가입날짜', 'mem_register_ip' => '회원가입IP', 'mem_lastlogin_datetime' => '최종로그인날짜', 'mem_lastlogin_ip' => '최종로그인IP', 'mem_adminmemo' => '관리자메모');
$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 . '/waitinglist');
$view['view']['list_update_url'] = admin_url($this->pagedir . '/waitinglist_listupdate/?' . $param->output());
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/waitinglist_listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'waitinglist');
$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 waitinglist_listupdate()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_dormant_waitinglist_listupdate';
$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->member->archive_to_dormant($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 별도의 보관소로 이동되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '/waitinglist?' . $param->output());
redirect($redirecturl);
}
/**
* 휴면처리해야할 회원을 영구삭제한 경우 실행되는 메소드입니다
*/
public function waitinglist_listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_dormant_waitinglist_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->member->delete_member($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'선택한 회원이 영구 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '/waitinglist?' . $param->output());
redirect($redirecturl);
}
/**
* 휴면처리 해야할 회원 목록을 가져오는 메소드입니다
*/
public function dormantlist()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_dormant_dormantlist';
$this->load->event($eventname);
$view = array();
$view['view'] = array();
// 모델을 로딩합니다
$this->load->model(array('Member_dormant_model', 'Member_meta_model'));
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before'] = Events::trigger('before', $eventname);
$view['view']['period_text'] = $this->dormant_days_text[$this->cbconfig->item('member_dormant_days')];
/**
* 페이지에 숫자가 아닌 문자가 입력되거나 1보다 작은 숫자가 입력되면 에러 페이지를 보여줍니다.
*/
$param =& $this->querystring;
$page = (((int) $this->input->get('page')) > 0) ? ((int) $this->input->get('page')) : 1;
$view['view']['sort'] = array(
'mem_id' => $param->sort('mem_id', 'asc'),
'mem_userid' => $param->sort('mem_userid', 'asc'),
'mem_username' => $param->sort('mem_username', 'asc'),
'mem_nickname' => $param->sort('mem_nickname', 'asc'),
'mem_email' => $param->sort('mem_email', 'asc'),
'mem_point' => $param->sort('mem_point', 'asc'),
'mem_register_datetime' => $param->sort('mem_register_datetime', 'asc'),
'mem_lastlogin_datetime' => $param->sort('mem_lastlogin_datetime', 'asc'),
'mem_level' => $param->sort('mem_level', 'asc'),
);
$findex = $this->input->get('findex', null, 'member_dormant.mem_id');
$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->Member_dormant_model->allow_search_field = array('mem_id', 'mem_userid', 'mem_email', 'mem_username', 'mem_nickname', 'mem_level', 'mem_homepage', 'mem_register_datetime', 'mem_register_ip', 'mem_lastlogin_datetime', 'mem_lastlogin_ip', 'mem_is_admin'); // 검색이 가능한 필드
$this->Member_dormant_model->search_field_equal = array('mem_id', 'mem_level', 'mem_is_admin'); // 검색중 like 가 아닌 = 검색을 하는 필드
$this->Member_dormant_model->allow_order_field = array('member_dormant.mem_id', 'mem_userid', 'mem_username', 'mem_nickname', 'mem_email', 'mem_point', 'mem_register_datetime', 'mem_lastlogin_datetime', 'mem_level'); // 정렬이 가능한 필드
$where = array();
$dormant_days = $this->cbconfig->item('member_dormant_days') ? $this->cbconfig->item('member_dormant_days') : 365;
$gap = $dormant_days * 24 * 60 * 60;
$lastlogin = ctimestamp() - $gap;
$lastlogin_datetime = cdate('Y-m-d H:i:s', $lastlogin);
$where['mem_lastlogin_datetime <='] = $lastlogin_datetime;
$result = $this->Member_dormant_model
->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) {
$where = array(
'mem_id' => element('mem_id', $val),
);
$result['list'][$key]['meta'] = $this->Member_meta_model->get_all_meta(element('mem_id', $val));
$lastloginday = new DateTime(substr(element('mem_lastlogin_datetime', $val), 0, 10));
$today = new DateTime(cdate('Y-m-d'));
$date_diff = date_diff($lastloginday, $today);
$result['list'][$key]['daygap'] = $date_diff->days;
$result['list'][$key]['num'] = $list_num--;
}
}
$view['view']['data'] = $result;
/**
* primary key 정보를 저장합니다
*/
$view['view']['primary_key'] = $this->Member_dormant_model->primary_key;
/**
* 페이지네이션을 생성합니다
*/
$config['base_url'] = admin_url($this->pagedir) . '/dormantlist?' . $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('mem_userid' => '회원아이디', 'mem_email' => '이메일', 'mem_username' => '회원명', 'mem_nickname' => '닉네임', 'mem_level' => '회원레벨', 'mem_homepage' => '홈페이지', 'mem_register_datetime' => '회원가입날짜', 'mem_register_ip' => '회원가입IP', 'mem_lastlogin_datetime' => '최종로그인날짜', 'mem_lastlogin_ip' => '최종로그인IP', 'mem_adminmemo' => '관리자메모');
$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 . '/dormantlist');
$view['view']['list_update_url'] = admin_url($this->pagedir . '/dormantlist_listupdate/?' . $param->output());
$view['view']['list_delete_url'] = admin_url($this->pagedir . '/dormantlist_listdelete/?' . $param->output());
// 이벤트가 존재하면 실행합니다
$view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname);
/**
* 어드민 레이아웃을 정의합니다
*/
$layoutconfig = array('layout' => 'layout', 'skin' => 'dormantlist');
$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 dormantlist_listupdate()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_dormant_dormantlist_listupdate';
$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->member->recover_from_dormant($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'정상적으로 복원되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '/dormantlist?' . $param->output());
redirect($redirecturl);
}
/**
* 휴면중인 회원을 영구삭제한 경우 실행되는 메소드입니다
*/
public function dormantlist_listdelete()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_admin_member_dormant_dormantlist_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->member->delete_member($val);
}
}
}
// 이벤트가 존재하면 실행합니다
Events::trigger('after', $eventname);
/**
* 삭제가 끝난 후 목록페이지로 이동합니다
*/
$this->session->set_flashdata(
'message',
'선택한 회원이 영구 삭제되었습니다'
);
$param =& $this->querystring;
$redirecturl = admin_url($this->pagedir . '/dormantlist?' . $param->output());
redirect($redirecturl);
}
}