Beispiel #1
0
/** 외부로그인
 * @class io 
 * @param
		-skin: 로그인되어 있을 떄 스킨
		-skin_not: 로그인이 되어있지 않을 때 스킨
		-id: 스킨 적용할 게시판 번호 or 아이디
		-group: 스킨 적용할 그룹 번호
		-skip_style: 기본 스타일 로드를 스킵할지 선택 합니다.
 * @return Array 스킨이 있을 경우엔 리턴 안됨
 */
function outlogin($param)
{
    global $mini;
    $param = param($param);
    $skin = '';
    // 없을 경우 기본 그룹으로 지정
    if (empty($param['id']) && empty($param['group'])) {
        $param['group'] = 1;
    }
    $q = '';
    if (!empty($param['id'])) {
        $q = "id={$param['id']}";
        $data_board = getBoard($param['id'], 1);
        $data_site = getSite($data_board['site'], 1);
    }
    if (!empty($param['group'])) {
        $q = "group={$param['group']}";
        $data_site = getSite($param['group'], 1);
    }
    // 로그인 되어 있을 떄
    if (!empty($mini['log'])) {
        $val =& $mini['member'];
        $val = array_merge($val, array('url_logout' => "{$mini['dir']}login.php?mode=logout&url=" . url(), 'url_myinfo' => "{$mini['dir']}member.php?mode=modify&no={$mini['member']['no']}&{$q}&url=" . url(), 'url_mymenu' => "{$mini['dir']}mymenu.php?mode=memo&no={$mini['member']['no']}&{$q}&url=" . url(), 'url_admin' => "{$mini['dir']}admin/", 'js_back' => "onclick='history.back();'", 'js_back2' => "onclick='history.go(-2);'", 'is_admin' => !empty($mini['member']['level_admin']), 'is_god' => !empty($mini['member']['level_admin']) && $mini['member']['level_admin'] == 4, 'date' => $mini['date'], 'ip' => $mini['ip']));
        if (!empty($val['url_myinfo'])) {
            $val['pop_myinfo'] = "iiPopup.init({ url: \"{$val['url_myinfo']}\", width:iiSize[\"myinfo\"][0], height:iiSize[\"myinfo\"][1], close: true });";
        }
        if (!empty($val['url_mymenu'])) {
            $val['pop_mymenu'] = "iiPopup.init({ url: \"{$val['url_mymenu']}\", width:iiSize[\"mymenu\"][0], height:iiSize[\"mymenu\"][1] });";
        }
        if (!empty($param['skin'])) {
            $skin = $param['skin'];
        }
    } else {
        $val = array('form_start' => "\n\t\t\t\t<form id='form_login' name='form_login' action='{$mini['dir']}login.php?url=" . url() . "' method='post'>\n\t\t\t\t<input type='hidden' name='mode' value='login' />\n\t\t\t", 'form_end' => "</form>\n\t\t\t\t<script type='text/javascript' src='{$mini['dir']}js/mootools.js'></script>\n\t\t\t\t<script type='text/javascript' src='{$mini['dir']}js/ii.js'></script>\n\t\t\t\t<script type='text/javascript' src='{$mini['dir']}js/ii.form.js'></script>\n\t\t\t\t<script type='text/javascript' src='{$mini['dir']}js/size.js'></script>\n\t\t\t\t<script type='text/javascript' src='{$mini['dir']}js/md5.js'></script>\n\t\t\t\t<script type='text/javascript' src='{$mini['dir']}js/sha1.js'></script>\n\t\t\t\t<script type='text/javascript'>\n\t\t\t\t//<![CDATA[\n\t\t\t\t\tvar miniDir = '{$mini['dir']}';\n\t\t\t\t\tvar secure_pass = '******'secure_pass']}';\n\t\t\t\t\tvar ip = '{$mini['ip']}';\n\t\t\t\t\tvar session_id = Cookie.get('" . ini_get('session.name') . "');\n\n\n//\t\t\t\t\tvar form_outlogin = \$('outlogin');\n//\t\t\t\t\tform_outlogin.submitAction = function () {\n//\t\t\t\t\t\terror(\"랄라\");\n//\t\t\t\t\t\treturn false;\n//\t\t\t\t\t};\n//\t\t\t\t\tform_outlogin.setForm();\n\t\t\t\t//]]>\n\t\t\t\t</script>\n\t\t\t\t<script type='text/javascript' src='{$mini['dir']}js/mini.login.js'></script>\n\t\t\t", 'form_autologin' => "<input type='checkbox' name='autologin' value='1' id='outlogin_autologin' />", 'url_login' => "{$mini['dir']}login.php?{$q}&amp;url=" . url(), 'url_join' => "{$mini['dir']}member.php?{$q}&amp;url=" . url(), 'url_find' => "{$mini['dir']}login.find.php?{$q}&amp;url=" . url(), 'date' => $mini['date'], 'ip' => $mini['ip']);
        if (!empty($val['url_find'])) {
            $val['pop_find'] = "iiPopup.init({ url: \"{$val['url_find']}\", width:iiSize[\"find\"][0], height:iiSize[\"find\"][1] });";
        }
        $val['pop_login'] = "******"{$val['url_login']}\", width:iiSize[\"login\"][0], height:iiSize[\"login\"][1] });";
        $val['pop_join'] = "iiPopup.init({ url: \"{$val['url_join']}\", width:iiSize[\"join\"][0], height:iiSize[\"join\"][1], close: true });";
        if (!empty($param['skin_not'])) {
            $skin = $param['skin_not'];
        }
    }
    urlToLink($val);
    // 변환
    if (!empty($skin)) {
        $preg_left = $preg_right = array();
        $preg_left[] = "/\\[:([a-z0-9_]+)\\.([a-z0-9_]+)\\.([a-z0-9_]+):\\]/ie";
        $preg_right[] = "\$val['\\1']['\\2']['\\3']";
        $preg_left[] = "/\\[:([a-z0-9_]+)\\.([a-z0-9_]+):\\]/ie";
        $preg_right[] = "\$val['\\1']['\\2']";
        $preg_left[] = "/\\[:([a-z0-9_]+):\\]/ie";
        $preg_right[] = "\$val['\\1']";
        $skin = preg_replace($preg_left, $preg_right, $skin);
        echo $skin;
    } else {
        return $val;
    }
}
Beispiel #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'];
            }
        }
    }
}
Beispiel #3
0
/** 댓글 삭제
 * @class write
 * @param
		$no: 댓글 번호, 배열로 복수개 가능
		$board_data: 게시판 설정 data
		-id: 게시판 아이디. 게시판 설정 data가 없을 때 아이디를 토대로 설정을 로드한다.
		-del_post: 권한에 상관없이 무조건 지워진다
  */
