コード例 #1
0
ファイル: ArrghFunctionTest.php プロジェクト: mblarsen/arrgh
 public function testDiff()
 {
     $input1 = ["a", "b", "c"];
     $input2 = ["b", "c", "d"];
     $this->assertEquals(["a"], arr_diff($input1, $input2));
 }
コード例 #2
0
ファイル: post_load.php プロジェクト: Gninety/Microweber
function arr_diff($a1, $a2)
{
    $ar = array();
    foreach ($a2 as $k => $v) {
        if (!is_array($v)) {
            if ($v !== $a1[$k]) {
                $ar[$k] = $v;
            }
        } else {
            if ($arr = arr_diff($a1[$k], $a2[$k])) {
                $ar[$k] = $arr;
            }
        }
    }
    return $ar;
}
コード例 #3
0
ファイル: ii.write.php プロジェクト: bluecat/iiwork-php
/** 글 수정
 * @class write
 * @param
		$data: 글쓰기 data, 이미 check와 가공이 끝난 데이터여야 함
		$board_data: 게시판 설정 data
		-id: 게시판 아이디. 게시판 설정 data가 없을 때 아이디를 토대로 설정을 로드한다.
		-no: 대상 글번호 지정. (글번호를 지정할 수 있다. 없다면 data에 저장되어 있는 자료를 수정)
		-is_update: 회원정보 업데이트 여부
		-is_ex: 이전정보 로드 여부
		-is_check: 입력변수 체크 여부
  */
