*
* @author CIBoard (develop@ciboard.co.kr)
*/
/**
* 댓글 작성시 업데이트 할 때 작동하는 controller 입니다.
*/
class Comment_write extends CB_Controller
{
/**
* 모델을 로딩합니다
*/
protected $models = array('Post', 'Comment');
/**
* 헬퍼를 로딩합니다
*/
protected $helpers = array('form', 'array');
function __construct()
{
parent::__construct();
/**
* 라이브러리를 로딩합니다
*/
$this->load->library(array('querystring', 'accesslevel', 'email', 'notelib', 'point'));
}
/**
* 댓글 작성시 업데이트하는 함수입니다
*/
public function update()
{
// 이벤트 라이브러리를 로딩합니다
$eventname = 'event_comment_write_update';
$this->load->event($eventname);
// 이벤트가 존재하면 실행합니다
Events::trigger('before', $eventname);
$post_id = (int) $this->input->post('post_id');
if (empty($post_id) OR $post_id < 1) {
$result = array('error' => '잘못된 접근입니다');
exit(json_encode($result));
}
$post = $this->Post_model->get_one($post_id);
if ( ! element('post_id', $post)) {
$result = array('error' => '잘못된 접근입니다');
exit(json_encode($result));
}
$board = $this->board->item_all(element('brd_id', $post));
$mem_id = (int) $this->member->item('mem_id');
$mode = ($this->input->post('mode') === 'cu') ? 'cu' : 'c';
if ($mode === 'cu') {
$cmt_id = (int) $this->input->post('cmt_id');
if (empty($cmt_id) OR $cmt_id < 1) {
$result = array('error' => '잘못된 접근입니다');
exit(json_encode($result));
}
$comment = $this->Comment_model->get_one($cmt_id);
if ( ! element('cmt_id', $comment)) {
$result = array('error' => '잘못된 접근입니다');
exit(json_encode($result));
}
if (element('cmt_del', $comment)) {
$result = array('error' => '삭제된 글은 수정하실 수 없습니다');
exit(json_encode($result));
}
}
if (element('notice_comment_block', $board) && element('post_notice', $post)) {
$result = array('error' => '공지사항 글에는 댓글을 입력하실 수 없습니다.');
exit(json_encode($result));
}
$check = array(
'group_id' => element('bgr_id', $board),
'board_id' => element('brd_id', $board),
);
$is_accessable = $this->accesslevel->is_accessable(
element('access_comment', $board),
element('access_comment_level', $board),
element('access_comment_group', $board),
$check
);
if ($is_accessable === false) {
$alertmessage = $this->member->is_member()
? '회원님은 댓글을 작성할 수 있는 권한이 없습니다'
: '비회원은 댓글을 작성할 수 있는 권한이 없습니다.
회원이시라면 로그인 후 이용해 보십시오';
$result = array('error' => $alertmessage);
exit(json_encode($result));
}
$is_admin = $this->member->is_admin(
array(
'board_id' => element('brd_id', $board),
'group_id' => element('bgr_id', $board),
)
);
$origin = '';
$reply = '';
if ($this->input->post('cmt_id') && $mode === 'c') {
$parent_id = (int) $this->input->post('cmt_id');
if (empty($parent_id) OR $parent_id < 1) {
$result = array('error' => '잘못된 접근입니다');
exit(json_encode($result));
}
$origin = $this->Comment_model->get_one($parent_id);
if ( ! element('cmt_id', $origin)) {
$result = array('error' => '잘못된 접근입니다');
exit(json_encode($result));
}
if (element('cmt_del', $origin)) {
$result = array('error' => '삭제된 글에는 답변을 입력하실 수 없습니다');
exit(json_encode($result));
}
if (strlen(element('cmt_reply', $origin)) >= 5) {
$result = array('error' => '더 이상 답변하실 수 없습니다.\\n답변은 5단계 까지만 가능합니다');
exit(json_encode($result));
}
$reply_len = strlen(element('cmt_reply', $origin)) + 1;
$begin_reply_char = 'A';
$end_reply_char = 'Z';
$reply_number = +1;
$this->db->select('MAX(SUBSTRING(cmt_reply, ' . $reply_len . ', 1)) as reply', false);
$this->db->where('cmt_num', element('cmt_num', $origin));
$this->db->where('SUBSTRING(cmt_reply, ' . $reply_len . ', 1) <>', '');
if (element('cmt_id', $origin)) {
$this->db->like('cmt_reply', element('cmt_reply', $origin), 'after');
}
$result = $this->db->get('comment');
$row = $result->row_array();
if ( ! element('reply', $row)) {
$reply_char = $begin_reply_char;
} elseif (element('reply', $row) === $end_reply_char) { // A~Z은 26 입니다.
$result = array('error' => '더 이상 답변하실 수 없습니다.\\n답변은 26개 까지만 가능합니다');
exit(json_encode($result));
} else {
$reply_char = chr(ord(element('reply', $row)) + $reply_number);
}
$reply = element('cmt_reply', $origin) . $reply_char;
}
if ($mode === 'cu') {
if (element('protect_comment_day', $board) > 0 && $is_admin === false) {
if (ctimestamp() - strtotime(element('cmt_datetime', $comment)) >= element('protect_comment_day', $board) * 86400) {
$result = array('error' => '이 게시판은 ' . element('protect_comment_day', $board) . '일 이상된 댓글의 수정을 금지합니다');
exit(json_encode($result));
}
}
if ( ! $mem_id) {
$result = array('error' => '비회원은 수정 권한이 없습니다');
exit(json_encode($result));
}
if ( ! element('mem_id', $comment) && $is_admin === false) {
$result = array('error' => '비회원이 작성하신 글은 수정할 수 없습니다');
exit(json_encode($result));
}
if (element('mem_id', $comment)
&& abs(element('mem_id', $comment)) !== $mem_id
&& $is_admin === false) {
$result = array('error' => '다른 회원님의 댓글은 수정할 수 없습니다');
exit(json_encode($result));
}
}
if ($mode === 'c'
&& $this->session->userdata('lastest_post_time')
&& $this->cbconfig->item('new_post_second')) {
if ($this->session->userdata('lastest_post_time') >= ( ctimestamp() - $this->cbconfig->item('new_post_second')) && $is_admin === false) {
$result = array('error' => '너무 빠른 시간내에 게시물을 연속해서 올릴 수 없습니다.
'
. ($this->cbconfig->item('new_post_second') - (ctimestamp() - $this->session->userdata('lastest_post_time'))) . '초 후 글쓰기가 가능합니다');
exit(json_encode($result));
}
}
if (element('comment_possible_day', $board) > 0 && $is_admin === false
&& $mode === 'c' && ! $this->input->post('cmt_id')) {
if (ctimestamp() - strtotime(element('post_datetime', $post)) >= element('comment_possible_day', $board) * 86400) {
$result = array('error' => '이 게시판은 ' . element('comment_possible_day', $board) . '일 이상된 게시글에 댓글 입력을 금지합니다');
exit(json_encode($result));
}
}
$is_comment_name = ($this->member->is_member() === false) ? true : false;
$can_comment_secret = (element('use_comment_secret', $board) === '1' && $this->member->is_member()) ? true : false;
/**
* Validation 라이브러리를 가져옵니다
*/
$this->load->library('form_validation');
/**
* 전송된 데이터의 유효성을 체크합니다
*/
$config = array(
array(
'field' => 'cmt_content',
'label' => '내용',
'rules' => 'trim|required',
),
);
if ($is_comment_name) {
$password_length = $this->cbconfig->item('password_length');
$config[] = array(
'field' => 'cmt_nickname',
'label' => '닉네임',
'rules' => 'trim|required|min_length[2]|max_length[20]|callback__mem_nickname_check',
);
$config[] = array(
'field' => 'cmt_password',
'label' => '패스워드',
'rules' => 'trim|required|min_length[' . $password_length . ']|callback__mem_password_check',
);
}
if ($this->member->is_member() === false) {
if ($this->cbconfig->item('use_recaptcha')) {
$config[] = array(
'field' => 'g-recaptcha-response',
'label' => '자동등록방지문자',
'rules' => 'trim|required|callback__check_recaptcha',
);
} else {
$config[] = array(
'field' => 'captcha_key',
'label' => '자동등록방지문자',
'rules' => 'trim|required|callback__check_captcha',
);
}
}
$this->form_validation->set_rules($config);
$form_validation = $this->form_validation->run();
/**
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
*/
if ($form_validation === false) {
// 이벤트가 존재하면 실행합니다
Events::trigger('formrunfalse', $eventname);
$result = array('error' => validation_errors('
') ? '' : $this->input->post('cmt_content'); if ($mode === 'c') { if ($origin) { $cmt_num = element('cmt_num', $origin); $cmt_reply = $reply; } else { $cmt_num = $this->Comment_model->next_comment_num(); $cmt_reply = ''; } $updatedata = array( 'cmt_num' => $cmt_num, 'cmt_reply' => $cmt_reply, 'cmt_content' => $cmt_content, 'cmt_html' => $content_type, 'cmt_datetime' => cdate('Y-m-d H:i:s'), 'cmt_updated_datetime' => cdate('Y-m-d H:i:s'), 'cmt_ip' => $this->input->ip_address(), 'post_id' => element('post_id', $post), 'brd_id' => element('brd_id', $post), ); if ($mem_id) { if (element('use_anonymous', $board)) { $updatedata['mem_id'] = (-1) * $mem_id; $updatedata['cmt_userid'] = ''; $updatedata['cmt_username'] = '익명사용자'; $updatedata['cmt_nickname'] = '익명사용자'; $updatedata['cmt_email'] = ''; $updatedata['cmt_homepage'] = ''; } else { $updatedata['mem_id'] = $mem_id; $updatedata['cmt_userid'] = $this->member->item('mem_userid'); $updatedata['cmt_username'] = $this->member->item('mem_username'); $updatedata['cmt_nickname'] = $this->member->item('mem_nickname'); $updatedata['cmt_email'] = $this->member->item('mem_email'); $updatedata['cmt_homepage'] = $this->member->item('mem_homepage'); } } if ($is_comment_name) { if ( ! function_exists('password_hash')) { $this->load->helper('password'); } $updatedata['cmt_nickname'] = $this->input->post('cmt_nickname', null, ''); $updatedata['cmt_password'] = password_hash($this->input->post('cmt_password', null, ''), PASSWORD_BCRYPT); } if ($can_comment_secret) { $updatedata['cmt_secret'] = $this->input->post('cmt_secret') ? 1 : 0; } if ($this->member->is_member() && element('use_comment_secret', $board) === '2') { $updatedata['cmt_secret'] = 1; } $updatedata['cmt_device'] = ($this->cbconfig->get_device_type() === 'mobile') ? 'mobile' : 'desktop'; $cmt_id = $this->Comment_model->insert($updatedata); $this->Post_model->comment_updated($post_id, cdate('Y-m-d H:i:s')); if ($this->cbconfig->item('use_notification') && $this->cbconfig->item('notification_comment')) { $this->load->library('notificationlib'); $not_message = $updatedata['cmt_nickname'] . '님께서 [' . element('post_title', $post) . '] 에 댓글을 남기셨습니다'; $not_url = post_url(element('brd_key', $board), $post_id) . '#comment_' . $cmt_id; $this->notificationlib->set_noti( abs(element('mem_id', $post)), $mem_id, 'comment', $cmt_id, $not_message, $not_url ); } if ($origin && $cmt_reply && $this->cbconfig->item('use_notification') && $this->cbconfig->item('notification_comment_comment') && abs(element('mem_id', $post)) !== abs(element('mem_id', $origin))) { $this->load->library('notificationlib'); $not_message = $updatedata['cmt_nickname'] . '님께서 [' . element('post_title', $post) . '] 글의 회원님의 댓글에 답변댓글을 남기셨습니다'; $not_url = post_url(element('brd_key', $board), $post_id) . '#comment_' . $cmt_id; $this->notificationlib->set_noti( abs(element('mem_id', $origin)), $mem_id, 'comment_comment', $cmt_id, $not_message, $not_url ); } if (element('use_point', $board)) { $point = $this->point->insert_point( $mem_id, element('point_comment', $board), element('board_name', $board) . ' ' . $cmt_id . ' 댓글 작성', 'comment', $cmt_id, '댓글 작성' ); } if (element('use_comment_lucky', $board)) { $rand = rand(1,100); if (element('comment_lucky_percent', $board) >= $rand) { $luckypoint = rand(element('comment_lucky_point_min', $board), element('comment_lucky_point_max', $board)); $luckytitle = element('board_name', $board) . ' ' . $cmt_id . ' ' . element('comment_lucky_name', $board) . ' 당첨'; $point = $this->point->insert_point( $mem_id, $luckypoint, $luckytitle, 'lucky-comment', $cmt_id, '럭키포인트' ); $metadata = array( 'comment-lucky' => $luckypoint, ); $this->load->model('Comment_meta_model'); $this->Comment_meta_model->save($cmt_id, $metadata); } } $emailsendlistadmin = array(); $notesendlistadmin = array(); $smssendlistadmin = array(); $emailsendlistpostwriter = array(); $notesendlistpostwriter = array(); $smssendlistpostwriter = array(); $emailsendlistcmtwriter = array(); $notesendlistcmtwriter = array(); $smssendlistcmtwriter = array(); $post_writer = array(); if (element('send_email_comment_super_admin', $board) OR element('send_note_comment_super_admin', $board) OR element('send_sms_comment_super_admin', $board)) { $mselect = 'mem_id, mem_email, mem_nickname, mem_phone'; $superadminlist = $this->Member_model->get_superadmin_list($mselect); } if (element('send_email_comment_group_admin', $board) OR element('send_note_comment_group_admin', $board) OR element('send_sms_comment_group_admin', $board)) { $this->load->model('Board_group_admin_model'); $groupadminlist = $this->Board_group_admin_model ->get_board_group_admin_member(element('bgr_id', $board)); } if (element('send_email_comment_board_admin', $board) OR element('send_note_comment_board_admin', $board) OR element('send_sms_comment_board_admin', $board)) { $this->load->model('Board_admin_model'); $boardadminlist = $this->Board_admin_model ->get_board_admin_member(element('brd_id', $board)); } if (element('send_email_comment_super_admin', $board) && $superadminlist) { foreach ($superadminlist as $key => $value) { $emailsendlistadmin[$value['mem_id']] = $value; } } if (element('send_email_comment_group_admin', $board) && $groupadminlist) { foreach ($groupadminlist as $key => $value) { $emailsendlistadmin[$value['mem_id']] = $value; } } if (element('send_email_comment_board_admin', $board) && $boardadminlist) { foreach ($boardadminlist as $key => $value) { $emailsendlistadmin[$value['mem_id']] = $value; } } if (element('send_email_comment_post_writer', $board) OR element('send_note_comment_post_writer', $board) OR element('send_sms_comment_post_writer', $board) OR element('post_receive_email', $post)) { $post_writer = $this->Member_model->get_one(element('mem_id', $post)); } if ((element('mem_email', $post_writer) && element('post_receive_email', $post)) OR (element('send_email_comment_post_writer', $board) && element('mem_receive_email', $post_writer))) { $emailsendlistpostwriter['mem_email'] = $post['post_email']; } if (element('send_email_comment_comment_writer', $board)) { $emailsendlistcmtwriter['mem_email'] = $this->member->item('mem_email'); } if (element('send_note_comment_super_admin', $board) && $superadminlist) { foreach ($superadminlist as $key => $value) { $notesendlistadmin[$value['mem_id']] = $value; } } if (element('send_note_comment_group_admin', $board) && $groupadminlist) { foreach ($groupadminlist as $key => $value) { $notesendlistadmin[$value['mem_id']] = $value; } } if (element('send_note_comment_board_admin', $board) && $boardadminlist) { foreach ($boardadminlist as $key => $value) { $notesendlistadmin[$value['mem_id']] = $value; } } if (element('send_note_comment_post_writer', $board) && element('mem_use_note', $post_writer)) { $notesendlistpostwriter['mem_id'] = element('mem_id', $post_writer); } if (element('send_note_comment_comment_writer', $board) && $this->member->item('mem_use_note')) { $notesendlistcmtwriter['mem_id'] = $mem_id; } if (element('send_sms_comment_super_admin', $board) && $superadminlist) { foreach ($superadminlist as $key => $value) { $smssendlistadmin[$value['mem_id']] = $value; } } if (element('send_sms_comment_group_admin', $board) && $groupadminlist) { foreach ($groupadminlist as $key => $value) { $smssendlistadmin[$value['mem_id']] = $value; } } if (element('send_sms_comment_board_admin', $board) && $boardadminlist) { foreach ($boardadminlist as $key => $value) { $smssendlistadmin[$value['mem_id']] = $value; } } if (element('send_sms_comment_post_writer', $board) && element('mem_phone', $post_writer) && element('mem_receive_sms', $post_writer)) { $smssendlistpostwriter['mem_id'] = element('mem_id', $post_writer); $smssendlistpostwriter['mem_nickname'] = element('mem_nickname', $post_writer); $smssendlistpostwriter['mem_phone'] = element('mem_phone', $post_writer); } if (element('send_sms_comment_comment_writer', $board) && $this->member->item('mem_phone') && $this->member->item('mem_receive_sms')) { $smssendlistcmtwriter['mem_id'] = $mem_id; $smssendlistcmtwriter['mem_nickname'] = $this->member->item('mem_nickname'); $smssendlistcmtwriter['mem_phone'] = $this->member->item('mem_phone'); } $searchconfig = array( '{홈페이지명}', '{회사명}', '{홈페이지주소}', '{댓글내용}', '{댓글작성자닉네임}', '{댓글작성자아이디}', '{댓글작성시간}', '{댓글주소}', '{게시글제목}', '{게시글내용}', '{게시글작성자닉네임}', '{게시글작성자아이디}', '{게시글작성시간}', '{게시글주소}', '{게시판명}', '{게시판주소}', ); $autolink = element('use_auto_url', $board) ? true : false; $popup = element('content_target_blank', $board) ? true : false; $replaceconfig = array( $this->cbconfig->item('site_title'), $this->cbconfig->item('company_name'), site_url(), display_html_content($cmt_content, 0), $updatedata['cmt_nickname'], $this->member->item('mem_userid'), cdate('Y-m-d H:i:s'), post_url(element('brd_key', $board), element('post_id', $post)) . '#comment_' . $cmt_id, element('post_title', $post), display_html_content(element('post_content', $post), element('post_html', $post), element('post_image_width', $board), $autolink, $popup), element('post_nickname', $post), element('post_userid', $post), element('post_datetime', $post), post_url(element('brd_key', $board), element('post_id', $post)), element('brd_name', $board), board_url(element('brd_key', $board)), ); $replaceconfig_escape = array( html_escape($this->cbconfig->item('site_title')), html_escape($this->cbconfig->item('company_name')), site_url(), display_html_content($cmt_content, 0), html_escape($updatedata['cmt_nickname']), $this->member->item('mem_userid'), cdate('Y-m-d H:i:s'), post_url(element('brd_key', $board), element('post_id', $post)) . '#comment_' . $cmt_id, html_escape(element('post_title', $post)), display_html_content(element('post_content', $post), element('post_html', $post), element('post_image_width', $board), $autolink, $popup), html_escape(element('post_nickname', $post)), element('post_userid', $post), element('post_datetime', $post), post_url(element('brd_key', $board), element('post_id', $post)), html_escape(element('brd_name', $board)), board_url(element('brd_key', $board)), ); if ($emailsendlistadmin) { $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_email_comment_admin_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_email_comment_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 ($emailsendlistpostwriter) { $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_email_comment_post_writer_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_email_comment_post_writer_content') ); $this->email->clear(true); $this->email->from($this->cbconfig->item('webmaster_email'), $this->cbconfig->item('webmaster_name')); $this->email->to(element('mem_email', $emailsendlistpostwriter)); $this->email->subject($title); $this->email->message($content); $this->email->send(); } if ($emailsendlistcmtwriter) { $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_email_comment_comment_writer_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_email_comment_comment_writer_content') ); $this->email->clear(true); $this->email->from($this->cbconfig->item('webmaster_email'), $this->cbconfig->item('webmaster_name')); $this->email->to(element('mem_email', $emailsendlistcmtwriter)); $this->email->subject($title); $this->email->message($content); $this->email->send(); } if ($notesendlistadmin) { $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_note_comment_admin_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_note_comment_admin_content') ); foreach ($notesendlistadmin as $akey => $aval) { $note_result = $this->notelib->send_note( $sender = 0, $receiver = element('mem_id', $aval), $title, $content, 1 ); } } if ($notesendlistpostwriter && element('mem_id', $notesendlistpostwriter)) { $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_note_comment_post_writer_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_note_comment_post_writer_content') ); $note_result = $this->notelib->send_note( $sender = 0, $receiver = element('mem_id', $notesendlistpostwriter), $title, $content, 1 ); } if ($notesendlistcmtwriter && element('mem_id', $notesendlistcmtwriter)) { $title = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_note_comment_comment_writer_title') ); $content = str_replace( $searchconfig, $replaceconfig_escape, $this->cbconfig->item('send_note_comment_comment_writer_content') ); $note_result = $this->notelib->send_note( $sender = 0, $receiver = element('mem_id', $notesendlistcmtwriter), $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_comment_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 ($smssendlistpostwriter) { if (file_exists(APPPATH . 'libraries/Smslib.php')) { $this->load->library(array('smslib')); $content = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_sms_comment_post_writer_content') ); $sender = array( 'phone' => $this->cbconfig->item('sms_admin_phone'), ); $receiver = array(); $receiver[] = $smssendlistpostwriter; $smsresult = $this->smslib->send($receiver, $sender, $content, $date = '', '댓글 작성 알림'); } } if ($smssendlistcmtwriter) { if (file_exists(APPPATH . 'libraries/Smslib.php')) { $this->load->library(array('smslib')); $content = str_replace( $searchconfig, $replaceconfig, $this->cbconfig->item('send_sms_comment_comment_writer_content') ); $sender = array( 'phone' => $this->cbconfig->item('sms_admin_phone'), ); $receiver = array(); $receiver[] = $smssendlistcmtwriter; $smsresult = $this->smslib->send($receiver, $sender, $content, $date = '', '댓글 작성 알림'); } } $this->session->set_userdata( 'lastest_post_time', ctimestamp() ); // 이벤트가 존재하면 실행합니다 Events::trigger('after_insert', $eventname); $result = array('success' => '댓글이 등록되었습니다'); exit(json_encode($result)); } else { $updatedata = array( 'cmt_content' => $cmt_content, 'cmt_html' => $content_type, 'cmt_updated_datetime' => cdate('Y-m-d H:i:s'), 'cmt_ip' => $this->input->ip_address(), ); if ($can_comment_secret) { $updatedata['cmt_secret'] = $this->input->post('cmt_secret') ? 1 : 0; } if ($this->member->is_member() && element('use_comment_secret', $board) === '2') { $updatedata['cmt_secret'] = 1; } $updatedata['cmt_device'] = ($this->cbconfig->get_device_type() === 'mobile') ? 'mobile' : 'desktop'; $this->Comment_model->update($cmt_id, $updatedata); // 이벤트가 존재하면 실행합니다 Events::trigger('after_update', $eventname); $result = array('success' => '댓글이 수정되었습니다'); exit(json_encode($result)); } } } /** * 댓글입력시 비회원이 입력한 경우 닉네임을 체크합니다 */ public function _mem_nickname_check($str) { $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; } 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; } /** * 댓글입력시 비회원이 입력한 경우 captcha를 체크합니다 */ public function _check_captcha($str) { $captcha = $this->session->userdata('captcha'); if ( ! is_array($captcha) OR ! element('word', $captcha) OR strtolower(element('word', $captcha)) !== strtolower($str)) { $this->session->unset_userdata('captcha'); $this->form_validation->set_message( '_check_captcha', '자동등록방지코드가 잘못되었습니다' ); return false; } return true; } /** * 회원가입시 recaptcha 체크하는 함수입니다 */ public function _check_recaptcha($str) { $url = 'https://www.google.com/recaptcha/api/siteverify'; $data = array( 'secret' => $this->cbconfig->item('recaptcha_secret'), 'response' => $str, ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, sizeof($data)); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); curl_close($ch); $obj = json_decode($result); if ((string) $obj->success !== '1') { $this->form_validation->set_message( '_check_recaptcha', '자동등록방지코드가 잘못되었습니다' ); return false; } return true; } }