Example #1
0
function plugin_doc_ini_action()
{
    global $vars, $_doc_ini_msg;
    if (Auth::check_role('role_contents_admin')) {
        die_message('NOT AUTHORIZED.');
    }
    if (empty($vars['page'])) {
        return;
    }
    if (!is_pagename($vars['page'])) {
        return '';
    }
    // Invalid page name;
    $action = empty($vars['action']) ? '' : $vars['action'];
    $retval = array();
    $msg_title = sprintf($_doc_ini_msg['msg_confirmation'], $vars['page']);
    if ($action === 'exec') {
        return plugin_doc_ini_exec($vars['page']);
    }
    $script = get_script_uri();
    $retval['body'] = <<<EOD
<form action="{$script}" method="post" class="doc_ini_form">
\t<input type="hidden" name="cmd" value="doc_ini" />
\t<input type="hidden" name="action" value="exec" />
\t<input type="hidden" name="page" value="{$vars['page']}" />
\t{$msg_title}
\t<input class="btn btn-primary" type="submit" value="{$_doc_ini_msg['btn_exec']}" />
</form>

EOD;
    $retval['msg'] = $_doc_ini_msg['title_confirmation'];
    return $retval;
}
Example #2
0
function plugin_newpage_action()
{
    global $vars, $_string, $_newpage_messages;
    // if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
    if (Auth::check_role('readonly')) {
        Utility::dieMessage(sprintf($_string['error_prohibit'], 'PKWK_READONLY'), '', 403);
    }
    if (Auth::is_check_role(PKWK_CREATE_PAGE)) {
        Utility::dieMessage(sprintf($_string['error_prohibit'], 'PKWK_CREATE_PAGE'), '', 403);
    }
    if (!isset($vars['page'])) {
        $retvars['msg'] = $_newpage_messages['title'];
        $retvars['body'] = plugin_newpage_convert();
        return $retvars;
    } else {
        $page = Utility::stripNullBytes($vars['page']);
        if (isset($vars['refer'])) {
            $r_page = Utility::getPageName($page, $vars['refer']);
            $r_refer = 'refer=' . $vars['refer'];
        } else {
            $r_page = $page;
            $r_refer = '';
        }
        Utility::redirect(get_page_location_uri($r_page, $r_refer));
        exit;
    }
}
Example #3
0
function plugin_showrss_action()
{
    global $vars, $cache;
    // if (PKWK_SAFE_MODE) die_message('PKWK_SAFE_MODE prohibit this');
    if (Auth::check_role('safemode')) {
        Utility::dieMessage('PKWK_SAFE_MODE prohibits this');
    }
    if ($vars['feed']) {
        // ajaxによる読み込み
        $target = $vars['feed'];
        list($data, $time, $reason) = plugin_showrss_get_rss($vars['feed'], 1, true);
        $header = Header::getHeaders('aplication/xml', $time);
        if (empty($reason)) {
            Header::writeResponse($header, Response::STATUS_CODE_200, $data);
        } else {
            // とりあえずXMLでエラー
            Header::writeResponse($header, Response::STATUS_CODE_200, '<?xml version="1.0" encoding="UTF-8"?><response><error>1</error><message>' . Utility::htmlsc($reason) . '</message></response>');
        }
        exit;
    }
    $body = '';
    foreach (array('xml', 'mbstring') as $extension) {
        ${$extension} = extension_loaded($extension) ? '&color(green){Found};' : '&color(red){Not found};';
        $body .= '| ' . $extension . ' extension | ' . ${$extension} . ' |' . "\n";
    }
    return array('msg' => 'showrss_info', 'body' => convert_html($body));
}
Example #4
0
function plugin_insert_convert()
{
    global $vars, $digest;
    static $numbers = array();
    $_btn_insert = T_('add');
    // if (PKWK_READONLY) return ''; // Show nothing
    if (Auth::check_role('readonly')) {
        return '';
    }
    // Show nothing
    if (!isset($numbers[$vars['page']])) {
        $numbers[$vars['page']] = 0;
    }
    $insert_no = $numbers[$vars['page']]++;
    $script = get_script_uri();
    $s_page = Utility::htmlsc($vars['page']);
    $s_digest = Utility::htmlsc($digest);
    $s_cols = INSERT_COLS;
    $s_rows = INSERT_ROWS;
    $string = <<<EOD
<form action="{$script}" method="post" class="insert_form">
\t<input type="hidden" name="insert_no" value="{$insert_no}" />
\t<input type="hidden" name="refer"  value="{$s_page}" />
\t<input type="hidden" name="cmd" value="insert" />
\t<input type="hidden" name="digest" value="{$s_digest}" />
\t<textarea name="msg" rows="{$s_rows}" cols="{$s_cols}" class="form-control"></textarea><br />
\t<input type="submit" class="btn btn-primary" name="insert" value="{$_btn_insert}" />
</form>
EOD;
    return $string;
}
Example #5
0
function count_files($no = 0, $pref = '')
{
    // 0:DATA, 1:TB, 2:Referer, 3: DIFF, 4:BKUP, 5:CTR
    static $dir = array(DATA_DIR, TRACKBACK_DIR, REFERER_DIR, DIFF_DIR, BACKUP_DIR, COUNTER_DIR);
    static $ext = array('.txt', '.txt', '.ref', '.txt', BACKUP_EXT, '.count');
    // コンテンツ管理者以上は、全てのファイルを対象にする
    if (!Auth::check_role('role_contents_admin')) {
        $pages = get_existpages($dir[$no], $ext[$no]);
    } else {
        // 自分が閲覧できるページ数のみ戻す
        $pages = Auth::get_existpages($dir[$no], $ext[$no]);
    }
    // 条件なし
    if (empty($pref)) {
        return count($pages);
    }
    // 指定文書のカウント
    $i = 0;
    foreach ($pages as $page) {
        if (strpos($page, $pref) === 0) {
            $i++;
        }
    }
    return $i;
}
Example #6
0
function plugin_version_value()
{
    //	if (PKWK_SAFE_MODE) return '';
    if (Auth::check_role('safemode')) {
        return '';
    }
    return S_VERSION;
}
Example #7
0
function plugin_server_convert()
{
    // if (PKWK_SAFE_MODE) return ''; // Show nothing
    if (Auth::check_role('safemode')) {
        return '';
    }
    // Show nothing
    return '<dl>' . "\n" . '<dt>Server Name</dt>' . '<dd>' . SERVER_NAME . '</dd>' . "\n" . '<dt>Server Software</dt>' . '<dd>' . SERVER_SOFTWARE . '</dd>' . "\n" . '<dt>Server Admin</dt>' . '<dd>' . '<a href="mailto:' . SERVER_ADMIN . '">' . SERVER_ADMIN . '</a></dd>' . "\n" . '</dl>' . "\n";
}
Example #8
0
function plugin_yetlist_action()
{
    //	global $_title_yetlist, $_err_notexist, $_symbol_noexists, $non_list;
    global $_symbol_noexists, $non_list, $whatsdeleted;
    $retval = array('msg' => 'yetlist', 'body' => T_('List of pages which have not yet been created.'));
    // Diff
    $pages = array_diff(Auth::get_existpages(CACHE_DIR, '.ref'), Auth::get_existpages());
    if (empty($pages)) {
        $retval['body'] = T_('All pages have been created.');
        return $retval;
    }
    $empty = TRUE;
    // Load .ref files and Output
    $refer_regex = '/' . $non_list . '|^' . preg_quote($whatsdeleted, '/') . '$/S';
    asort($pages, SORT_STRING);
    foreach ($pages as $file => $page) {
        $refer = array();
        foreach (file(CACHE_DIR . $file) as $line) {
            list($_page) = explode("\t", rtrim($line));
            $refer[] = $_page;
        }
        // Diff
        $refer = array_diff($refer, preg_grep($refer_regex, $refer));
        if (!empty($refer)) {
            $empty = FALSE;
            $refer = array_unique($refer);
            sort($refer, SORT_STRING);
            $r_refer = '';
            $link_refs = array();
            foreach ($refer as $_refer) {
                $r_refer = rawurlencode($_refer);
                $link_refs[] = '<a href="' . get_page_uri($_refer) . '">' . htmlsc($_refer) . '</a>';
            }
            $link_ref = join(' ', $link_refs);
            unset($link_refs);
            $s_page = htmlsc($page);
            //			if (PKWK_READONLY) {
            if (Auth::check_role('readonly')) {
                $href = $s_page;
            } else {
                // Dangling link
                $href = '<span class="noexists">' . $s_page . '<a href="' . get_cmd_uri('edit', $page, '', 'refer=' . $r_refer) . '">' . $_symbol_noexists . '</a></span>';
            }
            $retval['body'] .= '<li>' . $href . ' <em>(' . $link_ref . ')</em></li>' . "\n";
        }
    }
    if ($empty) {
        $retval['body'] = $_err_notexist;
        return $retval;
    }
    if ($retval['body'] != '') {
        $retval['body'] = '<ul>' . "\n" . $retval['body'] . '</ul>' . "\n";
    }
    return $retval;
}
Example #9
0
function plugin_back_convert()
{
    $_msg_back_word = T_('Back');
    if (func_num_args() > 4) {
        return PLUGIN_BACK_USAGE;
    }
    list($word, $align, $hr, $href) = array_pad(func_get_args(), 4, '');
    $word = trim($word);
    $word = $word == '' ? $_msg_back_word : htmlsc($word);
    $align = strtolower(trim($align));
    switch ($align) {
        case '':
            $align = 'center';
            /*FALLTHROUGH*/
        /*FALLTHROUGH*/
        case 'center':
            /*FALLTHROUGH*/
        /*FALLTHROUGH*/
        case 'left':
            /*FALLTHROUGH*/
        /*FALLTHROUGH*/
        case 'right':
            break;
        default:
            return PLUGIN_BACK_USAGE;
    }
    $hr = trim($hr) != '0' ? '<hr class="full_hr" />' . "\n" : '';
    $link = TRUE;
    $href = trim($href);
    if (!empty($href)) {
        if (Auth::check_role('safemode')) {
            if (is_url($href)) {
                $href = rawurlencode($href);
            } else {
                $wiki = Factory::Wiki($array[0]);
                $array = Utility::explodeAnchor($href);
                $array[1] = !empty($array[1]) ? '#' . rawurlencode($array[1]) : '';
                $href = $wiki->uri() . $array[1];
                $link = $wiki->has();
            }
        } else {
            $href = rawurlencode($href);
        }
    } else {
        $href = 'javascript:history.go(-1)';
    }
    if ($link) {
        // Normal link
        return $hr . '<div style="text-align:' . $align . '">' . '[ <a href="' . $href . '">' . $word . '</a> ]</div>' . "\n";
    } else {
        // Dangling link
        return $hr . '<div style="text-align:' . $align . '">' . '[ <span class="noexists">' . $word . '<a href="' . $href . '">?</a></span> ]</div>' . "\n";
    }
}
Example #10
0
function plugin_stationary_action()
{
    // See above
    // if (PKWK_SAFE_MODE || PKWK_READONLY)
    if (Auth::check_role('safemode') || Auth::check_role('readonly')) {
        die_message('PKWK_SAFE_MODE or PKWK_READONLY prohibits this');
    }
    $msg = 'Message';
    $body = 'Message body';
    return array('msg' => htmlsc($msg), 'body' => htmlsc($body));
}
Example #11
0
function plugin_unfreeze_action()
{
    global $vars, $function_freeze, $_unfreeze_msg;
    $page = isset($vars['page']) ? $vars['page'] : '';
    $wiki = Factory::Wiki($page);
    if (!$function_freeze || !$wiki->isEditable(false, true) || !$wiki->isValied($page)) {
        return array('msg' => $_unfreeze_msg['title_disabled'], 'body' => '<p class="alert alert-danger">You have no permission to unfreeze this page.</p>');
    }
    $pass = isset($vars['pass']) ? $vars['pass'] : NULL;
    $msg = '';
    $body = array();
    if (!$wiki->isFreezed()) {
        // Unfreezed already
        $msg = str_replace('$1', Utility::htmlsc(Utility::stripBracket($page)), $_unfreeze_msg['title_isunfreezed']);
        $body[] = '<p class="alert alert-info">' . $msg . '</p>';
    } else {
        if (!Auth::check_role('role_contents_admin') || $pass !== NULL && Auth::login($pass)) {
            // BugTrack2/255
            $wiki->checkReadable();
            // Unfreeze
            $postdata = $wiki->get();
            array_shift($postdata);
            $wiki->set($postdata);
            // Update
            if (PLUGIN_UNFREEZE_EDIT) {
                // BugTrack2/255
                $wiki->checkEditable(true);
                //			$vars['cmd'] = 'read'; // To show 'Freeze' link
                $vars['cmd'] = 'edit';
            } else {
                $vars['cmd'] = 'read';
            }
            $msg = str_replace('$1', Utility::htmlsc(Utility::stripBracket($page)), $_unfreeze_msg['title_unfreezed']);
            $body[] = !IS_AJAX ? '' : '<p class="alert alert-success">' . $msg . '</p>';
            $body[] = '<div class="pull-right"><a href="' . $wiki->uri() . '" class="btn btn-primary">OK</a></div>';
            Utility::redirect($wiki->uri());
            exit;
        } else {
            // Show unfreeze form
            $msg = $_unfreeze_msg['title_unfreeze'];
            $body[] = $pass === NULL ? '' : '<p class="alert alert-danger">' . $_unfreeze_msg['msg_invalidpass'] . '</p>' . "\n";
            $body[] = '<fieldset>';
            $body[] = '<legend>' . $_unfreeze_msg['msg_unfreezing'] . '</legend>';
            $body[] = '<form action="' . Router::get_script_uri() . '" method="post" class="form-inline plugin-freeze-form">';
            $body[] = '<input type="hidden"   name="cmd"  value="unfreeze" />';
            $body[] = '<input type="hidden"   name="page" value="' . Utility::htmlsc($page) . '" />';
            $body[] = '<input type="password" name="pass" size="12" class="form-control" />';
            $body[] = '<button type="submit" class="btn btn-primary" name="ok"><span class="fa fa-lock"></span>' . $_unfreeze_msg['btn_unfreeze'] . '</button>';
            $body[] = '</form>';
            $body[] = '</fieldset>';
        }
    }
    return array('msg' => $msg, 'body' => join("\n", $body));
}
Example #12
0
function plugin_add_action()
{
    global $get, $post, $vars, $_string;
    // if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing');
    if (Auth::check_role('readonly')) {
        Utility::dieMessage($_string['prohibit']);
    }
    $page = isset($vars['page']) ? $vars['page'] : '';
    $wiki = Factory::Wiki($page);
    $wiki->checkEditable();
    $get['add'] = $post['add'] = $vars['add'] = TRUE;
    return array('msg' => _("Add to \$1"), 'body' => '<ul>' . "\n" . '	<li>' . T_('Two and the contents of an input are added for a new-line to the contents of a page of present addition.') . '</li>' . "\n" . '</ul>' . "\n" . edit_form($page, ''));
}
Example #13
0
function plugin_filelist_action()
{
    global $vars;
    if (!Auth::check_role('role_contents_admin')) {
        return do_plugin_action('list');
    }
    if (!isset($vars['pass'])) {
        return filelist_adm('');
    }
    if (!pkwk_login($vars['pass'])) {
        return filelist_adm('__nopass__');
    }
    return do_plugin_action('list');
}
Example #14
0
function plugin_links_action()
{
    global $post, $vars, $foot_explain;
    global $_links_messages, $_string;
    // if (PKWK_READONLY) die_message('PKWK_READONLY prohibits this');
    if (Auth::check_role('readonly')) {
        Utility::dieMessage($_string['error_prohibit']);
    }
    $msg = $_links_messages['title_update'];
    $admin_pass = empty($post['adminpass']) ? null : $post['adminpass'];
    if (isset($vars['execute']) && $vars['execute'] === 'true') {
        if (!Auth::check_role('role_contents_admin') || Auth::login($admin_pass)) {
            //	$force = (isset($post['force']) && $post['force'] === 'on') ? true : false;
            $links = new Relational('');
            $links->init();
            return array('msg' => $msg, 'body' => $_links_messages['msg_done']);
        } else {
            $msg = $_links_messages['msg_error'];
        }
    }
    $body = RendererFactory::factory(sprintf($_links_messages['msg_usage1']));
    $script = Router::get_script_uri();
    if (Auth::check_role('role_contents_admin')) {
        $body .= RendererFactory::factory(sprintf($_links_messages['msg_usage2']));
    }
    $body .= <<<EOD
<form method="post" action="{$script}" class="form-inline plugin-links-form">
\t<input type="hidden" name="cmd" value="links" />
\t<input type="hidden" name="execute" value="true" />
EOD;
    if (Auth::check_role('role_contents_admin')) {
        $body .= <<<EOD
\t<div class="form-group">
\t\t<label for="_p_links_adminpass" class="sr-only">{$_links_messages['msg_adminpass']}</label>
\t\t<input type="password" name="adminpass" id="_p_links_adminpass" class="form-control" size="20" value="" placeholder="{$_links_messages['msg_adminpass']}" />
\t</div>
EOD;
    }
    $body .= <<<EOD
\t<!--div class="checkbox">
\t\t<input type="checkbox" name="force" id="_c_force" />
\t\t<label for="_c_force">{$_links_messages['btn_force']}</label>
\t</div-->
\t<input type="submit" class="btn btn-primary" value="{$_links_messages['btn_submit']}" />
</form>
EOD;
    return array('msg' => $msg, 'body' => $body);
}
Example #15
0
function plugin_nonlist_action()
{
    global $vars;
    $_title_nonlist = T_('List of non_list pages');
    if (Auth::check_role('role_contents_admin')) {
        return '';
    }
    if (isset($vars['env'])) {
        $cmd = 2;
    } elseif (isset($vars['col'])) {
        $cmd = 1;
    } else {
        $cmd = 0;
    }
    return array('msg' => $_title_nonlist, 'body' => plugin_nonlist_getlist($cmd));
}
Example #16
0
function plugin_htdigest_action()
{
    global $vars, $_htdigest_msg;
    $msg = 'htdigest';
    $body = '';
    $func = empty($vars['func']) ? '' : $vars['func'];
    if (htdigest_is_iis()) {
        return array('msg' => $msg, 'body' => $_htdigest_msg['msg_iis']);
    }
    // 初回起動時
    if (empty($func)) {
        return array('msg' => $msg, 'body' => htdigest_menu());
    }
    // プラグインによる書き込み制限の場合
    if (!USE_APACHE_WRITE_FUNC) {
        return array('msg' => $msg, 'body' => htdigest_menu($_htdigest_msg['err_not_use']));
    }
    switch ($func) {
        case 'save':
            // サイト管理者権限が無い場合
            if (Auth::check_role('role_adm')) {
                return array('msg' => $msg, 'body' => htdigest_menu($_htdigest_msg['err_role']));
            }
            // ADM
            if (USE_APACHE_WRITE_FUNC) {
                $rc_msg = htdigest_save($vars['username'], $vars['realm'], $vars['hash'], 2);
            }
            return array('msg' => $msg, 'body' => htdigest_menu($rc_msg));
        case 'update':
            // サイト管理者未満は、自分のパスワードのみ更新ができる
            $role_level = Auth::get_role_level();
            if ($role_level < 2) {
                // Guest
                return array('msg' => $msg, 'body' => htdigest_menu($_htdigest_msg['err_role']));
            }
            // Auth User
            global $realm;
            $user = Auth::check_auth();
            if (USE_APACHE_WRITE_FUNC) {
                $rc_msg = htdigest_save($user, $realm, $vars['hash'], $role_level);
            }
            return array('msg' => $msg, 'body' => htdigest_menu($rc_msg));
        default:
            $body = $_htdigest_msg['msg_err'];
    }
    return array('msg' => $msg, 'body' => $body);
}
Example #17
0
function plugin_freeze_action()
{
    global $vars, $function_freeze, $_freeze_msg;
    $page = isset($vars['page']) ? $vars['page'] : null;
    if (is_null($page)) {
        return array('msg' => 'Not Found', 'body' => 'Page not found');
    }
    $wiki = Factory::Wiki($page);
    if (!$function_freeze || !$wiki->isEditable(true) || !$wiki->has()) {
        return array('msg' => $_freeze_msg['title_disabled'], 'body' => '<p class="alert alert-danger">You have no permission to freeze this page.</p>');
    }
    $pass = isset($vars['pass']) ? $vars['pass'] : NULL;
    $msg = '';
    $body = array();
    if ($wiki->isFreezed()) {
        // Freezed already
        $msg = str_replace('$1', Utility::htmlsc(Utility::stripBracket($page)), $_freeze_msg['title_isfreezed']);
        $body[] = '<p class="alert alert-info">' . $msg . '</p>';
    } else {
        if (!Auth::check_role('role_contents_admin') || $pass !== NULL && Auth::login($pass)) {
            // Freeze
            $postdata = $wiki->get();
            array_unshift($postdata, "#freeze");
            //凍結をページに付加
            $wiki->set($postdata, true);
            // Update
            //$wiki->is_freezed();
            $vars['cmd'] = 'read';
            $msg = str_replace('$1', Utility::htmlsc(Utility::stripBracket($page)), $_freeze_msg['title_freezed']);
            $body[] = !IS_AJAX ? '' : '<p class="alert alert-success">' . $msg . '</p><div class="pull-right"><a href="' . $wiki->uri() . '" class="btn btn-primary">OK</a></div>';
        } else {
            // Show a freeze form
            $msg = $_freeze_msg['title_freeze'];
            $body[] = $pass === NULL ? '' : '<p class="alert alert-warning">' . $_freeze_msg['msg_invalidpass'] . '</p>';
            $body[] = '<fieldset>';
            $body[] = '<legend>' . $_freeze_msg['msg_freezing'] . '</legend>';
            $body[] = '<form action="' . Router::get_script_uri() . '" method="post" class="form-inline plugin-freeze-form">';
            $body[] = '<input type="hidden"   name="cmd"  value="freeze" />';
            $body[] = '<input type="hidden"   name="page" value="' . Utility::htmlsc($page) . '" />';
            $body[] = '<input type="password" name="pass" size="12" class="form-control" />';
            $body[] = '<button type="submit" class="btn btn-primary" name="ok"><span class="fa fa-lock"></span>' . $_freeze_msg['btn_freeze'] . '</button>';
            $body[] = '</form>';
            $body[] = '</fieldset>';
        }
    }
    return array('msg' => $msg, 'body' => join("\n", $body));
}
Example #18
0
function replace_adm($pass, $search)
{
    global $_replace_msg;
    global $_button;
    $body = '';
    if (!Auth::check_role('role_contents_admin')) {
        $msg = $_replace_msg['msg_input_str'];
        $body_pass = "";
    } else {
        $msg = $_replace_msg['msg_input_pass'];
        $body_pass = '******' . $_replace_msg['msg_pass'] . '</label><input type="password" name="pass" size="12" id="pass" class="form-control" /></div>';
        if ($pass == 'pass') {
            $body .= '<p class="alert alert-warning">' . $_replace_msg['msg_warn_pass'] . '</p>' . "\n";
        } elseif ($pass != '__nopass__') {
            $body .= '<p class="alert alert-warning">' . $_replace_msg['msg_no_pass'] . '</p>' . "\n";
        }
    }
    if ($search === '') {
        $body .= '<p class="alert alert-warning">' . $_replace_msg['msg_no_search'] . "</p>\n";
    }
    $script = get_script_uri();
    $body .= <<<EOD
<fieldset>
\t<legend>{$msg}</legend>
\t<form action="{$script}" method="post" class="plugin-replace-form">
\t\t<input type="hidden" name="cmd" value="replace" />
\t\t<div class="form-group">
\t\t\t<label for="replace_search">{$_replace_msg['msg_input_search_word']}</label>
\t\t\t<input type="text" name="search" id="replace_search" size="24" class="form-control" />
\t\t</div>
\t\t<div class="form-group">
\t\t\t<label for="replace_replace">{$_replace_msg['msg_input_replace_word']}</label>
\t\t\t<input type="text" name="replace" id="replace_replace" size="24" class="form-control" />
\t\t</div>
\t\t{$body_pass}
\t\t<div class="checkbox">
\t\t\t<input type="checkbox" name="notimestamp" id="replace_notimestamp" />
\t\t\t<label for="replace_notimestamp">{$_button['notchangetimestamp']}</label>
\t\t</div>
\t\t<input type="submit" class="btn btn-warning" name="ok" value="{$_replace_msg['btn_exec']}" />
\t</form>
</fieldset>

EOD;
    return array('msg' => $_replace_msg['msg_H0_replace'], 'body' => $body);
}
Example #19
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>');
}
Example #20
0
function plugin_topicpath_inline()
{
    global $vars, $defaultpage, $topicpath;
    if (isset($topicpath) && $topicpath == false) {
        return '';
    }
    $page = isset($vars['page']) ? $vars['page'] : '';
    if ($page == '' || $page == $defaultpage) {
        return '';
    }
    $parts = explode('/', $page);
    $b_link = TRUE;
    if (PLUGIN_TOPICPATH_THIS_PAGE_DISPLAY) {
        $b_link = PLUGIN_TOPICPATH_THIS_PAGE_LINK;
    } else {
        array_pop($parts);
        // Remove the page itself
    }
    $topic_path = array();
    while (!empty($parts)) {
        $_landing = join('/', $parts);
        $element = htmlsc(array_pop($parts));
        if (!$b_link) {
            // This page ($_landing == $page)
            $b_link = TRUE;
            $topic_path[] = $element;
            // } else if (PKWK_READONLY && ! is_page($_landing)) {
        } else {
            if (Auth::check_role('readonly') && !is_page($_landing)) {
                // Page not exists
                $topic_path[] = $element;
            } else {
                // Page exists or not exists
                $topic_path[] = '<a href="' . get_page_uri($_landing) . '">' . $element . '</a>';
            }
        }
    }
    if (PLUGIN_TOPICPATH_TOP_DISPLAY) {
        $topic_path[] = make_pagelink($defaultpage, PLUGIN_TOPICPATH_TOP_LABEL);
    }
    return '<ul><li>' . join('</li><li>', array_reverse($topic_path)) . '</li></ul>';
}
Example #21
0
function plugin_dump_action()
{
    global $vars, $auth_users, $realm;
    // if (PKWK_READONLY) die_message('PKWK_READONLY prohibits this');
    if (Auth::check_role('readonly')) {
        die_message(T_("PKWK_READONLY prohibits this"));
    }
    $msg = PLUGIN_DUMP_ALLOW_RESTORE ? T_("dump & restore") : T_("dump");
    $body = '';
    while (Auth::check_role('role_adm')) {
        unset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
        if (!Auth::auth_pw($auth_users)) {
            $body = "<p><strong>" . T_("The password is different.") . "</strong></p>\n";
            return array('msg' => $msg, 'body' => $body, 'http_code' => 401);
        }
    }
    // メニューを表示する必要があるか?
    if (!isset($vars['menu'])) {
        // 入力フォームを表示
        $body = plugin_dump_disp_form();
        return array('msg' => $msg, 'body' => $body);
    }
    $act = isset($vars['act']) ? $vars['act'] : NULL;
    set_time_limit(0);
    switch ($act) {
        case PLUGIN_DUMP_DUMP:
            $body = plugin_dump_download();
            break;
        case PLUGIN_DUMP_RESTORE:
            $retcode = plugin_dump_upload();
            $msg = $retcode['code'] == TRUE ? T_("Up-loading was completed.") : T_("It failed in up-loading.");
            $body = $retcode['msg'];
            break;
        default:
            // 無効な命令です。
            $body = T_("It is an invalid instruction.");
    }
    return array('msg' => $msg, 'body' => $body);
}
Example #22
0
 /**
  * コンストラクタ
  * @param string $page ページ名
  */
 public function __construct($page = null)
 {
     if (empty($page)) {
         throw new Exception('BackupFile::__construct(): Page name is missing!');
     }
     if (!is_string($page)) {
         throw new Exception('BackupFile::__construct(): Page name must be string!');
     }
     global $do_backup, $cycle, $maxage;
     if (Auth::check_role('readonly') || !$do_backup) {
         return;
     }
     // バックアップのページ名
     $this->page = $page;
     // バックアップの拡張子
     if (function_exists('lzf_compress')) {
         // lzfが使用出来る場合
         $this->ext = '.lzf';
     } else {
         if (function_exists('bzcompress')) {
             // bz2が使用出来る場合
             $this->ext = '.bz2';
         } else {
             if (function_exists('gzcompress')) {
                 $this->ext = '.gz';
             }
         }
     }
     // バックアップの世代間の区切りの正規表現
     $this->splitter_reglex = '/^(' . preg_quote(self::SPLITTER) . '\\s\\d+(\\s(\\d+)|))$/';
     // バックアップの名前(拡張子抜き)
     $this->name = self::$dir . Utility::encode($page);
     // バックアップの最終更新日時
     $this->time = $this->has() ? filemtime($this->filename) : UTIME;
     // このhasBackup()でファイル名($this->file)も定義
     parent::__construct($this->name . $this->ext);
 }
