Example #1
0
function page_write($page, $postdata, $notimestamp = FALSE)
{
    global $trackback;
    if (PKWK_READONLY) {
        return;
    }
    // Do nothing
    $postdata = make_str_rules($postdata);
    // Create and write diff
    $oldpostdata = is_page($page) ? join('', get_source($page)) : '';
    $diffdata = do_diff($oldpostdata, $postdata);
    file_write(DIFF_DIR, $page, $diffdata);
    // Create backup
    make_backup($page, $postdata == '');
    // Is $postdata null?
    // Create wiki text
    file_write(DATA_DIR, $page, $postdata, $notimestamp);
    if ($trackback) {
        // TrackBack Ping
        $_diff = explode("\n", $diffdata);
        $plus = join("\n", preg_replace('/^\\+/', '', preg_grep('/^\\+/', $_diff)));
        $minus = join("\n", preg_replace('/^-/', '', preg_grep('/^-/', $_diff)));
        tb_send($page, $plus, $minus);
    }
    links_update($page);
}
Example #2
0
function page_write($page,$postdata,$notimestamp=FALSE)
{
	$postdata = make_str_rules($postdata);
	
	// 差分ファイルの作成
	$oldpostdata = is_page($page) ? join('',get_source($page)) : '';
	$diffdata = do_diff($oldpostdata,$postdata);
	file_write(DIFF_DIR,$page,$diffdata);
	
	// バックアップの作成
	make_backup($page,$postdata == '');
	
	// ファイルの書き込み
	file_write(DATA_DIR,$page,$postdata,$notimestamp);
	
	// TrackBack Ping の送信
	// 「追加」行を抽出
	$lines = join("\n",preg_replace('/^\+/','',preg_grep('/^\+/',explode("\n",$diffdata))));
	tb_send($page,$lines);
	
	// linkデータベースを更新
	links_update($page);
}
Example #3
0
         $error_msg_array[] = gettext("That is not a valid URI!");
         $valid = false;
     }
     if (isset($_POST['title']) && strlen(trim($_POST['title'])) > 0) {
         $title = trim($_POST['title']);
     } else {
         $error_msg_array[] = gettext("You must specify a name!");
         $valid = false;
     }
     if (isset($_POST['description']) && strlen(trim($_POST['description'])) > 0) {
         $description = trim($_POST['description']);
     } else {
         $description = "";
     }
     if ($valid) {
         links_update($lid, $fid, $_SESSION['UID'], $title, $uri, $description);
         if (session::check_perm(USER_PERM_FOLDER_MODERATE, 0) && $link['UID'] != $_SESSION['UID']) {
             admin_add_log_entry(DELETE_LINK, array($lid));
         }
         header_redirect("links_detail.php?webtag={$webtag}&lid={$lid}&fid={$fid}");
     }
 }
 if ($user_perm_links_moderate || $link['UID'] == $_SESSION['UID']) {
     if (isset($_POST['hide']) && $_POST['hide'] == "confirm") {
         links_change_visibility($lid, false);
     } else {
         if (!isset($_POST['hide']) || isset($_POST['hide']) && $_POST['hide'] != "confirm") {
             links_change_visibility($lid, true);
         }
     }
     header_redirect("links_detail.php?webtag={$webtag}&lid={$lid}&fid={$fid}");
Example #4
0
function page_write($page, $postdata, $notimestamp = FALSE)
{
    global $trackback, $autoalias, $aliaspage;
    global $autoglossary, $glossarypage;
    global $use_spam_check;
    // if (PKWK_READONLY) return; // Do nothing
    if (auth::check_role('readonly')) {
        return;
    }
    // Do nothing
    if (is_page($page)) {
        $oldpostdata = get_source($page, TRUE, TRUE);
    } else {
        if (auth::is_check_role(PKWK_CREATE_PAGE)) {
            die_message(_('PKWK_CREATE_PAGE prohibits editing'));
        }
        $oldpostdata = '';
    }
    $postdata = make_str_rules($postdata);
    // Create and write diff
    $diffdata = do_diff($oldpostdata, $postdata);
    $role_adm_contents = auth::check_role('role_adm_contents');
    $links = array();
    if ($trackback > 1 || $role_adm_contents && $use_spam_check['page_contents']) {
        $links = get_this_time_links($postdata, $diffdata);
    }
    // Blocking SPAM
    if ($role_adm_contents) {
        if ($use_spam_check['page_remote_addr'] && SpamCheck($_SERVER['REMOTE_ADDR'], 'ip')) {
            die_message('Writing was limited by IPBL (Blocking SPAM).');
        }
        if ($use_spam_check['page_contents'] && SpamCheck($links)) {
            die_message('Writing was limited by DNSBL (Blocking SPAM).');
        }
        if ($use_spam_check['page_write_proxy'] && is_proxy()) {
            die_message('Writing was limited by PROXY (Blocking SPAM).');
        }
    }
    // Logging postdata
    postdata_write();
    // Create diff text
    file_write(DIFF_DIR, $page, $diffdata);
    // Create backup
    make_backup($page, $postdata == '');
    // Is $postdata null?
    // Create wiki text
    file_write(DATA_DIR, $page, $postdata, $notimestamp);
    if (function_exists('senna_update')) {
        senna_update($page, $oldpostdata, $postdata);
    }
    if ($trackback > 1) {
        // TrackBack Ping
        tb_send($page, $links);
    }
    unset($oldpostdata, $diffdata, $links);
    links_update($page);
    // Update autoalias.dat (AutoAliasName)
    if ($autoalias && $page == $aliaspage) {
        $aliases = get_autoaliases();
        if (empty($aliases)) {
            // Remove
            @unlink(CACHE_DIR . PKWK_AUTOALIAS_REGEX_CACHE);
        } else {
            // Create or Update
            autolink_pattern_write(CACHE_DIR . PKWK_AUTOALIAS_REGEX_CACHE, get_autolink_pattern(array_keys($aliases), $autoalias));
        }
    }
    // Update glossary.dat (AutoGlossary)
    if ($autoglossary && $page == $glossarypage) {
        $words = get_autoglossaries();
        if (empty($words)) {
            // Remove
            @unlink(CACHE_DIR . PKWK_GLOSSARY_REGEX_CACHE);
        } else {
            // Create or Update
            autolink_pattern_write(CACHE_DIR . PKWK_GLOSSARY_REGEX_CACHE, get_glossary_pattern(array_keys($words), $autoglossary));
        }
    }
    log_write('update', $page);
}
Example #5
0
function plugin_rename_proceed($pages, $files, $exists)
{
    global $now, $_rename_messages;
    if (plugin_rename_getvar('exist') == '') {
        foreach ($exists as $key => $arr) {
            unset($files[$key]);
        }
    }
    set_time_limit(0);
    foreach ($files as $page => $arr) {
        foreach ($arr as $old => $new) {
            if (isset($exists[$page][$old]) && $exists[$page][$old]) {
                unlink($new);
            }
            rename($old, $new);
            // linkデータベースを更新する BugTrack/327 arino
            links_update($old);
            links_update($new);
        }
    }
    $postdata = get_source(PLUGIN_RENAME_LOGPAGE);
    $postdata[] = '*' . $now . "\n";
    if (plugin_rename_getvar('method') == 'regex') {
        $postdata[] = '-' . $_rename_messages['msg_regex'] . "\n";
        $postdata[] = '--From:[[' . plugin_rename_getvar('src') . ']]' . "\n";
        $postdata[] = '--To:[[' . plugin_rename_getvar('dst') . ']]' . "\n";
    } else {
        $postdata[] = '-' . $_rename_messages['msg_page'] . "\n";
        $postdata[] = '--From:[[' . plugin_rename_getvar('refer') . ']]' . "\n";
        $postdata[] = '--To:[[' . plugin_rename_getvar('page') . ']]' . "\n";
    }
    if (!empty($exists)) {
        $postdata[] = "\n" . $_rename_messages['msg_result'] . "\n";
        foreach ($exists as $page => $arr) {
            $postdata[] = '-' . decode($page) . $_rename_messages['msg_arrow'] . decode($pages[$page]) . "\n";
            foreach ($arr as $ofile => $nfile) {
                $postdata[] = '--' . $ofile . $_rename_messages['msg_arrow'] . $nfile . "\n";
            }
        }
        $postdata[] = '----' . "\n";
    }
    foreach ($pages as $old => $new) {
        $postdata[] = '-' . decode($old) . $_rename_messages['msg_arrow'] . decode($new) . "\n";
    }
    // 更新の衝突はチェックしない。
    // ファイルの書き込み
    page_write(PLUGIN_RENAME_LOGPAGE, join('', $postdata));
    //リダイレクト
    $page = plugin_rename_getvar('page');
    if ($page == '') {
        $page = PLUGIN_RENAME_LOGPAGE;
    }
    pkwk_headers_sent();
    header('Location: ' . get_page_location_uri($page));
    exit;
}
Example #6
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));
            }
        }
    }
}
function plugin_weblog_action_save()
{
    global $script, $post, $vars;
    global $X_uid, $wiki_user_dir, $no_name, $_msg_week;
    global $options, $_weblog_msgs;
    //$vars['page']の退避
    //  途中で別ファイル書き込み時に変更するが、後で戻す必要がある。
    $page_orig = $vars['page'];
    $mode = $vars['mode'];
    $old_page = "";
    if ($mode == "new") {
        //新規作成時、現在日時の取得
        $timestamp = time();
    } else {
        //編集時、対象ページ名より取得
        $_page = $vars['page_name'];
        if ($post['update_stamp'] == 1) {
            $old_page = $_page;
            $timestamp = time();
            $mode = "renew";
        } else {
            $t_year = substr($_page, 0, 4);
            $t_month = substr($_page, 5, 2);
            $t_day = substr($_page, 8, 2);
            $t_hour = substr($_page, 11, 2);
            $t_min = substr($_page, 13, 2);
            $t_sec = substr($_page, 15, 2);
            $timestamp = mktime($t_hour, $t_min, $t_sec, $t_month, $t_day, $t_year);
        }
    }
    //コンフィグの読み込み(指定weblog固有)
    $conf_name = $vars['config'];
    $options = weblog_get_options($conf_name, $options);
    $prefix = strip_bracket($options['PREFIX']);
    //ページ名の設定
    if ($mode == "new" || $mode == "renew") {
        //新規作成時には、prefix/YYYYMMDD-HHMMSS の形式で作成(重複時は -nn の形式でSuffix)
        $i = 0;
        $postdaytime_str = date("Y-m-d-His", $timestamp);
        $_page = $postdaytime_str;
        while (is_page("{$prefix}/{$_page}")) {
            $i++;
            $_page = $postdaytime_str . "-" . sprintf("%02d", $i);
        }
    }
    $page = "{$prefix}/{$_page}";
    //本文の有無のチェック
    if ($post['body'] == '') {
        list($vars['page'], $vars['refer']) = weblog_set_return($page_orig, $prefix);
        return array('msg' => "<p><strong>{$_weblog_msgs['err_msg_nomsg']}</strong></p>\n", 'body' => '');
    }
    //権限のチェック
    if ($mode == "new") {
        //新規作成時には、親ページの権限を元に判断
        if (!edit_auth($prefix, FALSE, FALSE)) {
            list($vars['page'], $vars['refer']) = weblog_set_return($page_orig, $prefix);
            return array('msg' => "<p><strong>{$_weblog_msgs['err_msg_noauth']}</strong></p>\n", 'body' => '');
        }
    } else {
        if ($mode == "renew") {
            //書換時には、元ページの権限を元に判断
            if (!edit_auth($old_page, FALSE, FALSE)) {
                list($vars['page'], $vars['refer']) = weblog_set_return($page_orig, $prefix);
                return array('msg' => "<p><strong>{$_weblog_msgs['err_msg_noauth']}</strong></p>\n", 'body' => '');
            }
        } else {
            //編集時には、対象ページの権限を元に判断
            if (!edit_auth($page, FALSE, FALSE)) {
                list($vars['page'], $vars['refer']) = weblog_set_return($page_orig, $prefix);
                return array('msg' => "<p><strong>{$_weblog_msgs['err_msg_noauth']}</strong></p>\n", 'body' => '');
            }
        }
    }
    //投稿者及び権限設定
    $author = $post['author'] == '' ? $_weblog_msgs['no_name'] : $post['author'];
    if ($X_uid == 0) {
        $contents_auth = "// author:0\n";
        $tmpl_val['__AUTHOR'] = "&weblog_field(__AUTHOR){" . $no_name . "(" . $author . ")};";
    } else {
        $contents_auth = "#freeze\tuid:{$X_uid}\taid:0\tgid:0\n// author:" . $X_uid . "\n";
        $tmpl_val['__AUTHOR'] = "&weblog_field(__AUTHOR){" . $author . "};";
    }
    //投稿日時
    $tmpl_val['__TIMESTAMP'] = "&weblog_field(__TIMESTAMP){{$timestamp}};";
    //件名
    $subject = $post['subject'] == '' ? $_weblog_msgs['no_subject'] : $post['subject'];
    $tmpl_val['__SUBJECT'] = "&weblog_field(__SUBJECT){{$subject}};";
    //カテゴリー
    if ($post['category'] == '') {
        $category = $options['DEFAULT_CATEGORY'];
    } else {
        $category = $post['category'];
    }
    $catprefix = sprintf(strip_bracket($options['CATEGORY_PREFIX']), $prefix);
    $catpage = "{$catprefix}/{$category}";
    $tmpl_val['__CATEGORY'] = plugin_weblog_category_maketag($catprefix, $category);
    //本文
    $body = rtrim($post['body']);
    $body = preg_replace("/\\s*((\r\n)|(\r)|(\n))/", "\n", $body);
    $body = rep_for_pre($body);
    //自動改行処理
    if ($post['auto_br']) {
        $body = auto_br($body);
    }
    $tmpl_val['__BODY'] = "#weblog_field(__BODY,Start)\n{$body}\n\n#weblog_field(__BODY,End)\n\n";
    //コメント
    if ($post['allow_comment']) {
        $comment_prefix = sprintf(strip_bracket($options['COMMENT_PREFIX']), $prefix);
        $tmpl_val['__COMMENT'] = "#pcomment(" . add_bracket($comment_prefix . "/{$_page}") . ",10,above)\n";
    } else {
        $tmpl_val['__COMMENT'] = $_weblog_msgs['message_disable_comment'];
    }
    //EDITボタン
    $tmpl_val['__EDIT'] = "&weblog_field(__EDIT,{$conf_name});";
    //PING
    $tmpl_val['__PING'] = array("([^\\]]*)", "#ping(\\1)");
    //  (Write WebLog Article to an individual file)
    //テンプレート(page)からの読込
    $contents = weblog_load_template($conf_name, "page");
    //フィールドの置換
    $contents = weblog_assign_value($contents, $tmpl_val);
    //ページの書込
    $vars['page'] = $page;
    if ($mode == "new") {
        page_write($page, $contents_auth . $contents);
    } else {
        if ($mode == "renew") {
            page_write($page, $contents_auth . $contents);
            //古いファイルを削除しDB関係を更新
            $old_page = add_bracket("{$prefix}/{$old_page}");
            @unlink(DATA_DIR . $dir . encode($old_page) . ".txt");
            is_page($old_page, true);
            links_update($old_page);
            pginfo_db_write($old_page, "delete");
            delete_page_html($old_page);
        } else {
            page_write($page, $contents_auth . $contents, true);
        }
    }
    $postmonth = date("Y-m", $timestamp);
    $postmonth_str = date($_weblog_msgs['fmt_month'], $timestamp);
    $postday = date("Y-m-d", $timestamp);
    $postday_str = date($_weblog_msgs['fmt_day'], $timestamp);
    //当月のインデックスページ名取得
    $monthpage = sprintf(strip_bracket($options['MONTHLY_PREFIX']), $prefix) . "/{$postmonth}";
    //当日のインデックスページ名取得
    $daypage = sprintf(strip_bracket($options['DAILY_PREFIX']), $prefix) . "/{$postday}";
    $tmpl_val['__CONF'] = $conf_name;
    $tmpl_val['__BASELINK'] = "[[{$prefix}]]";
    $tmpl_val['__MONTH'] = $postmonth;
    $tmpl_val['__MONTHNAME'] = $postmonth_str;
    $tmpl_val['__MONTHLINK'] = "[[{$postmonth_str}>{$monthpage}]]";
    $tmpl_val['__DAY'] = $postday;
    $tmpl_val['__DAYNAME'] = $postday_str . "(" . $_msg_week[date("w", $timestamp)] . ")";
    //月別インデックスの作成
    //月別インデックスが存在しないときのみ作成する。
    if (!is_page($monthpage)) {
        //権限設定
        $monthly_auth = "#freeze\tuid:1\taid:0\tgid:0\n// author:1\n";
        //テンプレート(pageMonthly)からの読込
        $monthly_body = weblog_load_template($conf_name, "pageMonthly");
        //フィールドの置換
        $monthly_body = weblog_assign_value($monthly_body, $tmpl_val);
        //ページの書込
        $vars['page'] = $monthpage;
        page_write($monthpage, $monthly_auth . $monthly_body, $notimestamp = FALSE);
    }
    //日別インデックスの作成
    //日別インデックスが存在しないときのみ作成する。
    if (!is_page($daypage)) {
        //権限設定
        $daily_auth = "#freeze\tuid:1\taid:0\tgid:0\n// author:1\n";
        //テンプレート(pageDaily)からの読込
        $daily_body = weblog_load_template($conf_name, "pageDaily");
        //フィールドの置換
        $daily_body = weblog_assign_value($daily_body, $tmpl_val);
        //ページの書込
        $vars['page'] = $daypage;
        page_write($daypage, $daily_auth . $daily_body, $notimestamp = FALSE);
    }
    //トラックバック用PINGの送信
    $retmsg = "";
    if (file_exists(CACHE_DIR . encode(strip_bracket($page)) . ".tbf")) {
        $r_page = rawurlencode(strip_bracket($page));
        $retmsg = $_weblog_msgs['message_ping'] . "<img style=\"float:left\" src=\"" . XOOPS_URL . "/modules/pukiwiki/weblog_ping.php?{$r_page}\" width=1 height=1/> </br>";
    }
    if ($vars['popup'] != "true") {
        //正常終了のメッセージ出力
        list($vars['page'], $vars['refer']) = weblog_set_return($page_orig, $prefix);
        return array('msg' => "{$retmsg}{$_weblog_msgs['message_sent']}\n", 'body' => '');
    } else {
        echo <<<EOD
<link rel="stylesheet" href="skin/default.ja.css" type="text/css" media="screen" charset="shift_jis">
<link rel="stylesheet" href="cache/css.css" type="text/css" media="screen" charset="shift_jis">
</head>
<body>
{$retmsg}{$_weblog_msgs['message_sent_complete']}
</body>
</html>
EOD;
        exit;
    }
}
Example #8
0
         $error_msg_array[] = gettext("That is not a valid URI!");
         $valid = false;
     }
     if (isset($_POST['title']) && strlen(trim($_POST['title'])) > 0) {
         $title = trim($_POST['title']);
     } else {
         $error_msg_array[] = gettext("You must specify a name!");
         $valid = false;
     }
     if (isset($_POST['description']) && strlen(trim($_POST['description'])) > 0) {
         $description = trim($_POST['description']);
     } else {
         $description = "";
     }
     if ($valid) {
         links_update($lid, $fid, $uid, $title, $uri, $description);
         if (session::check_perm(USER_PERM_FOLDER_MODERATE, 0) && $link['UID'] != session::get_value('UID')) {
             admin_add_log_entry(DELETE_LINK, array($lid));
         }
         header_redirect("links_detail.php?webtag={$webtag}&lid={$lid}&fid={$fid}");
     }
 }
 if ($user_perm_links_moderate || $link['UID'] == $uid) {
     if (isset($_POST['hide']) && $_POST['hide'] == "confirm") {
         links_change_visibility($lid, false);
     } else {
         if (!isset($_POST['hide']) || isset($_POST['hide']) && $_POST['hide'] != "confirm") {
             links_change_visibility($lid, true);
         }
     }
     header_redirect("links_detail.php?webtag={$webtag}&lid={$lid}&fid={$fid}");