Exemple #1
0
/** 글 삭제
 * @class write
 * @param
		$no: 게시물 번호, 배열로 복수개 가능
		$board_data: 게시판 설정 data
		-id: 게시판 아이디. 게시판 설정 data가 없을 때 아이디를 토대로 설정을 로드한다.
  */
function delPost($no, $board_data = '', $param = '')
{
    global $mini;
    $param = param($param);
    iss($param['id']);
    //// 게시판 설정
    if (!is_array($board_data)) {
        if ($param['id']) {
            $board_data = getBoard($param['id'], 1);
        } else {
            __error('게시판 설정이 없습니다');
        }
    }
    //// 게시물 번호
    if (!is_array($no)) {
        $tmp = $no;
        $no = array();
        $no[0] = $tmp;
    }
    //// 삭제
    foreach ($no as $key => $val) {
        check($val, "type:num, name:게시물번호");
        // 데이터 로드
        $data_ex = sql("SELECT * FROM {$board_data['table']} WHERE no={$val}");
        if (!is_array($data_ex)) {
            __error('해당 게시물이 존재하지 않습니다');
        }
        // 잠긴글
        if (empty($mini['member']['level_admin']) && !empty($data_ex['is_lock'])) {
            __error("[{$data_ex['no']}] 게시물이 잠겨 있어 수정, 삭제를 할 수 없습니다");
        }
        // 회원정보 로드
        if (!empty($data_ex['target_member'])) {
            $mdata = sql("SELECT * FROM {$mini['name']['member']} WHERE no={$data_ex['target_member']}");
            if (is_array($mdata)) {
                parseMember($mdata);
            } else {
                $data_ex['target_member'] = 0;
                $data_ex['pass'] = md5();
            }
        }
        // 권한 체크
        if (!empty($data_ex['target_member'])) {
            if (empty($mini['log'])) {
                __error("[{$data_ex['no']}] 권한이 없습니다. [로그인이 필요합니다]");
            }
            if (empty($mini['member']['level_admin']) && $mdata['no'] != $mini['member']['no']) {
                __error("[{$data_ex['no']}] 권한이 없습니다. [자신이 쓴 글만 수정할 수 있습니다]");
            }
            if (!empty($mdata['level_admin']) && $mdata['no'] != $mini['member']['no'] && $mdata['level_admin'] >= $mini['member']['level_admin']) {
                __error("[{$data_ex['no']}] 권한이 없습니다. [자신보다 높거나 같은 권한의 관리자가 쓴 글 입니다]");
            }
        } else {
            if (empty($mini['member']['level_admin'])) {
                if (count($no) > 1) {
                    __error('비회원의 글은 한번에 한개씩 삭제하실 수 있습니다.');
                } else {
                    if (empty($mini['member']['level_admin'])) {
                        if (empty($_REQUEST['pass_encode'])) {
                            __error(array('mode' => 'goto', 'url' => "pass.php?id={$_REQUEST['id']}&group={$_REQUEST['group']}&url=" . url()));
                        }
                        if (!empty($mini['log'])) {
                            __error("[{$data_ex['no']}] 권한이 없습니다. [비회원이 쓴글 입니다]");
                        }
                        if ($_REQUEST['pass_encode'] != md5("{$data_ex['pass']}|{$mini['ip']}|" . session_id())) {
                            __error("[{$data_ex['no']}] 권한이 없습니다. [비밀번호가 일치하지 않습니다]");
                        }
                    }
                }
            }
        }
        // 휴지통
        if (!empty($board_data['use_trash'])) {
            $trash = $trash_tmp = array();
            foreach ($data_ex as $key2 => $val2) {
                switch ($key2) {
                    case 'category':
                    case 'tag':
                    case 'target_member':
                    case 'name':
                    case 'mail':
                    case 'title':
                    case 'ment':
                    case 'ip':
                    case 'date':
                    case 'trackback':
                        $trash[$key2] = $val2;
                        break;
                    case 'no':
                    case 'prev':
                    case 'next':
                        break;
                    default:
                        $trash_tmp[$key2] = $val2;
                }
            }
            $trash = array_merge($trash, array('target_member_in' => !empty($mini['log']) ? $mini['member']['no'] : 0, 'ip_in' => $mini['ip'], 'date_in' => $mini['date'], 'num' => $data_ex['no'], 'id' => $board_data['no'], 'field' => serialize($trash_tmp)));
            sql("INSERT INTO {$mini['name']['trash']} " . query($trash, 'insert'));
        }
        // 댓글 제거
        $tmp = sql("q:SELECT no FROM {$board_data['table_cmt']} WHERE target_post={$data_ex['no']}, mode:firstFieldArray");
        if (!empty($tmp) && count($tmp) >= 1) {
            delCmt($tmp, $board_data, "del_post:1", $data_ex);
        }
        // 쿼리
        sql("DELETE FROM {$board_data['table']} WHERE no={$val}");
        // 현재글의 prev에서 현재글을 뺀다
        if ($data_ex['prev']) {
            $data_prev = sql("q:SELECT * FROM {$board_data['table']} USE INDEX (num) WHERE " . sqlSel($data_ex['prev']) . " ORDER BY num DESC, mode:array");
            if (is_array($data_prev)) {
                foreach ($data_prev as $key2 => $val2) {
                    // 빼기
                    $val2['next'] = str_replace("[{$data_ex['no']}]", "", $val2['next']);
                    // next 연장해주기
                    if ($data_ex['next']) {
                        $tmp = array();
                        $tmp = getStr($data_ex['next']);
                        $tmp_key = $board_data['list_count_relate'] - 1 * ($key2 + 1);
                        iss($tmp[$tmp_key]);
                        $tmp2 = array();
                        $tmp2 = getStr($val2['next']);
                        if ($tmp_key >= 0 && $tmp2[count($tmp2) - 1] != $tmp[$tmp_key] && $tmp[$tmp_key]) {
                            $val2['next'] .= "[" . $tmp[$tmp_key] . "]";
                        }
                    }
                    // 입력
                    sql("UPDATE {$board_data['table']} SET next='{$val2['next']}' WHERE no={$val2['no']}");
                }
            }
        }
        // 현재글의 next에서 현재글을 뺀다
        if ($data_ex['next']) {
            $data_next = sql("q:SELECT * FROM {$board_data['table']} USE INDEX (num) WHERE " . sqlSel($data_ex['next']) . " ORDER BY num, mode:array");
            if (is_array($data_next)) {
                foreach ($data_next as $key2 => $val2) {
                    // 빼기
                    $val2['prev'] = str_replace("[{$data_ex['no']}]", "", $val2['prev']);
                    // prev 연장해주기
                    if ($data_ex['prev']) {
                        $tmp = array();
                        $tmp = getStr($data_ex['prev']);
                        $tmp_key = $board_data['list_count_relate'] - 1 * ($key2 + 1);
                        iss($tmp[$tmp_key]);
                        $tmp2 = array();
                        $tmp2 = getStr($val2['prev']);
                        if ($tmp_key >= 0 && $tmp2[count($tmp2) - 1] != $tmp[$tmp_key] && $tmp[$tmp_key]) {
                            $val2['prev'] .= "[" . $tmp[$tmp_key] . "]";
                        }
                    }
                    // 입력
                    sql("UPDATE {$board_data['table']} SET prev='{$val2['prev']}' WHERE no={$val2['no']}");
                }
            }
        }
        // 총 게시물 수
        updateTotal($data_ex, $board_data, "del");
        if (!empty($mini['board']) && $board_data['no'] == $mini['board']['no']) {
            $mini['board']['total'] = $board_data['total'];
        }
        sql("UPDATE {$mini['name']['admin']} SET total = '" . serialize($board_data['total']) . "' WHERE no={$board_data['no']}");
        // 포인트
        if ($board_data['point_post'] !== 0 && !empty($mini['log']) && !empty($data_ex['target_member'])) {
            setPoint("\n\t\t\t\t\t\ttarget: {$data_ex['target_member']}\n\t\t\t\t\t\tpoint: {$board_data['point_post']}\n\t\t\t\t\t\tmsg: 글 삭제\n\t\t\t\t\t\tparent_no: {$board_data['no']}\n\t\t\t\t\t\tdata_no: {$data_ex['no']}\n\t\t\t\t\t\tis_del: 1\n\t\t\t\t\t");
        }
        //+ 파일 제거
        // 검색어 제거
        delIndex($data_ex['num']);
    }
}
Exemple #2
0
/** 최근게시물
 * @class io 
 * @param
		-id: 게시판아이디
		-table: 임의지정테이블
		-mode: 최근게시물모드 [!|issue|writer|relate|popup|memo]
		-order: 임의정렬쿼리
		-where: 임의검색쿼리
		-count: 출력수
		-cut_title: 제목길이
		-cut_ment: 내용길이
		-skin: 게시물 스킨
		-skin_not: 게시물이 없을 떄 스킨
		-skin_first: 첫 게시물 스킨
		-debug: debug모드
		-is_key: 키테이블 사용여부
		-type: 종류 [post!|cmt|memo|member]
 * @return Array 스킨이 있을 경우엔 리턴 안됨
 */
