* * @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('')); exit(json_encode($result)); } else { /** * 유효성 검사를 통과한 경우입니다. * 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다 */ // 이벤트가 존재하면 실행합니다 Events::trigger('formruntrue', $eventname); $content_type = 0; $cmt_content = ($this->input->post('cmt_content') === '

' OR $this->input->post('cmt_content') === '

 

') ? '' : $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; } }