function editPost(&$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['num']);
    unset($data['prev']);
    unset($data['next']);
    unset($data['target_member']);
    unset($data['trackback']);
    unset($data['pingback']);
    unset($data['ip']);
    unset($data['date_comment']);
    unset($data['name_comment']);
    unset($data['count_comment']);
    unset($data['hit']);
    unset($data['vote']);
    unset($data['hate']);
    unset($data['download']);
    unset($data['date']);
    unset($data['date_last']);
    unset($data['date_expire']);
    unset($data['history_vote']);
    unset($data['history_hit']);
    if (empty($mini['member']['level_admin'])) {
        unset($data['ment_advice']);
        unset($data['is_lock']);
        unset($data['admit_file']);
        unset($data['admit_post']);
        unset($data['relate']);
    }
    //// 게시판 설정
    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']} 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['target_member'])) {
        if (empty($mini['log'])) {
            __error('권한이 없습니다. [로그인이 필요합니다]');
        }
        if (empty($mini['member']['level_admin']) && !getPermit("name:edit") && $mdata['no'] != $mini['member']['no']) {
            __error('권한이 없습니다. [자신이 쓴 글만 수정할 수 있습니다]');
        }
        if (!empty($mini['member']['level_admin']) && !getPermit("name:edit") && $mdata['no'] != $mini['member']['no'] && $mdata['level_admin'] >= $mini['member']['level_admin']) {
            __error('권한이 없습니다. [자신보다 높거나 같은 권한의 관리자가 쓴 글 입니다]');
        }
    } else {
        if (empty($mini['member']['level_admin']) && !getPermit("name:edit")) {
            if (empty($_REQUEST['pass_encode'])) {
                __error('비밀번호가 없습니다');
            }
            if (!empty($mini['log']) && empty($mini['member']['level_admin'])) {
                __error('권한이 없습니다. [비회원이 쓴글 입니다]');
            }
            if (empty($mini['member']['level_admin']) && $_REQUEST['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_post']) && empty($mini['member']['level_admin'])) {
        if (!empty($data_ex) && strtotime($data_ex['date']) + $board_data['limit_edit_post'] * 60 < $mini['time']) {
            __error("작성 후 {$board_data['limit_edit_post']}분이 지난 글을 수정할 수 없습니다");
        }
    }
    //// 입력정보 체크
    if (empty($data['target_member']) && empty($mini['member'])) {
        check($data['name'], "min:1, max:16, name:이름");
    }
    if (!empty($data['mail'])) {
        check($data['mail'], "type:mail, name:메일");
    }
    //// 입력변수 체크
    if ($param['is_check']) {
        // 입력변수 체크
        checkField($data, $board_data['table'], $param);
        // 글 가공
        checkPost($data, $board_data);
    }
    //+ 수정 정보 넣는다
    //// 직접 수정이 안되는 정보는 제외시킨다
    unset($data['no']);
    unset($data['num']);
    unset($data['date']);
    unset($data['ip']);
    unset($data['hit']);
    unset($data['vote']);
    unset($data['hate']);
    unset($data['admit_file']);
    unset($data['admit_post']);
    unset($data['target_member']);
    //+ 권한별로 제외하는 필드를 지정한다. (이를테면 target_member 같은거 바꿀 수 없으니깐)
    //// 휴지통
    if (!empty($board_data['use_trash_edit'])) {
        $trash = $trash_tmp = array();
        foreach ($data_ex as $key2 => $val2) {
            switch ($key2) {
                case 'num':
                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;
            }
        }
        // 변경점
        $tmp_data_ex = $data_ex;
        str($tmp_data_ex, 'decode');
        $tmp_diff = arr_diff($tmp_data_ex, $data, 1);
        // 정의되지 않은 것들은 제외
        if (!empty($tmp_diff['data_ex'])) {
            foreach ($tmp_diff['data_ex'] as $key2 => $val2) {
                if (!isset($data[$key2])) {
                    unset($tmp_diff['data_ex'][$key2]);
                }
            }
        }
        if (!empty($tmp_diff['data'])) {
            foreach ($tmp_diff['data'] as $key2 => $val2) {
                if (!isset($data_ex[$key2])) {
                    unset($tmp_diff['data'][$key2]);
                }
            }
        }
        if (empty($tmp_diff['data'])) {
            unset($tmp_diff['data']);
        }
        if (empty($tmp_diff['data_ex'])) {
            unset($tmp_diff['data_ex']);
        }
        // 가공
        if (!empty($tmp_diff)) {
            $tmp_diff = serialize($tmp_diff);
            $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'], 'is_edit' => 1, 'field' => serialize($trash_tmp), 'diff' => $tmp_diff));
            sql("INSERT INTO {$mini['name']['trash']} " . query($trash, 'insert'));
        }
    }
    //// 쿼리
    sql("UPDATE {$board_data['table']} SET " . query($data, 'update') . " WHERE no={$no}");
    //// 정보 재입력
    $data['no'] = $data_ex['no'];
    //// 총 게시물 수 수정
    if ($param['is_ex']) {
        iss($data_ex['category']);
        iss($data_ex['tag']);
        $check = 0;
        if (isset($data['category'])) {
            if ($data['category'] != $data_ex['category']) {
                $check = 1;
            }
        }
        if (isset($data['tag'])) {
            if ($data['tag'] != $data_ex['tag']) {
                $check = 1;
            }
        }
        if ($check) {
            updateTotal($data_ex, $board_data, 'del');
            updateTotal($data, $board_data, 'add');
            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 ($param['is_ex']) {
        if (!empty($data['title']) && $data_ex['title'] != $data['title']) {
            $data_ex['title'] = $data['title'];
        }
        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['category']) && $data_ex['category'] != $data['category']) {
            $data_ex['category'] = $data['category'];
        }
        if (!empty($data['tag']) && $data_ex['tag'] != $data['tag']) {
            $data_ex['tag'] = $data['tag'];
        }
        delIndex($data_ex['num']);
        addIndex($data_ex, "\n\t\t\t\tid: {$board_data['no']}\n\t\t\t\tnum: {$data_ex['num']}\n\t\t\t\tdate: {$data_ex['date']}\n\t\t\t\tip: {$data_ex['ip']}\n\t\t\t\ttarget: {$data_ex['target_member']}\n\t\t\t");
    }
    //// 트랙백 보내기
    if (!empty($trackback)) {
        $result = '';
        $result = sendTrackback($trackback, $trackback_excerpt, $trackback_charset, $data, $board_data, 'post');
        if ($result) {
            __error("글수정에 성공했지만 트랙백을 보내지 못했습니다. ({$result})");
        }
    }
    //// 이미지 치환
    if (!empty($is_saveImage) && !empty($data['ment'])) {
        $data['ment'] = saveImage($data_ex['no'], $data['ment'], $board_data);
        sql("UPDATE {$board_data['table']} SET ment='{$data['ment']}' WHERE no={$data_ex['no']}");
    }
}
コード例 #4
0
ファイル: common.php プロジェクト: ayunah/opencorpora
function arr_diff($a1, $a2)
{
    $diff = array();
    foreach ($a1 as $k => $v) {
        $dv = array();
        if (is_int($k)) {
            // Compare values
            if (array_search($v, $a2) === false) {
                $dv = $v;
            } else {
                if (is_array($v)) {
                    $dv = arr_diff($v, $a2[$k]);
                }
            }
            if ($dv) {
                $diff[] = $dv;
            }
        } else {
            // Compare noninteger keys
            if (!$a2[$k]) {
                $dv = $v;
            } else {
                if (is_array($v)) {
                    $dv = arr_diff($v, $a2[$k]);
                }
            }
            if ($dv) {
                $diff[$k] = $dv;
            }
        }
    }
    return $diff;
}
コード例 #5
0
ファイル: compare.php プロジェクト: p4ulypops/phpinfo-compare
// compare two different phpinfos
$site1 = 'http://example.com/phpinfo.php';
$site2 = 'http://example.com/phpinfo-2.php';
// if required, use curl_website($site1,username,password);
$data1 = curl_website($site1);
$data2 = curl_website($site2);
$array1 = phpinfo_to_array($data1);
$array2 = phpinfo_to_array($data2);
/*
 * pull the content, turn it into an array and compare
 */