function delCmt($no, $board_data = '', $param = '', $data_post = '')
{
    global $mini;
    $param = param($param);
    iss($param['id']);
    $output = array();
    $output['success'] = $output['fail'] = 0;
    $output['msg'] = '';
    //// 게시판 설정
    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) {
        $result = 1;
        check($val, "type:num, name:댓글번호");
        // 데이터 로드
        $data_ex = sql("SELECT * FROM {$board_data['table_cmt']} WHERE no={$val}");
        if (!is_array($data_ex)) {
            continue;
        }
        if ($data_ex['is_del'] && empty($mini['member']['level_admin'])) {
            continue;
        }
        // 잠긴댓글
        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 (is_array($mdata)) {
                parseMember($mdata);
            } else {
                $data_ex['target_member'] = 0;
                $data_ex['pass'] = md5();
            }
        }
        // 권한 체크
        if (!empty($data_ex['target_member']) && empty($param['del_post'])) {
            if (empty($mini['log'])) {
                __error("[{$data_ex['no']}] 권한이 없습니다. [로그인이 필요합니다]");
            }
            if (empty($mini['member']['level_admin']) && empty($mdata['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($param['del_post'])) {
                if (count($no) > 1 && empty($mini['member']['level_admin'])) {
                    __error('비회원의 댓글는 한번에 한개씩 삭제하실 수 있습니다.');
                }
                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($data_post)) {
            $data_post = sql("SELECT * FROM {$board_data['table']} WHERE no={$data_ex['target_post']}");
        }
        // 휴지통
        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 'target_post':
                    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;
                }
            }
            // 댓글 자식 구하기
            $tmp = sql("q:SELECT no FROM {$mini['board']['table_cmt']} WHERE target_post={$data_ex['target_post']} and num={$data_ex['num']} and reply > {$data_ex['reply']} ORDER BY reply, mode:firstFieldArray");
            $tmp_child = is_array($tmp) ? "[" . implode("][", $tmp) . "]" : "";
            $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), 'child' => $tmp_child));
            sql("INSERT INTO {$mini['name']['trash']} " . query($trash, 'insert'));
        }
        // 자식 댓글이 있을 경우 삭제 댓글 처리함
        $count_reply = sql("q:SELECT no FROM {$board_data['table_cmt']} WHERE target_post={$data_ex['target_post']} and parent LIKE '%[{$data_ex['no']}]%', mode:firstFieldArray");
        if (!empty($count_reply) && empty($mini['member']['level_admin']) && empty($param['del_post'])) {
            $name = !empty($mini['log']) ? $mini['member']['name'] : $data_ex['name'];
            sql("UPDATE {$board_data['table_cmt']} SET ment='{$name}에 의해 삭제 되었습니다. [" . date("Y/m/d H:i:s") . "]', field='', is_del=1 WHERE no={$data_ex['no']}");
        } else {
            // 쿼리
            sql("DELETE FROM {$board_data['table_cmt']} WHERE no={$val}");
            // 답변 댓글 당기기
            sql("UPDATE {$board_data['table_cmt']} SET reply=reply-1 WHERE target_post={$data_ex['target_post']} and reply > {$data_ex['reply']} and reply > 0");
            // 답변 댓글 모두 제거
            if (!empty($count_reply)) {
                delCmt($count_reply, $board_data);
            }
        }
        // 검색어 제거
        delIndex($data_post['num'], $data_ex['no']);
        // 게시물의 댓글 수 빼기
        if (empty($data_ex['is_del'])) {
            sql("UPDATE {$board_data['table']} SET " . (!empty($data_ex['trackback']) ? "count_trackback=count_trackback-1" : "count_comment=count_comment-1") . " WHERE no={$data_ex['target_post']}");
        }
        // 포인트
        if ($board_data['point_comment'] !== 0 && !empty($mini['log']) && !empty($data_ex['target_member']) && (empty($board_data['use_cmt_point_one']) || !sql("SELECT COUNT(*) FROM {$board_data['table_cmt']} WHERE target_post={$data_post['no']} and target_member={$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_comment']}\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");
        }
    }
}
Beispiel #4
0
<tr>
	<th><select onchange="if(this.value){document.location='?size='+this.value;}"><option value="">--</option><?php 
