Ejemplo n.º 1
0
function plugin_source_action()
{
    global $vars;
    //, $_source_messages;
    // if (PKWK_SAFE_MODE) die_message('PKWK_SAFE_MODE prohibits this');
    if (Auth::check_role('safemode')) {
        Utility::dieMessage('PKWK_SAFE_MODE prohibits this');
    }
    $page = isset($vars['page']) ? $vars['page'] : '';
    $vars['refer'] = $page;
    $wiki = Factory::Wiki($page);
    if (!$wiki->isValied() || !$wiki->isReadable()) {
        return array('msg' => T_(' $1 was not found.'), 'body' => T_('cannot display the page source.'));
    }
    $source = $wiki->get(true);
    Auth::is_role_page($source);
    return array('msg' => T_('Source of  $1'), 'body' => '<pre class="sh sunlight-highlight-plain">' . Utility::htmlsc($source) . '</pre>');
}
Ejemplo n.º 2
0
function plugin_diff_view($page)
{
    global $hr, $_string;
    //	global $_msg_notfound, $_msg_goto, $_msg_deleted, $_msg_addline, $_msg_delline;
    //	global $_title_diff, $_title_diff_delete;
    if (Auth::check_role('safemode')) {
        die_message('PKWK_SAFE_MODE prohibits this');
    }
    $_msg_notfound = T_('The page was not found.');
    $_msg_addline = T_('The added line is <span class="diff_added">THIS COLOR</span>.');
    $_msg_delline = T_('The deleted line is <span class="diff_removed">THIS COLOR</span>.');
    $_msg_goto = T_('Go to $1.');
    $_msg_deleted = T_(' $1 has been deleted.');
    $_title_diff = T_('Diff of $1');
    $_title_diff_delete = T_('Deleting diff of $1');
    $r_page = rawurlencode($page);
    $s_page = htmlsc($page);
    $menu = array('<li class="no-js">' . $_msg_addline . '</li>', '<li class="no-js">' . $_msg_delline . '</li>');
    $is_page = Factory::Wiki($page)->isValied();
    if ($is_page) {
        $menu[] = ' <li>' . str_replace('$1', '<a href="' . get_page_uri($page) . '">' . $s_page . '</a>', $_msg_goto) . '</li>';
    } else {
        $menu[] = ' <li>' . str_replace('$1', $s_page, $_msg_deleted) . '</li>';
    }
    $diff = FileFactory::Diff($page);
    if ($diff->has() && ($is_page || Auth::is_role_page($diff))) {
        // if (! PKWK_READONLY) {
        if (!Auth::check_role('readonly')) {
            $menu[] = '<li><a href="' . get_cmd_uri('diff', $page, null, array('action' => 'delete')) . '">' . str_replace('$1', $s_page, $_title_diff_delete) . '</a></li>';
        }
        Auth::is_role_page($diff);
        $msg = $diff->render();
    } else {
        return array('msg' => $_title_diff, 'body' => $_msg_notfound);
    }
    $menu = join("\n", $menu);
    $body = <<<EOD
<ul>
{$menu}
</ul>
{$hr}
EOD;
    return array('msg' => $_title_diff, 'body' => $body . $msg);
}
Ejemplo n.º 3
0
function plugin_edit_action()
{
    // global $vars, $_title_edit, $load_template_func;
    global $vars, $load_template_func, $_string, $_edit_msg;
    $page = isset($vars['page']) ? $vars['page'] : null;
    if (empty($page)) {
        return array('msg' => $_edit_msg['msg_edit'], 'body' => $_edit_msg['err_empty_page']);
    }
    $wiki = Factory::Wiki($page);
    if (!$wiki->isEditable(true)) {
        Utility::dieMessage($_string['err_empty_page'], 403);
    }
    // if (PKWK_READONLY) die_message(  sprintf($_string['error_prohibit'], 'PKWK_READONLY') );
    if (Auth::check_role('readonly')) {
        Utility::dieMessage($_string['error_prohibit'], 403);
    }
    if (PKWK_READONLY == Auth::ROLE_AUTH && Auth::get_role_level() > Auth::ROLE_AUTH) {
        Utility::dieMessage(sprintf($_string['error_prohibit'], 'PKWK_READONLY'), 403);
    }
    if (isset($vars['realview'])) {
        return plugin_edit_realview();
    }
    if (!$wiki->has() && Auth::is_check_role(PKWK_CREATE_PAGE)) {
        Utility::dieMessage(sprintf($_string['error_prohibit'], 'PKWK_CREATE_PAGE'), 403);
    }
    if (preg_match($wiki::INVALIED_PAGENAME_PATTERN, $page)) {
        Utility::dieMessage($_string['illegal_chars']);
    }
    if (isset($vars['preview']) || $load_template_func && isset($vars['template'])) {
        return plugin_edit_preview();
    } else {
        if (isset($vars['write'])) {
            return plugin_edit_write();
        } else {
            if (isset($vars['cancel'])) {
                return plugin_edit_cancel();
            }
        }
    }
    $postdata = $vars['original'] = $wiki->get(true);
    Auth::is_role_page($postdata);
    if (isset($vars['id']) && !empty($vars['id'])) {
        $source = $wiki->get();
        $postdata = plugin_edit_parts($vars['id'], $source);
        if ($postdata === FALSE) {
            unset($vars['id']);
            // なかったことに :)
            $postdata = $vars['original'];
        }
    }
    if (empty($postdata)) {
        // Check Page name length
        // http://pukiwiki.sourceforge.jp/dev/?PukiWiki%2F1.4%2F%A4%C1%A4%E7%A4%C3%A4%C8%CA%D8%CD%F8%A4%CB%2F%C4%B9%A4%B9%A4%AE%A4%EB%A5%DA%A1%BC%A5%B8%CC%BE%A4%CE%A5%DA%A1%BC%A5%B8%A4%CE%BF%B7%B5%AC%BA%EE%C0%AE%A4%F2%CD%DE%BB%DF
        $filename_max_length = 250;
        $filename = Utility::encode($page) . '.txt';
        $filename_length = strlen($filename);
        if ($filename_length > $filename_max_length) {
            // Filename too long
            return array('msg' => $_edit_msg['title_edit'], 'body' => join("\n", array('<p class="alert alert-warning"><span class="fa fa-exclamation-triangle"></span>' . $_edit_msg['err_long'], '</p>', '<dl class="dl-horizontal">', '<dt>Page name</dt>', '<dd>' . Utility::htmlsc($page) . '</dd>', '<dt>Filename</dt>', '<dd>' . $filename . '</dd>', '<dt>Filename length</dt>', '<dd>' . $filename_length . '</dd>', '<dt>Filename limit</dt>', '<dd>' . $filename_max_length . '</dd>', '</dl>')));
        } else {
            $postdata = $wiki->auto_template();
        }
    }
    return array('msg' => sprintf($_edit_msg['title_edit'], $page), 'body' => Utility::editForm($page, $postdata));
}
Ejemplo n.º 4
0
function plugin_backup_action()
{
    global $vars, $do_backup, $_string, $_button;
    global $_backup_messages;
    if (!$do_backup) {
        return;
    }
    $page = isset($vars['page']) ? $vars['page'] : null;
    $action = isset($vars['action']) ? $vars['action'] : null;
    $s_age = isset($vars['age']) && is_numeric($vars['age']) ? $vars['age'] : 0;
    /**
     * if page is not set, show list of backup files
     */
    if (!$page) {
        return array('msg' => $_backup_messages['title_backuplist'], 'body' => plugin_backup_get_list_all());
    }
    $wiki = Factory::Wiki($page);
    $is_page = $wiki->has();
    $s_page = Utility::htmlsc($page);
    $r_page = rawurlencode($page);
    $backups = Factory::Backup($page)->get();
    $msg = $_backup_messages['msg_backup'];
    if ($s_age > count($backups)) {
        $s_age = count($backups);
    }
    $body = '';
    $wiki->checkReadable();
    if ($s_age <= 0) {
        return array('msg' => $_backup_messages['title_pagebackuplist'], 'body' => plugin_backup_get_list($page));
    }
    $body .= '<div class="panel panel-default">';
    $body .= plugin_backup_get_list($page);
    $body .= '</div>' . "\n";
    if ($action) {
        $data = join("\n", $backups[$s_age]['data']);
        Auth::is_role_page($data);
        switch ($action) {
            case 'delete':
                /**
                 * 指定された世代を確認。指定されていなければ、一覧のみ表示
                 */
                // checkboxが選択されずにselectdeleteを実行された場合は、削除処理をしない
                if (!isset($vars['selectages']) && isset($vars['selectdelete'])) {
                    // 選択削除ボタンが押された
                    // 何もしない
                } else {
                    if (!isset($vars['selectages'])) {
                        // 世代引数がない場合は全削除
                        return plugin_backup_delete($page);
                    }
                    return plugin_backup_delete($page, $vars['selectages']);
                }
            case 'rollback':
                return plugin_backup_rollback($page, $s_age);
                break;
            case 'diff':
                if (Auth::check_role('safemode')) {
                    Utility::dieMessage($_string['prohibit']);
                }
                $title =& $_backup_messages['title_backupdiff'];
                $past_data = $s_age > 1 ? join("\n", $backups[$s_age - 1]['data']) : '';
                Auth::is_role_page($past_data);
                $body .= plugin_backup_diff($past_data, $data);
                break;
            case 'nowdiff':
                if (Auth::check_role('safemode')) {
                    die_message($_string['prohibit']);
                }
                $title =& $_backup_messages['title_backupnowdiff'];
                $now_data = Factory::Wiki($page)->get(true);
                Auth::is_role_page($now_data);
                $body .= plugin_backup_diff($data, $now_data);
                break;
            case 'visualdiff':
                $old = join('', $backups[$s_age]['data']);
                $now_data = get_source($page, TRUE, TRUE);
                Auth::is_role_page($now_data);
                // <ins> <del>タグを使う形式に変更。
                $diff = new Diff($data, $now_data);
                $source = plugin_backup_visualdiff($diff->getDiff());
                $body .= drop_submit(RendererFactory::factory($source));
                $body = preg_replace('#<p>\\#del(.*?)(</p>)#si', '<del class="remove_block">$1', $body);
                $body = preg_replace('#<p>\\#ins(.*?)(</p>)#si', '<ins class="add_block">$1', $body);
                $body = preg_replace('#<p>\\#delend(.*?)(</p>)#si', '$1</del>', $body);
                $body = preg_replace('#<p>\\#insend(.*?)(</p>)#si', '$1</ins>', $body);
                // ブロック型プラグインの処理が無いよ~!
                $body = preg_replace('#&amp;del;#i', '<del class="remove_word">', $body);
                $body = preg_replace('#&amp;ins;#i', '<ins class="add_word">', $body);
                $body = preg_replace('#&amp;delend;#i', '</del>', $body);
                $body = preg_replace('#&amp;insend;#i', '</ins>', $body);
                $title =& $_backup_messages['title_backupnowdiff'];
                break;
            case 'source':
                if (Auth::check_role('safemode')) {
                    die_message($_string['prohibit']);
                }
                $title =& $_backup_messages['title_backupsource'];
                $body .= '<pre class="sh" data-blush="plain">' . htmlsc($data) . '</pre>' . "\n";
                break;
            default:
                if (PLUGIN_BACKUP_DISABLE_BACKUP_RENDERING) {
                    die_message(T_('This feature is prohibited'));
                } else {
                    $title =& $_backup_messages['title_backup'];
                    $body .= drop_submit(RendererFactory::factory($data));
                }
                break;
        }
        $msg = str_replace('$2', $s_age, $title);
    }
    if (!Auth::check_role('readonly')) {
        $body .= '<a class="button" href="' . $wiki->uri('backup', $page, null, array('action' => 'delete')) . '">' . str_replace('$1', $s_page, $_backup_messages['title_backup_delete']) . '</a>';
    }
    return array('msg' => $msg, 'body' => $body);
}
Ejemplo n.º 5
0
function plugin_template_action()
{
    global $vars;
    global $_template_msg;
    if (Auth::check_role('safemode') || Auth::check_role('readonly')) {
        die_message($_template_msg['msg_template_prohibited']);
    }
    if (!isset($vars['refer']) || !is_page($vars['refer'])) {
        return FALSE;
    }
    if (!is_page($vars['refer']) || !check_readable($vars['refer'], false, false)) {
        return array('msg' => $_template_msg['title_page_notfound'], 'body' => $_template_msg['msg_page_notfound']);
    }
    $lines = get_source($vars['refer']);
    Auth::is_role_page($lines);
    // Remove '#freeze'
    if (!empty($lines) && strtolower(rtrim($lines[0])) == '#freeze') {
        array_shift($lines);
    }
    $begin = isset($vars['begin']) && is_numeric($vars['begin']) ? $vars['begin'] : 0;
    $end = isset($vars['end']) && is_numeric($vars['end']) ? $vars['end'] : count($lines) - 1;
    if ($begin > $end) {
        $temp = $begin;
        $begin = $end;
        $end = $temp;
    }
    $page = isset($vars['page']) ? $vars['page'] : '';
    $is_page = is_page($page);
    // edit
    if ($is_pagename = is_pagename($page) && (!$is_page || !empty($vars['force']))) {
        $postdata = join('', array_splice($lines, $begin, $end - $begin + 1));
        $retvar['msg'] = $_template_msg['title_edit'];
        $retvar['body'] = edit_form($vars['page'], $postdata);
        $vars['refer'] = $vars['page'];
        return $retvar;
    }
    $begin_select = $end_select = '';
    for ($i = 0; $i < count($lines); $i++) {
        $line = htmlsc(mb_strimwidth($lines[$i], 0, MAX_LEN, '...'));
        $tag = $i == $begin ? ' selected="selected"' : '';
        $begin_select .= "<option value=\"{$i}\"{$tag}>{$line}</option>\n";
        $tag = $i == $end ? ' selected="selected"' : '';
        $end_select .= "<option value=\"{$i}\"{$tag}>{$line}</option>\n";
    }
    $_page = htmlsc($page);
    $msg = $tag = '';
    if ($is_page) {
        $msg = $_template_msg['err_template_already'];
        $tag = '<input type="checkbox" name="force" value="1" id="_p_template_force" /><label for="_p_template_force">' . $_template_msg['msg_template_force'] . '</label>';
    } else {
        if ($page != '' && !$is_pagename) {
            $msg = str_replace('$1', $_page, $_template_msg['err_template_invalid']);
        }
    }
    $s_refer = htmlsc($vars['refer']);
    $s_page = $page == '' ? str_replace('$1', $s_refer, $_template_msg['msg_template_page']) : $_page;
    $script = get_script_uri();
    $ret = <<<EOD
<form action="{$script}" method="post" class="form-horizontal plugin-template-form">
\t<input type="hidden" name="cmd" value="template" />
\t<input type="hidden" name="refer" value="{$s_refer}" />
\t<div class="form-group">
\t\t<label for="_p_template_begin" class="col-md-2 control-label">{$_template_msg['msg_template_start']}</label>
\t\t<div class="col-md-10">
\t\t\t<select name="begin" size="10" id="_p_template_begin" class="form-control">{$begin_select}</select>
\t\t</div>
\t</div>
\t<div class="form-group">
\t\t<label for="_p_template_end" class="col-md-2 control-label">{$_template_msg['msg_template_end']}</label>
\t\t<div class="col-md-10">
\t\t\t<select name="end"   size="10" id="_p_template_end" class="form-control">{$end_select}</select>
\t\t</div>
\t</div>
\t<div class="form-group">
\t\t<label for="_p_template_refer" class="col-md-2 control-label">{$_template_msg['msg_template_refer']}</label>
\t\t<div class="col-md-10">
\t\t\t<input type="text" name="page" id="_p_template_refer" class="form-control" value="{$s_page}" />
\t\t</div>
\t</div>
\t<div class="form-group">
\t\t<div class="col-md-offset-2 col-md-10">
\t\t\t<input type="submit" class="btn btn-primary" name="submit" value="{$_template_msg['btn_template_create']}" />
\t\t</div>
\t</div>
\t{$tag}
</form>
EOD;
    $retvar['msg'] = $msg == '' ? $_template_msg['title_template'] : $msg;
    $retvar['body'] = $ret;
    return $retvar;
}