예제 #1
0
         $success_msg = gettext("Your vote has been cleared");
     }
 }
 if (isset($_POST['addcomment'])) {
     if (isset($_POST['comment']) && strlen(trim($_POST['comment'])) > 0) {
         $comment = trim($_POST['comment']);
         links_add_comment($lid, $_SESSION['UID'], $comment);
         $success_msg = gettext("Your comment was added.");
     } else {
         $error_msg_array[] = gettext("You must type a comment!");
         $valid = false;
     }
 }
 if (isset($_POST['update']) && ($user_perm_links_moderate || $creator_uid == $_SESSION['UID'])) {
     if (isset($_POST['delete']) && $_POST['delete'] == "confirm") {
         links_delete($lid);
         if (session::check_perm(USER_PERM_FOLDER_MODERATE, 0) && $link['UID'] != $_SESSION['UID']) {
             admin_add_log_entry(DELETE_LINK, array($link['LID'], $link['TITLE'], $link['URI']));
         }
         header_redirect("links.php?webtag={$webtag}&fid={$parent_fid}");
         exit;
     } else {
         if (isset($_POST['fid']) && is_numeric($_POST['fid'])) {
             $fid = $_POST['fid'];
         } else {
             $error_msg_array[] = gettext("No Folder ID specified");
             $valid = false;
         }
         if (isset($_POST['uri']) && preg_match('/\\b([a-z]+:\\/\\/([-\\p{L}]{2,}\\.)*[-\\p{L}]{2,}(:\\d+)?(([^\\s;,.?"\'[\\]() {}<>]|\\S[^\\s;,.?"\'[\\]() {}<>])*)?)/iu', $_POST['uri'])) {
             $uri = $_POST['uri'];
         } else {
         admin_add_log_entry(APPROVED_LINK, array($lid));
         if (preg_match("/^links_detail.php/u", $ret) > 0) {
             header_redirect("links_detail.php?webtag={$webtag}&lid={$lid}&link_approve_success={$lid}");
             exit;
         } else {
             html_draw_top(sprintf('title=%s', gettext("Approve Link")), 'class=window_title');
             html_display_msg(gettext("Approve Link"), sprintf(gettext("Successfully approved link"), $lid), "admin_link_approve.php", 'get', array('back' => gettext("Back")), array('ret' => $ret), '_self', 'center');
             html_draw_bottom();
             exit;
         }
     } else {
         $error_msg_array[] = gettext("Link approval failed");
     }
 } else {
     if (isset($_POST['delete'])) {
         if (links_delete($lid)) {
             if (session::check_perm(USER_PERM_FOLDER_MODERATE, 0) && $link['UID'] != session::get_value('UID')) {
                 admin_add_log_entry(DELETE_LINK, array($lid));
             }
             if (preg_match("/^links_detail.php/u", $ret) > 0) {
                 header_redirect("links_detail.php?webtag={$webtag}&lid={$lid}&link_approve_success={$lid}");
                 exit;
             } else {
                 html_draw_top(sprintf('title=%s', gettext("Approve Link")), 'class=window_title');
                 html_display_msg(gettext("Approve Link"), sprintf(gettext("Successfully deleted link"), $lid), "admin_link_approve.php", 'get', array('back' => gettext("Back")), array('ret' => $ret), '_self', 'center');
                 html_draw_bottom();
                 exit;
             }
         } else {
             $error_msg_array[] = gettext("Error deleting link");
         }
예제 #3
0
function links_update($page)
{
    // if (PKWK_READONLY) return; // Do nothing
    if (auth::check_role('readonly')) {
        return;
    }
    // Do nothing
    if (ini_get('safe_mode') == '0') {
        set_time_limit(0);
    }
    $time = is_page($page, TRUE) ? get_filetime($page) : 0;
    $rel_old = array();
    $rel_file = CACHE_DIR . encode($page) . '.rel';
    $rel_file_exist = file_exists($rel_file);
    if ($rel_file_exist === TRUE) {
        $lines = file($rel_file);
        unlink($rel_file);
        if (isset($lines[0])) {
            $rel_old = explode("\t", rtrim($lines[0]));
        }
    }
    $rel_new = array();
    // 参照先
    $rel_auto = array();
    // オートリンクしている参照先
    $links = links_get_objects($page, TRUE);
    foreach ($links as $_obj) {
        if (!isset($_obj->type) || $_obj->type != 'pagename' || $_obj->name == $page || $_obj->name == '') {
            continue;
        }
        if (is_a($_obj, 'Link_autolink')) {
            // 行儀が悪い
            $rel_auto[] = $_obj->name;
        } else {
            if (is_a($_obj, 'Link_autoalias')) {
                $_aliases = get_autoaliases($_obj->name);
                foreach ($_aliases as $_alias) {
                    if (is_pagename($_alias)) {
                        $rel_auto[] = $_alias;
                    }
                }
            } else {
                $rel_new[] = $_obj->name;
            }
        }
    }
    $rel_new = array_unique($rel_new);
    // autolinkしか向いていないページ
    $rel_auto = array_diff(array_unique($rel_auto), $rel_new);
    // 全ての参照先ページ
    $rel_new = array_merge($rel_new, $rel_auto);
    // .rel:$pageが参照しているページの一覧
    if ($time) {
        // ページが存在している
        if (!empty($rel_new)) {
            $fp = fopen($rel_file, 'w') or die_message('cannot write ' . htmlspecialchars($rel_file));
            fputs($fp, join("\t", $rel_new));
            fclose($fp);
        }
    }
    // .ref:$_pageを参照しているページの一覧
    links_add($page, array_diff($rel_new, $rel_old), $rel_auto);
    links_delete($page, array_diff($rel_old, $rel_new));
    global $WikiName, $autolink, $nowikiname, $search_non_list;
    // $pageが新規作成されたページで、AutoLinkの対象となり得る場合
    if ($time && !$rel_file_exist && $autolink && (preg_match("/^{$WikiName}\$/", $page) ? $nowikiname : strlen($page) >= $autolink)) {
        // $pageを参照していそうなページを一斉更新する(おい)
        $search_non_list = 1;
        $pages = do_search($page, 'AND', TRUE, TRUE);
        foreach ($pages as $_page) {
            if ($_page != $page) {
                links_update($_page);
            }
        }
    }
    $ref_file = CACHE_DIR . encode($page) . '.ref';
    // $pageが削除されたときに、
    if (!$time && file_exists($ref_file)) {
        foreach (file($ref_file) as $line) {
            list($ref_page, $ref_auto) = explode("\t", rtrim($line));
            // $pageをAutoLinkでしか参照していないページを一斉更新する(おいおい)
            if ($ref_auto) {
                links_delete($ref_page, array($page));
            }
        }
    }
}
예제 #4
0
 }
 if (sizeof($process_links) > 0) {
     if (isset($_POST['delete_confirm']) && $_POST['delete_confirm'] == 'Y') {
         $valid = true;
         foreach ($process_links as $delete_lid) {
             $process_valid = true;
             if ($process_valid && !session::check_perm(USER_PERM_LINKS_MODERATE, 0)) {
                 $process_valid = false;
             }
             if ($process_valid && !($link = links_get_single($delete_lid, false))) {
                 $process_valid = false;
             }
             if ($process_valid && isset($link['DELETED']) && $link['DELETED'] > 0) {
                 $process_valid = false;
             }
             if ($process_valid && links_delete($delete_lid)) {
                 admin_add_log_entry(DELETE_LINK, array($delete_lid));
             } else {
                 $valid = false;
             }
         }
         if ($valid) {
             header_redirect("admin_link_approve.php?webtag={$webtag}&page={$page}&delete_success=true");
             exit;
         } else {
             $error_msg_array[] = gettext("Failed to delete some links");
         }
     } else {
         html_draw_top(array('title' => gettext('Delete Links'), 'class' => 'window_title'));
         html_display_msg(gettext("Delete"), gettext("Are you sure you want to delete all of the selected links?"), "admin_link_approve.php", 'post', array('delete_links' => gettext("Yes"), 'back' => gettext("No")), array('page' => $page, 'process' => $process_links, 'delete_confirm' => 'Y'), '_self', 'center');
         html_draw_bottom();