* * @author CIBoard (develop@ciboard.co.kr) */ /** * 회원 정보 수정시 담당하는 controller 입니다. */ class Membermodify extends CB_Controller { /** * 모델을 로딩합니다 */ protected $models = array('Member_nickname', 'Member_meta', 'Member_auth_email', 'Member_extra_vars'); /** * 헬퍼를 로딩합니다 */ protected $helpers = array('form', 'array', 'string'); function __construct() { parent::__construct(); /** * 라이브러리를 로딩합니다 */ $this->load->library(array('querystring', 'form_validation', 'email', 'notelib')); } /** * 회원정보 수정 페이지입니다 */ public function index() { // 이벤트 라이브러리를 로딩합니다 $eventname = 'event_membermodify_index'; $this->load->event($eventname); /** * 로그인이 필요한 페이지입니다 */ required_user_login(); $view = array(); $view['view'] = array(); // 이벤트가 존재하면 실행합니다 $view['view']['event']['before'] = Events::trigger('before', $eventname); $mem_id = (int) $this->member->item('mem_id'); if ( ! $this->member->item('mem_password')) { redirect('membermodify/defaultinfo'); } $this->load->library(array('form_validation')); if ( ! function_exists('password_hash')) { $this->load->helper('password'); } $login_fail = false; $valid_fail = false; /** * 전송된 데이터의 유효성을 체크합니다 */ $config = array( array( 'field' => 'mem_password', 'label' => '패스워드', 'rules' => 'trim|required|min_length[4]|callback__cur_password_check', ), ); $this->form_validation->set_rules($config); /** * 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다. * 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다 */ if ($this->form_validation->run() === false) { // 이벤트가 존재하면 실행합니다 $view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname); $skin = 'member_password'; $view['view']['canonical'] = site_url('membermodify'); // 이벤트가 존재하면 실행합니다 $view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname); /** * 레이아웃을 정의합니다 */ $page_title = $this->cbconfig->item('site_meta_title_membermodify'); $meta_description = $this->cbconfig->item('site_meta_description_membermodify'); $meta_keywords = $this->cbconfig->item('site_meta_keywords_membermodify'); $meta_author = $this->cbconfig->item('site_meta_author_membermodify'); $page_name = $this->cbconfig->item('site_page_name_membermodify'); $layoutconfig = array( 'path' => 'mypage', 'layout' => 'layout', 'skin' => $skin, 'layout_dir' => $this->cbconfig->item('layout_mypage'), 'mobile_layout_dir' => $this->cbconfig->item('mobile_layout_mypage'), 'use_sidebar' => $this->cbconfig->item('sidebar_mypage'), 'use_mobile_sidebar' => $this->cbconfig->item('mobile_sidebar_mypage'), 'skin_dir' => $this->cbconfig->item('skin_mypage'), 'mobile_skin_dir' => $this->cbconfig->item('mobile_skin_mypage'), 'page_title' => $page_title, 'meta_description' => $meta_description, 'meta_keywords' => $meta_keywords, 'meta_author' => $meta_author, 'page_name' => $page_name, ); $view['layout'] = $this->managelayout->front($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); $this->session->set_userdata( 'membermodify', '1' ); redirect('membermodify/modify'); } } /** * 회원정보 수정 페이지입니다 */ public function modify() { // 이벤트 라이브러리를 로딩합니다 $eventname = 'event_membermodify_modify'; $this->load->event($eventname); if ( ! $this->session->userdata('membermodify')) { redirect('membermodify'); } /** * 로그인이 필요한 페이지입니다 */ required_user_login(); $mem_id = (int) $this->member->item('mem_id'); if ( ! function_exists('password_hash')) { $this->load->helper('password'); } $view = array(); $view['view'] = array(); // 이벤트가 존재하면 실행합니다 $view['view']['event']['before'] = Events::trigger('before', $eventname); $email_description = ''; if ($this->cbconfig->item('use_register_email_auth')) { $email_description = '이메일을 변경하시면 메일 인증 후에 계속 사용이 가능합니다'; } $configbasic = array(); $can_update_nickname = false; $change_nickname_date = $this->cbconfig->item('change_nickname_date'); if (empty($change_nickname_date)) { $can_update_nickname = true; } elseif (strtotime($this->member->item('meta_nickname_datetime')) < ctimestamp() - $change_nickname_date * 86400) { $can_update_nickname = true; } $when_can_update_nickname = cdate('Y-m-d H:s', strtotime($this->member->item('meta_nickname_datetime')) + $change_nickname_date * 86400); $can_update_open_profile = false; $change_open_profile_date = $this->cbconfig->item('change_open_profile_date'); if (empty($change_open_profile_date)) { $can_update_open_profile = true; } elseif (strtotime($this->member->item('meta_open_profile_datetime')) < ctimestamp() - $change_open_profile_date * 86400) { $can_update_open_profile = true; } $view['view']['can_update_open_profile'] = $can_update_open_profile; $when_can_update_open_profile = cdate('Y-m-d H:s', strtotime($this->member->item('meta_open_profile_datetime')) + $change_open_profile_date * 86400); $can_update_use_note = false; $change_use_note_date = $this->cbconfig->item('change_use_note_date'); if (empty($change_use_note_date)) { $can_update_use_note = true; } elseif (strtotime($this->member->item('meta_use_note_datetime')) < ctimestamp() - $change_use_note_date * 86400) { $can_update_use_note = true; } $view['view']['can_update_use_note'] = $can_update_use_note; $when_can_update_use_note = cdate('Y-m-d H:s', strtotime($this->member->item('meta_use_note_datetime')) + $change_use_note_date * 86400); $nickname_description = ''; if ($this->cbconfig->item('change_nickname_date')) { if ($can_update_nickname === false) { $nickname_description = '
닉네임을 변경하시면 ' . $this->cbconfig->item('change_nickname_date') . '일 이내에는 변경할 수 없습니다
회원님은 ' . $when_can_update_nickname . ' 이후에 닉네임 변경이 가능합니다'; } else { $nickname_description = '
닉네임을 변경하시면 ' . $this->cbconfig->item('change_nickname_date') . '일 이내에는 변경할 수 없습니다'; } } $configbasic['mem_username'] = array( 'field' => 'mem_username', 'label' => '이름', 'rules' => 'trim|min_length[2]|max_length[20]', ); $configbasic['mem_nickname'] = array( 'field' => 'mem_nickname', 'label' => '닉네임', 'rules' => 'trim|required|min_length[2]|max_length[20]|callback__mem_nickname_check', 'description' => '공백없이 한글, 영문, 숫자만 입력 가능 2글자 이상' . $nickname_description, ); $configbasic['mem_email'] = array( 'field' => 'mem_email', 'label' => '이메일', 'rules' => 'trim|required|valid_email|max_length[50]|is_unique[member.mem_email.mem_id.' . $mem_id . ']|callback__mem_email_check', 'description' => $email_description, ); $configbasic['mem_homepage'] = array( 'field' => 'mem_homepage', 'label' => '홈페이지', 'rules' => 'prep_url|valid_url', ); $configbasic['mem_phone'] = array( 'field' => 'mem_phone', 'label' => '전화번호', 'rules' => 'trim|valid_phone', ); $configbasic['mem_birthday'] = array( 'field' => 'mem_birthday', 'label' => '생년월일', 'rules' => 'trim|exact_length[10]', ); $configbasic['mem_sex'] = array( 'field' => 'mem_sex', 'label' => '성별', 'rules' => 'trim|exact_length[1]', ); $configbasic['mem_zipcode'] = array( 'field' => 'mem_zipcode', 'label' => '우편번호', 'rules' => 'trim|min_length[5]|max_length[7]', ); $configbasic['mem_address1'] = array( 'field' => 'mem_address1', 'label' => '기본주소', 'rules' => 'trim', ); $configbasic['mem_address2'] = array( 'field' => 'mem_address2', 'label' => '상세주소', 'rules' => 'trim', ); $configbasic['mem_address3'] = array( 'field' => 'mem_address3', 'label' => '참고항목', 'rules' => 'trim', ); $configbasic['mem_address4'] = array( 'field' => 'mem_address4', 'label' => '지번', 'rules' => 'trim', ); $configbasic['mem_profile_content'] = array( 'field' => 'mem_profile_content', 'label' => '자기소개', 'rules' => 'trim', ); $configbasic['mem_open_profile'] = array( 'field' => 'mem_open_profile', 'label' => '정보공개', 'rules' => 'trim|exact_length[1]', ); if ($this->cbconfig->item('use_note')) { $configbasic['mem_use_note'] = array( 'field' => 'mem_use_note', 'label' => '쪽지사용', 'rules' => 'trim|exact_length[1]', ); } $configbasic['mem_receive_email'] = array( 'field' => 'mem_receive_email', 'label' => '이메일수신여부', 'rules' => 'trim|exact_length[1]', ); $configbasic['mem_receive_sms'] = array( 'field' => 'mem_receive_sms', 'label' => 'SMS 문자수신여부', 'rules' => 'trim|exact_length[1]', ); $this->load->library(array('form_validation')); $login_fail = false; $valid_fail = false; $registerform = $this->cbconfig->item('registerform'); $form = json_decode($registerform, true); $config = array(); if ($form && is_array($form)) { foreach ($form as $key => $value) { if ( ! element('use', $value)) { continue; } if ($key === 'mem_userid' OR $key === 'mem_password' OR $key === 'mem_recommend') { continue; } if (element('func', $value) === 'basic') { if ($key === 'mem_address') { if (element('required', $value) === '1') { $configbasic['mem_zipcode']['rules'] = $configbasic['mem_zipcode']['rules'] . '|required'; } $config[] = $configbasic['mem_zipcode']; if (element('required', $value) === '1') { $configbasic['mem_address1']['rules'] = $configbasic['mem_address1']['rules'] . '|required'; } $config[] = $configbasic['mem_address1']; if (element('required', $value) === '1') { $configbasic['mem_address2']['rules'] = $configbasic['mem_address2']['rules'] . '|required'; } $config[] = $configbasic['mem_address2']; } else { if (element('required', $value) === '1') { $configbasic[$value['field_name']]['rules'] = $configbasic[$value['field_name']]['rules'] . '|required'; } if (element('field_type', $value) === 'phone') { $configbasic[$value['field_name']]['rules'] = $configbasic[$value['field_name']]['rules'] . '|valid_phone'; } $config[] = $configbasic[$value['field_name']]; } } else { $required = element('required', $value) ? '|required' : ''; if (element('field_type', $value) === 'checkbox') { $config[] = array( 'field' => element('field_name', $value) . '[]', 'label' => $value['display_name'], 'rules' => 'trim' . $required, ); } else { $config[] = array( 'field' => element('field_name', $value), 'label' => $value['display_name'], 'rules' => 'trim' . $required, ); } } } } $this->form_validation->set_rules($config); $form_validation = $this->form_validation->run(); $file_error = ''; $updatephoto = ''; $file_error2 = ''; $updateicon = ''; if ($form_validation) { $this->load->library('upload'); if ($this->cbconfig->item('use_member_photo') && $this->cbconfig->item('member_photo_width') > 0 && $this->cbconfig->item('member_photo_height') > 0) { if (isset($_FILES) && isset($_FILES['mem_photo']) && isset($_FILES['mem_photo']['name']) && $_FILES['mem_photo']['name']) { $upload_path = config_item('uploads_dir') . '/member_photo/'; 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('mem_photo')) { $img = $this->upload->data(); $updatephoto = cdate('Y') . '/' . cdate('m') . '/' . $img['file_name']; } else { $file_error = $this->upload->display_errors(); } } } if ($this->cbconfig->item('use_member_icon') && $this->cbconfig->item('member_icon_width') > 0 && $this->cbconfig->item('member_icon_height') > 0) { if (isset($_FILES) && isset($_FILES['mem_icon']) && isset($_FILES['mem_icon']['name']) && $_FILES['mem_icon']['name']) { $upload_path = config_item('uploads_dir') . '/member_icon/'; 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('mem_icon')) { $img = $this->upload->data(); $updateicon = cdate('Y') . '/' . cdate('m') . '/' . $img['file_name']; } else { $file_error2 = $this->upload->display_errors(); } } } } /** * 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다. * 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다 */ if ($form_validation === false OR $file_error !== '' OR $file_error2 !== '') { // 이벤트가 존재하면 실행합니다 $view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname); $view['view']['message'] = $file_error . $file_error2; $html_content = array(); $k = 0; if ($form && is_array($form)) { foreach ($form as $key => $value) { if ( ! element('use', $value)) { continue; } if ($key === 'mem_userid' OR $key === 'mem_password' OR $key === 'mem_recommend') { continue; } $required = element('required', $value) ? 'required' : ''; $item = $this->member->item(element('field_name', $value)); $html_content[$k] = array(); $html_content[$k]['field_name'] = element('field_name', $value); $html_content[$k]['display_name'] = element('display_name', $value); $html_content[$k]['input'] = ''; //field_type : text, url, email, phone, textarea, radio, select, checkbox, date if (element('field_type', $value) === 'text' OR element('field_type', $value) === 'url' OR element('field_type', $value) === 'email' OR element('field_type', $value) === 'phone' OR element('field_type', $value) === 'date') { if (element('field_type', $value) === 'date') { $html_content[$k]['input'] .= ''; } elseif (element('field_type', $value) === 'phone') { $html_content[$k]['input'] .= ''; } else { $readonly = ''; if (element('field_name', $value) === 'mem_nickname' && $can_update_nickname === false) { $readonly = 'readonly="readonly"'; } $html_content[$k]['input'] .= ''; } } elseif (element('field_type', $value) === 'textarea') { $html_content[$k]['input'] .= ''; } elseif (element('field_type', $value) === 'radio') { $html_content[$k]['input'] .= '
'; if (element('field_name', $value) === 'mem_sex') { $options = array( '1' => '남성', '2' => '여성', ); } else { $options = explode("\n", element('options', $value)); } $i =1; if ($options) { foreach ($options as $okey => $oval) { $oval = trim($oval); $radiovalue = (element('field_name', $value) === 'mem_sex') ? $okey : $oval; $html_content[$k]['input'] .= ' '; $i++; } } $html_content[$k]['input'] .= '
'; } elseif (element('field_type', $value) === 'checkbox') { $html_content[$k]['input'] .= '
'; $options = explode("\n", element('options', $value)); $item = json_decode($item, true); $i =1; if ($options) { foreach ($options as $okey => $oval) { $oval = trim($oval); $chkvalue = is_array($item) && in_array($oval, $item) ? $oval : ''; $html_content[$k]['input'] .= ' '; $i++; } } $html_content[$k]['input'] .= '
'; } elseif (element('field_type', $value) === 'select') { $html_content[$k]['input'] .= '
'; $html_content[$k]['input'] .= ''; $html_content[$k]['input'] .= '
'; } elseif (element('field_name', $value) === 'mem_address') { $html_content[$k]['input'] .= '
'; } $html_content[$k]['description'] = ''; if (isset($configbasic[$value['field_name']]['description']) && $configbasic[$value['field_name']]['description']) { $html_content[$k]['description'] = $configbasic[$value['field_name']]['description']; } $k++; } } $view['view']['html_content'] = $html_content; $view['view']['open_profile_description'] = ''; if ($this->cbconfig->item('change_open_profile_date')) { if ($can_update_open_profile === false) { $view['view']['open_profile_description'] = '정보공개 설정을 변경하시면 ' . $this->cbconfig->item('change_open_profile_date') . '일 이내에는 다시 변경할 수 없습니다
회원님은 ' . $when_can_update_open_profile . ' 이후에 정보공개설정변경이 가능합니다'; } else { $view['view']['open_profile_description'] = '정보공개 설정을 변경하시면 ' . $this->cbconfig->item('change_open_profile_date') . '일 이내에는 다시 변경할 수 없습니다'; } } $view['view']['use_note_description'] = ''; if ($this->cbconfig->item('change_use_note_date')) { if ($can_update_use_note === false) { $view['view']['use_note_description'] = '쪽지 사용 설정을 변경하시면 ' . $this->cbconfig->item('change_use_note_date') . '일 이내에는 다시 변경할 수 없습니다
회원님은 ' . $when_can_update_use_note . ' 이후에 쪽지사용설정변경이 가능합니다'; } else { $view['view']['use_note_description'] = '쪽지 사용 설정을 변경하시면 ' . $this->cbconfig->item('change_use_note_date') . '일 이내에는 다시 변경할 수 없습니다'; } } $view['view']['canonical'] = site_url('membermodify/modify'); // 이벤트가 존재하면 실행합니다 $view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname); /** * 레이아웃을 정의합니다 */ $page_title = $this->cbconfig->item('site_meta_title_membermodify'); $meta_description = $this->cbconfig->item('site_meta_description_membermodify'); $meta_keywords = $this->cbconfig->item('site_meta_keywords_membermodify'); $meta_author = $this->cbconfig->item('site_meta_author_membermodify'); $page_name = $this->cbconfig->item('site_page_name_membermodify'); $layoutconfig = array( 'path' => 'mypage', 'layout' => 'layout', 'skin' => 'member_modify', 'layout_dir' => $this->cbconfig->item('layout_mypage'), 'mobile_layout_dir' => $this->cbconfig->item('mobile_layout_mypage'), 'use_sidebar' => $this->cbconfig->item('sidebar_mypage'), 'use_mobile_sidebar' => $this->cbconfig->item('mobile_sidebar_mypage'), 'skin_dir' => $this->cbconfig->item('skin_mypage'), 'mobile_skin_dir' => $this->cbconfig->item('mobile_skin_mypage'), 'page_title' => $page_title, 'meta_description' => $meta_description, 'meta_keywords' => $meta_keywords, 'meta_author' => $meta_author, 'page_name' => $page_name, ); $view['layout'] = $this->managelayout->front($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); $updatedata = array(); $metadata = array(); $updatedata['mem_email'] = $this->input->post('mem_email'); if ($this->member->item('mem_email') !== $this->input->post('mem_email')) { $updatedata['mem_email_cert'] = 0; $metadata['meta_email_cert_datetime'] = ''; } if ($can_update_nickname && $this->member->item('mem_nickname') !== $this->input->post('mem_nickname')) { $updatedata['mem_nickname'] = $this->input->post('mem_nickname'); $metadata['meta_nickname_datetime'] = cdate('Y-m-d H:i:s'); $upnick = array( 'mni_end_datetime' => cdate('Y-m-d H:i:s'), ); $nickwhere = array( 'mem_id' => $mem_id, 'mni_nickname' => $this->member->item('mem_nickname'), ); $this->Member_nickname_model->update('', $upnick, $nickwhere); $nickinsert = array( 'mem_id' => $mem_id, 'mni_nickname' => $this->input->post('mem_nickname'), 'mni_start_datetime' => cdate('Y-m-d H:i:s'), ); $this->Member_nickname_model->insert($nickinsert); } if (isset($form['mem_username']['use']) && $form['mem_username']['use']) { $updatedata['mem_username'] = $this->input->post('mem_username', null, ''); } if (isset($form['mem_homepage']['use']) && $form['mem_homepage']['use']) { $updatedata['mem_homepage'] = $this->input->post('mem_homepage', null, ''); } if (isset($form['mem_phone']['use']) && $form['mem_phone']['use']) { $updatedata['mem_phone'] = $this->input->post('mem_phone', null, ''); } if (isset($form['mem_birthday']['use']) && $form['mem_birthday']['use']) { $updatedata['mem_birthday'] = $this->input->post('mem_birthday', null, ''); } if (isset($form['mem_sex']['use']) && $form['mem_sex']['use']) { $updatedata['mem_sex'] = $this->input->post('mem_sex', null, ''); } if (isset($form['mem_address']['use']) && $form['mem_address']['use']) { $updatedata['mem_zipcode'] = $this->input->post('mem_zipcode', null, ''); $updatedata['mem_address1'] = $this->input->post('mem_address1', null, ''); $updatedata['mem_address2'] = $this->input->post('mem_address2', null, ''); $updatedata['mem_address3'] = $this->input->post('mem_address3', null, ''); $updatedata['mem_address4'] = $this->input->post('mem_address4', null, ''); } $updatedata['mem_receive_email'] = $this->input->post('mem_receive_email') ? 1 : 0; if ($this->cbconfig->item('use_note') && $can_update_use_note && ( ($this->member->item('mem_use_note') === '1' && $this->input->post('mem_use_note') !== '1') OR ($this->member->item('mem_use_note') !== '1' && $this->input->post('mem_use_note') === '1') ) ) { $updatedata['mem_use_note'] = $this->input->post('mem_use_note') ? 1 : 0; $metadata['meta_use_note_datetime'] = cdate('Y-m-d H:i:s'); } $updatedata['mem_receive_sms'] = $this->input->post('mem_receive_sms') ? 1 : 0; if ($can_update_open_profile && ( ($this->member->item('mem_open_profile') === '1' && $this->input->post('mem_open_profile') !== '1') OR ($this->member->item('mem_open_profile') !== '1' && $this->input->post('mem_open_profile') === '1') ) ) { $updatedata['mem_open_profile'] = $this->input->post('mem_open_profile') ? 1 : 0; $metadata['meta_open_profile_datetime'] = cdate('Y-m-d H:i:s'); } if (isset($form['mem_profile_content']['use']) && $form['mem_profile_content']['use']) { $updatedata['mem_profile_content'] = $this->input->post('mem_profile_content', null, ''); } if ($this->input->post('mem_photo_del')) { $updatedata['mem_photo'] = ''; } elseif ($updatephoto) { $updatedata['mem_photo'] = $updatephoto; } if ($this->member->item('mem_photo') && ($this->input->post('mem_photo_del') OR $updatephoto)) { // 기존 파일 삭제 @unlink(config_item('uploads_dir') . '/member_photo/' . $this->member->item('mem_photo')); } if ($this->input->post('mem_icon_del')) { $updatedata['mem_icon'] = ''; } elseif ($updateicon) { $updatedata['mem_icon'] = $updateicon; } if ($this->member->item('mem_icon') && ($this->input->post('mem_icon_del') OR $updateicon)) { // 기존 파일 삭제 @unlink(config_item('uploads_dir') . '/member_icon/' . $this->member->item('mem_icon')); } $this->Member_model->update($mem_id, $updatedata); $this->Member_meta_model->save($mem_id, $metadata); $extradata = array(); if ($form && is_array($form)) { foreach ($form as $key => $value) { if ( ! element('use', $value)) { continue; } if (element('func', $value) === 'basic') { continue; } $extradata[element('field_name', $value)] = $this->input->post(element('field_name', $value), null, ''); } $this->Member_extra_vars_model->save($mem_id, $extradata); } if ($this->cbconfig->item('use_register_email_auth') && $this->member->item('mem_email') !== $this->input->post('mem_email')) { $vericode = array('$', '/', '.'); $verificationcode = str_replace( $vericode, '', password_hash($mem_id . '-' . $this->input->post('mem_email') . '-' . random_string('alnum', 10), PASSWORD_BCRYPT) ); $beforeauthdata = array( 'mem_id' => $mem_id, 'mae_type' => 2, ); $this->Member_auth_email_model->delete_where($beforeauthdata); $authdata = array( 'mem_id' => $mem_id, 'mae_key' => $verificationcode, 'mae_type' => 2, 'mae_generate_datetime' => cdate('Y-m-d H:i:s'), ); $this->Member_auth_email_model->insert($authdata); $verify_url = site_url('verify/confirmemail?user=' . $this->member->item('mem_userid') . '&code=' . $verificationcode); $searchconfig = array( '{홈페이지명}', '{회사명}', '{홈페이지주소}', '{회원아이디}', '{회원닉네임}', '{회원실명}', '{회원이메일}', '{변경전이메일}', '{메일수신여부}', '{쪽지수신여부}', '{문자수신여부}', '{회원아이피}', '{메일인증주소}', ); $receive_email = $this->member->item('mem_receive_email') ? '동의' : '거부'; $receive_note = $this->member->item('mem_use_note') ? '동의' : '거부'; $receive_sms = $this->member->item('mem_receive_sms') ? '동의' : '거부'; $replaceconfig = array( $this->cbconfig->item('site_title'), $this->cbconfig->item('company_name'), site_url(), $this->member->item('mem_userid'), $this->member->item('mem_nickname'), $this->member->item('mem_username'), $this->input->post('mem_email'), $this->member->item('mem_email'), $receive_email, $receive_note, $receive_sms, $this->input->ip_address(), $verify_url, ); $replaceconfig_escape = array( html_escape($this->cbconfig->item('site_title')), html_escape($this->cbconfig->item('company_name')), site_url(), $this->member->item('mem_userid'), html_escape($this->member->item('mem_nickname')), html_escape($this->member->item('mem_username')), html_escape($this->input->post('mem_email')), html_escape($this->member->item('mem_email')), $receive_email, $receive_note, $receive_sms, $this->input->ip_address(), $verify_url, ); $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_email_changeemail_user_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_email_changeemail_user_content') ); $this->email->clear(true); $this->email->from($this->cbconfig->item('webmaster_email'), $this->cbconfig->item('webmaster_name')); $this->email->to($this->input->post('mem_email')); $this->email->subject($title); $this->email->message($content); $this->email->send(); $view['view']['result_message'] = $this->input->post('mem_email') . '로 인증메일이 발송되었습니다.
발송된 인증메일을 확인하신 후에 사이트 이용이 가능합니다'; $this->session->sess_destroy(); } else { $view['view']['result_message'] = '회원정보가 변경되었습니다.
감사합니다'; } // 이벤트가 존재하면 실행합니다 $view['view']['event']['before_result_layout'] = Events::trigger('before_result_layout', $eventname); $page_title = $this->cbconfig->item('site_meta_title_membermodify'); $meta_description = $this->cbconfig->item('site_meta_description_membermodify'); $meta_keywords = $this->cbconfig->item('site_meta_keywords_membermodify'); $meta_author = $this->cbconfig->item('site_meta_author_membermodify'); $page_name = $this->cbconfig->item('site_page_name_membermodify'); $layoutconfig = array( 'path' => 'mypage', 'layout' => 'layout', 'skin' => 'member_modify_result', 'layout_dir' => $this->cbconfig->item('layout_mypage'), 'mobile_layout_dir' => $this->cbconfig->item('mobile_layout_mypage'), 'use_sidebar' => $this->cbconfig->item('sidebar_mypage'), 'use_mobile_sidebar' => $this->cbconfig->item('mobile_sidebar_mypage'), 'skin_dir' => $this->cbconfig->item('skin_mypage'), 'mobile_skin_dir' => $this->cbconfig->item('mobile_skin_mypage'), 'page_title' => $page_title, 'meta_description' => $meta_description, 'meta_keywords' => $meta_keywords, 'meta_author' => $meta_author, 'page_name' => $page_name, ); $view['layout'] = $this->managelayout->front($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 defaultinfo() { // 이벤트 라이브러리를 로딩합니다 $eventname = 'event_membermodify_defaultinfo'; $this->load->event($eventname); /** * 로그인이 필요한 페이지입니다 */ required_user_login(); $mem_id = (int) $this->member->item('mem_id'); if ($this->member->item('mem_password')) { redirect('membermodify'); } if ( ! function_exists('password_hash')) { $this->load->helper('password'); } $view = array(); $view['view'] = array(); // 이벤트가 존재하면 실행합니다 $view['view']['event']['before'] = Events::trigger('before', $eventname); $password_length = $this->cbconfig->item('password_length'); $view['view']['password_length'] = $password_length; $config = array(); $config['mem_userid'] = array( 'field' => 'mem_userid', 'label' => '아이디', 'rules' => 'trim|required|alphanumunder|min_length[3]|max_length[20]|is_unique[member_userid.mem_userid]|callback__mem_userid_check', ); $config['mem_password'] = array( 'field' => 'mem_password', 'label' => '패스워드', 'rules' => 'trim|required|min_length[' . $password_length . ']|callback__mem_password_check', ); $config['mem_password_re'] = array( 'field' => 'mem_password_re', 'label' => '패스워드 확인', 'rules' => 'trim|required|min_length[' . $password_length . ']|matches[mem_password]', ); $config['mem_nickname'] = array( 'field' => 'mem_nickname', 'label' => '닉네임', 'rules' => 'trim|required|min_length[2]|max_length[20]|callback__mem_nickname_check', ); $config['mem_email'] = array( 'field' => 'mem_email', 'label' => '이메일', 'rules' => 'trim|required|valid_email|max_length[50]|is_unique[member.mem_email.mem_id.' . $mem_id . ']|callback__mem_email_check', ); $this->load->library(array('form_validation')); $this->form_validation->set_rules($config); /** * 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다. * 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다 */ if ($this->form_validation->run() === false) { // 이벤트가 존재하면 실행합니다 $view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname); /** * 레이아웃을 정의합니다 */ $page_title = $this->cbconfig->item('site_meta_title_membermodify'); $meta_description = $this->cbconfig->item('site_meta_description_membermodify'); $meta_keywords = $this->cbconfig->item('site_meta_keywords_membermodify'); $meta_author = $this->cbconfig->item('site_meta_author_membermodify'); $page_name = $this->cbconfig->item('site_page_name_membermodify'); $layoutconfig = array( 'path' => 'mypage', 'layout' => 'layout', 'skin' => 'member_defaultinfo', 'layout_dir' => $this->cbconfig->item('layout_mypage'), 'mobile_layout_dir' => $this->cbconfig->item('mobile_layout_mypage'), 'use_sidebar' => $this->cbconfig->item('sidebar_mypage'), 'use_mobile_sidebar' => $this->cbconfig->item('mobile_sidebar_mypage'), 'skin_dir' => $this->cbconfig->item('skin_mypage'), 'mobile_skin_dir' => $this->cbconfig->item('mobile_skin_mypage'), 'page_title' => $page_title, 'meta_description' => $meta_description, 'meta_keywords' => $meta_keywords, 'meta_author' => $meta_author, 'page_name' => $page_name, ); $view['layout'] = $this->managelayout->front($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); $updatedata = array(); $metadata = array(); $updatedata['mem_userid'] = $this->input->post('mem_userid'); $updatedata['mem_email'] = $this->input->post('mem_email'); if ($this->member->item('mem_email') !== $this->input->post('mem_email')) { $updatedata['mem_email_cert'] = 0; $metadata['meta_email_cert_datetime'] = ''; } if ($this->member->item('mem_nickname') !== $this->input->post('mem_nickname')) { $updatedata['mem_nickname'] = $this->input->post('mem_nickname'); $metadata['meta_nickname_datetime'] = cdate('Y-m-d H:i:s'); $upnick = array( 'mni_end_datetime' => cdate('Y-m-d H:i:s'), ); $nickwhere = array( 'mem_id' => $mem_id, 'mni_nickname' => $this->member->item('mem_nickname'), ); $this->Member_nickname_model->update('', $upnick, $nickwhere); $nickinsert = array( 'mem_id' => $mem_id, 'mni_nickname' => $this->input->post('mem_nickname'), 'mni_start_datetime' => cdate('Y-m-d H:i:s'), ); $this->Member_nickname_model->insert($nickinsert); } $updatedata['mem_password'] = password_hash($this->input->post('mem_password'), PASSWORD_BCRYPT); $this->Member_model->update($mem_id, $updatedata); $this->Member_meta_model->save($mem_id, $metadata); if ($this->cbconfig->item('use_register_email_auth') && $this->member->item('mem_email') !== $this->input->post('mem_email')) { $vericode = array('$', '/', '.'); $verificationcode = str_replace( $vericode, '', password_hash($mem_id . '-' . $this->input->post('mem_email') . '-' . random_string('alnum', 10), PASSWORD_BCRYPT) ); $beforeauthdata = array( 'mem_id' => $mem_id, 'mae_type' => 2, ); $this->Member_auth_email_model->delete_where($beforeauthdata); $authdata = array( 'mem_id' => $mem_id, 'mae_key' => $verificationcode, 'mae_type' => 2, 'mae_generate_datetime' => cdate('Y-m-d H:i:s'), ); $this->Member_auth_email_model->insert($authdata); $verify_url = site_url('verify/confirmemail?user=' . $this->input->post('mem_userid') . '&code=' . $verificationcode); $searchconfig = array( '{홈페이지명}', '{회사명}', '{홈페이지주소}', '{회원아이디}', '{회원닉네임}', '{회원실명}', '{회원이메일}', '{변경전이메일}', '{메일수신여부}', '{쪽지수신여부}', '{문자수신여부}', '{회원아이피}', '{메일인증주소}', ); $receive_email = $this->member->item('mem_receive_email') ? '동의' : '거부'; $receive_note = $this->member->item('mem_use_note') ? '동의' : '거부'; $receive_sms = $this->member->item('mem_receive_sms') ? '동의' : '거부'; $replaceconfig = array( $this->cbconfig->item('site_title'), $this->cbconfig->item('company_name'), site_url(), $this->member->item('mem_userid'), $this->member->item('mem_nickname'), $this->member->item('mem_username'), $this->input->post('mem_email'), $this->member->item('mem_email'), $receive_email, $receive_note, $receive_sms, $this->input->ip_address(), $verify_url, ); $replaceconfig_escape = array( html_escape($this->cbconfig->item('site_title')), html_escape($this->cbconfig->item('company_name')), site_url(), $this->member->item('mem_userid'), html_escape($this->member->item('mem_nickname')), html_escape($this->member->item('mem_username')), html_escape($this->input->post('mem_email')), html_escape($this->member->item('mem_email')), $receive_email, $receive_note, $receive_sms, $this->input->ip_address(), $verify_url, ); $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_email_changeemail_user_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_email_changeemail_user_content') ); $this->email->clear(true); $this->email->from($this->cbconfig->item('webmaster_email'), $this->cbconfig->item('webmaster_name')); $this->email->to($this->input->post('mem_email')); $this->email->subject($title); $this->email->message($content); $this->email->send(); $view['view']['result_message'] = $this->input->post('mem_email') . '로 인증메일이 발송되었습니다.
발송된 인증메일을 확인하신 후에 사이트 이용이 가능합니다'; } else { $view['view']['result_message'] = '회원정보가 변경되었습니다.
감사합니다'; } // 이벤트가 존재하면 실행합니다 $view['view']['event']['before_result_layout'] = Events::trigger('before_result_layout', $eventname); $page_title = $this->cbconfig->item('site_meta_title_membermodify'); $meta_description = $this->cbconfig->item('site_meta_description_membermodify'); $meta_keywords = $this->cbconfig->item('site_meta_keywords_membermodify'); $meta_author = $this->cbconfig->item('site_meta_author_membermodify'); $page_name = $this->cbconfig->item('site_page_name_membermodify'); $layoutconfig = array( 'path' => 'mypage', 'layout' => 'layout', 'skin' => 'member_modify_result', 'layout_dir' => $this->cbconfig->item('layout_mypage'), 'mobile_layout_dir' => $this->cbconfig->item('mobile_layout_mypage'), 'use_sidebar' => $this->cbconfig->item('sidebar_mypage'), 'use_mobile_sidebar' => $this->cbconfig->item('mobile_sidebar_mypage'), 'skin_dir' => $this->cbconfig->item('skin_mypage'), 'mobile_skin_dir' => $this->cbconfig->item('mobile_skin_mypage'), 'page_title' => $page_title, 'meta_description' => $meta_description, 'meta_keywords' => $meta_keywords, 'meta_author' => $meta_author, 'page_name' => $page_name, ); $view['layout'] = $this->managelayout->front($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 password_modify() { // 이벤트 라이브러리를 로딩합니다 $eventname = 'event_membermodify_password_modify'; $this->load->event($eventname); /** * 로그인이 필요한 페이지입니다 */ required_user_login(); $mem_id = (int) $this->member->item('mem_id'); if ( ! $this->session->userdata('membermodify')) { redirect('membermodify'); } $view = array(); $view['view'] = array(); // 이벤트가 존재하면 실행합니다 $view['view']['event']['before'] = Events::trigger('before', $eventname); /** * Validation 라이브러리를 가져옵니다 */ $this->load->library('form_validation'); if ( ! function_exists('password_hash')) { $this->load->helper('password'); } /** * 전송된 데이터의 유효성을 체크합니다 */ $password_length = $this->cbconfig->item('password_length'); $view['view']['password_length'] = $password_length; $config = array( array( 'field' => 'cur_password', 'label' => '현재패스워드', 'rules' => 'trim|required|callback__cur_password_check', ), array( 'field' => 'new_password', 'label' => '새로운패스워드', 'rules' => 'trim|required|min_length[' . $password_length . ']|callback__mem_password_check', ), array( 'field' => 'new_password_re', 'label' => '새로운패스워드', 'rules' => 'trim|required|min_length[' . $password_length . ']|matches[new_password]', ), ); $this->form_validation->set_rules($config); /** * 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다. * 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다 */ if ($this->form_validation->run() === false) { // 이벤트가 존재하면 실행합니다 $view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname); $view['view']['canonical'] = site_url('membermodify/password_modify'); $password_description = '비밀번호는 ' . $password_length . '자리 이상이어야 '; if ($this->cbconfig->item('password_uppercase_length') OR $this->cbconfig->item('password_numbers_length') OR $this->cbconfig->item('password_specialchars_length')) { $password_description .= '하며 '; if ($this->cbconfig->item('password_uppercase_length')) { $password_description .= ', ' . $this->cbconfig->item('password_uppercase_length') . '개의 대문자'; } if ($this->cbconfig->item('password_numbers_length')) { $password_description .= ', ' . $this->cbconfig->item('password_numbers_length') . '개의 숫자'; } if ($this->cbconfig->item('password_specialchars_length')) { $password_description .= ', ' . $this->cbconfig->item('password_specialchars_length') . '개의 특수문자'; } $password_description .= '를 포함해야 '; } $password_description .= '합니다'; $view['view']['info'] = $password_description; // 이벤트가 존재하면 실행합니다 $view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname); /** * 레이아웃을 정의합니다 */ $page_title = $this->cbconfig->item('site_meta_title_membermodify'); $meta_description = $this->cbconfig->item('site_meta_description_membermodify'); $meta_keywords = $this->cbconfig->item('site_meta_keywords_membermodify'); $meta_author = $this->cbconfig->item('site_meta_author_membermodify'); $page_name = $this->cbconfig->item('site_page_name_membermodify'); $layoutconfig = array( 'path' => 'mypage', 'layout' => 'layout', 'skin' => 'password_modify', 'layout_dir' => $this->cbconfig->item('layout_mypage'), 'mobile_layout_dir' => $this->cbconfig->item('mobile_layout_mypage'), 'use_sidebar' => $this->cbconfig->item('sidebar_mypage'), 'use_mobile_sidebar' => $this->cbconfig->item('mobile_sidebar_mypage'), 'skin_dir' => $this->cbconfig->item('skin_mypage'), 'mobile_skin_dir' => $this->cbconfig->item('mobile_skin_mypage'), 'page_title' => $page_title, 'meta_description' => $meta_description, 'meta_keywords' => $meta_keywords, 'meta_author' => $meta_author, 'page_name' => $page_name, ); $view['layout'] = $this->managelayout->front($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 { // 이벤트가 존재하면 실행합니다 $view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname); $hash = password_hash($this->input->post('new_password'), PASSWORD_BCRYPT); $updatedata = array( 'mem_password' => $hash, ); $this->Member_model->update($mem_id, $updatedata); $metadata = array( 'meta_change_pw_datetime' => cdate('Y-m-d H:i:s'), ); $this->Member_meta_model->save($mem_id, $metadata); $emailsendlistadmin = array(); $notesendlistadmin = array(); $smssendlistadmin = array(); $emailsendlistuser = array(); $notesendlistuser = array(); $smssendlistuser = array(); $superadminlist = ''; if ($this->cbconfig->item('send_email_changepw_admin') OR $this->cbconfig->item('send_note_changepw_admin') OR $this->cbconfig->item('send_sms_changepw_admin')) { $mselect = 'mem_id, mem_email, mem_nickname, mem_phone'; $superadminlist = $this->Member_model->get_superadmin_list($mselect); } if ($this->cbconfig->item('send_email_changepw_admin') && $superadminlist) { foreach ($superadminlist as $key => $value) { $emailsendlistadmin[$value['mem_id']] = $value; } } if (($this->cbconfig->item('send_email_changepw_user') && $this->member->item('mem_receive_email')) OR $this->cbconfig->item('send_email_changepw_alluser')) { $emailsendlistuser['mem_email'] = $this->member->item('mem_email'); } if ($this->cbconfig->item('send_note_changepw_admin') && $superadminlist) { foreach ($superadminlist as $key => $value) { $notesendlistadmin[$value['mem_id']] = $value; } } if ($this->cbconfig->item('send_note_changepw_user') && $this->member->item('mem_use_note')) { $notesendlistuser['mem_id'] = $mem_id; } if ($this->cbconfig->item('send_sms_changepw_admin') && $superadminlist) { foreach ($superadminlist as $key => $value) { $smssendlistadmin[$value['mem_id']] = $value; } } if (($this->cbconfig->item('send_sms_changepw_user') && $this->member->item('mem_receive_sms')) OR $this->cbconfig->item('send_sms_changepw_alluser')) { if ($this->member->item('mem_phone')) { $smssendlistuser['mem_id'] = $mem_id; $smssendlistuser['mem_nickname'] = $this->member->item('mem_nickname'); $smssendlistuser['mem_phone'] = $this->member->item('mem_phone'); } } $searchconfig = array( '{홈페이지명}', '{회사명}', '{홈페이지주소}', '{회원아이디}', '{회원닉네임}', '{회원실명}', '{회원이메일}', '{메일수신여부}', '{쪽지수신여부}', '{문자수신여부}', '{회원아이피}', ); $receive_email = $this->member->item('mem_receive_email') ? '동의' : '거부'; $receive_note = $this->member->item('mem_use_note') ? '동의' : '거부'; $receive_sms = $this->member->item('mem_receive_sms') ? '동의' : '거부'; $replaceconfig = array( $this->cbconfig->item('site_title'), $this->cbconfig->item('company_name'), site_url(), $this->member->item('mem_userid'), $this->member->item('mem_nickname'), $this->member->item('mem_username'), $this->member->item('mem_email'), $receive_email, $receive_note, $receive_sms, $this->input->ip_address(), ); $replaceconfig_escape = array( html_escape($this->cbconfig->item('site_title')), html_escape($this->cbconfig->item('company_name')), site_url(), html_escape($this->member->item('mem_userid')), html_escape($this->member->item('mem_nickname')), html_escape($this->member->item('mem_username')), html_escape($this->member->item('mem_email')), $receive_email, $receive_note, $receive_sms, $this->input->ip_address(), ); if ($emailsendlistadmin) { $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_email_changepw_admin_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_email_changepw_admin_content') ); foreach ($emailsendlistadmin as $akey => $aval) { $this->email->clear(true); $this->email->from($this->cbconfig->item('webmaster_email'), $this->cbconfig->item('webmaster_name')); $this->email->to(element('mem_email', $aval)); $this->email->subject($title); $this->email->message($content); $this->email->send(); } } if ($emailsendlistuser) { $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_email_changepw_user_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_email_changepw_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', $emailsendlistuser)); $this->email->subject($title); $this->email->message($content); $this->email->send(); } if ($notesendlistadmin) { $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_note_changepw_admin_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_note_changepw_admin_content') ); foreach ($notesendlistadmin as $akey => $aval) { $note_result = $this->notelib->send_note( $sender = 0, $receiver = element('mem_id', $aval), $title, $content, 1 ); } } if ($notesendlistuser && element('mem_id', $notesendlistuser)) { $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_note_changepw_user_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_note_changepw_user_content') ); $note_result = $this->notelib->send_note( $sender = 0, $receiver = element('mem_id', $notesendlistuser), $title, $content, 1 ); } if ($smssendlistadmin) { if (file_exists(APPPATH . 'libraries/Smslib.php')) { $this->load->library(array('smslib')); $content = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_sms_changepw_admin_content') ); $sender = array( 'phone' => $this->cbconfig->item('sms_admin_phone'), ); $receiver = array(); foreach ($smssendlistadmin as $akey => $aval) { $receiver[] = array( 'mem_id' => element('mem_id', $aval), 'name' => element('mem_nickname', $aval), 'phone' => element('mem_phone', $aval), ); } $smsresult = $this->smslib->send($receiver, $sender, $content, $date = '', '회원패스워드변경알림'); } } if ($smssendlistuser) { if (file_exists(APPPATH . 'libraries/Smslib.php')) { $this->load->library(array('smslib')); $content = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_sms_changepw_user_content') ); $sender = array( 'phone' => $this->cbconfig->item('sms_admin_phone'), ); $receiver = array(); $receiver[] = $smssendlistuser; $smsresult = $this->smslib->send($receiver, $sender, $content, $date = '', '회원패스워드변경알림'); } } $view['view']['result_message'] = '회원님의 패스워드가 변경되었습니다'; // 이벤트가 존재하면 실행합니다 $view['view']['event']['before_result_layout'] = Events::trigger('before_result_layout', $eventname); /** * 레이아웃을 정의합니다 */ $page_title = $this->cbconfig->item('site_meta_title_membermodify'); $meta_description = $this->cbconfig->item('site_meta_description_membermodify'); $meta_keywords = $this->cbconfig->item('site_meta_keywords_membermodify'); $meta_author = $this->cbconfig->item('site_meta_author_membermodify'); $page_name = $this->cbconfig->item('site_page_name_membermodify'); $layoutconfig = array( 'path' => 'mypage', 'layout' => 'layout', 'skin' => 'member_modify_result', 'layout_dir' => $this->cbconfig->item('layout_mypage'), 'mobile_layout_dir' => $this->cbconfig->item('mobile_layout_mypage'), 'use_sidebar' => $this->cbconfig->item('sidebar_mypage'), 'use_mobile_sidebar' => $this->cbconfig->item('mobile_sidebar_mypage'), 'skin_dir' => $this->cbconfig->item('skin_mypage'), 'mobile_skin_dir' => $this->cbconfig->item('mobile_skin_mypage'), 'page_title' => $page_title, 'meta_description' => $meta_description, 'meta_keywords' => $meta_keywords, 'meta_author' => $meta_author, 'page_name' => $page_name, ); $view['layout'] = $this->managelayout->front($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 memberleave() { // 이벤트 라이브러리를 로딩합니다 $eventname = 'event_membermodify_memberleave'; $this->load->event($eventname); /** * 로그인이 필요한 페이지입니다 */ required_user_login(); $mem_id = (int) $this->member->item('mem_id'); $view = array(); $view['view'] = array(); // 이벤트가 존재하면 실행합니다 $view['view']['event']['before'] = Events::trigger('before', $eventname); $this->load->library(array('form_validation')); $login_fail = false; $valid_fail = false; /** * 전송된 데이터의 유효성을 체크합니다 */ $config = array( array( 'field' => 'mem_password', 'label' => '패스워드', 'rules' => 'trim|required|min_length[4]|callback__cur_password_check', ), ); $this->form_validation->set_rules($config); /** * 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다. * 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다 */ if ($this->form_validation->run() === false) { // 이벤트가 존재하면 실행합니다 $view['view']['event']['formrunfalse'] = Events::trigger('formrunfalse', $eventname); /** * 레이아웃을 정의합니다 */ $page_title = $this->cbconfig->item('site_meta_title_membermodify_memberleave'); $meta_description = $this->cbconfig->item('site_meta_description_membermodify_memberleave'); $meta_keywords = $this->cbconfig->item('site_meta_keywords_membermodify_memberleave'); $meta_author = $this->cbconfig->item('site_meta_author_membermodify_memberleave'); $page_name = $this->cbconfig->item('site_page_name_membermodify_memberleave'); if ($this->member->is_admin() === 'super') { $skin = 'member_admin'; } else { $skin = 'memberleave_password'; } $layoutconfig = array( 'path' => 'mypage', 'layout' => 'layout', 'skin' => $skin, 'layout_dir' => $this->cbconfig->item('layout_mypage'), 'mobile_layout_dir' => $this->cbconfig->item('mobile_layout_mypage'), 'use_sidebar' => $this->cbconfig->item('sidebar_mypage'), 'use_mobile_sidebar' => $this->cbconfig->item('mobile_sidebar_mypage'), 'skin_dir' => $this->cbconfig->item('skin_mypage'), 'mobile_skin_dir' => $this->cbconfig->item('mobile_skin_mypage'), 'page_title' => $page_title, 'meta_description' => $meta_description, 'meta_keywords' => $meta_keywords, 'meta_author' => $meta_author, 'page_name' => $page_name, ); $view['layout'] = $this->managelayout->front($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); $emailsendlistadmin = array(); $notesendlistadmin = array(); $smssendlistadmin = array(); $emailsendlistuser = array(); $notesendlistuser = array(); $smssendlistuser = array(); $superadminlist = ''; if ($this->cbconfig->item('send_email_memberleave_admin') OR $this->cbconfig->item('send_note_memberleave_admin') OR $this->cbconfig->item('send_sms_memberleave_admin')) { $mselect = 'mem_id, mem_email, mem_nickname, mem_phone'; $superadminlist = $this->Member_model->get($mselect); } if ($this->cbconfig->item('send_email_memberleave_admin') && $superadminlist) { foreach ($superadminlist as $key => $value) { $emailsendlistadmin[$value['mem_id']] = $value; } } if (($this->cbconfig->item('send_email_memberleave_user') && $this->member->item('mem_receive_email')) OR $this->cbconfig->item('send_email_memberleave_alluser')) { $emailsendlistuser['mem_email'] = $this->member->item('mem_email'); } if ($this->cbconfig->item('send_note_memberleave_admin') && $superadminlist) { foreach ($superadminlist as $key => $value) { $notesendlistadmin[$value['mem_id']] = $value; } } if ($this->cbconfig->item('send_sms_memberleave_admin') && $superadminlist) { foreach ($superadminlist as $key => $value) { $smssendlistadmin[$value['mem_id']] = $value; } } if (($this->cbconfig->item('send_sms_memberleave_user') && $this->member->item('mem_receive_sms')) OR $this->cbconfig->item('send_sms_memberleave_alluser')) { if ($this->member->item('mem_phone')) { $smssendlistuser['mem_id'] = $mem_id; $smssendlistuser['mem_nickname'] = $this->member->item('mem_nickname'); $smssendlistuser['mem_phone'] = $this->member->item('mem_phone'); } } $searchconfig = array( '{홈페이지명}', '{회사명}', '{홈페이지주소}', '{회원아이디}', '{회원닉네임}', '{회원실명}', '{회원이메일}', '{메일수신여부}', '{쪽지수신여부}', '{문자수신여부}', '{회원아이피}', ); $receive_email = $this->member->item('mem_receive_email') ? '동의' : '거부'; $receive_note = $this->member->item('mem_use_note') ? '동의' : '거부'; $receive_sms = $this->member->item('mem_receive_sms') ? '동의' : '거부'; $replaceconfig = array( $this->cbconfig->item('site_title'), $this->cbconfig->item('company_name'), site_url(), $this->member->item('mem_userid'), $this->member->item('mem_nickname'), $this->member->item('mem_username'), $this->member->item('mem_email'), $receive_email, $receive_note, $receive_sms, $this->input->ip_address(), ); $replaceconfig_escape = array( html_escape($this->cbconfig->item('site_title')), html_escape($this->cbconfig->item('company_name')), site_url(), html_escape($this->member->item('mem_userid')), html_escape($this->member->item('mem_nickname')), html_escape($this->member->item('mem_username')), html_escape($this->member->item('mem_email')), $receive_email, $receive_note, $receive_sms, $this->input->ip_address(), ); if ($emailsendlistadmin) { $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_email_memberleave_admin_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_email_memberleave_admin_content') ); foreach ($emailsendlistadmin as $akey => $aval) { $this->email->clear(true); $this->email->from($this->cbconfig->item('webmaster_email'), $this->cbconfig->item('webmaster_name')); $this->email->to(element('mem_email', $aval)); $this->email->subject($title); $this->email->message($content); $this->email->send(); } } if ($emailsendlistuser) { $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_email_memberleave_user_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_email_memberleave_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', $emailsendlistuser)); $this->email->subject($title); $this->email->message($content); $this->email->send(); } if ($notesendlistadmin) { $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_note_memberleave_admin_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_note_memberleave_admin_content') ); foreach ($notesendlistadmin as $akey => $aval) { $note_result = $this->notelib->send_note( $sender = 0, $receiver = element('mem_id', $aval), $title, $content, 1 ); } } if ($smssendlistadmin) { if (file_exists(APPPATH . 'libraries/Smslib.php')) { $this->load->library(array('smslib')); $content = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_sms_memberleave_admin_content') ); $sender = array( 'phone' => $this->cbconfig->item('sms_admin_phone'), ); $receiver = array(); foreach ($smssendlistadmin as $akey => $aval) { $receiver[] = array( 'mem_id' => element('mem_id', $aval), 'name' => element('mem_nickname', $aval), 'phone' => element('mem_phone', $aval), ); } $smsresult = $this->smslib->send($receiver, $sender, $content, $date = '', '회원탈퇴알림'); } } if ($smssendlistuser) { if (file_exists(APPPATH . 'libraries/Smslib.php')) { $this->load->library(array('smslib')); $content = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_sms_memberleave_user_content') ); $sender = array( 'phone' => $this->cbconfig->item('sms_admin_phone'), ); $receiver = array(); $receiver[] = $smssendlistuser; $smsresult = $this->smslib->send($receiver, $sender, $content, $date = '', '회원탈퇴알림'); } } $this->member->delete_member($mem_id); $this->session->sess_destroy(); // 이벤트가 존재하면 실행합니다 $view['view']['event']['before_layout'] = Events::trigger('before_layout', $eventname); /** * 레이아웃을 정의합니다 */ $page_title = $this->cbconfig->item('site_meta_title_membermodify_memberleave'); $meta_description = $this->cbconfig->item('site_meta_description_membermodify_memberleave'); $meta_keywords = $this->cbconfig->item('site_meta_keywords_membermodify_memberleave'); $meta_author = $this->cbconfig->item('site_meta_author_membermodify_memberleave'); $page_name = $this->cbconfig->item('site_page_name_membermodify_memberleave'); $layoutconfig = array( 'path' => 'mypage', 'layout' => 'layout', 'skin' => 'memberleave', 'layout_dir' => $this->cbconfig->item('layout_mypage'), 'mobile_layout_dir' => $this->cbconfig->item('mobile_layout_mypage'), 'use_sidebar' => $this->cbconfig->item('sidebar_mypage'), 'use_mobile_sidebar' => $this->cbconfig->item('mobile_sidebar_mypage'), 'skin_dir' => $this->cbconfig->item('skin_mypage'), 'mobile_skin_dir' => $this->cbconfig->item('mobile_skin_mypage'), 'page_title' => $page_title, 'meta_description' => $meta_description, 'meta_keywords' => $meta_keywords, 'meta_author' => $meta_author, 'page_name' => $page_name, ); $view['layout'] = $this->managelayout->front($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 _mem_userid_check($str) { if (preg_match("/[\,]?{$str}/i", $this->cbconfig->item('denied_userid_list'))) { $this->form_validation->set_message( '_mem_userid_check', $str . ' 은(는) 예약어로 사용하실 수 없는 회원아이디입니다' ); return false; } return true; } /** * 닉네임체크 함수입니다 */ public function _mem_nickname_check($str) { if ($str === $this->member->item('mem_nickname')) { return true; } $this->load->helper('chkstring'); if (chkstring($str, _HANGUL_ + _ALPHABETIC_ + _NUMERIC_) === false) { $this->form_validation->set_message( '_mem_nickname_check', '닉네임은 공백없이 한글, 영문, 숫자만 입력 가능합니다' ); return false; } if (preg_match("/[\,]?{$str}/i", $this->cbconfig->item('denied_nickname_list'))) { $this->form_validation->set_message( '_mem_nickname_check', $str . ' 은(는) 예약어로 사용하실 수 없는 닉네임입니다' ); return false; } $countwhere = array( 'mem_nickname' => $str, ); $row = $this->Member_model->count_by($countwhere); if ($row > 0) { $this->form_validation->set_message( '_mem_nickname_check', $str . ' 는 이미 다른 회원이 사용하고 있는 닉네임입니다' ); return false; } $countwhere = array( 'mni_nickname' => $str, ); $row = $this->Member_nickname_model->count_by($countwhere); if ($row > 0) { $this->form_validation->set_message( '_mem_nickname_check', $str . ' 는 이미 다른 회원이 사용하고 있는 닉네임입니다' ); return false; } return true; } /** * 이메일 체크 함수입니다 */ public function _mem_email_check($str) { list($emailid, $emaildomain) = explode('@', $str); $denied_list = explode(',', $this->cbconfig->item('denied_email_list')); $emaildomain = trim($emaildomain); $denied_list = array_map('trim', $denied_list); if (in_array($emaildomain, $denied_list)) { $this->form_validation->set_message( '_mem_email_check', $emaildomain . ' 은(는) 사용하실 수 없는 이메일입니다' ); return false; } return true; } /** * 현재 패스워드가 맞는지 체크합니다 */ public function _cur_password_check($str) { if ( ! function_exists('password_hash')) { $this->load->helper('password'); } if ( ! $this->member->item('mem_id') OR ! $this->member->item('mem_password')) { $this->form_validation->set_message( '_cur_password_check', '패스워드가 맞지 않습니다' ); return false; } elseif ( ! password_verify($str, $this->member->item('mem_password'))) { $this->form_validation->set_message( '_cur_password_check', '패스워드가 맞지 않습니다' ); return false; } return true; } /** * 새로운 패스워드가 환경설정에 정한 글자수를 채웠는지를 체크합니다 */ public function _mem_password_check($str) { $uppercase = $this->cbconfig->item('password_uppercase_length'); $number = $this->cbconfig->item('password_numbers_length'); $specialchar = $this->cbconfig->item('password_specialchars_length'); $this->load->helper('chkstring'); $str_uc = count_uppercase($str); $str_num = count_numbers($str); $str_spc = count_specialchars($str); if ($str_uc < $uppercase OR $str_num < $number OR $str_spc < $specialchar) { $description = '비밀번호는 '; if ($str_uc < $uppercase) { $description .= ' ' . $uppercase . '개 이상의 대문자'; } if ($str_num < $number) { $description .= ' ' . $number . '개 이상의 숫자'; } if ($str_spc < $specialchar) { $description .= ' ' . $specialchar . '개 이상의 특수문자'; } $description .= '를 포함해야 합니다'; $this->form_validation->set_message( '_mem_password_check', $description ); return false; } return true; } }