echo '<pre>';
#echo '<h1>array1</h1>';
#print_r($array1); // for debugging
#echo '<h1>array2</h1>';
#print_r($array2); // for debugging
echo '<h1>Compare Two phpinfo() Files</h1>';
echo '<p>Comparison between <span style="color: red;">' . $site1 . '</span> and <span style="color: blue;">' . $site2 . '</span></p>';
// side-by-side comparison
echo '<h2>side-by-side comparison</h2>';
foreach ($array1 as $key => $value) {
    echo '<span style="font-weight: bold;">' . $key . '</span>' . "\n";
    echo 'array1: ' . $value . "\n";
    echo 'array2: ' . $array2[$key] . "\n";
    if ($value != $array2[$key]) {
        echo '<span style="text-decoration: underline;">diff</span>' . "\n";
        echo arr_diff(array($value), array($array2[$key]));
    }
    echo "<br />";
}
echo '</pre>';
コード例 #6
0
ファイル: ii.site.php プロジェクト: bluecat/iiwork-php
/**
* 그룹 수정
* @class admin.site
* @param
		$data: 자료
		$no: 대상번호
		-is_check: 입력변수 체크 여부
* @return 
*/
function editSite($data, $no, $param = '')
{
    global $mini;
    $param = param($param);
    def($param['is_check'], 1);
    //// 변수 체크
    if ($param['is_check']) {
        checkFieldSite($data);
    }
    //// 번호 넣기
    if (is_array($no) && isset($data['id'])) {
        __error('그룹 다중 수정에 아이디 수정이 포함되어 있습니다');
    }
    if (!is_array($no)) {
        $tmp = $no;
        $no = array();
        $no[0] = $tmp;
    }
    //// 수정할 수 없는 정보 제거
    unset($data['no']);
    unset($data['date']);
    unset($data['mode']);
    unset($data['script']);
    //// 넘어오지 않은 변수 처리
    if (empty($data['site_link'])) {
        $data['site_link'] = '';
    }
    foreach ($no as $key => $val) {
        //// 번호 체크
        check($val, 'type:num, name:그룹번호');
        //// 데이터 로드
        $data_ex = sql("SELECT * FROM {$mini['name']['site']} WHERE no={$val}");
        if (!is_array($data_ex)) {
            __error('해당 그룹이 존재하지 않습니다');
        }
        //// 권한체크
        checkAdmin("\n\t\t\t\tsite: {$data_ex['no']}\n\t\t\t\ttype: ajax\n\t\t\t");
        //// 기본변수 여부 체크
        if (isset($data['name']) && !$data['name']) {
            __error('그룹 이름을 입력해 주세요');
        }
        //// 이름 중복 체크
        if (isset($data['name'])) {
            if (sql("SELECT COUNT(*) FROM {$mini['name']['site']} WHERE no!={$val} and name='{$data['name']}'")) {
                __error('중복된 그룹이름 입니다.');
            }
        }
        //// 쿼리
        sql("UPDATE {$mini['name']['site']} SET " . query($data, 'update') . " WHERE no={$val}");
        //// 번호 재입력
        $data['no'] = $val;
        //// 로그 기록
        addLog(array('mode' => 'site_edit', 'field1' => $data['no'], 'ment' => arr_diff($data_ex, $data)));
    }
}
コード例 #7
0
ファイル: lib.php プロジェクト: OlivierLamiraux/mtgas
function obj_diff($new, $old)
{
    // Returns only properties that changed between new and old value
    $result = new stdClass();
    foreach ($new as $key => $value) {
        // Each value in new
        if (isset($old->{$key})) {
            // Key is present in old
            $oldvalue = $old->{$key};
            switch (gettype($value)) {
                case 'object':
                    $result->{$key} = obj_diff($value, $oldvalue);
                    break;
                case 'array':
                    $a = arr_diff($value, $oldvalue);
                    if (count($a) > 0) {
                        $result->{$key} = $a;
                    }
                    break;
                default:
                    if ($value != $old->{$key}) {
                        $result->{$key} = $value;
                    }
            }
        } else {
            // Key not present in old
            $result->{$key} = $new->{$key};
        }
        // Set as new value
    }
    if (count(get_object_vars($result)) == 0) {
        $result = null;
    }
    return $result;
}
コード例 #8
0
ファイル: diff.inc.php プロジェクト: rhertzog/lcs
/**
 * Computes the diff between two texts, line by line.
 * The lines are supposed to be separated by a NL ("\n")
 * @param string $textA The old text
 * @param string $textB The new text
 * @param boolean $show_equal If true, the result will also contain the common lines
 * (default false)
 * @return array An array of arrays describing the diff
 * @see arr_diff for the return value
 */