foreach (range(2, 6) as $iSize) {
    echo '<option' . ($g_iSize === $iSize ? ' selected="1"' : '') . ' value="' . $iSize . '">Size ' . $iSize . ' board</option>';
}
?>
</select></th>
	<th colspan="2" id="playtime">00:00</th>
</tr>
<tr>
	<td><?php 
echo getBoard($arrEmptyBoard, $g_iSize, 'solution');
?>
</td>
	<td><?php 
echo getBoard($arrBoard, $g_iSize, 'available');
?>
</td>
</tr>
<tr>
	<td align="center"><input type="button" value="Check ^" onclick="return checkSolution('solution');" /></td>
	<td align="center"><input type="button" value="Check ^" onclick="return checkSolution('available');" /></td>
</tr>
</table>

<script type="text/javascript">
<!--//
var g_iStartTime = Math.floor($time()/1000), g_bDoCheck = true, g_selected = null, op0 = 1, op1 = 0.5, g_iSize = <?php 
echo $g_iSize;
?>
;
Beispiel #5
0
/**
 * 로그인
 * @class login
 * @param
		$data: POST array
		-site: 그룹번호
		-board: 게시판번호
		-is_passed: 무조건로그인[0!|1]
*/
function setLogin(&$data, $param)
{
    global $mini;
    $param = param($param);
    iss($data['uid']);
    iss($data['pass']);
    iss($data['pass_encode']);
    iss($data['autologin']);
    iss($mini['set']['use_login_session']);
    iss($pass_after);
    iss($key_login);
    iss($autologin_after);
    def($mini['this']['script'], $_REQUEST['script']);
    def($mini['this']['script'], 'back');
    def($mini['set']['lock_login'], 5);
    def($param['is_passed'], 0);
    $site_data = $board_data = array();
    $site = '';
    if (empty($param['site'])) {
        __error('선택된 그룹이 없습니다.' . ' (' . __FILE__ . ' line ' . __LINE__ . ' in ' . __FUNCTION__ . ')');
    }
    //// 그룹 로드
    if (!empty($mini['site']) && $mini['site']['no'] == $param['site']) {
        $site_data = $mini['site'];
    } else {
        $site_data = getSite($param['site'], 1);
    }
    //// 게시판 로드
    if (!empty($param['board'])) {
        if (!empty($mini['board']) && $mini['board']['no'] == $param['board']) {
            $board_data = $mini['board'];
        } else {
            $board_data = getBoard($param['board'], 1);
        }
    } else {
        if (!empty($mini['board']['site']) && $mini['board']['site'] == $site_data['no']) {
            $board_data = $mini['board'];
        }
    }
    //// 변수 검사
    check($data['uid'], "name: 아이디");
    if (!$param['is_passed']) {
        check($data['pass_encode'], "type:id, name:암호화된 비밀번호, min:16, max:40");
    }
    if (!isset($site_data)) {
        __error('선택된 그룹이 없습니다.');
    }
    $data['uid'] = mysql_escape_string($data['uid']);
    //// 미니아이 로그인
    if (preg_match("/^\\@/", $data['uid'])) {
        __error('준비중 입니다.');
    } else {
        $site = "[{$site_data['no']}]";
        // 그룹의 그룹연결
        if (!empty($site_data['site_link'])) {
            $site .= $site_data['site_link'];
        }
        // 게시판의 그룹연결
        if (!empty($board_data['site_link'])) {
            $site .= $board_data['site_link'];
        }
    }
    //// 데이터 로드
    $tmp_data = sql("q:SELECT * FROM {$mini['name']['member']} WHERE uid='{$data['uid']}', mode:array");
    //// 아이디 확인
    if (!is_array($tmp_data)) {
        __error('일치하는 회원이 없습니다');
    }
    //// 그룹 확인
    $check = 0;
    foreach ($tmp_data as $key => $val) {
        if (inStr($val['site'], $site) || count(array_intersect(getStr($site), getStr($val['site_link']))) || inStr('god', $val['admin']) || inStr('admin', $val['admin'])) {
            $check = 1;
            $data_ex = $val;
        }
    }
    if (!$check) {
        __error('일치하는 회원이 없습니다');
    }
    //// 컨버팅 회원 확인
    if (preg_match("/^\\!/", $data_ex['pass'])) {
        if (!empty($mini['complete']['ajax'])) {
            __complete(array('mode' => 'ajax,reload.parent', 'script' => "window.open(\"{$mini['dir']}login.conv.php?no={$data_ex['no']}\", \"conv\", \"width=400, height=400, scrollbars=2\");"));
        } else {
            __complete(array('mode' => 'move', 'url' => "{$mini['dir']}login.conv.php?no={$data_ex['no']}"));
        }
    }
    //// 실패 회수 확인
    if ($data_ex['lock_login'] >= $mini['set']['lock_login'] && $data_ex['no'] != 1) {
        __error("로그인을 {$mini['set']['lock_login']}회 이상 실패하여 아이디가 잠겼습니다. 관리자에게 문의하세요");
    }
    //// 비밀번호 확인
    if (!$param['is_passed'] && $data['pass_encode'] != md5("{$data_ex['pass']}|{$mini['ip']}|" . session_id())) {
        if ($data_ex['pass'] == 'reset!') {
            __error('비밀번호가 초기화 되었습니다. 아이디/비밀번호 찾기를 통해 새 비밀번호로 설정해 주세요');
        }
        sql("UPDATE {$mini['name']['member']} SET lock_login = lock_login + 1 WHERE no={$data_ex['no']}");
        addLog("\n\t\t\t\tmode: login_lock_login\n\t\t\t\ttarget_member: {$data_ex['no']}\n\t\t\t\tfield1: {$data_ex['lock_login']}\n\t\t\t");
        __error("비밀번호가 일치하지 않습니다 (" . ($data_ex['lock_login'] + 1) . "회 오류)");
    }
    //// 암호화
    // 자동 로그인
    if ($data['autologin']) {
        $pass_after = '';
        $key_login = md5($mini['date']);
        $autologin_after = md5("{$data_ex['pass']}|{$mini['ip']}|{$key_login}");
        $interval = time() + 2592000;
        // 30 days after
    } else {
        $pass_after = md5("{$data_ex['pass']}|{$mini['ip']}");
        $key_login = $autologin_after = '';
        $interval = 0;
    }
    //// 굽기
    // 세션
    if ($mini['set']['use_login_session']) {
        $_SESSION['m_no'] = $data_ex['no'];
        $_SESSION['m_pass'] = $pass_after;
    } else {
        setcookie("m_no", $data_ex['no'], $interval, '/');
        setcookie("m_pass", $pass_after, $interval, '/');
    }
    // 자동로그인
    if ($data['autologin']) {
        setcookie("m_no", $data_ex['no'], $interval, '/');
        setcookie("m_autologin", $autologin_after, $interval, '/');
    } else {
        setcookie("m_autologin", '', 0, '/');
    }
    //// 로그인 기록 추가
    def($mini['set']['login_history_count'], 10);
    $data_ex['history_login'] .= "{$mini['ip']}|{$mini['date']}\n";
    $tmp = explode("\n", $data_ex['history_login']);
    if (count($tmp) > $mini['set']['login_history_count']) {
        unset($tmp[0]);
    }
    $data_ex['history_login'] = is_array($tmp) ? implode("\n", $tmp) : "";
    //// 로그인 포인트 설정
    if (!empty($site_data['point_login'])) {
        if (!sql("SELECT COUNT(*) FROM {$mini['name']['log']} WHERE mode='point' and target_member={$data_ex['no']} and field3='로그인' and date >= '" . date("Y/m/d 00:00:00", $mini['time']) . "'")) {
            setPoint("\n\t\t\t\t\ttarget: {$data_ex['no']}\n\t\t\t\t\tmsg: 로그인\n\t\t\t\t\tpoint: {$site_data['point_login']}\n\t\t\t\t");
        }
    }
    //// 다중 자동로그인 설정
    //+ 정식버젼에서 지울 구문임
    if (!empty($data_ex['ip']) && strpos($data_ex['ip'], '[') === false) {
        $data_ex['ip'] = "[{$data_ex['ip']}]";
    }
    if (!empty($data_ex['key_login']) && strpos($data_ex['key_login'], '[') === false) {
        $data_ex['key_login'] = "******";
    }
    if (empty($key_login)) {
        $key_login = '******';
    }
    // 입력
    $data_ex['ip'] .= "[{$mini['ip']}]";
    $data_ex['key_login'] .= "[{$key_login}]";
    // 3개 한정
    $arr_ip = getStr($data_ex['ip']);
    if (count($arr_ip) > 5) {
        unset($arr_ip[0]);
        $data_ex['ip'] = "[" . implode("][", $arr_ip) . "]";
    }
    $arr_key_login = getStr($data_ex['key_login']);
    if (count($arr_key_login) > 5) {
        unset($arr_key_login[0]);
        $data_ex['key_login'] = "******" . implode("][", $arr_key_login) . "]";
    }
    //// DB수정
    sql("UPDATE {$mini['name']['member']} SET ip='{$data_ex['ip']}', date_login='******'date']}', key_login='******'key_login']}', lock_login=0, count_login=count_login+1, history_login='******'history_login']}' WHERE no={$data_ex['no']}");
}
Beispiel #6
0
/** 코멘트 목록 뽑기
 * @class io
 * @param
		-name: 검색배열이름 (list_cmt)
		-id: 게시판아이디, board_data가 있으면 없어도 된다
		-page: 페이지 (마지막페이지)
		-target_post: 대상게시물번호. view가 있으면 없어도 된다
		$board_data: 게시판정보
		$view: 게시물정보
 * @return Array
 */