function mhot($param)
{
    global $mini;
    $param = param($param);
    def($param['cut_title'], 0);
    def($param['cut_ment'], 0);
    def($param['count'], 5);
    def($param['type'], 'post');
    // 설정 기본값
    def($mini['setting']['issue_interval'], 48);
    if (preg_match("/[^0-9]/", $mini['setting']['issue_interval'])) {
        $mini['setting']['issue_interval'] = 48;
    }
    if (preg_match("/[^0-9\\,]/", $param['count'])) {
        __error('출력개수에는 숫자와 ,만 입력 가능합니다' . ' (' . __FILE__ . ' line ' . __LINE__ . ' in ' . __FUNCTION__ . ')');
    }
    if ($param['count'] > 100) {
        __error('출력개수는 100개를 초과할 수 없습니다' . ' (' . __FILE__ . ' line ' . __LINE__ . ' in ' . __FUNCTION__ . ')');
    }
    $where = $order = $board_data = $table = '';
    $data = $sel_board = array();
    // 복수 게시판 지정(keyTable 이 사용된다)
    if (!empty($param['id']) && (strpos($param['id'], '[') !== false || $param['id'] == '*')) {
        $is_multi = 1;
        // 게시판 나눠넣기
        if (strpos($param['id'], '[') !== false) {
            $sel_board = getStr($param['id']);
        }
    }
    // 테이블 임의지정
    if (!empty($param['table'])) {
        $table = $param['table'];
    }
    // 키테이블 지정
    if (!empty($param['is_key'])) {
        $table = $mini['name']['search'];
    }
    // 아이디로 테이블 지정
    if (!$table && !empty($param['id']) && $param['id'] != '*') {
        if (!empty($mini['board']) && !empty($mini['board']['id']) && $mini['board']['id'] == $param['id']) {
            $board_data =& $mini['board'];
        } else {
            $board_data = getBoard($param['id'], 1);
        }
        $table = $param['type'] == 'post' ? $board_data['table'] : $board_data['table_cmt'];
    }
    // 키테이블인데 글, 댓글이 아닐 경우 에러
    if (!empty($param['is_key']) && $param['type'] != 'post' && $param['type'] != 'cmt') {
        __error('검색테이블을 참조할 때는 글, 댓글 형식만 사용하실 수 있습니다' . ' (' . __FILE__ . ' line ' . __LINE__ . ' in ' . __FUNCTION__ . ')');
    }
    // 특별 모드
    if (!empty($param['mode'])) {
        switch ($param['mode']) {
            case 'issue':
                $where .= " and (issue=1 or (date>=DATE_ADD('{$mini['date']}', INTERVAL -{$mini['setting']['issue_interval']} HOUR) and date<=DATE_ADD('{$mini['date']}', INTERVAL 1 DAY)))";
                $order .= ",issue*999999 + hit + vote*10 desc";
                break;
            case 'writer':
                if (empty($mini['setting']['writer_no'])) {
                    return 0;
                }
                $where .= " and target_member={$mini['setting']['writer_no']}";
                $order .= ",no desc";
                break;
            case 'relate':
                if (empty($mini['setting']['relate'])) {
                    return 0;
                }
                $where .= " and " . sqlSel(explode(",", $mini['setting']['relate']));
                $order .= ",no desc";
                break;
            case 'popup':
                $where .= " and popup=1";
                $order .= ",no desc";
                break;
            case 'memo':
                $table = $mini['name']['memo'];
                $param['count'] = 20;
                $param['type'] = 'memo';
                if (!empty($mini['log'])) {
                    $where .= " and target_member={$mini['member']['no']} and date_read=0 and del_target=0";
                    $order .= ",no";
                }
                break;
        }
    }
    // 여러 테이블 검색시 게시판 정보 로드 및 쿼리 설정
    if (!empty($is_multi)) {
        $q_admin = '';
        if (!empty($param['id']) && !empty($sel_board)) {
            $q_admin .= 'WHERE ' . sqlSel($sel_board);
            //			$where .= " and ".sqlSel($sel_board, 'id');
        }
        $data_board = sql("\n\t\t\tq: SELECT * FROM {$mini['name']['admin']} {$q_admin}\n\t\t\tmode: array\n\t\t");
        $board_name = $board_data_arr = array();
        if (!empty($data_board)) {
            foreach ($data_board as $key => $val) {
                $board_name[$val['no']] = $val['name'];
                parseBoard($val);
                $board_data_arr[$val['no']] = $val;
            }
            unset($data_board);
        }
    }
    // 키 테이블 검색시 종류에 따라 쿼리 설정
    if (!empty($param['is_key'])) {
        $where .= $param['type'] == 'post' ? " and cmt_no=0" : " and cmt_no!=0";
    }
    // 테이블명이 지정되지 않았다면 에러
    if (empty($param['id']) && empty($param['table']) && empty($table)) {
        __error('게시판 아이디나 테이블명을 입력해주세요' . ' (' . __FILE__ . ' line ' . __LINE__ . ' in ' . __FUNCTION__ . ')');
    }
    // 임의 설정 추가
    if (!empty($param['where'])) {
        if (!preg_match("/^ ?(and|or)/i", $param['where'])) {
            $param['where'] = " and ({$param['where']})";
        }
        $where .= $param['where'];
    }
    if (!empty($param['order'])) {
        if (!preg_match("/^\\,/i", $param['order'])) {
            $param['order'] = ",{$param['order']}";
        }
        $order .= $param['order'];
    } else {
        if (empty($order)) {
            $order = ",date desc";
        }
    }
    // 쪽지인데 로그인이 안되어 있다면 넘김
    if (!empty($param['mode']) && $param['mode'] == 'memo' && empty($mini['log'])) {
        return false;
    } else {
        // 쿼리날림
        if ($where) {
            $where = "WHERE " . substr($where, 4);
        }
        if ($order) {
            $order = "ORDER BY " . substr($order, 1);
        }
        // 복수 게시판일 경우
        if (!empty($is_multi)) {
            // 전체 게시판일 때
            if (empty($sel_board) && $param['id'] == '*') {
                $sel_board = array_keys($board_data_arr);
            }
            if (!empty($sel_board)) {
                $tmp_data = array();
                $tmp_data_order = array();
                $order_name = $order_type = '';
                $order_data = array();
                $data = array();
                // order 분석
                if (count(explode(",", $order)) > 1) {
                    __error('정렬 기준은 한개만 가능합니다' . ' (' . __FILE__ . ' line ' . __LINE__ . ' in ' . __FUNCTION__ . ')');
                }
                $tmp_order = explode(" ", str_replace("ORDER BY ", "", $order));
                $order_name = $tmp_order[0];
                $order_type = empty($tmp_order[1]) ? 'asc' : $tmp_order[1];
                unset($tmp_order);
                foreach ($sel_board as $val) {
                    // 키테이블 사용시
                    if (!empty($param['is_key'])) {
                        $tmp_where = !empty($where) ? $where . " and id={$val}" : "WHERE id={$val}";
                        $table = $mini['name']['search'];
                    } else {
                        $tmp_where = $where;
                        $table = $param['type'] == 'post' ? $mini['name']['board'] . $val : $mini['name']['cmt'] . $val;
                    }
                    $tmp_data = array_merge($tmp_data, sql(array('q' => "SELECT * FROM {$table} {$tmp_where} " . (!empty($param['is_key']) ? "GROUP BY num" : "") . " {$order} LIMIT {$param['count']}", 'mode' => 'array', 'extra_name' => 'id', 'extra_value' => $val)));
                }
                // 정렬 기준에 따라서 나눔
                foreach ($tmp_data as $key => $val) {
                    $order_data[$key] = $val[$order_name];
                }
                // 정렬
                if ($order_type == 'asc') {
                    asort($order_data);
                } else {
                    arsort($order_data);
                }
                // 정렬한 순서대로 data 정의
                $i = 0;
                foreach ($order_data as $key => $val) {
                    if ($i >= $param['count']) {
                        break;
                    }
                    $data[$i] = $tmp_data[$key];
                    ++$i;
                }
                unset($tmp_data);
                unset($order_data);
            }
        } else {
            $data = sql(array('q' => "SELECT * FROM {$table} {$where} " . (!empty($param['is_key']) ? "GROUP BY num" : "") . " {$order} LIMIT {$param['count']}", 'mode' => 'array'));
        }
        if (!empty($data)) {
            $a = 0;
            $count_data = count($data);
            foreach ($data as $key => $val) {
                // 여러 게시판 사용시 게시판 정보 입력
                if (!empty($is_multi)) {
                    if (!empty($board_name[$data[$key]['id']])) {
                        $data[$key]['board_name'] = $board_name[$data[$key]['id']];
                    }
                    if (!empty($data[$key]['id'])) {
                        $data[$key]['url_board'] = "{$mini['dir']}mini.php?id={$data[$key]['id']}";
                    }
                    if (!empty($board_data_arr)) {
                        $mini['board_data'] = $board_data_arr[$data[$key]['id']];
                    }
                } else {
                    $mini['board_data'] = $board_data;
                }
                if (!empty($param['is_key'])) {
                    // 키 테이블 사용 시 진짜 자료 로드
                    $val2 = sql("SELECT * FROM " . (!empty($data[$key]['cmt_no']) ? $mini['name']['cmt'] : $mini['name']['board']) . "{$data[$key]['id']} WHERE " . (!empty($data[$key]['cmt_no']) ? "no={$data[$key]['cmt_no']}" : "num={$data[$key]['num']}"));
                    $data[$key] = array_merge($data[$key], $val2);
                }
                // title 은 포함된 변수가 많기 때문에 먼저 잘라준다
                if (!empty($param['cut_title']) && !empty($data[$key]['title'])) {
                    $data[$key]['title'] = strCut($data[$key]['title'], $param['cut_title']);
                }
                // 가공 함수 실행
                $tmp_func = "parse" . ($param['type'] == 'cmt' ? 'comment' : $param['type']);
                if ($count_data == 1) {
                    $tmp_func($data[$key], 'view');
                } else {
                    $tmp_func($data[$key], '');
                }
                // 내용 자르기
                if (!empty($param['cut_ment']) && !empty($data[$key]['ment'])) {
                    $data[$key]['ment'] = strCut($data[$key]['ment'], $param['cut_ment']);
                    $data[$key]['ment_notag'] = strCut($data[$key]['ment_notag'], $param['cut_ment']);
                }
                //					if (!empty($param['debug'])) {
                //						echo nl2br(print_r($data[$key], 1));
                //						exit;
                //					}
                if (!empty($param['skin'])) {
                    $skin = '';
                    if ($a == 0 && !empty($param['skin_first'])) {
                        $skin = $param['skin_first'];
                    } else {
                        $skin = $param['skin'];
                    }
                    // 논리문
                    $preg_left = $preg_right = array();
                    $preg_left[] = "/\\[:([a-z0-9_]+)\\.([a-z0-9_]+)\\.([a-z0-9_]+):\\]/ie";
                    $preg_right[] = "\$data[{$key}]['\\1']['\\2']['\\3']";
                    $preg_left[] = "/\\[:([a-z0-9_]+)\\.([a-z0-9_]+):\\]/ie";
                    $preg_right[] = "\$data[{$key}]['\\1']['\\2']";
                    $preg_left[] = "/\\[:([a-z0-9_]+):\\]/ie";
                    $preg_right[] = "\$data[{$key}]['\\1']";
                    $skin = preg_replace($preg_left, $preg_right, $skin);
                    echo $skin;
                }
                $a++;
            }
            if (empty($param['skin'])) {
                if (count($data) == 1 && $param['count'] == 1) {
                    return current($data);
                } else {
                    return $data;
                }
            }
        } else {
            if (!empty($param['skin_not'])) {
                echo $param['skin_not'];
            }
        }
    }
}
Exemple #3
0
/** COMMENT 파싱
 * @class view
 * @param
		$data: DB 데이터
		$ret: return 모드
 * @return 
 */
