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))); } } } }
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>'; }
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>'; }
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; }
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; }
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"; } }
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); }
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)); }
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; }
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&page=' . rawurlencode($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; }
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"; } }
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)); }
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&refer=" . rawurlencode($vars['page']) . '">' . htmlsc($title) . '</a></p>'; }
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); }
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>'; }
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); }
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> <input type="submit" value="{$_btn_search}" /> </div> {$base_option} </form> EOD; }
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')) . '&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); }
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>'); }
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>'; }
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); }
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>'; }
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)); } } } }
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; }
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 = ' '; } $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); }
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&page={$r_page}\">{$s_page}</a>"; $body = "<h1>{$link}</h1>\n{$body}"; } return $body; }
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); }
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>'; }
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 ''; }
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>'; } }