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); }
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); }
$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}");
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); }
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; }
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; } }
$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}");