function parseComment(&$data, $ret = 0)
{
    global $mini;
    // 외부 게시판 설정 적용
    $board_data = !empty($mini['board_data']) ? $mini['board_data'] : $mini['board'];
    // decode
    if (!empty($data)) {
        foreach ($data as $key => $val) {
            str($data[$key], 'decode');
        }
    }
    // 추가필드
    iss($data['field']);
    if ($data['field']) {
        $data['field'] = unserialize($data['field']);
        if (is_array($data['field'])) {
            ksort($data['field']);
        }
    }
    // 링크
    iss($data['link']);
    if ($data['link']) {
        $data['link'] = unserialize($data['link']);
    }
    // 권한 뽑음
    $data['permit_comment'] = getPermit("name:comment");
    $data['permit_handle'] = !empty($mini['member']['level_admin']) || !empty($data['target_member']) && !empty($mini['log']) && $data['target_member'] == $mini['member']['no'] || empty($data['target_member']) && empty($mini['log']);
    // depth
    iss($data['parent']);
    $data['depth'] = count(getStr($data['parent']));
    // 필수 스킨요소
    $data['skin'] = array('id' => "tableRowsCmt_{$data['no']}", 'tool' => "cmtTools_{$data['no']}", 'write' => "write_comment{$data['no']}");
    // 이름
    parseName($data);
    // 번호
    $data['view_no'] = $board_data['use_view_no'] ? !empty($data['parent']) ? "{$data['num']}-" : $data['num'] : $data['no'];
    // 관리자 체크박스
    $data['checkbox'] = !empty($mini['member']['level_admin']) ? "<input type='checkbox' name='no[]' value='{$data['no']}' class='middle' />" : "";
    // 날짜
    $data['time'] = strtotime($data['date']);
    $data['date_out'] = date($board_data['date_comment'], $data['time']);
    $data['date_str'] = $mini['time'] - $data['time'] < $mini['set']['date_str'] * 86400 ? dateSec($mini['time'] - $data['time']) . "전" : "";
    $data['date_simple'] = date("H:i", $data['time']);
    // 태그
    if ($data['tag']) {
        $data['tag'] = getStr($data['tag']);
    }
    // 내용
    if (!empty($data['ment']) && !empty($data['autobr'])) {
        $data['ment'] = nl2br($data['ment']);
    }
    $data['ment'] = str_replace("<br /><!--n-->", "\n", $data['ment']);
    if (strpos($data['ment'], "<pre title='code'") !== false) {
        $mini['is_syntax'] = 1;
    }
    // 트랙백
    if (!empty($data['trackback'])) {
        $data['trackback'] = amp($data['trackback'], 'encode');
    }
    // 파일
    $data['is_file'] = 0;
    if (!empty($data['file'])) {
        unset($file);
        $file = sql("\n\t\t\t\tq: SELECT * FROM {$mini['name']['file']} WHERE " . sqlSel($data['file']) . "\n\t\t\t\tmode: array\n\t\t\t");
        if (!empty($file)) {
            $data['is_file'] = 1;
            $data['file_data'] = array();
            // 파일 링크 만들기
            foreach ($file as $key => $val) {
                $tmp_no = $key + 1;
                $data["url_file{$tmp_no}"] = "{$mini['dir']}download.php?mode=view&amp;no={$val['no']}";
                $data["link_file{$tmp_no}"] = "href='{$mini['dir']}download.php?no={$val['no']}'";
                $data['file_data'][$tmp_no] = parseFile($val, 1);
            }
            unset($file);
        }
    }
    // 경고
    if (!empty($data['alert']) && !empty($board_data['use_alert'])) {
        $data['ment'] = "<div class='alertDiv'>경고(!) 클릭하시면 내용이 펼쳐집니다. 위험한 내용이나 스포일러성 내용이 포함되어 있을 수 있습니다.</div><span style='display:none;'>{$data['ment']}</span>";
    }
    // 라이센스 처리
    if (!empty($data['license'])) {
        $data['license_out'] = getLicense($data['license']);
    }
    // 수정 시간제한
    if (!empty($board_data['limit_edit_comment']) && empty($mini['member']['level_admin'])) {
        if (strtotime($data['date']) + $board_data['limit_edit_comment'] * 60 >= $mini['time']) {
            $data['edit_left'] = dateSec($board_data['limit_edit_comment'] * 60 - ($mini['time'] - strtotime($data['date'])));
        }
    }
    // 글쓴이가 쓴 댓글 처리
    $data['is_writer'] = !empty($data['target_member']) && !empty($mini['skin']['view']['target_member']) && $data['target_member'] == $mini['skin']['view']['target_member'];
    // 링크
    $data['url_view'] = "{$mini['dir']}mini.php?id={$board_data['id']}&amp;no={$data['target_post']}&amp;cNo={$data['no']}";
    $data['url_del'] = "{$mini['dir']}cmt.x.php?id={$board_data['id']}&amp;no={$data['no']}&amp;mode=del&amp;script=move&amp;formMode=move&amp;url=" . url() . (!empty($_SESSION['pageCmtKey']) ? "&amp;pageCmtKey={$_SESSION['pageCmtKey']}" : "");
    $data['js_name'] = "onclick='view_member.open(event, { target_member: \"{$data['target_member']}\", id: \"{$board_data['id']}\", post_no: \"{$data['target_post']}\", cmt_no: \"{$data['no']}\" })'";
    $data['url_award'] = "{$mini['dir']}ajax.php?mode=award&amp;id={$board_data['id']}&amp;no={$data['no']}&amp;url=" . url();
    $data['js_reply'] = $data['permit_comment'] ? "onclick='replys({$data['no']}); return false;'" : "";
    $data['js_modify'] = $data['permit_handle'] ? "onclick='edits({$data['no']}); return false;'" : "";
    $data['js_del'] = $data['permit_handle'] ? "onclick='dels({$data['no']}); return false;'" : "";
    $data['js_vote'] = "onclick='votes({ mode: \"vote\", id: \"{$board_data['id']}\", cmt_no: \"{$data['no']}\" }); return false;'";
    $data['js_hate'] = "onclick='votes({ mode: \"hate\", id: \"{$board_data['id']}\", cmt_no: \"{$data['no']}\" }); return false;'";
    $data['js_award'] = "onclick=''";
    $data['url_report'] = "{$mini['dir']}report.php?id={$board_data['id']}&amp;mode=comment&amp;no={$data['no']}";
    $data['pop_report'] = "iiPopup.init({ url: \"{$data['url_report']}\", width:iiSize[\"report\"][0], height:iiSize[\"report\"][1] });";
    $data['url_manage'] = "{$mini['dir']}manage.php?id={$board_data['id']}&amp;group={$_REQUEST['group']}&amp;mode=comment&amp;no[]={$data['no']}&amp;url=" . url();
    $data['pop_manage'] = "iiPopup.init({ url: \"{$data['url_manage']}\", width:iiSize[\"manage\"][0], height:iiSize[\"manage\"][1] }); return false;";
    $data['url_manage_report'] = "{$mini['dir']}manage.php?id={$board_data['id']}&amp;group={$_REQUEST['group']}&amp;mode=comment&amp;report=1&amp;no[]={$data['no']}&amp;url=" . url();
    $data['pop_manage_report'] = "iiPopup.init({ url: \"{$data['url_manage_report']}\", width:iiSize[\"manage\"][0], height:iiSize[\"manage\"][1] }); return false;";
    $data['url_report_view'] = "{$mini['dir']}manage.php?id={$board_data['id']}&amp;mode=comment&amp;no={$data['no']}&amp;url=" . url();
    $data['pop_report_view'] = "iiPopup.init({ url: \"{$data['url_report_view']}\", width:iiSize[\"manage\"][0], height:iiSize[\"manage\"][1] }); return false;";
    // 삭제 처리
    if (!empty($data['is_del'])) {
        $data['ment'] = "<span class='is_del'>{$data['ment']}</span>";
    }
    // 아이피
    if (!empty($data['ip'])) {
        $data['ip_hide'] = preg_replace("/([0-9]+)\\.([0-9]+)\\.([0-9]+)\\.([0-9]+)/", "\\1.*.\\3.*", $data['ip']);
    }
    // link 변수 생성
    urlToLink($data);
    // 비회원 댓글 삭제시 패스워드 입력폼 링크
    if (!empty($data['pass']) && empty($mini['member']['level_admin'])) {
        $data['link_del'] = "href='#' onclick='iiPopup.init({ url: \"{$mini['dir']}pass.php?id={$board_data['id']}&amp;group={$_REQUEST['group']}&amp;target=_parent&amp;url=" . urlencode($data['url_del']) . "\", width:iiSize[\"pass\"][0], height:iiSize[\"pass\"][1] }); return false;'";
        $data['js_del'] = "onclick='iiPopup.init({ url: \"{$mini['dir']}pass.php?id={$board_data['id']}&amp;group={$_REQUEST['group']}&amp;target=_parent&amp;url=" . urlencode($data['url_del']) . "\", width:iiSize[\"pass\"][0], height:iiSize[\"pass\"][1] }); return false;'";
    }
    // 비밀 댓글 처리
    $is_secret = 0;
    if ($data['secret'] && !getPermit("name:secret") && (empty($mini['log']) || $data['target_member'] != $mini['member']['no'])) {
        if (empty($data['pass']) || empty($_REQUEST['pass_encode']) || !empty($_REQUEST['pass_encode']) && $_REQUEST['pass_encode'] != md5("{$data['pass']}|{$mini['ip']}|" . session_id())) {
            $is_secret = 1;
            $data['ment'] = "비밀 댓글 입니다.";
            if ($data['pass']) {
                $data['ment'] .= " <a href='#' onclick='iiPopup.init({ url: \"{$mini['dir']}pass.php?id={$board_data['id']}&amp;group={$_REQUEST['group']}&amp;target=_parent&amp;url=" . url() . "\", width:iiSize[\"pass\"][0], height:iiSize[\"pass\"][1] }); return false;'>여기를 눌러 비밀번호를 입력하세요.</a>";
            } else {
                $data['name'] = '비밀';
            }
        }
    }
    if ($data['secret'] && !$is_secret) {
        $data['ment'] = '[비밀댓글 입니다]<br />' . $data['ment'];
    }
    // 태그 없는 변수
    $data['ment_notag'] = strip_tags($data['ment']);
    if ($ret) {
        return $data;
    }
}