Beispiel #1
0
    function plugin_edit_write()
    {
        $_uname = empty($this->root->vars['uname']) || !empty($this->root->vars['anonymous']) ? $this->root->siteinfo['anonymous'] : $this->root->vars['uname'];
        if ($_uname) {
            if (!empty($this->root->vars['anonymous'])) {
                $this->root->cookie['name'] = $_uname;
            } else {
                // save name to cookie
                $this->func->save_name2cookie($_uname);
            }
        }
        $page = isset($this->root->vars['page']) ? $this->root->vars['page'] : '';
        $add = isset($this->root->vars['add']) ? $this->root->vars['add'] : '';
        $digest = isset($this->root->vars['digest']) ? $this->root->vars['digest'] : '';
        $paraid = isset($this->root->vars['paraid']) ? $this->root->vars['paraid'] : '';
        $original = '';
        $this->root->vars['msg'] = preg_replace($this->cont['PLUGIN_EDIT_FREEZE_REGEX'], '', $this->root->vars['msg']);
        $this->root->vars['msg'] = $this->func->remove_pginfo($this->root->vars['msg']);
        $msg =& $this->root->vars['msg'];
        // Reference
        // Get original data from cache DB.
        if (!empty($this->root->vars['orgkey'])) {
            $original = (string) $this->func->cache_get_db($this->root->vars['orgkey'], 'edit', true);
            $original = $this->func->remove_pginfo($original);
        }
        // ParaEdit
        $hash = '';
        if ($paraid) {
            if (!$original) {
                $original = $this->func->remove_pginfo($this->func->get_source($page, TRUE, TRUE));
            }
            $source = preg_split('/([^\\n]*\\n)/', $original, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
            if ($this->plugin_edit_parts($paraid, $source, $msg) !== FALSE) {
                $fullmsg = join('', $source);
            } else {
                // $this->root->vars['msg']だけがページに書き込まれてしまうのを防ぐ。
                $fullmsg = rtrim($original) . "\n\n" . $msg;
            }
            $msg = $fullmsg;
            $hash = '#' . $paraid;
        }
        // 文末処理
        $msg = rtrim($msg) . "\n";
        // 改行・TAB・スペースのみだったら削除とみなす
        $msg = preg_replace('/^\\s+$/', '', $msg);
        // Page title
        if ($msg && !empty($this->root->post['pgtitle'])) {
            $msg = $this->root->title_setting_string . trim($this->root->post['pgtitle']) . "\n" . $msg;
        }
        $retvars = array();
        // Collision Detection
        $oldpagesrc = $this->func->get_source($page, TRUE, TRUE);
        $oldpagemd5 = $this->func->get_digests($oldpagesrc);
        if ($digest != $oldpagemd5) {
            $this->root->vars['digest'] = $oldpagemd5;
            // Reset
            unset($this->root->vars['paraid']);
            // 更新が衝突したら全文編集に切り替え
            $oldpagesrc = $this->func->remove_pginfo($oldpagesrc);
            list($postdata_input, $auto) = $this->func->do_update_diff($oldpagesrc, $msg, $original);
            $retvars['msg'] = $this->root->_title_collided;
            $retvars['body'] = ($auto ? $this->root->_msg_collided_auto : $this->root->_msg_collided) . "\n";
            $retvars['body'] .= $this->root->do_update_diff_table;
            $retvars['body'] .= $this->func->edit_form($page, $postdata_input, $oldpagemd5, FALSE);
            if (isset($this->root->vars['ajax'])) {
                $this->func->convert_finisher($retvars['body']);
                $body = <<<EOD
<xpwiki>
<content><![CDATA[{$retvars['body']}]]></content>
<mode>preview</mode>
</xpwiki>
EOD;
                $this->func->send_xml($body);
            }
            return $retvars;
        }
        // Action?
        if ($add) {
            // Add
            if (isset($this->root->vars['add_top']) && $this->root->vars['add_top']) {
                $postdata = $msg . "\n\n" . $this->func->get_source($page, TRUE, TRUE);
            } else {
                $postdata = $this->func->get_source($page, TRUE, TRUE) . "\n\n" . $msg;
            }
        } else {
            // Edit or Remove
            $postdata =& $msg;
            // Reference
        }
        // NULL POSTING, OR removing existing page
        if (!$postdata) {
            $this->func->page_write($page, '');
            if ($this->root->trackback) {
                $this->func->tb_delete($page);
            }
            if ($this->root->maxshow_deleted && $this->func->is_page($this->root->whatsdeleted)) {
                $url = $this->func->get_page_uri($this->root->whatsdeleted, true);
            } else {
                $url = $this->cont['HOME_URL'];
            }
            $title = str_replace('$1', $this->func->htmlspecialchars($page), $this->root->_title_deleted);
            if (isset($this->root->vars['ajax'])) {
                $url = $this->func->htmlspecialchars($url, ENT_QUOTES);
                $body = <<<EOD
<xpwiki>
<content><![CDATA[{$title}]]></content>
<mode>delete</mode>
<url>{$url}</url>
</xpwiki>
EOD;
                $this->func->send_xml($body);
            }
            $this->func->redirect_header($url, 1, $title);
        }
        // $notimeupdate: Checkbox 'Do not change timestamp'
        $notimestamp = isset($this->root->vars['notimestamp']) && $this->root->vars['notimestamp'] != '';
        if ($this->root->notimeupdate > 1 && !$this->root->userinfo['admin']) {
            $notimestamp = false;
        }
        $this->func->page_write($page, $postdata, $this->root->notimeupdate != 0 && $notimestamp);
        if (isset($this->root->vars['ajax'])) {
            if (!empty($this->root->vars['nonconvert'])) {
                $body = '';
            } else {
                $obj = new XpWiki($this->root->mydirname);
                $obj->init($page);
                $obj->root->userinfo['uname_s'] = $this->func->htmlspecialchars($this->root->cookie['name']);
                $obj->execute();
                if (isset($obj->root->rtf['useJavascriptInHead'])) {
                    $body = '<script src="" />';
                } else {
                    $body = $obj->body;
                    // set target
                    if (isset($this->root->vars['popup'])) {
                        $body = preg_replace('/(<a[^>]+)(href=(?:"|\')[^#])/isS', '$1target="' . (intval($this->root->vars['popup']) === 1 ? '_parent' : $this->func->htmlspecialchars(substr($this->root->vars['popup'], 0, 30))) . '" $2', $body);
                    }
                    $body = str_replace(array('<![CDATA[', ']]>'), '', $body);
                }
                if (preg_match('/\\(\\([eisv]:[0-9a-f]{4}\\)\\)|\\[emj:\\d{1,4}(?::(?:im|ez|sb))?\\]/S', $body)) {
                    if (!XC_CLASS_EXISTS('MobilePictogramConverter')) {
                        HypCommonFunc::loadClass('MobilePictogramConverter');
                    }
                    if (XC_CLASS_EXISTS('MobilePictogramConverter')) {
                        $mpc =& MobilePictogramConverter::factory_common();
                        $mpc->setImagePath($this->cont['ROOT_URL'] . 'images/emoji');
                        $mpc->setString($body, FALSE);
                        $body = $mpc->autoConvertModKtai();
                    }
                }
            }
            $body = <<<EOD
<xpwiki>
<content><![CDATA[{$body}]]></content>
<mode>write</mode>
</xpwiki>
EOD;
            $this->func->send_xml($body);
        }
        $this->func->send_location($page, $hash);
    }
Beispiel #2
0
if (isset($_SERVER['HTTP_X_MOZ']) && $_SERVER['HTTP_X_MOZ'] === 'prefetch' || isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT'] === 'Fasterfox') {
    header('HTTP/1.1 403 Forbidden');
    exit;
}
$mytrustdirname = basename(dirname(__FILE__));
$mytrustdirpath = dirname(__FILE__);
include_once "{$mytrustdirpath}/include.php";
$xpwiki = new XpWiki($mydirname);
// initialize
$xpwiki->init();
// XCL >= 2.2 Use "Legacy_Utils::formatPagetitle"
if (defined('LEGACY_MODULE_VERSION') && version_compare(LEGACY_MODULE_VERSION, '2.2', '>=')) {
    $xpwiki->root->html_head_title = trim(str_replace('$module_title', '', $xpwiki->root->html_head_title), ' -');
}
// execute
$xpwiki->execute();
// gethtml
$xpwiki->catbody();
// Add error message
if ($xpwiki->root->userinfo['admin']) {
    $hyp_common_methods = get_class_methods('HypCommonFunc');
    if (is_null($hyp_common_methods) || !in_array('get_version', $hyp_common_methods) || HypCommonFunc::get_version() < 20100725) {
        $xpwiki->admin_messages[] = '[Warning] Please install or update <a href="http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/hypweb/XOOPS_TRUST/class/hyp_common.tar.gz?view=tar" title="Download">a newest HypCommonFunc</a> into "XOOPS_TRUST_PATH/class/".';
    }
    if ($xpwiki->admin_messages) {
        $xpwiki->html = '<p style="color:red;font-weight:bold;">' . join('<br />', $xpwiki->admin_messages) . '</p><hr />' . $xpwiki->html;
    }
}
if ($xpwiki->runmode === 'xoops') {
    // For XCL >= 2.2.1.1 (clear cache of modinfo)
    // Is it XCL's bug? need check next