function text_diff_by_lines($textA, $textB, $show_equal = false)
{
    return arr_diff(explode("\n", $textA), explode("\n", $textB), $show_equal);
}
コード例 #9
0
ファイル: ii.board.php プロジェクト: bluecat/iiwork-php
/**
* 게시판 수정
* @class admin.board
* @param
		$data: 자료
		$no: 대상번호
		-is_check: 입력변수 체크 여부
* @return 
*/
function editBoard($data, $no, $param = '')
{
    global $mini;
    $param = param($param);
    def($param['is_check'], 1);
    //// 변수 체크
    if ($param['is_check']) {
        checkFieldBoard($data);
    }
    //// 번호 넣기
    if (is_array($no) && isset($data['id'])) {
        __error('게시판 다중 수정에 아이디 수정이 포함되어 있습니다');
    }
    if (!is_array($no)) {
        $tmp = $no;
        $no = array();
        $no[0] = $tmp;
    }
    //// 수정할 수 없는 정보 제거
    unset($data['no']);
    unset($data['dir']);
    unset($data['date']);
    unset($data['mode']);
    unset($data['script']);
    //// 넘어오지 않은 변수명 처리
    if (empty($data['field'])) {
        $data['field'] = '';
    }
    if (empty($data['site_link'])) {
        $data['site_link'] = '';
    }
    foreach ($no as $key => $val) {
        //// 번호 체크
        check($val, 'type:num, name:게시판번호');
        //// 데이터 로드
        $data_ex = sql("SELECT * FROM {$mini['name']['admin']} WHERE no={$val}");
        if (!is_array($data_ex)) {
            __error('해당 게시판이 존재하지 않습니다');
        }
        //// 권한체크
        checkAdmin("\n\t\t\t\tsite: {$data_ex['site']}\n\t\t\t\tboard: {$data_ex['no']}\n\t\t\t\ttype: ajax\n\t\t\t");
        //// 아이디 중복 체크
        if (isset($data['id'])) {
            check($data['id'], 'type:id, name:게시판아이디');
            if (!preg_match("/[^0-9]/", $data['id'])) {
                __error('게시판 아이디에 숫자만 입력하실 수 없습니다.');
            }
            if (sql("SELECT COUNT(*) FROM {$mini['name']['admin']} WHERE no!={$val} and id='{$data['id']}'")) {
                __error('중복된 게시판 아이디 입니다.');
            }
        }
        //// 기본변수 여부 체크
        if (isset($data['name']) && !$data['name']) {
            __error('게시판 이름을 입력해 주세요');
        }
        if (isset($data['skin']) && !$data['skin']) {
            __error('스킨을 선택해 주세요');
        }
        if (isset($data['site']) && !check($data['site'], 'type:num')) {
            __error("그룹을 선택해 주세요");
        }
        //// 쿼리
        sql("UPDATE {$mini['name']['admin']} SET " . query($data, 'update') . " WHERE no={$val}");
        //// 번호 재입력
        $data['no'] = $val;
        //// 로그 기록
        addLog(array('mode' => 'board_edit', 'field1' => $data['no'], 'ment' => arr_diff($data_ex, $data)));
    }
}
コード例 #10
0
         }
         $old_array = explode("\n", $second);
         $new_array = explode("\n", $first);
     }
     $old_array = explode("\n", $second);
     $new_array = explode("\n", $first);
     // diff-methode festlegen
     if ($environment["parameter"][7] != "") {
         $diff_type = $environment["parameter"][7];
     } else {
         $diff_type = $cfg["contented"]["diff_engine"];
     }
     if ($diff_type == "phpdiff3") {
         $diff = phpdiff3($second, $first);
     } elseif (strstr($diff_type, "phpdiff")) {
         $diff = arr_diff($old_array, $new_array);
     } else {
         $diff = new Text_Diff('auto', array($old_array, $new_array));
         $renderer = new Text_Diff_Renderer_inline();
         $diff = str_replace("\n", "<br>", $renderer->render($diff));
     }
     $ausgaben["diff"] = $diff;
 }
 // form options holen
 $form_options = form_options(eCRC($environment["ebene"]) . "." . $environment["kategorie"]);
 // form elememte bauen
 $element = form_elements($cfg["contented"]["db"]["leer"]["entries"], $form_values);
 // form elemente erweitern
 $element["extension1"] = "<input name=\"extension1\" type=\"text\" maxlength=\"5\" size=\"5\">";
 $element["extension2"] = "<input name=\"extension2\" type=\"text\" maxlength=\"5\" size=\"5\">";
 // +++
