Exemplo n.º 1
0
function plugin_read_action()
{
    global $vars, $_title_invalidwn, $_msg_invalidiwn;
    $page = isset($vars['page']) ? $vars['page'] : '';
    if (is_page($page)) {
        // ページを表示
        check_readable($page, true, true);
        header_lastmod($page);
        return array('msg' => '', 'body' => '');
    } else {
        if (!PKWK_SAFE_MODE && is_interwiki($page)) {
            return do_plugin_action('interwiki');
            // InterWikiNameを処理
        } else {
            if (is_pagename($page)) {
                $vars['cmd'] = 'edit';
                return do_plugin_action('edit');
                // 存在しないので、編集フォームを表示
            } else {
                // 無効なページ名
                return array('msg' => $_title_invalidwn, 'body' => str_replace('$1', htmlsc($page), str_replace('$2', 'WikiName', $_msg_invalidiwn)));
            }
        }
    }
}
Exemplo n.º 2
0
function plugin_color_inline()
{
    global $pkwk_dtd;
    $args = func_get_args();
    $text = strip_autolink(array_pop($args));
    // htmlsc(text) already
    $color = isset($args[0]) ? trim($args[0]) : '';
    $bgcolor = isset($args[1]) ? trim($args[1]) : '';
    if ($color == '' && $bgcolor == '' || func_num_args() > 3) {
        return PLUGIN_COLOR_USAGE;
    }
    if ($text == '') {
        if ($color != '' && $bgcolor != '') {
            $text = htmlsc($bgcolor);
            $bgcolor = '';
        } else {
            return PLUGIN_COLOR_USAGE;
        }
    }
    foreach (array($color, $bgcolor) as $_color) {
        if ($_color != '' && !preg_match(PLUGIN_COLOR_REGEX, $_color)) {
            return '&color():Invalid color: ' . htmlsc($_color) . ';';
        }
    }
    if ($color != '') {
        $color = 'color:' . $color;
    }
    if ($bgcolor != '') {
        $bgcolor = 'background-color:' . $bgcolor;
    }
    $delimiter = $color != '' && $bgcolor != '' ? ';' : '';
    return '<span class="wikicolor" style="' . $color . $delimiter . $bgcolor . '">' . $text . '</span>';
}
Exemplo n.º 3
0
function plugin_multilang_inline_link($option, $args)
{
    global $vars;
    $body = array();
    $page = isset($vars['page']) ? $vars['page'] : '';
    $obj_l2c = new Lang2Country();
    foreach ($args as $arg) {
        $arg = htmlsc($arg);
        @(list($lang, $style) = explode('\\+', $arg));
        // en_US=English+flag=us
        @(list($lang, $title) = explode('=', $lang));
        @(list($style, $country) = explode('=', $style));
        if ($style != 'text') {
            // flag or text : default is flag
            if (empty($country)) {
                @(list($lng, $country) = explode('_', $lang));
                // en_US -> en, US
                if (empty($country)) {
                    $country = $obj_l2c->getLang2Country(strtolower($lng));
                }
            }
            if (!empty($country)) {
                $country = strtolower($country);
                $title = '<span class="flag flag-' . $country . '" title="' . $title . '" ></span>';
            }
        }
        array_push($body, '<a href="' . Router::get_cmd_uri('multilang', $page, null, array('lang' => $lang)) . '" rel="alternate" hreflang="' . strtolower(str_replace('_', '-', $lang)) . '">' . $title . '</a>');
    }
    if ($option == 'delim') {
        // default: nodelim
        return PLUGIN_MULTILANG_INLINE_BEFORE . join(PLUGIN_MULTILANG_INLINE_DELIMITER, $body) . PLUGIN_MULTILANG_INLINE_AFTER;
    }
    return '<span class="multilang">' . join(' ', $body) . '</span>';
}
Exemplo n.º 4
0
function plugin_newpage_convert()
{
    global $script, $vars, $_btn_edit, $_msg_newpage, $BracketName;
    static $id = 0;
    if (PKWK_READONLY) {
        return '';
    }
    // Show nothing
    $newpage = '';
    if (func_num_args()) {
        list($newpage) = func_get_args();
    }
    if (!preg_match('/^' . $BracketName . '$/', $newpage)) {
        $newpage = '';
    }
    $s_page = htmlsc(isset($vars['refer']) ? $vars['refer'] : $vars['page']);
    $s_newpage = htmlsc($newpage);
    ++$id;
    $ret = <<<EOD
<form action="{$script}" method="post">
 <div>
  <input type="hidden" name="plugin" value="newpage" />
  <input type="hidden" name="refer"  value="{$s_page}" />
  <label for="_p_newpage_{$id}">{$_msg_newpage}:</label>
  <input type="text"   name="page" id="_p_newpage_{$id}" value="{$s_newpage}" size="30" />
  <input type="submit" value="{$_btn_edit}" />
 </div>
</form>
EOD;
    return $ret;
}
Exemplo n.º 5
0
function plugin_insert_convert()
{
    global $script, $vars, $digest;
    global $_btn_insert;
    static $numbers = array();
    if (PKWK_READONLY) {
        return '';
    }
    // Show nothing
    if (!isset($numbers[$vars['page']])) {
        $numbers[$vars['page']] = 0;
    }
    $insert_no = $numbers[$vars['page']]++;
    $s_page = htmlsc($vars['page']);
    $s_digest = htmlsc($digest);
    $s_cols = INSERT_COLS;
    $s_rows = INSERT_ROWS;
    $string = <<<EOD
<form action="{$script}" method="post">
 <div>
  <input type="hidden" name="insert_no" value="{$insert_no}" />
  <input type="hidden" name="refer"  value="{$s_page}" />
  <input type="hidden" name="plugin" value="insert" />
  <input type="hidden" name="digest" value="{$s_digest}" />
  <textarea name="msg" rows="{$s_rows}" cols="{$s_cols}"></textarea><br />
  <input type="submit" name="insert" value="{$_btn_insert}" />
 </div>
</form>
EOD;
    return $string;
}
Exemplo n.º 6
0
function plugin_back_convert()
{
    global $_msg_back_word, $script;
    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 ($href != '') {
        if (PLUGIN_BACK_ALLOW_PAGELINK) {
            if (is_url($href)) {
                $href = rawurlencode($href);
            } else {
                $array = anchor_explode($href);
                $array[0] = rawurlencode($array[0]);
                $array[1] = $array[1] != '' ? '#' . rawurlencode($array[1]) : '';
                $href = $script . '?' . $array[0] . $array[1];
                $link = is_page($array[0]);
            }
        } else {
            $href = rawurlencode($href);
        }
    } else {
        if (!PLUGIN_BACK_ALLOW_JAVASCRIPT) {
            return PLUGIN_BACK_USAGE . ': Set a page name or an URI';
        }
        $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";
    }
}
Exemplo n.º 7
0
function plugin_recent_convert()
{
    global $vars, $date_format, $_recent_plugin_frame, $show_passage;
    static $exec_count = 1;
    $recent_lines = PLUGIN_RECENT_DEFAULT_LINES;
    if (func_num_args()) {
        $args = func_get_args();
        if (!is_numeric($args[0]) || isset($args[1])) {
            return PLUGIN_RECENT_USAGE . '<br />';
        } else {
            $recent_lines = $args[0];
        }
    }
    // Show only N times
    if ($exec_count > PLUGIN_RECENT_EXEC_LIMIT) {
        return '#recent(): You called me too much' . '<br />' . "\n";
    } else {
        ++$exec_count;
    }
    if (!file_exists(PLUGIN_RECENT_CACHE)) {
        return '#recent(): Cache file of RecentChanges not found' . '<br />';
    }
    // Get latest N changes
    $lines = file_head(PLUGIN_RECENT_CACHE, $recent_lines);
    if ($lines == FALSE) {
        return '#recent(): File can not open' . '<br />' . "\n";
    }
    $script = get_script_uri();
    $date = $items = '';
    foreach ($lines as $line) {
        list($time, $page) = explode("\t", rtrim($line));
        $_date = get_date($date_format, $time);
        if ($date != $_date) {
            // End of the day
            if ($date != '') {
                $items .= '</ul>' . "\n";
            }
            // New day
            $date = $_date;
            $items .= '<strong>' . $date . '</strong>' . "\n" . '<ul class="recent_list">' . "\n";
        }
        $s_page = htmlsc($page);
        if ($page == $vars['page']) {
            // No need to link to the page you just read, or notify where you just read
            $items .= ' <li>' . $s_page . '</li>' . "\n";
        } else {
            $r_page = rawurlencode($page);
            $passage = $show_passage ? ' ' . get_passage($time) : '';
            $items .= ' <li><a href="' . $script . '?' . $r_page . '"' . ' title="' . $s_page . $passage . '">' . $s_page . '</a></li>' . "\n";
        }
    }
    // End of the day
    if ($date != '') {
        $items .= '</ul>' . "\n";
    }
    return sprintf($_recent_plugin_frame, count($lines), $items);
}
Exemplo n.º 8
0
function plugin_stationary_action()
{
    // See above
    if (PKWK_SAFE_MODE || PKWK_READONLY) {
        die_message('PKWK_SAFE_MODE or PKWK_READONLY prohibits this');
    }
    $msg = 'Message';
    $body = 'Message body';
    return array('msg' => htmlsc($msg), 'body' => htmlsc($body));
}
Exemplo n.º 9
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;
}
Exemplo n.º 10
0
function plugin_yetlist_action()
{
    global $_title_yetlist, $_err_notexist, $_symbol_noexists, $non_list;
    global $whatsdeleted;
    $retval = array('msg' => $_title_yetlist, 'body' => '');
    // Diff
    $pages = array_diff(get_existpages(CACHE_DIR, '.ref'), get_existpages());
    if (empty($pages)) {
        $retval['body'] = $_err_notexist;
        return $retval;
    }
    $empty = TRUE;
    // Load .ref files and Output
    $script = get_script_uri();
    $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="' . $script . '?' . $r_refer . '">' . htmlsc($_refer) . '</a>';
            }
            $link_ref = join(' ', $link_refs);
            unset($link_refs);
            $s_page = htmlsc($page);
            if (PKWK_READONLY) {
                $href = $s_page;
            } else {
                // Dangling link
                $href = '<span class="noexists">' . $s_page . '<a href="' . $script . '?cmd=edit&amp;page=' . rawurlencode($page) . '&amp;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;
}
Exemplo n.º 11
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";
    }
}
Exemplo n.º 12
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));
}
Exemplo n.º 13
0
function plugin_random_convert()
{
    global $script, $vars;
    $title = '[Random Link]';
    // default
    if (func_num_args()) {
        $args = func_get_args();
        $title = $args[0];
    }
    return "<p><a href=\"{$script}?plugin=random&amp;refer=" . rawurlencode($vars['page']) . '">' . htmlsc($title) . '</a></p>';
}
Exemplo n.º 14
0
function plugin_unfreeze_action()
{
    global $script, $vars, $function_freeze;
    global $_title_isunfreezed, $_title_unfreezed, $_title_unfreeze;
    global $_msg_invalidpass, $_msg_unfreezing, $_btn_unfreeze;
    $page = isset($vars['page']) ? $vars['page'] : '';
    if (!$function_freeze || !is_page($page)) {
        return array('msg' => '', 'body' => '');
    }
    $pass = isset($vars['pass']) ? $vars['pass'] : NULL;
    $msg = $body = '';
    if (!is_freeze($page)) {
        // Unfreezed already
        $msg =& $_title_isunfreezed;
        $body = str_replace('$1', htmlsc(strip_bracket($page)), $_title_isunfreezed);
    } else {
        if ($pass !== NULL && pkwk_login($pass)) {
            // Unfreeze
            $postdata = get_source($page);
            array_shift($postdata);
            $postdata = join('', $postdata);
            file_write(DATA_DIR, $page, $postdata, TRUE);
            // Update
            is_freeze($page, TRUE);
            if (PLUGIN_UNFREEZE_EDIT) {
                $vars['cmd'] = 'read';
                // To show 'Freeze' link
                $msg =& $_title_unfreezed;
                $body = edit_form($page, $postdata);
            } else {
                $vars['cmd'] = 'read';
                $msg =& $_title_unfreezed;
                $body = '';
            }
        } else {
            // Show unfreeze form
            $msg =& $_title_unfreeze;
            $s_page = htmlsc($page);
            $body = $pass === NULL ? '' : "<p><strong>{$_msg_invalidpass}</strong></p>\n";
            $body .= <<<EOD
<p>{$_msg_unfreezing}</p>
<form action="{$script}" method="post">
 <div>
  <input type="hidden"   name="cmd"  value="unfreeze" />
  <input type="hidden"   name="page" value="{$s_page}" />
  <input type="password" name="pass" size="12" />
  <input type="submit"   name="ok"   value="{$_btn_unfreeze}" />
 </div>
</form>
EOD;
        }
    }
    return array('msg' => $msg, 'body' => $body);
}
Exemplo n.º 15
0
function plugin_random_convert()
{
    global $vars;
    $title = '[Random Link]';
    // default
    if (func_num_args()) {
        $args = func_get_args();
        $title = $args[0];
    }
    return '<p><a href="' . get_cmd_uri('random', null, null, array('refer' => $vars['page'])) . '">' . htmlsc($title) . '</a></p>';
}
Exemplo n.º 16
0
function plugin_loglist_convert()
{
    global $script, $log;
    global $vars;
    global $_loglist_messages;
    list($kind) = func_get_args();
    $kind = empty($kind) ? 'update' : htmlsc($kind, ENT_QUOTES);
    if (!$log[$kind]['use']) {
        return $_loglist_messages['not_active'];
    }
    if (!empty($log[$kind]['file'])) {
        $vars['kind'] = $kind;
        $rc = do_plugin_action('logview');
        return $rc['body'];
    }
    $dir = log::get_filename($kind, '', '');
    $pages = Auth::get_existpages($dir);
    if (count($pages) == 0) {
        return $_loglist_messages['msg_not_found'];
    }
    $data = array();
    foreach ($pages as $_real => $_page) {
        $data[] = array(filemtime($dir . '/' . $_real), $_page, log_count($kind, $_page));
    }
    usort($data, function ($a, $b) {
        return $b[0] - $a[0];
    });
    // D
    // usort($data,create_function('$a,$b','return $a[0] - $b[0];')); // A
    //$str_view = $script.'?plugin=logview&kind='.$kind.'&page=';
    $str_view = get_cmd_uri('logview', $_page, null, array('kind' => $kind));
    $rc = '';
    $rc .= '|' . $_loglist_messages['fld_UTIME'] . '|' . $_loglist_messages['fld_PAGE'] . '|' . $_loglist_messages['fld_COUNT'] . "|h\n";
    foreach ($data as $_line) {
        $i = 0;
        foreach ($_line as $_field) {
            $rc .= '|';
            switch ($i) {
                case 0:
                    $rc .= get_date('Y-m-d H:i:s', $_field) . ' ' . get_passage($_field);
                    continue;
                case 1:
                    $rc .= '[' . $str_view . rawurlencode($_field) . ' ' . $_field . ']';
                    continue;
                default:
                    $rc .= $_field;
            }
            $i++;
        }
        $rc .= "|\n";
    }
    return RendererFactory::factory($rc);
}
Exemplo n.º 17
0
function plugin_search_search_form($s_word = '', $type = '', $bases = array())
{
    global $script, $_btn_and, $_btn_or, $_btn_search;
    global $_search_pages, $_search_all;
    $and_check = $or_check = '';
    if ($type == 'OR') {
        $or_check = ' checked="checked"';
    } else {
        $and_check = ' checked="checked"';
    }
    $base_option = '';
    if (!empty($bases)) {
        $base_msg = '';
        $_num = 0;
        $check = ' checked="checked"';
        foreach ($bases as $base) {
            ++$_num;
            if (PLUGIN_SEARCH_MAX_BASE < $_num) {
                break;
            }
            $label_id = '_p_search_base_id_' . $_num;
            $s_base = htmlsc($base);
            $base_str = '<strong>' . $s_base . '</strong>';
            $base_label = str_replace('$1', $base_str, $_search_pages);
            $base_msg .= <<<EOD
 <div>
  <input type="radio" name="base" id="{$label_id}" value="{$s_base}" {$check} />
  <label for="{$label_id}">{$base_label}</label>
 </div>
EOD;
            $check = '';
        }
        $base_msg .= <<<EOD
  <input type="radio" name="base" id="_p_search_base_id_all" value="" />
  <label for="_p_search_base_id_all">{$_search_all}</label>
EOD;
        $base_option = '<div class="small">' . $base_msg . '</div>';
    }
    return <<<EOD
<form action="{$script}?cmd=search" method="post">
 <div>
  <input type="text"  name="word" value="{$s_word}" size="20" />
  <input type="radio" name="type" id="_p_search_AND" value="AND" {$and_check} />
  <label for="_p_search_AND">{$_btn_and}</label>
  <input type="radio" name="type" id="_p_search_OR"  value="OR"  {$or_check}  />
  <label for="_p_search_OR">{$_btn_or}</label>
  &nbsp;<input type="submit" value="{$_btn_search}" />
 </div>
{$base_option}
</form>
EOD;
}
Exemplo n.º 18
0
function plugin_search_action()
{
    global $post, $vars;
    global $_search_msg, $_LANG;
    /*
    	if (isset($vars['update_index'])){
    		PukiWiki\SearchLucene::updateIndex();
    		return array('msg'=>'done.');
    	}
    */
    if (PLUGIN_SEARCH_DISABLE_GET_ACCESS) {
        $s_word = isset($post['word']) ? htmlsc($post['word']) : '';
    } else {
        $s_word = isset($vars['word']) ? htmlsc($vars['word']) : '';
    }
    if (strlen($s_word) > PLUGIN_SEARCH_MAX_LENGTH) {
        unset($vars['word']);
        // Stop using $_msg_word at lib/html.php
        die_message('Search words too long');
    }
    $type = isset($vars['type']) ? $vars['type'] : '';
    $base = isset($vars['base']) ? $vars['base'] : '';
    $format = isset($vars['format']) ? $vars['format'] : 'html';
    switch ($format) {
        case 'xml':
            // OpenSearch
            // http://www.opensearch.org/
            global $site_name, $notify_from, $shortcut_icon;
            $ret = array('<?xml version="1.0" encoding="UTF-8"?>', '<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">', '<ShortName>' . $_search_msg['title_search'] . ' - ' . $site_name . '</ShortName>', '<Description>' . $_search_msg['title_search'] . ' - ' . $site_name . '</Description>', '<Contact>' . $notify_from . '</Contact>', '<Image height="16" width="16" type="image/x-icon">data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2F%2F%2F%2FBP%2F8%2BjT%2F7%2BdK%2F%2F38M%2F%2F%2F%2Fw0AAAAAAAAAAAAAAAAAAAAA%2F%2F%2F%2FC%2F%2F%2B%2FTH%2F7%2BdK%2F%2Fv4N%2F%2F%2F%2FwUAAAAA%2F%2F%2F%2FBf%2Ft5IH%2F5djE%2F%2FLsn%2F7u5pT63tKe%2BNzLkOjFmnnq27p%2B%2BOfXk%2Fnl06z%2B7eOV%2F%2FLsn%2F%2Fm2cD%2F6%2BGM%2F%2F%2F%2FBv%2F072P%2F5til%2F%2F%2F%2FGfz4%2BB%2FrqJOE9qBr7vukUv3%2FzoL%2F%2F%2Bao%2F%2Fznsv7337j4662LwPXWyyX%2F%2F%2F8Y%2F%2Bfbmv%2Fz7XD%2F7uaJ%2F%2FDohf%2F%2F%2FwH729Ib9loZzv97Jv7%2Fo0v%2F%2F%2BOt%2F%2F%2Fmrf%2F%2F0oD%2F%2F9KC%2F%2Fm3bu3vsZopAAAAAP%2Fw6H7%2F7uaQ%2FvHpgP%2Fy7JL%2F9vQW%2F1kvvf9UEef%2Fhj7v%2F%2FPP9%2F%2F95Pv%2F9df7%2F7FQ%2Bf%2BxUPT%2F0IPq%2F8V3xf%2F69RT%2F8uyR%2FvHphv%2F28Vr%2F9vGB%2F6qWsf9jK%2Bb%2FhEjm%2F7iF5v%2F16Ob%2F59Ln%2F9iw5%2F%2BZL%2Bf%2Fnzvm%2F%2Bq15v%2B1Zeb%2Bxp6x%2F%2Fbygf%2F07mf%2F%2F%2F8R%2FvHqkP68p9f%2FoW7o%2F4BL5v%2BCROb%2FfCrm%2F4Al5v%2BRPOb%2FvIXm%2F9Sp5v%2Fuxeb%2FsnHn%2F8Ci3f7x6o7%2F%2F%2F8XAAAAAP%2F38lz9o4Tu%2F9K28%2F%2FUs%2Bb%2FYxrm%2F3os5v%2BWSeb%2F1LPm%2F%2F%2F%2F5v%2F%2F%2Feb%2F9Nfm%2F9Wy8v%2BceO7%2F9fBoAAAAAAAAAAD%2F%2BfZD%2Brig8%2F%2FRtvH%2F8OLv%2F5dg5v%2BOSub%2FnFjm%2F8KW5v%2F%2F%2F%2Bb%2F%2F%2F7m%2F%2FPg7v%2FMqfH%2FsZnz%2F%2FfzTQAAAAD%2F%2F%2F8J%2F%2FDpku2EZcL8up71%2F%2BfW8v%2FUu%2B7%2Fp3Dm%2F6hw5v%2FKo%2Bb%2F4s7m%2F8ip7f%2FkzvP%2FzbD1%2FXxazP%2Fw6ZH%2F%2F%2F8O%2F%2Fn1SP%2F18ILtooy19Zt16v%2FUvfL%2Fz7Xy%2F9G07%2F%2FDmub%2F1bnm%2F%2FDn7v%2Fw4%2FL%2F38jy%2FYhb6%2FeTfbn%2F9fCB%2F%2FfyVf%2Fy63v%2F9O6N%2FPX1Hed%2BW7z%2BuZjq%2F%2Bja9P%2Fo2PH%2F4c3y%2F9i%2F8v%2Ft3%2FL%2F4s%2F0%2FKV%2B6%2BlUL8f77%2B0c%2F%2FTujf%2Fy64H%2F7OKA%2F%2FTvhv%2F%2F%2FwL35OAa9rmgwP%2F58On%2B7eL2%2F%2Bre%2BP7j1Pj%2B4M72%2BrCN6uNeOcb22dQi%2F%2F%2F%2FAf%2F074H%2F7OKG%2F%2FLsbf%2Fs4qj%2F%2F%2F8J%2F%2F%2F%2FDv3y8EX84tbL%2Fenh2v7m2vn93s%2F6%2BMq42%2FS6p8z77OhM%2F%2F%2F%2FD%2F%2F%2F%2Fwj%2F7eSc%2F%2FHqev%2F%2F%2Fwn%2F6NyN%2F%2BjcvP%2Fw6KH%2F8ema%2F%2B%2Fmk%2F%2Fv54%2F%2F%2B%2Fk2%2F%2Fv6MP%2Fv54z%2F7%2BaU%2F%2FDpmf%2Fw6KH%2F6d65%2FubZmP%2F%2F%2FwwAAAAA%2F%2F%2F%2FBf%2F59UP%2B7eNl%2FvPtVv%2F%2F%2Fx7%2F%2F%2F8CAAAAAAAAAAD%2F%2F%2F8C%2F%2F%2F%2FG%2F%2F07lP%2B7eNl%2F%2Fj0R%2F%2F%2F%2FwcAAAAAg8GsQQAArEEAAKxBAASsQQAArEEAAKxBAACsQYABrEGAAaxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBgYGsQQ%3D%3D</Image>', '<Language>' . DEFAULT_LANG . '</Language>', '<InputEncoding>UTF-8</InputEncoding>', '<OutputEncoding>UTF-8</OutputEncoding>', '<Url type="text/html" method="' . (!PLUGIN_SEARCH_DISABLE_GET_ACCESS ? 'get' : 'post') . '" template="' . Router::get_script_uri() . '">', '<Param name="cmd" value="search" />', '<Param name="encode_hint" value="' . PKWK_ENCODING_HINT . '" />', '<Param name="type" value="AND" />', '<Param name="word" value="{searchTerms}" />', '</Url>', '<Url type="application/x-suggestions+json" template="' . Router::get_cmd_uri('list', null, null, array('type' => 'json')) . '&amp;word={searchTerms}" />', '<moz:SearchForm>' . Router::get_cmd_uri('search') . '</moz:SearchForm>', '</OpenSearchDescription>');
            header('Content-Type:application/opensearchdescription+xml');
            echo join("\n", $ret);
            exit;
            break;
        default:
            if ($s_word !== '') {
                // Search
                $msg = str_replace('$1', $s_word, $_search_msg['title_result']);
                $body = Search::do_search($vars['word'], $type, FALSE, $base);
            } else {
                // Init
                unset($vars['word']);
                // Stop using $_msg_word at lib/html.php
                $msg = $_search_msg['title_search'];
                $body = '<p>' . $_search_msg['msg_searching'] . '</p>' . "\n";
            }
            // Show search form
            $bases = $base == '' ? array() : array($base);
            $body .= plugin_search_search_form($s_word, $type, $bases);
            break;
    }
    return array('msg' => $msg, 'body' => $body);
}
Exemplo n.º 19
0
function plugin_source_action()
{
    global $vars, $_source_messages;
    if (PKWK_SAFE_MODE) {
        die_message('PKWK_SAFE_MODE prohibits this');
    }
    $page = isset($vars['page']) ? $vars['page'] : '';
    $vars['refer'] = $page;
    if (!is_page($page) || !check_readable($page, false, false)) {
        return array('msg' => $_source_messages['msg_notfound'], 'body' => $_source_messages['err_notfound']);
    }
    return array('msg' => $_source_messages['msg_title'], 'body' => '<pre id="source">' . htmlsc(join('', get_source($page))) . '</pre>');
}
Exemplo n.º 20
0
function plugin_ruby_inline()
{
    if (func_num_args() != 2) {
        return PLUGIN_RUBY_USAGE;
    }
    list($ruby, $body) = func_get_args();
    // strip_htmltag() is just for avoiding AutoLink insertion
    $body = strip_htmltag($body);
    if ($ruby == '' || $body == '') {
        return PLUGIN_RUBY_USAGE;
    }
    return '<ruby><rb>' . $body . '</rb>' . '<rp>(</rp>' . '<rt>' . htmlsc($ruby) . '</rt>' . '<rp>)</rp>' . '</ruby>';
}
Exemplo n.º 21
0
function plugin_passage_inline()
{
    $argv = func_get_args();
    $argc = func_num_args();
    $field = array('time', 'paren');
    for ($i = 0; $i < $argc; $i++) {
        ${$field}[$i] = htmlsc($argv[$i], ENT_QUOTES);
    }
    if (empty($time)) {
        return '';
    }
    $paren = empty($paren) ? FALSE : TRUE;
    return get_passage($time, $paren);
}
Exemplo n.º 22
0
function plugin_ruby_inline()
{
    if (func_num_args() != 2) {
        return PLUGIN_RUBY_USAGE;
    }
    $args = func_get_args();
    $body = trim(strip_autolink(array_pop($args)));
    // htmlsc() already
    $ruby = isset($args[0]) ? trim($args[0]) : '';
    // strip_htmltag() is just for avoiding AutoLink insertion
    if ($ruby == '' || $body == '') {
        return PLUGIN_RUBY_USAGE;
    }
    return '<ruby>' . '<rb>' . $body . '</rb>' . '<rp>(</rp>' . '<rt>' . htmlsc($ruby) . '</rt>' . '<rp>)</rp>' . '</ruby>';
}
Exemplo n.º 23
0
function plugin_menu_convert()
{
    global $vars, $menubar;
    static $menu = NULL;
    $num = func_num_args();
    if ($num > 0) {
        // Try to change default 'MenuBar' page name (only)
        if ($num > 1) {
            return '#menu(): Zero or One argument needed';
        }
        if ($menu !== NULL) {
            return '#menu(): Already set: ' . htmlsc($menu);
        }
        $args = func_get_args();
        if (!is_page($args[0])) {
            return '#menu(): No such page: ' . htmlsc($args[0]);
        } else {
            $menu = $args[0];
            // Set
            return '';
        }
    } else {
        // Output menubar page data
        $page = $menu === NULL ? $menubar : $menu;
        if (MENU_ENABLE_SUBMENU) {
            $path = explode('/', strip_bracket($vars['page']));
            while (!empty($path)) {
                $_page = join('/', $path) . '/' . MENU_SUBMENUBAR;
                if (is_page($_page)) {
                    $page = $_page;
                    break;
                }
                array_pop($path);
            }
        }
        if (!is_page($page)) {
            return '';
        } else {
            if ($vars['page'] == $page) {
                return '<!-- #menu(): You already view ' . htmlsc($page) . ' -->';
            } else {
                // Cut fixed anchors
                $menutext = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', get_source($page));
                return preg_replace('/<ul[^>]*>/', '<ul>', convert_html($menutext));
            }
        }
    }
}
Exemplo n.º 24
0
function plugin_includesubmenu_convert()
{
    global $vars;
    $ShowPageName = FALSE;
    if (func_num_args()) {
        $aryargs = func_get_args();
        if ($aryargs[0] == 'showpagename') {
            $ShowPageName = TRUE;
        }
    }
    $SubMenuPageName = '';
    $tmppage = strip_bracket($vars['page']);
    //下階層のSubMenuページ名
    $SubMenuPageName1 = $tmppage . '/SubMenu';
    //同階層のSubMenuページ名
    $LastSlash = strrpos($tmppage, '/');
    if ($LastSlash === FALSE) {
        $SubMenuPageName2 = 'SubMenu';
    } else {
        $SubMenuPageName2 = substr($tmppage, 0, $LastSlash) . '/SubMenu';
    }
    //echo "$SubMenuPageName1 <br />";
    //echo "$SubMenuPageName2 <br />";
    //下階層にSubMenuがあるかチェック
    //あれば、それを使用
    if (is_page($SubMenuPageName1)) {
        //下階層にSubMenu有り
        $SubMenuPageName = $SubMenuPageName1;
    } else {
        if (is_page($SubMenuPageName2)) {
            //同階層にSubMenu有り
            $SubMenuPageName = $SubMenuPageName2;
        } else {
            //SubMenu無し
            return "";
        }
    }
    $wiki = WikiFactory::Wiki($SubMenuPageName);
    $body = $wiki->render();
    if ($ShowPageName) {
        $s_page = htmlsc($SubMenuPageName);
        $link = '<a href="' . $wiki->get_uri('edit') . '">$s_page</a>';
        $body = "<h1>{$link}</h1>\n{$body}";
    }
    return $body;
}
Exemplo n.º 25
0
function do_update_diff($pagestr, $poststr, $original)
{
    $obj = new line_diff();
    $obj->set_str('left', $original, $pagestr);
    $obj->compare();
    $diff1 = $obj->toArray();
    $obj->set_str('right', $original, $poststr);
    $obj->compare();
    $diff2 = $obj->toArray();
    $arr = $obj->arr_compare('all', $diff1, $diff2);
    if (PKWK_DIFF_SHOW_CONFLICT_DETAIL) {
        global $do_update_diff_table;
        $do_update_diff_table = <<<EOD
<p>l : between backup data and stored page data.<br />
 r : between backup data and your post data.</p>
<table class="style_table">
 <tr>
  <th>l</th>
  <th>r</th>
  <th>text</th>
 </tr>
EOD;
        $tags = array('th', 'th', 'td');
        foreach ($arr as $_obj) {
            $do_update_diff_table .= '<tr>';
            $params = array($_obj->get('left'), $_obj->get('right'), $_obj->text());
            foreach ($params as $key => $text) {
                $text = htmlsc($text);
                if (trim($text) == '') {
                    $text = '&nbsp;';
                }
                $do_update_diff_table .= '<' . $tags[$key] . ' class="style_' . $tags[$key] . '">' . $text . '</' . $tags[$key] . '>';
            }
            $do_update_diff_table .= '</tr>' . "\n";
        }
        $do_update_diff_table .= '</table>' . "\n";
    }
    $body = '';
    foreach ($arr as $_obj) {
        if ($_obj->get('left') != '-' && $_obj->get('right') != '-') {
            $body .= $_obj->text();
        }
    }
    $auto = 1;
    return array(rtrim($body) . "\n", $auto);
}
Exemplo n.º 26
0
function plugin_includesubmenu_convert()
{
    global $script, $vars;
    $ShowPageName = FALSE;
    if (func_num_args()) {
        $aryargs = func_get_args();
        if ($aryargs[0] == 'showpagename') {
            $ShowPageName = TRUE;
        }
    }
    $SubMenuPageName = '';
    $tmppage = strip_bracket($vars['page']);
    //下階層のSubMenuページ名
    $SubMenuPageName1 = $tmppage . '/SubMenu';
    //同階層のSubMenuページ名
    $LastSlash = strrpos($tmppage, '/');
    if ($LastSlash === FALSE) {
        $SubMenuPageName2 = 'SubMenu';
    } else {
        $SubMenuPageName2 = substr($tmppage, 0, $LastSlash) . '/SubMenu';
    }
    //echo "$SubMenuPageName1 <br>";
    //echo "$SubMenuPageName2 <br>";
    //下階層にSubMenuがあるかチェック
    //あれば、それを使用
    if (is_page($SubMenuPageName1)) {
        //下階層にSubMenu有り
        $SubMenuPageName = $SubMenuPageName1;
    } else {
        if (is_page($SubMenuPageName2)) {
            //同階層にSubMenu有り
            $SubMenuPageName = $SubMenuPageName2;
        } else {
            //SubMenu無し
            return "";
        }
    }
    $body = convert_html(get_source($SubMenuPageName));
    if ($ShowPageName) {
        $r_page = rawurlencode($SubMenuPageName);
        $s_page = htmlsc($SubMenuPageName);
        $link = "<a href=\"{$script}?cmd=edit&amp;page={$r_page}\">{$s_page}</a>";
        $body = "<h1>{$link}</h1>\n{$body}";
    }
    return $body;
}
Exemplo n.º 27
0
function plugin_freeze_action()
{
    global $script, $vars, $function_freeze;
    global $_title_isfreezed, $_title_freezed, $_title_freeze;
    global $_msg_invalidpass, $_msg_freezing, $_btn_freeze;
    $page = isset($vars['page']) ? $vars['page'] : '';
    if (!$function_freeze || !is_page($page)) {
        return array('msg' => '', 'body' => '');
    }
    $pass = isset($vars['pass']) ? $vars['pass'] : null;
    $msg = $body = '';
    if (is_freeze($page)) {
        // Freezed already
        $msg =& $_title_isfreezed;
        $body = str_replace('$1', htmlsc(strip_bracket($page)), $_title_isfreezed);
    } elseif ($pass !== null && pkwk_login($pass)) {
        // Freeze
        $postdata = get_source($page);
        array_unshift($postdata, "#freeze\n");
        file_write(DATA_DIR, $page, join('', $postdata), true);
        // Update
        is_freeze($page, true);
        $vars['cmd'] = 'read';
        $msg =& $_title_freezed;
        $body = '';
    } else {
        // Show a freeze form
        $msg =& $_title_freeze;
        $s_page = htmlsc($page);
        $body = $pass === null ? '' : "<p><strong>{$_msg_invalidpass}</strong></p>\n";
        $body .= <<<EOD
<p>{$_msg_freezing}</p>
<form action="{$script}" method="post">
 <div>
  <input type="hidden"   name="cmd"  value="freeze" />
  <input type="hidden"   name="page" value="{$s_page}" />
  <input type="password" name="pass" size="12" />
  <input type="submit"   name="ok"   value="{$_btn_freeze}" />
 </div>
</form>
EOD;
    }
    return array('msg' => $msg, 'body' => $body);
}
Exemplo n.º 28
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>';
}
Exemplo n.º 29
0
function plugin_setlinebreak_convert()
{
    global $line_break;
    static $default;
    if (!isset($default)) {
        $default = $line_break;
    }
    if (func_num_args() == 0) {
        // Invert
        $line_break = !$line_break;
    } else {
        $args = func_get_args();
        switch (strtolower($args[0])) {
            case 'on':
                /*FALLTHROUGH*/
            /*FALLTHROUGH*/
            case 'true':
                /*FALLTHROUGH*/
            /*FALLTHROUGH*/
            case '1':
                $line_break = 1;
                break;
            case 'off':
                /*FALLTHROUGH*/
            /*FALLTHROUGH*/
            case 'false':
                /*FALLTHROUGH*/
            /*FALLTHROUGH*/
            case '0':
                $line_break = 0;
                break;
            case 'default':
                $line_break = $default;
                break;
            default:
                return '#setlinebreak: Invalid argument: ' . htmlsc($args[0]) . '<br />';
        }
    }
    return '';
}
Exemplo n.º 30
0
function plugin_color_inline()
{
    global $pkwk_dtd;
    $args = func_get_args();
    $text = strip_autolink(array_pop($args));
    // Already htmlsc(text)
    list($color, $bgcolor) = array_pad($args, 2, '');
    if ($color != '' && $bgcolor != '' && $text == '') {
        // Maybe the old style: '&color(foreground,text);'
        $text = htmlsc($bgcolor);
        $bgcolor = '';
    }
    if ($color == '' && $bgcolor == '' || $text == '' || func_num_args() > 3) {
        return PLUGIN_COLOR_USAGE;
    }
    // Invalid color
    foreach (array($color, $bgcolor) as $col) {
        if ($col != '' && !preg_match(PLUGIN_COLOR_REGEX, $col)) {
            return '&color():Invalid color: ' . htmlsc($col) . ';';
        }
    }
    if (PLUGIN_COLOR_ALLOW_CSS === TRUE || !isset($pkwk_dtd) || $pkwk_dtd == PKWK_DTD_XHTML_1_1) {
        $delimiter = '';
        if ($color != '' && $bgcolor != '') {
            $delimiter = '; ';
        }
        if ($color != '') {
            $color = 'color:' . $color;
        }
        if ($bgcolor != '') {
            $bgcolor = 'background-color:' . $bgcolor;
        }
        return '<span style="' . $color . $delimiter . $bgcolor . '">' . $text . '</span>';
    } else {
        if ($bgcolor != '') {
            return '&color(): bgcolor (with CSS) not allowed;';
        }
        return '<font color="' . $color . '">' . $text . '</font>';
    }
}