load->library(array('querystring', 'form_validation', 'email'));
}
/**
* 회원정보 수정 페이지입니다
*/
public function index()
{
/**
* 로그인이 필요한 페이지입니다
*/
required_user_login();
$view = array();
$view['view'] = array();
$user_id = (int) $this->userlib->item('user_id');
if ( ! $this->userlib->item('user_password')) {
redirect('usermodify/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' => 'user_password',
'label' => '패스워드',
'rules' => 'trim|required|min_length[4]|callback__cur_password_check',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
$skin = 'user_password';
/**
* 레이아웃을 정의합니다
*/
$layoutconfig = array(
'path' => 'mypage',
'layout' => 'layout',
'skin' => $skin,
);
$view['layout'] = $this->layoutlib->front($layoutconfig, $this->configlib->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 처리가 필요한 상황입니다
*/
$this->session->set_userdata(
'usermodify',
'1'
);
redirect('usermodify/modify');
}
}
/**
* 회원정보 수정 페이지입니다
*/
public function modify()
{
if ( ! $this->session->userdata('usermodify')) {
redirect('usermodify');
}
/**
* 로그인이 필요한 페이지입니다
*/
required_user_login();
$user_id = (int) $this->userlib->item('user_id');
if ( ! function_exists('password_hash')) {
$this->load->helper('password');
}
$view = array();
$view['view'] = array();
$email_description = '';
if ($this->configlib->item('use_register_email_auth')) {
$email_description = '이메일을 변경하시면 메일 인증 후에 계속 사용이 가능합니다';
}
$configbasic = array();
$configbasic['user_username'] = array(
'field' => 'user_username',
'label' => '이름',
'rules' => 'trim|required|min_length[2]|max_length[20]|callback__user_username_check',
);
$configbasic['user_email'] = array(
'field' => 'user_email',
'label' => '이메일',
'rules' => 'trim|required|valid_email|max_length[50]|is_unique[user.user_email.user_id.' . $user_id . ']|callback__user_email_check',
'description' => $email_description,
);
$configbasic['user_homepage'] = array(
'field' => 'user_homepage',
'label' => '홈페이지',
'rules' => 'prep_url|valid_url',
);
$configbasic['user_phone'] = array(
'field' => 'user_phone',
'label' => '전화번호',
'rules' => 'trim|valid_phone',
);
$configbasic['user_birthday'] = array(
'field' => 'user_birthday',
'label' => '생년월일',
'rules' => 'trim|exact_length[10]',
);
$configbasic['user_sex'] = array(
'field' => 'user_sex',
'label' => '성별',
'rules' => 'trim|exact_length[1]',
);
$configbasic['user_zipcode'] = array(
'field' => 'user_zipcode',
'label' => '우편번호',
'rules' => 'trim|min_length[5]|max_length[7]',
);
$configbasic['user_address1'] = array(
'field' => 'user_address1',
'label' => '기본주소',
'rules' => 'trim',
);
$configbasic['user_address2'] = array(
'field' => 'user_address2',
'label' => '상세주소',
'rules' => 'trim',
);
$configbasic['user_address3'] = array(
'field' => 'user_address3',
'label' => '참고항목',
'rules' => 'trim',
);
$configbasic['user_address4'] = array(
'field' => 'user_address4',
'label' => '지번',
'rules' => 'trim',
);
$configbasic['user_receive_email'] = array(
'field' => 'user_receive_email',
'label' => '이메일수신여부',
'rules' => 'trim|exact_length[1]',
);
$this->load->library(array('form_validation'));
$login_fail = false;
$valid_fail = false;
$registerform = $this->configlib->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 === 'user_password') {
continue;
}
if (element('func', $value) === 'basic') {
if ($key === 'user_address') {
if (element('required', $value) === '1') {
$configbasic['user_zipcode']['rules'] = $configbasic['user_zipcode']['rules'] . '|required';
}
$config[] = $configbasic['user_zipcode'];
if (element('required', $value) === '1') {
$configbasic['user_address1']['rules'] = $configbasic['user_address1']['rules'] . '|required';
}
$config[] = $configbasic['user_address1'];
if (element('required', $value) === '1') {
$configbasic['user_address2']['rules'] = $configbasic['user_address2']['rules'] . '|required';
}
$config[] = $configbasic['user_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->configlib->item('use_user_photo')
&& $this->configlib->item('user_photo_width') > 0
&& $this->configlib->item('user_photo_height') > 0) {
if (isset($_FILES) && isset($_FILES['user_photo']) && isset($_FILES['user_photo']['name']) && $_FILES['user_photo']['name']) {
$upload_path = config_item('uploads_dir') . '/user_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 = '';
$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('user_photo')) {
$img = $this->upload->data();
$updatephoto = cdate('Y') . '/' . cdate('m') . '/' . $img['file_name'];
} else {
$file_error = $this->upload->display_errors();
}
}
}
if ($this->configlib->item('use_user_icon')
&& $this->configlib->item('user_icon_width') > 0
&& $this->configlib->item('user_icon_height') > 0) {
if (isset($_FILES)
&& isset($_FILES['user_icon'])
&& isset($_FILES['user_icon']['name'])
&& $_FILES['user_icon']['name']) {
$upload_path = config_item('uploads_dir') . '/user_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 = '';
$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('user_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']['message'] = $file_error . $file_error2;
$html_content = '';
$k = 0;
if ($form && is_array($form)) {
foreach ($form as $key => $value) {
if ( ! element('use', $value)) {
continue;
}
if ($key === 'user_password') {
continue;
}
$required = element('required', $value) ? 'required' : '';
$item = $this->userlib->item(element('field_name', $value));
$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 {
$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) === 'user_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) === 'user_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) === 'user_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;
/**
* 레이아웃을 정의합니다
*/
$layoutconfig = array(
'path' => 'mypage',
'layout' => 'layout',
'skin' => 'user_modify',
);
$view['layout'] = $this->layoutlib->front($layoutconfig, $this->configlib->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 처리가 필요한 상황입니다
*/
$updatedata = array();
$metadata = array();
$updatedata['user_email'] = $this->input->post('user_email');
if ($this->userlib->item('user_email') !== $this->input->post('user_email')) {
$updatedata['user_email_cert'] = 0;
$metadata['meta_email_cert_datetime'] = '';
}
if (isset($form['user_homepage']['use']) && $form['user_homepage']['use']) {
$updatedata['user_homepage'] = $this->input->post('user_homepage', null, '');
}
if (isset($form['user_phone']['use']) && $form['user_phone']['use']) {
$updatedata['user_phone'] = $this->input->post('user_phone', null, '');
}
if (isset($form['user_birthday']['use']) && $form['user_birthday']['use']) {
$updatedata['user_birthday'] = $this->input->post('user_birthday', null, '');
}
if (isset($form['user_sex']['use']) && $form['user_sex']['use']) {
$updatedata['user_sex'] = $this->input->post('user_sex', null, '');
}
if (isset($form['user_address']['use']) && $form['user_address']['use']) {
$updatedata['user_zipcode'] = $this->input->post('user_zipcode', null, '');
$updatedata['user_address1'] = $this->input->post('user_address1', null, '');
$updatedata['user_address2'] = $this->input->post('user_address2', null, '');
$updatedata['user_address3'] = $this->input->post('user_address3', null, '');
$updatedata['user_address4'] = $this->input->post('user_address4', null, '');
}
$updatedata['user_receive_email'] = $this->input->post('user_receive_email') ? 1 : 0;
if ($this->input->post('user_photo_del')) {
$updatedata['user_photo'] = '';
} elseif ($updatephoto) {
$updatedata['user_photo'] = $updatephoto;
}
if ($this->userlib->item('user_photo')
&& ($this->input->post('user_photo_del') OR $updatephoto)) {
// 기존 파일 삭제
@unlink(config_item('uploads_dir') . '/user_photo/' . $this->userlib->item('user_photo'));
}
if ($this->input->post('user_icon_del')) {
$updatedata['user_icon'] = '';
} elseif ($updateicon) {
$updatedata['user_icon'] = $updateicon;
}
if ($this->userlib->item('user_icon')
&& ($this->input->post('user_icon_del') OR $updateicon)) {
// 기존 파일 삭제
@unlink(config_item('uploads_dir') . '/user_icon/' . $this->userlib->item('user_icon'));
}
$this->User_model->update($user_id, $updatedata);
$this->User_meta_model->save($user_id, $metadata);
if ($this->configlib->item('use_register_email_auth')
&& $this->userlib->item('user_email') !== $this->input->post('user_email')) {
$vericode = array('$', '/', '.');
$verificationcode = str_replace(
$vericode,
'',
password_hash($user_id . '-' . $this->input->post('user_email') . '-' . random_string('alnum', 10), PASSWORD_BCRYPT)
);
$beforeauthdata = array(
'user_id' => $user_id,
'uae_type' => 2,
);
$this->User_auth_email_model->delete_where($beforeauthdata);
$authdata = array(
'user_id' => $user_id,
'uae_key' => $verificationcode,
'uae_type' => 2,
'uae_generate_datetime' => cdate('Y-m-d H:i:s'),
);
$this->User_auth_email_model->insert($authdata);
$verify_url = site_url('verify/confirmemail?user=' . $this->userlib->item('user_id') . '&code=' . $verificationcode);
$searchconfig = array(
'{홈페이지명}',
'{홈페이지주소}',
'{회원명}',
'{회원이메일}',
'{변경전이메일}',
'{메일수신여부}',
'{회원아이피}',
'{메일인증주소}',
);
$receive_email = $this->userlib->item('user_receive_email') ? '동의' : '거부';
$replaceconfig = array(
$this->configlib->item('site_title'),
site_url(),
$this->userlib->item('user_username'),
$this->input->post('user_email'),
$this->userlib->item('user_email'),
$receive_email,
$this->input->ip_address(),
$verify_url,
);
$replaceconfig_escape = array(
html_escape($this->configlib->item('site_title')),
site_url(),
html_escape($this->userlib->item('user_username')),
html_escape($this->input->post('user_email')),
html_escape($this->userlib->item('user_email')),
$receive_email,
$this->input->ip_address(),
$verify_url,
);
$title = str_replace(
$searchconfig,
$replaceconfig,
$this->configlib->item('send_email_changeemail_user_title')
);
$content = str_replace(
$searchconfig,
$replaceconfig_escape,
$this->configlib->item('send_email_changeemail_user_content')
);
$this->email->clear(true);
$this->email->from($this->configlib->item('webmaster_email'), $this->configlib->item('webmaster_name'));
$this->email->to($this->input->post('user_email'));
$this->email->subject($title);
$this->email->message($content);
$this->email->send();
$view['view']['result_message'] = $this->input->post('user_email') . '로 인증메일이 발송되었습니다.
발송된 인증메일을 확인하신 후에 사이트 이용이 가능합니다';
$this->session->sess_destroy();
} else {
$view['view']['result_message'] = '회원정보가 변경되었습니다.
감사합니다';
}
$layoutconfig = array(
'path' => 'mypage',
'layout' => 'layout',
'skin' => 'user_modify_result',
);
$view['layout'] = $this->layoutlib->front($layoutconfig, $this->configlib->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()
{
/**
* 로그인이 필요한 페이지입니다
*/
required_user_login();
$user_id = (int) $this->userlib->item('user_id');
if ($this->userlib->item('user_password')) {
redirect('usermodify');
}
if ( ! function_exists('password_hash')) {
$this->load->helper('password');
}
$view = array();
$view['view'] = array();
$password_length = $this->configlib->item('password_length');
$view['view']['password_length'] = $password_length;
$config = array();
$config['user_password'] = array(
'field' => 'user_password',
'label' => '패스워드',
'rules' => 'trim|required|min_length[' . $password_length . ']|callback__user_password_check',
);
$config['user_password_re'] = array(
'field' => 'user_password_re',
'label' => '패스워드 확인',
'rules' => 'trim|required|min_length[' . $password_length . ']|matches[user_password]',
);
$config['user_username'] = array(
'field' => 'user_username',
'label' => '회원명',
'rules' => 'trim|required|min_length[2]|max_length[20]|callback__user_username_check',
);
$config['user_email'] = array(
'field' => 'user_email',
'label' => '이메일',
'rules' => 'trim|required|valid_email|max_length[50]|is_unique[user.user_email.user_id.' . $user_id . ']|callback__user_email_check',
);
$this->load->library(array('form_validation'));
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
/**
* 레이아웃을 정의합니다
*/
$layoutconfig = array(
'path' => 'mypage',
'layout' => 'layout',
'skin' => 'user_defaultinfo',
);
$view['layout'] = $this->layoutlib->front($layoutconfig, $this->configlib->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 처리가 필요한 상황입니다
*/
$updatedata = array();
$metadata = array();
$updatedata['user_email'] = $this->input->post('user_email');
if ($this->userlib->item('user_email') !== $this->input->post('user_email')) {
$updatedata['user_email_cert'] = 0;
$metadata['meta_email_cert_datetime'] = '';
}
$updatedata['user_password'] = password_hash($this->input->post('user_password'), PASSWORD_BCRYPT);
$this->User_model->update($user_id, $updatedata);
$this->User_meta_model->save($user_id, $metadata);
if ($this->configlib->item('use_register_email_auth')
&& $this->userlib->item('user_email') !== $this->input->post('user_email')) {
$vericode = array('$', '/', '.');
$verificationcode = str_replace(
$vericode,
'',
password_hash($user_id . '-' . $this->input->post('user_email') . '-' . random_string('alnum', 10), PASSWORD_BCRYPT)
);
$beforeauthdata = array(
'user_id' => $user_id,
'uae_type' => 2,
);
$this->User_auth_email_model->delete_where($beforeauthdata);
$authdata = array(
'user_id' => $user_id,
'uae_key' => $verificationcode,
'uae_type' => 2,
'uae_generate_datetime' => cdate('Y-m-d H:i:s'),
);
$this->User_auth_email_model->insert($authdata);
$verify_url = site_url('verify/confirmemail?user=' . $this->input->post('user_id') . '&code=' . $verificationcode);
$searchconfig = array(
'{홈페이지명}',
'{홈페이지주소}',
'{회원명}',
'{회원이메일}',
'{변경전이메일}',
'{메일수신여부}',
'{회원아이피}',
'{메일인증주소}',
);
$receive_email = $this->userlib->item('user_receive_email') ? '동의' : '거부';
$replaceconfig = array(
$this->configlib->item('site_title'),
site_url(),
$this->userlib->item('user_username'),
$this->input->post('user_email'),
$this->userlib->item('user_email'),
$receive_email,
$this->input->ip_address(),
$verify_url,
);
$replaceconfig_escape = array(
html_escape($this->configlib->item('site_title')),
site_url(),
html_escape($this->userlib->item('user_username')),
html_escape($this->input->post('user_email')),
html_escape($this->userlib->item('user_email')),
$receive_email,
$this->input->ip_address(),
$verify_url,
);
$title = str_replace(
$searchconfig,
$replaceconfig,
$this->configlib->item('send_email_changeemail_user_title')
);
$content = str_replace(
$searchconfig,
$replaceconfig_escape,
$this->configlib->item('send_email_changeemail_user_content')
);
$this->email->clear(true);
$this->email->from($this->configlib->item('webmaster_email'), $this->configlib->item('webmaster_name'));
$this->email->to($this->input->post('user_email'));
$this->email->subject($title);
$this->email->message($content);
$this->email->send();
$view['view']['result_message'] = $this->input->post('user_email') . '로 인증메일이 발송되었습니다.
발송된 인증메일을 확인하신 후에 사이트 이용이 가능합니다';
} else {
$view['view']['result_message'] = '회원정보가 변경되었습니다.
감사합니다';
}
$layoutconfig = array(
'path' => 'mypage',
'layout' => 'layout',
'skin' => 'user_modify_result',
);
$view['layout'] = $this->layoutlib->front($layoutconfig, $this->configlib->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()
{
/**
* 로그인이 필요한 페이지입니다
*/
required_user_login();
$user_id = (int) $this->userlib->item('user_id');
if ( ! $this->session->userdata('usermodify')) {
redirect('usermodify');
}
$view = array();
$view['view'] = array();
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
if ( ! function_exists('password_hash')) {
$this->load->helper('password');
}
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$password_length = $this->configlib->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__user_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) {
$password_description = '비밀번호는 ' . $password_length . '자리 이상이어야 ';
if ($this->configlib->item('password_uppercase_length')
OR $this->configlib->item('password_numbers_length')
OR $this->configlib->item('password_specialchars_length')) {
$password_description .= '하며 ';
if ($this->configlib->item('password_uppercase_length')) {
$password_description .= ', ' . $this->configlib->item('password_uppercase_length') . '개의 대문자';
}
if ($this->configlib->item('password_numbers_length')) {
$password_description .= ', ' . $this->configlib->item('password_numbers_length') . '개의 숫자';
}
if ($this->configlib->item('password_specialchars_length')) {
$password_description .= ', ' . $this->configlib->item('password_specialchars_length') . '개의 특수문자';
}
$password_description .= '를 포함해야 ';
}
$password_description .= '합니다';
$view['view']['info'] = $password_description;
/**
* 레이아웃을 정의합니다
*/
$layoutconfig = array(
'path' => 'mypage',
'layout' => 'layout',
'skin' => 'password_modify',
);
$view['layout'] = $this->layoutlib->front($layoutconfig, $this->configlib->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 {
$hash = password_hash($this->input->post('new_password'), PASSWORD_BCRYPT);
$updatedata = array(
'user_password' => $hash,
);
$this->User_model->update($user_id, $updatedata);
$metadata = array(
'meta_change_pw_datetime' => cdate('Y-m-d H:i:s'),
);
$this->User_meta_model->save($user_id, $metadata);
$emailsendlistadmin = array();
$emailsendlistuser = array();
$superadminlist = '';
if ($this->configlib->item('send_email_changepw_admin')) {
$mselect = 'user_id, user_email, user_username, user_phone';
$superadminlist = $this->User_model->get_superadmin_list($mselect);
}
if ($this->configlib->item('send_email_changepw_admin') && $superadminlist) {
foreach ($superadminlist as $key => $value) {
$emailsendlistadmin[$value['user_id']] = $value;
}
}
if (($this->configlib->item('send_email_changepw_user') && $this->userlib->item('user_receive_email'))
OR $this->configlib->item('send_email_changepw_alluser')) {
$emailsendlistuser['user_email'] = $this->userlib->item('user_email');
}
$searchconfig = array(
'{홈페이지명}',
'{홈페이지주소}',
'{회원명}',
'{회원이메일}',
'{메일수신여부}',
'{회원아이피}',
);
$receive_email = $this->userlib->item('user_receive_email') ? '동의' : '거부';
$replaceconfig = array(
$this->configlib->item('site_title'),
site_url(),
$this->userlib->item('user_username'),
$this->userlib->item('user_email'),
$receive_email,
$this->input->ip_address(),
);
$replaceconfig_escape = array(
html_escape($this->configlib->item('site_title')),
site_url(),
html_escape($this->userlib->item('user_username')),
html_escape($this->userlib->item('user_email')),
$receive_email,
$this->input->ip_address(),
);
if ($emailsendlistadmin) {
$title = str_replace(
$searchconfig,
$replaceconfig,
$this->configlib->item('send_email_changepw_admin_title')
);
$content = str_replace(
$searchconfig,
$replaceconfig_escape,
$this->configlib->item('send_email_changepw_admin_content')
);
foreach ($emailsendlistadmin as $akey => $aval) {
$this->email->clear(true);
$this->email->from($this->configlib->item('webmaster_email'), $this->configlib->item('webmaster_name'));
$this->email->to(element('user_email', $aval));
$this->email->subject($title);
$this->email->message($content);
$this->email->send();
}
}
if ($emailsendlistuser) {
$title = str_replace(
$searchconfig,
$replaceconfig,
$this->configlib->item('send_email_changepw_user_title')
);
$content = str_replace(
$searchconfig,
$replaceconfig_escape,
$this->configlib->item('send_email_changepw_user_content')
);
$this->email->clear(true);
$this->email->from($this->configlib->item('webmaster_email'), $this->configlib->item('webmaster_name'));
$this->email->to(element('user_email', $emailsendlistuser));
$this->email->subject($title);
$this->email->message($content);
$this->email->send();
}
$view['view']['result_message'] = '회원님의 패스워드가 변경되었습니다';
/**
* 레이아웃을 정의합니다
*/
$layoutconfig = array(
'path' => 'mypage',
'layout' => 'layout',
'skin' => 'user_modify_result',
);
$view['layout'] = $this->layoutlib->front($layoutconfig, $this->configlib->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 userleave()
{
/**
* 로그인이 필요한 페이지입니다
*/
required_user_login();
$user_id = (int) $this->userlib->item('user_id');
$view = array();
$view['view'] = array();
$this->load->library(array('form_validation'));
$login_fail = false;
$valid_fail = false;
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'user_password',
'label' => '패스워드',
'rules' => 'trim|required|min_length[4]|callback__cur_password_check',
),
);
$this->form_validation->set_rules($config);
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($this->form_validation->run() === false) {
/**
* 레이아웃을 정의합니다
*/
if ($this->userlib->is_admin() === 'super') {
$skin = 'user_admin';
} else {
$skin = 'userleave_password';
}
$layoutconfig = array(
'path' => 'mypage',
'layout' => 'layout',
'skin' => $skin,
);
$view['layout'] = $this->layoutlib->front($layoutconfig, $this->configlib->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 처리가 필요한 상황입니다
*/
$emailsendlistadmin = array();
$emailsendlistuser = array();
$superadminlist = '';
if ($this->configlib->item('send_email_userleave_admin')) {
$mselect = 'user_id, user_email, user_username, user_phone';
$superadminlist = $this->User_model->get($mselect);
}
if ($this->configlib->item('send_email_userleave_admin') && $superadminlist) {
foreach ($superadminlist as $key => $value) {
$emailsendlistadmin[$value['user_id']] = $value;
}
}
if (($this->configlib->item('send_email_userleave_user') && $this->userlib->item('user_receive_email'))
OR $this->configlib->item('send_email_userleave_alluser')) {
$emailsendlistuser['user_email'] = $this->userlib->item('user_email');
}
$searchconfig = array(
'{홈페이지명}',
'{홈페이지주소}',
'{회원명}',
'{회원이메일}',
'{메일수신여부}',
'{회원아이피}',
);
$receive_email = $this->userlib->item('user_receive_email') ? '동의' : '거부';
$replaceconfig = array(
$this->configlib->item('site_title'),
site_url(),
$this->userlib->item('user_username'),
$this->userlib->item('user_email'),
$receive_email,
$this->input->ip_address(),
);
$replaceconfig_escape = array(
html_escape($this->configlib->item('site_title')),
site_url(),
html_escape($this->userlib->item('user_username')),
html_escape($this->userlib->item('user_email')),
$receive_email,
$this->input->ip_address(),
);
if ($emailsendlistadmin) {
$title = str_replace(
$searchconfig,
$replaceconfig,
$this->configlib->item('send_email_userleave_admin_title')
);
$content = str_replace(
$searchconfig,
$replaceconfig_escape,
$this->configlib->item('send_email_userleave_admin_content')
);
foreach ($emailsendlistadmin as $akey => $aval) {
$this->email->clear(true);
$this->email->from($this->configlib->item('webmaster_email'), $this->configlib->item('webmaster_name'));
$this->email->to(element('user_email', $aval));
$this->email->subject($title);
$this->email->message($content);
$this->email->send();
}
}
if ($emailsendlistuser) {
$title = str_replace(
$searchconfig,
$replaceconfig,
$this->configlib->item('send_email_userleave_user_title')
);
$content = str_replace(
$searchconfig,
$replaceconfig_escape,
$this->configlib->item('send_email_userleave_user_content')
);
$this->email->clear(true);
$this->email->from($this->configlib->item('webmaster_email'), $this->configlib->item('webmaster_name'));
$this->email->to(element('user_email', $emailsendlistuser));
$this->email->subject($title);
$this->email->message($content);
$this->email->send();
}
$this->userlib->delete_user($user_id);
$this->session->sess_destroy();
/**
* 레이아웃을 정의합니다
*/
$layoutconfig = array(
'path' => 'mypage',
'layout' => 'layout',
'skin' => 'userleave',
);
$view['layout'] = $this->layoutlib->front($layoutconfig, $this->configlib->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 _user_username_check($str)
{
if ($str === $this->userlib->item('user_username')) {
return true;
}
$this->load->helper('chkstring');
if (chkstring($str, _HANGUL_ + _ALPHABETIC_ + _NUMERIC_) === false) {
$this->form_validation->set_message(
'_user_username_check',
'회원명은 공백없이 한글, 영문, 숫자만 입력 가능합니다'
);
return false;
}
if (preg_match("/[\,]?{$str}/i", $this->configlib->item('denied_username_list'))) {
$this->form_validation->set_message(
'_user_username_check',
$str . ' 은(는) 예약어로 사용하실 수 없는 회원명입니다'
);
return false;
}
return true;
}
/**
* 이메일 체크 함수입니다
*/
public function _user_email_check($str)
{
list($emailid, $emaildomain) = explode('@', $str);
$denied_list = explode(',', $this->configlib->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(
'_user_email_check',
$emaildomain . ' 은(는) 사용하실 수 없는 이메일입니다'
);
return false;
}
return true;
}
/**
* 현재 패스워드가 맞는지 체크합니다
*/
public function _cur_password_check($str)
{
if ( ! function_exists('password_hash')) {
$this->load->helper('password');
}
if ( ! $this->userlib->item('user_id') OR ! $this->userlib->item('user_password')) {
$this->form_validation->set_message(
'_cur_password_check',
'패스워드가 맞지 않습니다'
);
return false;
} elseif ( ! password_verify($str, $this->userlib->item('user_password'))) {
$this->form_validation->set_message(
'_cur_password_check',
'패스워드가 맞지 않습니다'
);
return false;
}
return true;
}
/**
* 새로운 패스워드가 환경설정에 정한 글자수를 채웠는지를 체크합니다
*/
public function _user_password_check($str)
{
$uppercase = $this->configlib->item('password_uppercase_length');
$number = $this->configlib->item('password_numbers_length');
$specialchar = $this->configlib->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(
'_user_password_check',
$description
);
return false;
}
return true;
}
}