Example #1
0
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;
}
Example #2
0
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;
    // !タグをどうするこうする
}