Ejemplo n.º 1
0
/** 댓글 수정
 * @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']}");
    }
}
Ejemplo n.º 2
0
<?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'])));
Ejemplo n.º 3
0
<?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'])));