function getListCmt($param, $board_data = '', $view = '')
{
    global $mini;
    $param = param($param);
    $output = array();
    iss($param['page']);
    def($param['name'], 'list_cmt');
    def($_REQUEST['cPage'], $param['page']);
    def($_REQUEST['cPage'], 999999999999);
    //// 게시판정보
    if (empty($board_data) && !empty($param['id'])) {
        getBoard($param['id']);
        if (empty($mini['site']) || $mini['site']['no'] != $mini['board']['site']) {
            getSite($mini['board']['site']);
        }
    } else {
        if (empty($board_data) && !empty($mini['board'])) {
            $board_data = $mini['board'];
        }
    }
    //// 게시물정보
    if (empty($view)) {
        $view = sql("SELECT * FROM {$board_data['table']} WHERE no={$param['target_post']}");
        if (!is_array($view)) {
            __error('게시물이 존재하지 않습니다' . ' (' . __FILE__ . ' line ' . __LINE__ . ' in ' . __FUNCTION__ . ')');
        }
        parsePost($view);
        $output['view'] = $view;
    } else {
        $param['target_post'] = $view['no'];
    }
    $is_comment_page = !empty($board_data['use_comment_page']) && !empty($board_data['list_count_comment']) ? 1 : 0;
    if (!$is_comment_page) {
        $board_data['list_count_comment'] = 9999999;
    }
    //// 공지사항 제외
    $is_first = 0;
    if ($is_comment_page || empty($_REQUEST['cQuick']) && empty($_REQUEST['cS']) && empty($_REQUEST['cSort'])) {
        $_REQUEST['cS']['notice!'] = 0;
        $is_first = 1;
    }
    $_REQUEST['cAnd'] = 1;
    //// 검색 처리
    setSearch("\n\t\t\tname: {$param['name']}\n\t\t\tquickName: cQuick\n\t\t\tsName: cS\n\t\t\tandName: cAnd\n\t\t\tis_simple: 1\n\t\t");
    //// 기본 검색쿼리 지정
    check($param['target_post'], 'type:num, name:게시물번호');
    $tmp_trackback = !empty($board_data['use_trackback_cmt']) ? '' : " and trackback=''";
    $mini['list'][$param['name']]['where'] = !empty($mini['list'][$param['name']]['where']) ? $mini['list'][$param['name']]['where'] . " and target_post={$param['target_post']}{$tmp_trackback}" : "WHERE target_post={$param['target_post']}{$tmp_trackback}";
    //// 공지사항 로드
    if ($is_first) {
        $notice = sql("q:SELECT * FROM {$board_data['table_cmt']} WHERE notice=1 and target_post={$param['target_post']} ORDER BY num, mode:array");
        $output['notice'] = $notice;
    }
    //// 정렬 처리
    setSort("\n\t\t\tname: {$param['name']}\n\t\t\tsortName: cSort\n\t\t\ttable: {$board_data['table_cmt']}\n\t\t\torder: ORDER BY num, reply\n\t\t\torder_desc: ORDER BY num DESC, reply ASC\n\t\t");
    //// 리스트
    $data = getList("\n\t\t\tname: {$param['name']}\n\t\t\tlist: {$board_data['list_count_comment']}\n\t\t\ttable: {$board_data['table_cmt']}\n\t\t\tpageName: cPage\n\t\t\tdivName: cDiv\n\t\t\tstartName: cStart\n\t\t");
    $output['data'] = $data;
    //		pr($mini['list'][$param['name']]);
    //// 트랙백 같이 뽑기
    /*
    	$t_data = array();
    	if (!empty($board_data['use_trackback_cmt'])) {
    		$t_data = sql("q:SELECT * FROM {$board_data['table_cmt']} WHERE target_post={$view['no']} and trackback!='' ORDER BY num, mode:array");
    		$output['data'] = array_merge($t_data, $output['data']);
    		unset($t_data);
    	}
    */
    //// 트랙백 따로 뽑기
    if ($is_first && empty($board_data['use_trackback_cmt'])) {
        $t_data = sql("q:SELECT * FROM {$board_data['table_cmt']} WHERE target_post={$view['no']} and trackback!='' ORDER BY num, mode:array");
        $output['trackback'] = $t_data;
    }
    return $output;
}
<?php

if (isset($_GET['board'])) {
    require_once 'lib/dataLoader.php';
    $boards = getBoard('database');
    $data = $_GET['board'];
    $data = check_input($data);
    $finalBoard = null;
    foreach ($boards as $theBoard) {
        if ($theBoard->board["key"] == $data) {
            $finalBoard = $theBoard;
        }
    }
    $output = "";
    $content = getBoardContent($data);
    ?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Project Manager</title>
    <link rel="stylesheet" href="css/global.css" media="screen" title="no title" charset="utf-8">
<link href='https://fonts.googleapis.com/css?family=Oswald:400,300,700' rel='stylesheet' type='text/css'>
  </head>
  <body>
    <div id="board" data-id="<?php 
    echo $data;
    ?>
"></div>
    <div class="container">
      <a class="homeLink" href="index.php">Home</a>