/** 댓글 수정 * @class write * @param $data: 댓글 data, 이미 check와 가공이 끝난 데이터여야 함 $board_data: 게시판 설정 data -id: 게시판 아이디. 게시판 설정 data가 없을 때 아이디를 토대로 설정을 로드한다. -no: 대상 댓글번호 지정. (댓글 번호를 지정할 수 있다. 없다면 data에 저장되어 있는 자료를 수정) -is_update: 회원정보 업데이트 여부 -is_ex: 이전정보 로드 여부 -is_check: 입력변수 체크 여부 */ function editCmt(&$data, $board_data = '', $param = '') { global $mini; $param = param($param); iss($param['id']); iss($param['no']); iss($data['no']); def($param['is_update'], 1); def($param['is_ex'], 1); def($param['is_check'], 1); $trackback = $trackback_excerpt = $trackback_charset = ''; if (!empty($data['trackback'])) { $trackback = $data['trackback']; } if (!empty($data['trackback_excerpt'])) { $trackback_excerpt = $data['trackback_excerpt']; } if (!empty($data['trackback_charset'])) { $trackback_charset = $data['trackback_charset']; } $is_saveImage = !empty($data['saveImage']) ? 1 : 0; unset($data['pass']); unset($data['target_member']); unset($data['report']); unset($data['ip']); unset($data['vote']); unset($data['hate']); unset($data['download']); unset($data['date']); unset($data['date_last']); unset($data['parent']); unset($data['history_vote']); unset($data['point_count']); unset($data['point_sum']); if (empty($mini['member']['level_admin'])) { unset($data['is_del']); unset($data['trackback']); unset($data['ment_advice']); unset($data['is_lock']); unset($data['admit_file']); unset($data['admit_post']); } //// 게시판 설정 if (!is_array($board_data)) { if ($param['id']) { $board_data = getBoard($param['id'], 1); } else { __error('게시판 설정이 없습니다'); } } //// 게시물 번호 $no = $param['no'] ? $param['no'] : $data['no']; unset($data['no']); check($no, "type:num, name:댓글번호"); //// 데이터 로드 if ($param['is_ex']) { $data_ex = sql("SELECT * FROM {$board_data['table_cmt']} WHERE no={$no}"); if (!is_array($data_ex)) { __error('해당 댓글이 존재하지 않습니다'); } } //// 잠긴댓글 if (empty($mini['member']['level_admin']) && !empty($data_ex['is_lock'])) { __error('댓글이 잠겨 있어 수정, 삭제를 할 수 없습니다'); } //// 회원정보 로드 if (!empty($data_ex['target_member'])) { $mdata = sql("SELECT * FROM {$mini['name']['member']} WHERE no={$data_ex['target_member']}"); // 회원정보 업데이트 여부 if ($param['is_update'] && $param['is_ex'] && $data_ex['target_member']) { if (is_array($mdata)) { parseMember($mdata); $data['name'] = $mdata['name']; } else { $data_ex['target_member'] = $data['target_member'] = 0; $data['pass'] = md5(); } } } //// 권한 체크 if (empty($data_ex['trackback'])) { if (!empty($data_ex['target_member'])) { if (empty($mini['log'])) { __error('권한이 없습니다. [로그인이 필요합니다]'); } if (empty($mini['member']['level_admin']) && $mdata['no'] != $mini['member']['no']) { __error('권한이 없습니다. [자신이 쓴 댓글만 수정할 수 있습니다]'); } if (!empty($mini['member']['level_admin']) && $mdata['no'] != $mini['member']['no'] && $mdata['level_admin'] >= $mini['member']['level_admin']) { __error('권한이 없습니다. [자신보다 높거나 같은 권한의 관리자가 쓴 댓글 입니다]'); } } else { if (empty($mini['member']['level_admin'])) { if (empty($data['pass_encode'])) { __error('비밀번호가 없습니다'); } if (!empty($mini['log']) && empty($mini['member']['level_admin'])) { __error('권한이 없습니다. [비회원이 쓴댓글 입니다]'); } if (empty($mini['member']['level_admin']) && $data['pass_encode'] != md5("{$data_ex['pass']}|{$mini['ip']}|" . session_id())) { __error("권한이 없습니다. [비밀번호가 일치하지 않습니다]"); } } } } //// 추가필드 권한 체크 if (!empty($board_data['field'])) { foreach ($board_data['field'] as $key => $val) { if (!empty($data['field'][$key]) && !empty($val['is_admin']) && empty($mini['member']['level_admin'])) { __error("[{$val['name']}]은 관리자만 입력하실 수 있습니다"); } if (empty($data['field'][$key]) && !empty($val['is_req'])) { __error("[{$val['name']}]을 입력해 주세요"); } } } //// 수정 시간제한 if (!empty($board_data['limit_edit_comment']) && empty($mini['member']['level_admin'])) { if (!empty($data_ex) && strtotime($data_ex['date']) + $board_data['limit_edit_comment'] * 60 < $mini['time']) { __error("작성 후 {$board_data['limit_edit_comment']}분이 지난 댓글을 수정할 수 없습니다"); } } //// 대상 게시물 정보 로드 check($data['target_post'], "type:num, name:대상게시물번호"); $data_post = sql("SELECT * FROM {$board_data['table']} WHERE no={$data['target_post']}"); //// 답변 댓글일 때 원본 댓글 정보 로드 if (!empty($data_ex['parent'])) { $data_reply = sql("SELECT * FROM {$board_data['table_cmt']} WHERE no=" . end(getStr($data_ex['parent']))); if (is_array($data_reply)) { // 원본 댓글이 비밀일 때 답변들도 비밀 유지 if (!empty($data_reply['secret'])) { $data['secret'] = 1; } // 공지댓글에 댓글 금지 if (!empty($data_reply['notice'])) { __error('공지댓글에는 댓글을 달 수 없습니다'); } } } //// 입력정보 체크 if (isset($data['name'])) { check($data['name'], "min:1, max:16, name:이름"); } if (isset($data['mail'])) { check($data['mail'], "type:mail, name:메일, is_not:1"); } //// 입력변수 체크 if ($param['is_check']) { // 입력변수 체크 checkField($data, $board_data['table_cmt'], $param); // 글 가공 checkPost($data, $board_data, 'cmt'); } //// 직접 수정이 안되는 정보는 제외시킨다 unset($data['no']); unset($data['reply']); unset($data['pass']); unset($data['vote']); unset($data['hate']); unset($data['ip']); unset($data['date']); unset($data['target_member']); //// trackback if (!empty($param['trackback'])) { $data['trackback'] = $param['trackback']; } //+ 권한별로 제외하는 필드를 지정한다. (이를테면 target_member 같은거 바꿀 수 없으니깐) //// 쿼리 sql("UPDATE {$board_data['table_cmt']} SET " . query($data, 'update') . " WHERE no={$no}"); $data['no'] = $data_ex['no']; //// 검색어 수정 if ($param['is_ex']) { if (!empty($data['ment']) && $data_ex['ment'] != $data['ment']) { $data_ex['ment'] = $data['ment']; } if (!empty($data['name']) && $data_ex['name'] != $data['name']) { $data_ex['name'] = $data['name']; } if (!empty($data['tag']) && $data_ex['tag'] != $data['tag']) { $data_ex['tag'] = $data['tag']; } delIndex($data_post['num'], $data_ex['no']); addIndex($data_ex, "\n\t\t\t\tid: {$board_data['no']}\n\t\t\t\tnum: {$data_post['num']}\n\t\t\t\tcmt_no: {$data_ex['no']}\n\t\t\t\tdate: {$data_ex['date']}\n\t\t\t\tip: {$data_ex['ip']}\n\t\t\t"); } //// 트랙백 댓글 주소 설정 if (!empty($data_reply) && !empty($data_reply['trackback'])) { $tmp_data = getSocket("\n\t\t\t\turl: {$data_reply['trackback']}\n\t\t\t\tskip_header: 1\n\t\t\t"); if (!empty($tmp_data) && strpos($tmp_data, "<rdf:RDF") !== false) { preg_match("/\\<rdf\\:Description.+trackback\\:ping\\=\"([^\"]+)\" \\/\\>/is", $tmp_data, $mat); if (!empty($mat[1])) { $trackback = $mat[1]; } } } //// 트랙백 보내기 if (!empty($trackback)) { $result = ''; $result = sendTrackback($trackback, $trackback_excerpt, $trackback_charset, $data, $board_data, 'cmt'); if ($result) { __error("댓글 수정에 성공했지만 트랙백을 보내지 못했습니다. ({$result})"); } } //// 이미지 치환 if (!empty($is_saveImage) && !empty($data['ment'])) { $data['ment'] = saveImage($data_ex['no'], $data['ment'], $board_data, 'cmt'); sql("UPDATE {$board_data['table_cmt']} SET ment='{$data['ment']}' WHERE no={$data_ex['no']}"); } }
<?php /// Copyright (c) 2004-2016, Needlworks / Tatter Network Foundation /// All rights reserved. Licensed under the GPL. /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) $IV = array('GET' => array('url' => array('url', 'default' => null))); require ROOT . '/library/preprocessor.php'; importlib("model.blog.remoteresponse"); requireStrictRoute(); Respond::ResultPage(!empty($_GET['url']) && sendTrackback($blogid, $suri['id'], trim($_GET['url'])));
<?php /// Copyright (c) 2004-2015, Needlworks / Tatter Network Foundation /// All rights reserved. Licensed under the GPL. /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) $IV = array('POST' => array('url' => array('url', 'default' => null))); require ROOT . '/library/preprocessor.php'; importlib("model.blog.remoteresponse"); requireStrictRoute(); /// First, detect trackback URL from RDF information. $info = getRDFfromURL($_POST['url']); if (empty($info)) { $blogInfo = getInfoFromURL($_POST['url']); if (!empty($blogInfo) && $blogInfo['service'] != null) { $info['trackbackURL'] = getTrackbackURLFromInfo($_POST['url'], $blogInfo['service']); } else { Respond::ResultPage(false); exit; } } Respond::ResultPage(!empty($_POST['url']) && sendTrackback($blogid, $suri['id'], trim($info['trackbackURL'])));