コード例 #11
0
ファイル: syntax_group.php プロジェクト: ayunah/opencorpora
/*
    Сюда приходит POST'ом следующее:
    act - что нужно делать
*/
try {
    switch ($_POST['act']) {
        case 'newGroup':
            $result['gid'] = add_group($_POST['tokens'], (int) $_POST['type']);
            break;
        case 'copyGroup':
            $old_groups = get_groups_by_sentence((int) $_POST['sentence_id'], (int) $_SESSION['user_id']);
            $new_group_id = copy_group((int) $_POST['gid'], (int) $_SESSION['user_id']);
            $new_groups = get_groups_by_sentence((int) $_POST['sentence_id'], (int) $_SESSION['user_id']);
            $result['new_groups'] = array();
            $result['new_groups']['simple'] = arr_diff($new_groups['simple'], $old_groups['simple']);
            $result['new_groups']['complex'] = arr_diff($new_groups['complex'], $old_groups['complex']);
            break;
        case 'deleteGroup':
            delete_group($_POST['gid']);
            break;
        case 'setGroupHead':
            set_group_head($_POST['gid'], $_POST['head_id']);
            break;
        case 'setGroupType':
            set_group_type($_POST['gid'], $_POST['type']);
            break;
        case 'getGroupsTable':
            // Решил это вынести в аякс, потому что перерисовывать такую
            // табличку на клиенте - сложно, не используя шаблонизатор.
            // TODO: проверка, свое ли спрашивает пользователь
            require_once 'Smarty.class.php';
コード例 #12
0
ファイル: diff.php プロジェクト: s-a-r-id/geograph-project
    if (count($page)) {
        $smarty->assign($page);
        if ($r1 && $r2 && $r1 != $r2) {
            if ($r1 > $r2) {
                $a1 = getRevisionArray($page['article_id'], intval($r2));
                $a2 = getRevisionArray($page['article_id'], intval($r1));
            } else {
                $a1 = getRevisionArray($page['article_id'], intval($r1));
                $a2 = getRevisionArray($page['article_id'], intval($r2));
            }
            if (count($a1) > count($a2)) {
                $a2 = array_pad($a2, count($a1), '');
            } elseif (count($a1) < count($a2)) {
                $a1 = array_pad($a1, count($a2), '');
            }
            $smarty->assign_by_ref('output', arr_diff($a1, $a2, 1));
        }
    } else {
        $template = 'static_404.tpl';
    }
} else {
    $smarty->assign('user_id', $page['user_id']);
    $smarty->assign('url', $page['url']);
}
$smarty->display($template, $cacheid);
function getRevisionArray($aid, $revid)
{
    global $db, $isadmin, $USER;
    $prev_fetch_mode = $ADODB_FETCH_MODE;
    $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
    $page = $db->getRow("\r\n\tselect category_name,url,title,extract,licence,approved,user.realname as modifier_realname,content,update_time\r\n\tfrom article_revisions \r\n\t\tinner join user on (modifier = user.user_id)\r\n\t\tleft join article_cat on (article_revisions.article_cat_id = article_cat.article_cat_id)\r\n\twhere ( (licence != 'none' and approved > 0) \r\n\t\tor user.user_id = {$USER->user_id}\r\n\t\tor {$isadmin} )\r\n\t\tand article_id = {$aid}\r\n\t\tand article_revision_id = {$revid}");