function qblog_update($force = FALSE) { static $updated = FALSE; if ($updated) { return; } $updated = TRUE; // update caches // qblog_recent.dat // qblog_categories.dat // qblog_archived.dat // *.qbc.dat qblog_update_post($force); qblog_update_recent($force); qblog_update_categories($force); qblog_update_archives($force); return; }
function plugin_edit_write() { global $vars, $trackback, $layout_pages; global $notimeupdate, $do_update_diff_table; global $qblog_defaultpage, $date_format, $qblog_menubar; $qm = get_qm(); $page = isset($vars['page']) ? $vars['page'] : ''; $add = isset($vars['add']) ? $vars['add'] : ''; $digest = isset($vars['digest']) ? $vars['digest'] : ''; $vars['msg'] = preg_replace(PLUGIN_EDIT_FREEZE_REGEX, '', $vars['msg']); $msg =& $vars['msg']; // Reference $retvars = array(); // Collision Detection $oldpagesrc = join('', get_source($page)); $oldpagemd5 = md5($oldpagesrc); if ($digest != $oldpagemd5) { $vars['digest'] = $oldpagemd5; // Reset $original = isset($vars['original']) ? $vars['original'] : ''; list($postdata_input, $auto) = do_update_diff($oldpagesrc, $msg, $original); $retvars['msg'] = $qm->m['fmt_title_collided']; $retvars['body'] = ($auto ? $qm->m['fmt_msg_collided_auto'] : $qm->m['fmt_msg_collided']) . "\n"; $retvars['body'] .= $do_update_diff_table; $retvars['body'] .= edit_form($page, $postdata_input, $oldpagemd5, FALSE); return $retvars; } // Action? if ($add) { // Add if (isset($vars['add_top']) && $vars['add_top']) { $postdata = $msg . "\n\n" . @join('', get_source($page)); } else { $postdata = @join('', get_source($page)) . "\n\n" . $msg; } } else { // Edit or Remove $postdata =& $msg; // Reference } //ブログの時は、タイトルを足す if ($page !== $qblog_defaultpage && is_qblog()) { global $qblog_default_cat; $title = trim($vars['title']); $image = trim($vars['image']); $cat = trim($vars['category']); $cat = $cat === '' ? $qblog_default_cat : $cat; if ($postdata !== '') { $postdata = 'TITLE:' . $title . "\n" . $postdata; } } // NULL POSTING, OR removing existing page if ($postdata == '') { page_write($page, $postdata); $retvars['msg'] = $qm->m['fmt_title_deleted']; $retvars['body'] = str_replace('$1', htmlspecialchars($page), $qm->m['fmt_title_deleted']); if ($trackback) { tb_delete($page); } return $retvars; } // $notimeupdate: Checkbox 'Do not change timestamp' $notimestamp = isset($vars['notimestamp']) && $vars['notimestamp'] != ''; if ($notimeupdate > 1 && $notimestamp && !pkwk_login($vars['pass'])) { // Enable only administrator & password error $retvars['body'] = '<p><strong>' . $qm->m['fmt_msg_invalidpass'] . '</strong></p>' . "\n"; $retvars['body'] .= edit_form($page, $msg, $digest, FALSE); return $retvars; } page_write($page, $postdata, $notimeupdate != 0 && $notimestamp); //ブログの場合 if ($page !== $qblog_defaultpage && is_qblog()) { // 日付の変更があったら、ページ名の変更 $page_date = get_qblog_date($date_format, $page); if ($page_date and $vars['qblog_date'] != $page_date) { // ページ名の変更 if (exist_plugin('rename')) { // ! renameのために $vasの値を変更 $vars['page'] = $newpage = qblog_get_newpage($vars['qblog_date']); $vars['refer'] = $refer = $page; $vars['exist'] = 1; $pages = array(); $pages[encode($refer)] = encode($newpage); $files = plugin_rename_get_files($pages); $exists = array(); foreach ($files as $_page => $arr) { foreach ($arr as $old => $new) { if (file_exists($new)) { $exists[$_page][$old] = $new; } } } plugin_rename_proceed($pages, $files, $exists, FALSE); //保留コメントリスト内のページ名を変更 $datafile = CACHEQBLOG_DIR . 'qblog_pending_comments.dat'; $pending_comments = unserialize(file_get_contents($datafile)); foreach ($pending_comments as $i => $comment) { if ($comment['page'] == $page) { $pending_comments[$i]['page'] = $newpage; } } file_put_contents($datafile, serialize($pending_comments), LOCK_EX); //最新コメントリスト内のページ名を変更 $datafile = CACHEQBLOG_DIR . 'qblog_recent_comments.dat'; file_put_contents($datafile, str_replace($page, $newpage, file_get_contents($datafile)), LOCK_EX); //変数を格納し直す $page = $newpage; } } //ブログの時は、ポストキャッシュを書き換える $option = array('category' => $cat, 'image' => $image); qblog_update_post($force, $page, $option); //Ping送信を行う if (!$notimestamp) { send_qblog_ping(); } } pkwk_headers_sent(); //ブログメニューの場合、ブログトップへ移動する if ($page === $qblog_menubar) { header('Location: ' . get_script_uri() . '?' . $qblog_defaultpage); } else { if (array_key_exists($page, $layout_pages)) { header('Location: ' . get_script_uri()); } else { header('Location: ' . get_script_uri() . '?' . rawurlencode($page)); } } exit; }
function plugin_qblog_move_from_eblog() { global $vars, $script; global $ignore_plugin, $strip_plugin; global $qblog_default_cat; $eblog_page = $vars['eblog_page']; $pagename = $vars['pagename']; // 簡易ブログページの読み込み $eblog_entries_file = CACHEQBLOG_DIR . encode($eblog_page) . '_eblog_entries.dat'; if (!file_exists($eblog_entries_file)) { header("Content-Type: application/json; charset=UTF-8"); echo '{success:0}'; exit; } $eblog_datas = unserialize(file_get_contents($eblog_entries_file)); if (!isset($eblog_datas[$pagename])) { header("Content-Type: application/json; charset=UTF-8"); echo '{success:0}'; exit; } // コメントの作成 $source = get_source($pagename); $comment_datas = array(); $comment_start = FALSE; $comment_count = 1; $eye_catch = ''; $header = ''; $title = ''; foreach ($source as $i => $line) { if (preg_match($ignore_plugin, $line)) { // リストから省く $source = array(); break; } if (preg_match('/^#blog_comment/', $line)) { $comment_start = TRUE; unset($source[$i]); } else { if ($comment_start && preg_match('/^(-{1,3})([^-].*)$/', $line, $ms)) { list($msg, $info) = explode('--', $ms[2], 2); $msg = str_replace('&br;', "\n", $msg); if (preg_match('/^(.*)\\s&new\\{(\\d{4}-\\d{2}-\\d{2}).*(\\d{2}:\\d{2}:\\d{2})\\};$/', trim($info), $ms2)) { $comment_name = $ms2[1]; if (isset($ms2[2])) { $comment_datetime = $ms2[2] . ' ' . $ms2[3]; } else { $comment_datetime = date('Y-m-d H:i:s'); } } $comments[$comment_count] = array('id' => $comment_count++, 'msg' => $msg, 'title' => '', 'datetime' => $comment_datetime, 'name' => $comment_name, 'accepted' => 1, 'show' => 1, 'admin' => 0); unset($source[$i]); } else { if ($comment_start) { unset($source[$i]); } else { if (preg_match('/^TITLE:(.*)/', $line, $ms)) { $title = $ms[1]; unset($source[$i]); } else { if (preg_match('/^(\\*{1,3})(.*)\\[#\\w+\\]\\s?/', $line, $ms)) { if ($ms[1] == '*' && $header == '') { $header = trim($ms[2]); unset($source[$i]); } } else { if (preg_match($strip_plugin, $line)) { unset($source[$i]); } else { if (preg_match('/^(#topicpath|#blog_)/', $line)) { unset($source[$i]); } else { if ($eye_catch === '' && preg_match('/(?:^#show|&show)\\(([^,]+).*\\)/', $line, $mts)) { $eye_catch = $mts[1]; } } } } } } } } } // TITLE指定がなくて見出し1があったら見出し1をタイトルにする // 何も指定がなかったら、日付を挿入する if ($title == '') { $title = $header != '' ? $header : $eblog_datas[$pagename]['date']; } array_unshift($source, "TITLE:{$title}\n"); // QBlogへ書き込む $newpage = qblog_get_newpage($eblog_datas[$pagename]['date']); page_write($newpage, join($source)); // ブログのキャッシュファイルの作成 $options = array('category' => $qblog_default_cat, 'image' => $eye_catch); qblog_update_post(TRUE, $newpage, $options); // コメントの投稿 // 昇順でリストを作成 ksort($comments); // コメントキャッシュファイルの作成 $commentcachefile = CACHEQBLOG_DIR . encode($newpage) . '.qbcm.dat'; file_put_contents($commentcachefile, serialize($comments), LOCK_EX); // アメブロリストファイルに完了フラグをたてる $eblog_datas[$pagename]['complete'] = 1; file_put_contents($eblog_entries_file, serialize($eblog_datas), LOCK_EX); // 簡易ブログの記事にQBlogの記事へredirect // 302リダイレクトで検索エンジン対策にも $pagedata = get_source($pagename); array_unshift($pagedata, "#redirect({$newpage}, 302)\n"); page_write($pagename, join("", $pagedata), TRUE); // 成功 $eblog_datas[$pagename]['success'] = 1; header("Content-Type: application/json; charset=UTF-8"); echo json_encode($eblog_datas[$pagename]); exit; // !タグをどうするこうする }