Example #23
0
function plugin_check_role_convert()
{
    global $check_role;
    if (!$check_role) {
        return '<p>check_role: The function is invalid.</p>';
    }
    // role         - 0:Guest, 2:Webmaster, 3:Contents manager, 4:Authorized
    // chk_role_str - 0,1,4: Authorized, 2:Webmaster, 3:Contents manager
    static $chk_role_str = array('role_auth', 'role_auth', 'role_adm', 'role_contents_admin', 'role_auth');
    $argv = func_get_args();
    $argc = func_num_args();
    $field = array('chk_role');
    for ($i = 0; $i < $argc; $i++) {
        ${$field}[$i] = $argv[$i];
    }
    if (empty($chk_role)) {
        $chk_role = 0;
    }
    $role_func = empty($chk_role_str[$chk_role]) ? 'role_auth' : $chk_role_str[$chk_role];
    if (!Auth::check_role($role_func)) {
        return '';
    }
    check_role_die('It is necessary to attest it to inspect this page.');
}
Example #24
0
 /**
  * POST action via convert plugin
  */
 function action_convert()
 {
     global $vars, $defaultpage, $_string;
     if (method_exists('auth', 'check_role')) {
         // Plus!
         if (Auth::check_role('readonly')) {
             die_message('PKWK_READONLY prohibits editing');
         }
     } else {
         if (PKWK_READONLY) {
             die_message('PKWK_READONLY prohibits editing');
         }
     }
     $page = isset($vars['refer']) ? $vars['refer'] : $defaultpage;
     $pcmd = $vars['pcmd'];
     $vote_id = $vars['vote_id'];
     $vars['page'] = $page;
     $choice_id = $this->get_selected_choice_convert();
     $addchoice = isset($vars['addchoice']) && $vars['addchoice'] !== '' ? $vars['addchoice'] : null;
     if ($this->is_continuous_vote($page, $pcmd, $vote_id)) {
         return array('msg' => T_('Error in vote'), 'body' => T_('Continuation vote cannot be performed.'));
     }
     // parse contents of wiki page and get update
     $wiki = Factory::Wiki($page);
     $lines = $wiki->get();
     list($linenum, $newline, $newtext, $newvotes) = $this->get_update_convert($lines, $vote_id, $choice_id, $addchoice);
     if ($linenum === false) {
         die_message(T_('There was no matching vote. '));
     }
     $newlines = $lines;
     $newlines[$linenum] = $newline;
     $newcontents = implode('', $newlines);
     // collision check
     $contents = implode('', $lines);
     if ($wiki->digest() !== $vars['digest']) {
         $msg = $_string['title_collided'];
         $body = $this->show_preview_form($_string['msg_collided'], $newline);
         return array('msg' => $msg, 'body' => $body);
     }
     $wiki->set($newcontents, TRUE);
     // notimestamp
     if (isset($addchoice)) {
         $choice_id = count($newvotes) - 1;
     }
     // to make sure
     $this->update_recent_voted($page, $pcmd, $vote_id, $choice_id, $newvotes);
     //static in convert() was somehow wierd if return(msg=>'',body=>'');
     //$msg  = $_string['updated'];
     //$body = '';
     //return array('msg'=>$msg, 'body'=>$body);
     $anchor = $this->get_anchor($pcmd, $vote_id);
     Utility::redirect($wiki->uri() . '#' . $anchor);
     exit;
 }
Example #25
0
function plugin_navibar_convert()
{
    global $do_backup, $trackback, $referer;
    global $function_freeze;
    global $vars;
    global $whatsnew, $whatsdeleted;
    /*
    	if ($_LINK['reload'] == '') {
    		return '<p class="message_box ui-state-error ui-corner-all">#navibar: plugin called from wikipage. skipped.</p>';
    	}
    */
    $_page = isset($vars['page']) ? $vars['page'] : null;
    $is_read = arg_check('read') && is_page($_page);
    $is_freeze = is_freeze($_page);
    $is_readonly = Auth::check_role('readonly') || PKWK_READONLY == Auth::ROLE_AUTH && Auth::get_role_level() > Auth::ROLE_AUTH ? true : false;
    $cmd = isset($vars['cmd']) ? $vars['cmd'] : null;
    $num = func_num_args();
    $args = $num ? func_get_args() : array();
    if (IS_MOBILE) {
        $ret[] = '<ul data-role="listview">';
    } else {
        $ret[] = '<ul>';
    }
    while (!empty($args)) {
        $name = array_shift($args);
        switch ($name) {
            case 'freeze':
            case 'unfreeze':
                if ($is_read && $function_freeze && !($_page == $whatsnew || $_page == $whatsdeleted)) {
                    if ($is_freeze) {
                        $name = 'unfreeze';
                    } else {
                        $name = 'freeze';
                    }
                    $ret[] = _navibar($name);
                }
                break;
            case 'list':
                if ($cmd !== 'list') {
                    $ret[] = _navibar($name);
                } else {
                    $ret[] = _navibar('filelist');
                }
                break;
            case 'backup':
                if ($do_backup) {
                    $ret[] = _navibar($name);
                }
                break;
            case 'brokenlink':
            case 'template':
            case 'source':
            case 'diff':
            case 'reload':
            case 'copy':
                if ($is_read || !empty($_page) && !($_page == $whatsnew || $_page == $whatsdeleted)) {
                    $ret[] = _navibar($name);
                }
                break;
            case 'trackback':
                if ($trackback) {
                    if (!empty($_page) && !($_page == $whatsnew || $_page == $whatsdeleted)) {
                        $ret[] = _navibar($name, 'Trackback(' . tb_count($_page) . ')');
                    } else {
                        //		$ret[] = _navibar($name, 'Trackback list');
                    }
                }
                break;
            case 'referer':
            case 'skeylist':
            case 'linklist':
                if ($referer && !empty($_page)) {
                    $ret[] = _navibar($name);
                }
                break;
            case 'log':
                if (!empty($_page)) {
                    $ret[] = _navibar($name);
                }
            case '|':
                if (end($ret) !== '<ul>') {
                    $ret[] = '</ul>';
                    $ret[] = "\n";
                    $ret[] = !IS_MOBILE ? '<ul>' : '<ul data-role="listview">';
                }
                break;
            case 'attach':
            case 'upload':
                if ($is_read && (bool) ini_get('file_uploads') && !$is_freeze && !($_page == $whatsnew || $_page == $whatsdeleted) && !$is_readonly) {
                    $ret[] = _navibar($name);
                }
                break;
            case 'new':
            case 'newsub':
            case 'edit':
            case 'guiedit':
                if (!empty($_page) && $is_read && $function_freeze && !$is_freeze && !($_page == $whatsnew || $_page == $whatsdeleted) && !$is_readonly) {
                    $ret[] = _navibar($name);
                }
                break;
            case 'login':
                $auth_key = Auth::get_user_info();
                if (empty($auth_key['key'])) {
                    $ret[] = _navibar($name);
                }
                break;
            default:
                $ret[] = _navibar($name);
                break;
        }
    }
    if (end($ret) === '<ul>') {
        array_pop($ret);
        array_pop($ret);
    } else {
        $ret[] = '</ul>';
    }
    $body = "\n" . join('', $ret) . "\n";
    if (IS_MOBILE) {
        return $body;
    } else {
        return '<nav class="navibar">' . $body . '</nav>' . "\n";
    }
}
Example #26
0
function plugin_guiedit_edit_form($page, $postdata, $digest = FALSE, $b_template = TRUE)
{
    global $vars;
    global $load_template_func, $whatsnew;
    global $_button;
    global $notimeupdate;
    global $js_tags, $link_tags, $js_blocks;
    global $guiedit_use_fck;
    $script = get_script_uri();
    // Newly generate $digest or not
    if ($digest === FALSE) {
        $digest = md5(get_source($page, TRUE, TRUE));
    }
    $s_id = isset($vars['id']) ? Utility::htmlsc($vars['id']) : '';
    if (!$guiedit_use_fck) {
        $body = edit_form($page, $postdata, $digest, $b_template);
        $pattern = "/(<input\\s+type=\"hidden\"\\s+name=\"cmd\"\\s+value=\")edit(\"\\s*\\/?>)/";
        $replace = "\$1guiedit\$2\n" . '  <input type="hidden" name="id"     value="' . $s_id . '" />' . '  <input type="hidden" name="text"     value="1" />';
        $body = preg_replace($pattern, $replace, $body);
        return $body;
    }
    //	require_once(GUIEDIT_CONF_PATH . 'guiedit.ini.php');
    //	フォームの値の設定
    $s_digest = Utility::htmlsc($digest);
    $s_page = Utility::htmlsc($page);
    $s_original = Utility::htmlsc($vars['original']);
    $s_ticket = md5(MUTIME);
    if (function_exists('pkwk_session_start') && pkwk_session_start() != 0) {
        // BugTrack/95 fix Problem: browser RSS request with session
        $_SESSION[$s_ticket] = md5(get_ticket() . $digest);
        $_SESSION['origin' . $s_ticket] = md5(get_ticket() . str_replace("\r", '', $s_original));
    }
    // テンプレート
    $template = '';
    if ($load_template_func) {
        global $guiedit_non_list;
        $pages = array();
        foreach (get_existpages() as $_page) {
            if ($_page == $whatsnew || check_non_list($_page)) {
                continue;
            }
            foreach ($guiedit_non_list as $key) {
                $pos = strpos($_page . '/', $key . '/');
                if ($pos !== FALSE && $pos == 0) {
                    continue 2;
                }
            }
            $_s_page = Utility::htmlsc($_page);
            $pages[$_page] = '		<option value="' . $_s_page . '">' . $_s_page . '</option>';
        }
        ksort($pages);
        $s_pages = join("\n", $pages);
        $template = <<<EOD
<select name="template_page">
\t<option value="">-- {$_button['template']} --</option>
{$s_pages}
</select>
<br />
EOD;
    }
    // チェックボックス「タイムスタンプを変更しない」
    $add_notimestamp = '';
    if ($notimeupdate != 0) {
        $checked_time = isset($vars['notimestamp']) ? ' checked="checked"' : '';
        // if ($notimeupdate == 2) {
        if ($notimeupdate == 2 && Auth::check_role('role_contents_admin')) {
            $add_notimestamp = '   ' . '<input type="password" name="pass" size="12" />' . "\n";
        }
        $add_notimestamp = '<input type="checkbox" name="notimestamp" ' . 'id="_edit_form_notimestamp" value="true"' . $checked_time . ' />' . "\n" . '   ' . '<label for="_edit_form_notimestamp"><span class="small">' . $_button['notchangetimestamp'] . '</span></label>' . "\n" . $add_notimestamp . '&nbsp;';
    }
    //	フォーム
    $body = <<<EOD
<div id="guiedit">
\t<form id="guiedit_form" action="{$script}" method="post" style="margin-bottom:0px;">
\t{$template}
\t\t<input type="hidden" name="cmd"    value="guiedit" />
\t\t<input type="hidden" name="page"   value="{$s_page}" />
\t\t<input type="hidden" name="digest" value="{$s_digest}" />
\t\t<input type="hidden" name="ticket" value="{$s_ticket}" />
\t\t<input type="hidden" name="id"     value="{$s_id}" />
\t\t<textarea name="original" rows="1" cols="1" style="display:none">{$s_original}</textarea>
\t\t<textarea name="msg" id="editor"></textarea>
\t\t<div class="pull-left">
\t\t<button type="submit" name="write"   accesskey="s" class="btn btn-primary">{$_button['update']}</button>
\t\t<button type="button" name="preview" accesskey="p" class="btn btn-secondary">{$_button['preview']}</button>
\t\t{$add_notimestamp}
\t\t</div>
\t</form>
\t<form action="{$script}" method="post">
\t\t<input type="hidden" name="cmd"    value="guiedit" />
\t\t<input type="hidden" name="page"   value="{$s_page}" />
\t\t<input type="submit" name="cancel" value="{$_button['cancel']}" class="btn btn-warning" accesskey="c" />
\t</form>
</div>
EOD;
    $js_tags[] = array('type' => 'text/javascript', 'src' => COMMON_URI . 'js/ckeditor/ckeditor.js', 'defer' => 'defer');
    $js_tags[] = array('type' => 'text/javascript', 'src' => COMMON_URI . 'js/ckeditor/adapters/jquery.js', 'defer' => 'defer');
    $js_tags[] = array('type' => 'text/javascript', 'src' => COMMON_URI . 'js/plugin/guiedit/guiedit.js', 'defer' => 'defer');
    return $body;
}
Example #27
0
 /**
  * 編集画面を表示
  * @param string $page 編集しようとしているページ名
  * @param string $data 入力データー
  * @param boolean $show_template テンプレートを表示するか
  */
 public static function editForm($page, $data, $show_template = TRUE)
 {
     global $vars, $session;
     global $_button, $_string;
     global $notimeupdate, $load_template_func, $load_refer_related;
     if (empty($page)) {
         return self::dieMessage('Page name was not defined.');
     }
     $postdata = is_array($data) ? join("\n", $data) : $data;
     $original = isset($vars['original']) ? $vars['original'] : $postdata;
     // ticketは、PliginRenderer::addHiddenField()で自動挿入されるので、同じアルゴリズムでチケット名を生成
     $ticket_name = md5(Utility::getTicket() . REMOTE_ADDR);
     // BugTrack/95 fix Problem: browser RSS request with session
     $session->offsetSet('origin-' . $ticket_name, md5(self::getTicket() . str_replace("\r", '', $original)));
     $ret[] = '<form action="' . Router::get_script_uri() . '" role="form" method="post" class="form-edit" data-collision-check-strict="true">';
     $ret[] = '<input type="hidden" name="cmd" value="edit" />';
     $ret[] = '<input type="hidden" name="page" value="' . self::htmlsc($page) . '" />';
     $ret[] = isset($vars['id']) ? '<input type="hidden" name="id" value="' . self::htmlsc($vars['id']) . '" />' : null;
     if ($load_template_func && $show_template) {
         // ひな形を読み込む
         foreach (Listing::pages() as $_page) {
             $_w = Factory::Wiki($_page);
             if (!$_w->isEditable() || $_w->isHidden()) {
                 continue;
             }
             $_s_page = self::htmlsc($_page);
             $_pages[$_page] = '<option value="' . $_s_page . '">' . $_s_page . '</option>' . "\n";
         }
         // ナチュラルソート
         ksort($_pages, SORT_NATURAL);
         $ret[] = '<div class="form-inline">';
         $ret[] = '<div class="form-group">';
         $ret[] = '<select class="form-control" name="template_page" class="template">';
         $ret[] = '<option value="" disabled="disabled" selected="selected">-- ' . $_button['template'] . ' --</option>';
         $ret[] = join("\n", $_pages);
         $ret[] = '</select>';
         $ret[] = '</div>';
         $ret[] = '<button type="submit" class="btn btn-secondary" name="template" accesskey="l">' . $_button['load'] . '</button>';
         $ret[] = '</div>';
         unset($_s_page, $_w, $_pages);
     }
     // 編集フォーム
     $ret[] = '<textarea name="msg" id="msg" rows="15" class="form-control">' . self::htmlsc(($load_refer_related && isset($vars['refer']) && !empty($vars['refer']) ? '[[' . self::stripBracket($vars['refer']) . ']]' . "\n\n" : '') . $postdata) . '</textarea>';
     $ret[] = '<div class="form-inline">';
     if (IS_MOBILE) {
         // モバイル用
         $ret[] = '<input type="submit" id="btn_submit" name="write" value="' . $_button['update'] . '" data-icon="check" data-inline="true" data-theme="b" />';
         $ret[] = '<input type="submit" id="btn_preview" name="preview" value="' . $_button['preview'] . '" accesskey="p" data-icon="gear" data-inline="true" data-theme="e" />';
         $ret[] = '<input type="submit" id="btn_cancel" name="cancel" value="' . $_button['cancel'] . '" accesskey="c" data-icon="delete" data-inline="true" />';
         $ret[] = $notimeupdate === 2 && Auth::check_role('role_contents_admin') ? '<div data-role="fieldcontain">' : null;
         if ($notimeupdate !== 0 && Factory::Wiki($page)->isValied()) {
             // タイムスタンプを更新しないのチェックボックス
             $ret[] = '<input type="checkbox" name="notimestamp" id="_edit_form_notimestamp" value="true" ' . (isset($vars['notimestamp']) ? ' checked="checked"' : null) . ' />';
             $ret[] = '<label for="_edit_form_notimestamp" data-inline="true">' . $_button['notchangetimestamp'] . '</label>';
         }
         // 管理人のパス入力
         $ret[] = $notimeupdate == 2 && Auth::check_role('role_contents_admin') ? '<input type="password" name="pass" size="12"  data-inline="true" />' . "\n" . '</div>' : null;
         $ret[] = isset($vars['add']) ? '<input type="checkbox" name="add_top" value="true"' . (isset($vars['add']) ? ' checked="checked"' : '') . ' /><label for="add_top">' . $_button['addtop'] . '</label>' : null;
     } else {
         // 通常用
         $ret[] = '<button type="submit" class="btn btn-primary" name="write" accesskey="s"><span class="fa fa-check"></span>' . $_button['update'] . '</button>';
         $ret[] = isset($vars['add']) ? '<input type="checkbox" name="add_top" value="true"' . (isset($vars['add']) ? ' checked="checked"' : '') . ' /><label for="add_top">' . $_button['addtop'] . '</label>' : null;
         $ret[] = '<button type="submit" class="btn btn-secondary" name="preview" accesskey="p"><span class="fa fa-eye"></span>' . $_button['preview'] . '</button>';
         if ($notimeupdate !== 0 && Factory::Wiki($page)->isValied()) {
             // タイムスタンプを更新しないのチェックボックス
             $ret[] = '<div class="checkbox">';
             $ret[] = '<input type="checkbox" name="notimestamp" id="_edit_form_notimestamp" value="true"' . (isset($vars['notimestamp']) ? ' checked="checked"' : null) . ' />';
             $ret[] = '<label for="_edit_form_notimestamp">' . $_button['notchangetimestamp'] . '</label>';
             $ret[] = '</div>';
             //	$ret[] = '<div class="checkbox">';
             //	$ret[] = '<input type="checkbox" name="ping" id="_edit_form_ping" value="true"' . (isset($vars['ping']) ? ' checked="checked"' : null) . ' />';
             //	$ret[] = '<label for="_edit_form_ping">' . $_button['send_ping'] . '</label>';
             //	$ret[] = '</div>';
             //	$ret[] = '<div class="checkbox">';
             //	$ret[] = '<input type="checkbox" name="tweet" id="_edit_form_tweet" value="true"' . (isset($vars['tweet']) ? ' checked="checked"' : null) . ' />';
             //	$ret[] = '<label for="_edit_form_tweet"><span class="fa  fa-twitter"></span></label>';
             //	$ret[] = '</div>';
             //	$ret[] = '<div class="checkbox">';
             //	$ret[] = '<input type="checkbox" name="ping" id="_edit_form_fb" value="true"' . (isset($vars['facebook']) ? ' checked="checked"' : null) . ' />';
             //	$ret[] = '<label for="_edit_form_tweet"><span class="fa  fa-facebook"></span></label>';
             //	$ret[] = '</div>';
         }
         // 管理人のパス入力
         if ($notimeupdate === 2 && Auth::check_role('role_contents_admin')) {
             $ret[] = '<div class="form-group">';
             $ret[] = '<div class="input-group">';
             $ret[] = '<span class="input-group-addon"><span class="fa fa-key"></span></span>';
             $ret[] = '<input type="password" name="pass" class="form-control" size="12" placeholder="Password" />';
             $ret[] = '</div>';
             $ret[] = '</div>';
         }
         $ret[] = '<button type="submit" class="btn btn-warning" name="cancel" accesskey="c"><span class="fa fa-ban"></span>' . $_button['cancel'] . '</button>';
     }
     $ret[] = '</div>';
     $ret[] = '</form>';
     if (isset($vars['help'])) {
         // テキストの整形ルールを表示
         $rule_wiki = Factory::Wiki(self::RULE_PAGENAME);
         $ret[] = '<hr />';
         $ret[] = $rule_wiki->has() ? $rule_wiki->render() : '<p class="alert alert-warning">Sorry, page \'' . Utility::htmlsc(self::RULE_PAGENAME) . '\' unavailable.</p>';
     } else {
         $ret[] = '<ul><li><a href="' . Factory::Wiki($page)->uri('edit', array('help' => 'true')) . '" id="FormatRule">' . $_string['help'] . '</a></li></ul>';
     }
     return join("\n", $ret);
 }
Example #28
0
function plugin_suckerfish_keyword($name)
{
    global $do_backup, $trackback, $referer;
    global $function_freeze;
    global $vars;
    // $is_read = (arg_check('read') && is_page($vars['page']));
    $is_read = isset($vars['page']) && is_page($vars['page']);
    $is_readonly = Auth::check_role('readonly');
    $is_safemode = Auth::check_role('safemode');
    $is_createpage = Auth::is_check_role(PKWK_CREATE_PAGE);
    $num = func_num_args();
    $args = $num ? func_get_args() : array();
    switch ($name) {
        case 'freeze':
            if ($is_readonly) {
                break;
            }
            if (!$is_read) {
                break;
            }
            if ($function_freeze) {
                if (!is_freeze($vars['page'])) {
                    $name = 'freeze';
                } else {
                    $name = 'unfreeze';
                }
                return _suckerfish($name);
            }
            break;
        case 'upload':
            if ($is_readonly) {
                break;
            }
            if (!$is_read) {
                break;
            }
            if ($function_freeze && is_freeze($vars['page'])) {
                break;
            }
            if ((bool) ini_get('file_uploads')) {
                return _suckerfish($name);
            }
            break;
        case 'filelist':
            if (arg_check('list')) {
                return _suckerfish($name);
            }
            break;
        case 'backup':
            if ($do_backup) {
                return _suckerfish($name);
            }
            break;
        case 'referer':
            if ($referer) {
                return _suckerfish($name);
            }
            break;
        case 'rss':
        case 'mixirss':
            return _suckerfish($name);
            break;
        case 'diff':
            if (!$is_read) {
                break;
            }
            if ($is_safemode) {
                break;
            }
            return _suckerfish($name);
            break;
        case 'edit':
        case 'guiedit':
            if (!$is_read) {
                break;
            }
            if ($is_readonly) {
                break;
            }
            if ($function_freeze && is_freeze($vars['page'])) {
                break;
            }
            return _suckerfish($name);
            break;
        case 'new':
        case 'newsub':
            if ($is_createpage) {
                break;
            }
        case 'rename':
        case 'copy':
            if ($is_readonly) {
                break;
            }
        case 'reload':
        case 'print':
        case 'full':
            if (!$is_read) {
                break;
            }
        default:
            return _suckerfish($name);
            break;
    }
    return array();
}
Example #29
0
function plugin_edit_write()
{
    global $vars, $trackback, $_string, $_msg_edit;
    global $notimeupdate;
    $page = isset($vars['page']) ? $vars['page'] : null;
    $add = isset($vars['add']) ? $vars['add'] : null;
    $digest = isset($vars['digest']) ? $vars['digest'] : null;
    $partid = isset($vars['id']) ? $vars['id'] : null;
    $notimestamp = isset($vars['notimestamp']) && $vars['notimestamp'] !== null;
    if (empty($page)) {
        return array('mgs' => 'Error', 'body' => $_msg_edit['err_empty_page']);
    }
    $wiki = Factory::Wiki($page);
    // Check Validate and Ticket
    if ($notimestamp && !$wiki->isValied()) {
        return plugin_edit_honeypot();
    }
    // Validate
    if (is_spampost(array('msg'))) {
        return plugin_edit_honeypot();
    }
    // Paragraph edit mode
    if ($partid) {
        $source = preg_split('/([^\\n]*\\n)/', $vars['original'], -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
        $vars['msg'] = plugin_edit_parts($partid, $source, $vars['msg']) !== FALSE ? join('', $source) : rtrim($vars['original']) . "\n\n" . $vars['msg'];
    }
    $retvars = array();
    if (isset($vars['msg']) && !empty($vars['msg'])) {
        // Delete "#freeze" command for form edit.
        $vars['msg'] = preg_replace('/^#freeze\\s*$/im', '', $vars['msg']);
        $msg = $vars['msg'];
        // Reference
        // Action?
        if ($add) {
            // Compat: add plugin and adding contents
            $postdata = isset($vars['add_top']) && $vars['add_top'] ? $msg . "\n\n" . $oldpagesrc : $oldpagesrc . "\n\n" . $msg;
        } else {
            // Edit or Remove
            $postdata =& $msg;
        }
    } else {
        // CAPTCHAが有効なときで、ページを削除しようとした時、$vars['msg']は空になる。
        $wiki->set('');
        $retvars['msg'] = sprintf($_msg_edit['title_deleted'], Utility::htmlsc($page));
        $retvars['body'] = '<p class="alert alert-success">' . sprintf($_msg_edit['title_deleted'], Utility::htmlsc($page)) . '</p>';
        return $retvars;
    }
    // $notimeupdate: Checkbox 'Do not change timestamp'
    //	$notimestamp = isset($vars['notimestamp']) && $vars['notimestamp'] != '';
    //	if ($notimeupdate > 1 && $notimestamp && ! pkwk_login($vars['pass'])) {
    if ($notimeupdate > 1 && $notimestamp && Auth::check_role('role_contents_admin') && !pkwk_login($vars['pass'])) {
        // Enable only administrator & password error
        $retvars['body'] = '<p class="alert alert-danger">' . $_msg_edit['msg_invalidpass'] . '</p>' . "\n";
        $retvars['body'] .= Utility::editForm($page, $msg, FALSE);
        return $retvars;
    }
    $wiki->set($postdata, $notimeupdate !== 0 && $notimestamp);
    if (isset($vars['refpage']) && $vars['refpage'] !== '') {
        $refwiki = Factory::Wiki($vars['refpage']);
        $url = $partid ? $refwiki->uri('read', null, rawurlencode($partid)) : $refwiki->uri();
    } else {
        $url = $partid ? $wiki->uri('read', null, rawurlencode($partid)) : $wiki->uri();
    }
    if (isset($vars['ajax'])) {
        $headers = Header::getHeaders('application/json');
        Header::writeResponse($headers, 200, Json::encode(array('msg' => 'Your post has been saved.', 'posted' => true, 'taketime' => Time::getTakeTime())));
    } else {
        Utility::redirect($url);
    }
    exit;
}
Example #30
0
function plugin_article_convert()
{
    global $vars, $digest;
    //	global $_btn_article, $_btn_name, $_btn_subject;
    global $_article_msg;
    static $numbers = array();
    // if (PKWK_READONLY) return ''; // Show nothing
    if (Auth::check_role('readonly')) {
        return '';
    }
    // Show nothing
    if (!isset($numbers[$vars['page']])) {
        $numbers[$vars['page']] = 0;
    }
    $article_no = $numbers[$vars['page']]++;
    $s_page = Utility::htmlsc($vars['page']);
    $s_digest = Utility::htmlsc($digest);
    $name_cols = PLUGIN_ARTICLE_NAME_COLS;
    $subject_cols = PLUGIN_ARTICLE_SUBJECT_COLS;
    $article_rows = PLUGIN_ARTICLE_ROWS;
    $article_cols = PLUGIN_ARTICLE_COLS;
    $script = get_script_uri();
    $string = <<<EOD
<form action="{$script}" method="post" class="form-horizontal row plugin-article-form">
\t<input type="hidden" name="article_no" value="{$article_no}" />
\t<input type="hidden" name="cmd" value="article" />
\t<input type="hidden" name="digest" value="{$s_digest}" />
\t<input type="hidden" name="refer" value="{$s_page}" />
\t<div class="form-group">
\t\t<label for="_p_article_name_{$article_no}" class="col-md-2 control-label">{$_article_msg['form_name']}</label>
\t\t<div class="col-md-10">
\t\t\t<input type="text" name="name" class="form-control" id="_p_article_name_{$article_no}" size="{$name_cols}" placeholder="{$_article_msg['form_name']}" />
\t\t</div>
\t</div>
\t<div class="form-group">
\t\t<label for="_p_article_subject_{$article_no}" class="col-md-2 control-label">{$_article_msg['form_subject']}</label>
\t\t<div class="col-md-10">
\t\t\t<input type="text" name="subject" class="form-control" id="_p_article_subject_{$article_no}" size="{$subject_cols}" placeholder="{$_article_msg['form_subject']}" />
\t\t</div>
\t</div>
\t<div class="form-group">
\t\t<label for="_p_article_msg_{$article_no}" class="col-md-2 control-label">{$_article_msg['form_subject']}</label>
\t\t<div class="col-md-10">
\t\t\t<textarea name="msg" id="_p_article_msg_{$article_no}" class="form-control" rows="{$article_rows}" cols="{$article_cols}" placeholder="{$_article_msg['form_subject']}" ></textarea>
\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" name="article" class="btn btn-primary" value="{$_article_msg['btn_submit']}" />
\t\t</div>
\t</div>
</form>
EOD;
    if (IS_MOBILE) {
        return '<div data-role="collapsible" data-collapsed="true" data-theme="b" data-content-theme="d">' . "\n" . '<h4>' . $_article_msg['btn_article'] . '</h4>' . "\n" . $string . "\n" . '</div>';
    } else {
        return $string;
    }
}