function plugin_diff_view($page) { global $script, $hr; global $_msg_notfound, $_msg_goto, $_msg_deleted, $_msg_addline, $_msg_delline, $_title_diff; global $_title_diff_delete; $r_page = rawurlencode($page); $s_page = htmlsc($page); $menu = array('<li>' . $_msg_addline . '</li>', '<li>' . $_msg_delline . '</li>'); $is_page = is_page($page); if ($is_page) { $menu[] = ' <li>' . str_replace('$1', '<a href="' . $script . '?' . $r_page . '">' . $s_page . '</a>', $_msg_goto) . '</li>'; } else { $menu[] = ' <li>' . str_replace('$1', $s_page, $_msg_deleted) . '</li>'; } $filename = DIFF_DIR . encode($page) . '.txt'; if (file_exists($filename)) { if (!PKWK_READONLY) { $menu[] = '<li><a href="' . $script . '?cmd=diff&action=delete&page=' . $r_page . '">' . str_replace('$1', $s_page, $_title_diff_delete) . '</a></li>'; } $msg = '<pre>' . diff_style_to_css(htmlsc(join('', file($filename)))) . '</pre>' . "\n"; } elseif ($is_page) { $diffdata = trim(htmlsc(join('', get_source($page)))); $msg = '<pre><span class="diff_added">' . $diffdata . '</span></pre>' . "\n"; } else { return array('msg' => $_title_diff, 'body' => $_msg_notfound); } $menu = join("\n", $menu); $body = <<<EOD <ul> {$menu} </ul> {$hr} EOD; return array('msg' => $_title_diff, 'body' => $body . $msg); }
function plugin_qform_view_action() { global $vars; $page = $vars['page']; $str = ''; $f = false; $lines = get_source($page); foreach ($lines as $l) { if (trim($l) === '}}') { $f = false; } if ($f) { $str .= $l; } if (preg_match('/^#qform_view(.*)/', $l)) { $f = true; } } header("Cache-Control: public"); header("Pragma: public"); header("Accept-Ranges: none"); header("Content-Transfer-Encoding: binary"); header("Content-Disposition: attachment; filename=qform.csv"); header("Content-Type: application/octet-stream; name=qform.csv"); echo mb_convert_encoding($str, 'Shift_JIS'); exit; }
function plugin_ls_convert() { global $vars; $with_title = FALSE; if (func_num_args()) { $args = func_get_args(); $with_title = in_array('title', $args); } $prefix = $vars['page'] . '/'; $pages = array(); foreach (get_existpages() as $page) { if (strpos($page, $prefix) === 0) { $pages[] = $page; } } natcasesort($pages); $ls = array(); foreach ($pages as $page) { $comment = ''; if ($with_title) { list($comment) = get_source($page); // 見出しの固有ID部を削除 $comment = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/', '$1$2', $comment); $comment = '- ' . ereg_replace('^[-*]+', '', $comment); } $ls[] = "-[[{$page}]] {$comment}"; } return convert_html($ls); }
function plugin_html2_is_edit_auth($page, $user = '') { global $edit_auth, $edit_auth_pages, $auth_method_type; if (!$edit_auth) { return FALSE; } // Checked by: $target_str = ''; if ($auth_method_type == 'pagename') { $target_str = $page; // Page name } else { if ($auth_method_type == 'contents') { $target_str = join('', get_source($page)); // Its contents } } foreach ($edit_auth_pages as $regexp => $users) { if (preg_match($regexp, $target_str)) { if ($user == '' || in_array($user, explode(',', $users))) { return TRUE; } } } return FALSE; }
public function write() { $output = PKWK_YAMLCONFIG_HEAD . yaml_emit($this->getArrayCopy()) . PKWK_YAMLCONFIG_TAIL; $source = get_source($this->page, TRUE, TRUE); $source = $source != FALSE && preg_match(PKWK_YAMLCONFIG_PATTERN, $source) ? preg_replace(PKWK_YAMLCONFIG_PATTERN, $output, $source) : $output; page_write($this->page, $source); return $source; }
function plugin_vote_action() { global $vars, $script, $cols, $rows; global $_title_collided, $_msg_collided, $_title_updated; global $_vote_plugin_votes; if (PKWK_READONLY) { die_message('PKWK_READONLY prohibits editing'); } $postdata_old = get_source($vars['refer']); $vote_no = 0; $title = $body = $postdata = $postdata_input = $vote_str = ''; $matches = array(); foreach ($postdata_old as $line) { if (!preg_match('/^#vote(?:\\((.*)\\)(.*))?$/i', $line, $matches) || $vote_no++ != $vars['vote_no']) { $postdata .= $line; continue; } $args = explode(',', $matches[1]); $lefts = isset($matches[2]) ? $matches[2] : ''; foreach ($args as $arg) { $cnt = 0; if (preg_match('/^(.+)\\[(\\d+)\\]$/', $arg, $matches)) { $arg = $matches[1]; $cnt = $matches[2]; } $e_arg = encode($arg); if (!empty($vars['vote_' . $e_arg]) && $vars['vote_' . $e_arg] == $_vote_plugin_votes) { ++$cnt; } $votes[] = $arg . '[' . $cnt . ']'; } $vote_str = '#vote(' . @join(',', $votes) . ')' . $lefts . "\n"; $postdata_input = $vote_str; $postdata .= $vote_str; } if (md5(@join('', get_source($vars['refer']))) != $vars['digest']) { $title = $_title_collided; $s_refer = htmlsc($vars['refer']); $s_digest = htmlsc($vars['digest']); $s_postdata_input = htmlsc($postdata_input); $body = <<<EOD {$_msg_collided} <form action="{$script}?cmd=preview" method="post"> <div> <input type="hidden" name="refer" value="{$s_refer}" /> <input type="hidden" name="digest" value="{$s_digest}" /> <textarea name="msg" rows="{$rows}" cols="{$cols}" id="textarea">{$s_postdata_input}</textarea><br /> </div> </form> EOD; } else { page_write($vars['refer'], $postdata); $title = $_title_updated; } $vars['page'] = $vars['refer']; return array('msg' => $title, 'body' => $body); }
function plugin_fb_likegate_convert() { global $vars, $script, $nowindow; $qm = get_qm(); $qt = get_qt(); $editable = edit_auth($page, FALSE, FALSE); //本文部分以外のページに設置した場合、無効にする if (isset($vars['page_alt']) && is_page($vars['page_alt'])) { if ($editable) { return 'error: #fb_likegate: 本文に設置してください。'; } else { return ''; } } $page = isset($vars['page']) ? $vars['page'] : ''; //キャッシュ無効 $qt->enable_cache = false; $args = func_get_args(); if (count($args) === 0) { return $qm->replace('fmt_err_cvt', 'fb_likegate', $qm->m['plg_fb_likegate']['err_usage']); } list($unlike_page) = $args; $fb_apps_url = plugin_fb_root_get_apps_url(); //Facebook からのアクセス if ($signed_request = plugin_fb_root_parse_request()) { $nowindow = 1; $edit_url = $script . '?cmd=edit&page=' . rawurlencode($page); plugin_fb_root_set_page(); $liked = (isset($signed_request->page->liked) and !is_null($signed_request->page->liked)) ? $signed_request->page->liked : $signed_request->page['liked']; if ($liked) { $src = get_source($page); foreach ($src as $i => $line) { if (strpos($line, '#fb_likegate') === 0) { unset($src[$i]); break; } } $body = convert_html($src); } else { $src = get_source($unlike_page); foreach ($src as $i => $line) { if (strpos($line, '#fb_page') === 0) { unset($src[$i]); } } $body = convert_html($src); } if ($editable) { $add_body = convert_html($qm->replace('plg_fb_likegate.ntc_admin_fb', $edit_url, $unlike_page, $fb_apps_url)); } force_output_message('', '', $add_body . $body); } else { if ($editable) { return convert_html($qm->replace('plg_fb_likegate.ntc_admin', $unlike_page, $fb_apps_url)); } force_output_message($qm->m['plg_fb_likegate']['ntc_title'], '', $qm->m['plg_fb_likegate']['ntc_msg']); } }
/** * QHM Nav plugin * ------------------------------------------- * * Copyright (c) 2014 hokuken * http://hokuken.com/ * * created : 2014/06/11 * modified : * * Switch Nav content and convert * * Usage : * #nav(OtherSiteNavigator) * */ function plugin_nav_convert() { global $vars, $navbar; static $nav = NULL; $qm = get_qm(); $qt = get_qt(); $num = func_num_args(); if ($num > 0) { // Try to change default 'SiteNavigator' page name (only) if ($num > 1) { return '#nav: 引数が多すぎます。' . "<br />\n"; } if ($nav !== NULL) { return '#nav: 既に変更されています:' . h($nav) . "<br />\n"; } if ($qt->getv('plugin_nav_source')) { return '#nav: 既にナビの内容を変更しています。' . "<br />\n"; } $args = func_get_args(); //ナビの内容を受け取る if (strpos($args[0], "\r") !== FALSE) { if (isset($vars['page_alt'])) { return '#nav: 利用できません。'; } $source = str_replace("\r", "\n", $args[0]); $qt->setv_once('plugin_nav_source', $source); return ''; } if (!is_page($args[0])) { return 'ページがみつかりません:' . h($args[0]) . "<br />\n"; } else { $nav = $args[0]; // Set return ''; } } else { // Output navbar page data $page = $nav === NULL ? $navbar : $nav; if ($source = $qt->getv('plugin_nav_source')) { // Cut fixed anchors $source = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', $source); return convert_html($source); } if (!is_page($page)) { return ''; } else { if (isset($vars['preview']) && $vars['page'] == $page) { // Cut fixed anchors $navtext = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', $vars['msg']); return convert_html($navtext); } else { // Cut fixed anchors $navtext = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', get_source($page)); return convert_html($navtext); } } } }
function plugin_memo_action() { global $script, $vars, $cols, $rows; global $_title_collided, $_msg_collided, $_title_updated; if (PKWK_READONLY) { die_message('PKWK_READONLY prohibits editing'); } if (!isset($vars['msg']) || $vars['msg'] == '') { return; } $memo_body = preg_replace('/' . "\r" . '/', '', $vars['msg']); $memo_body = str_replace("\n", '\\n', $memo_body); $memo_body = str_replace('"', '"', $memo_body); // Escape double quotes $memo_body = str_replace(',', ',', $memo_body); // Escape commas $postdata_old = get_source($vars['refer']); $postdata = ''; $memo_no = 0; foreach ($postdata_old as $line) { if (preg_match("/^#memo\\(?.*\\)?\$/i", $line)) { if ($memo_no == $vars['memo_no']) { $postdata .= '#memo(' . $memo_body . ')' . "\n"; $line = ''; } ++$memo_no; } $postdata .= $line; } $postdata_input = $memo_body . "\n"; $body = ''; if (md5(@join('', get_source($vars['refer']))) != $vars['digest']) { $title = $_title_collided; $body = $_msg_collided . "\n"; $s_refer = htmlspecialchars($vars['refer']); $s_digest = htmlspecialchars($vars['digest']); $s_postdata_input = htmlspecialchars($postdata_input); $body .= <<<EOD <form action="{$script}?cmd=preview" method="post"> <div> <p> <input type="hidden" name="refer" value="{$s_refer}" /> <input type="hidden" name="digest" value="{$s_digest}" /> <textarea name="msg" rows="{$rows}" cols="{$cols}" id="textarea">{$s_postdata_input}</textarea> </p> </div> </form> EOD; } else { page_write($vars['refer'], $postdata); $title = $_title_updated; } $retvars['msg'] =& $title; $retvars['body'] =& $body; $vars['page'] = $vars['refer']; return $retvars; }
function plugin_insert_action() { global $script, $vars, $cols, $rows; global $_title_collided, $_msg_collided, $_title_updated; if (PKWK_READONLY) { die_message('PKWK_READONLY prohibits editing'); } if (!isset($vars['msg']) || $vars['msg'] == '') { return; } $vars['msg'] = preg_replace('/' . "\r" . '/', '', $vars['msg']); $insert = $vars['msg'] != '' ? "\n" . $vars['msg'] . "\n" : ''; $postdata = ''; $postdata_old = get_source($vars['refer']); $insert_no = 0; foreach ($postdata_old as $line) { if (!INSERT_INS) { $postdata .= $line; } if (preg_match('/^#insert$/i', $line)) { if ($insert_no == $vars['insert_no']) { $postdata .= $insert; } $insert_no++; } if (INSERT_INS) { $postdata .= $line; } } $postdata_input = $insert . "\n"; $body = ''; if (md5(@join('', get_source($vars['refer']))) != $vars['digest']) { $title = $_title_collided; $body = $_msg_collided . "\n"; $s_refer = htmlsc($vars['refer']); $s_digest = htmlsc($vars['digest']); $s_postdata_input = htmlsc($postdata_input); $body .= <<<EOD <form action="{$script}?cmd=preview" method="post"> <div> <input type="hidden" name="refer" value="{$s_refer}" /> <input type="hidden" name="digest" value="{$s_digest}" /> <textarea name="msg" rows="{$rows}" cols="{$cols}" id="textarea">{$s_postdata_input}</textarea><br /> </div> </form> EOD; } else { page_write($vars['refer'], $postdata); $title = $_title_updated; } $retvars['msg'] = $title; $retvars['body'] = $body; $vars['page'] = $vars['refer']; return $retvars; }
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', htmlspecialchars(strip_bracket($page)), '<p>' . $_title_isunfreezed . '</p>'); } 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 // kazuwaya $msg =& $_title_unfreeze; $s_page = htmlspecialchars($page); $body = $pass === NULL ? '' : "<p><strong>{$_msg_invalidpass}</strong></p>\n"; $body .= <<<EOD <p>{$_msg_unfreezing}</p> <form action="{$script}" method="post"> <p> <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}" /> </p> </form> EOD; } } return array('msg' => $msg, 'body' => $body); }
function read() { if (!is_page($this->page)) { return FALSE; } $this->objs = array(); $obj =& new ConfigTable(''); $matches = array(); foreach (get_source($this->page) as $line) { if ($line == '') { continue; } $head = $line[0]; // The first letter $level = strspn($line, $head); if ($level > 3) { $obj->add_line($line); } else { if ($head == '*') { // Cut fixed-heading anchors $line = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/', '$1$2', $line); if ($level == 1) { $this->objs[$obj->title] = $obj; $obj =& new ConfigTable($line); } else { if (!is_a($obj, 'ConfigTable_Direct')) { $obj =& new ConfigTable_Direct('', $obj); } $obj->set_key($line); } } else { if ($head == '-' && $level > 1) { if (!is_a($obj, 'ConfigTable_Direct')) { $obj =& new ConfigTable_Direct('', $obj); } $obj->add_value($line); } else { if ($head == '|' && preg_match('/^\\|(.+)\\|\\s*$/', $line, $matches)) { // Table row if (!is_a($obj, 'ConfigTable_Sequential')) { $obj =& new ConfigTable_Sequential('', $obj); } // Trim() each table cell $obj->add_value(array_map('trim', explode('|', $matches[1]))); } else { $obj->add_line($line); } } } } } $this->objs[$obj->title] = $obj; return TRUE; }
function plugin_diff_view($page) { global $script, $hr; // global $_msg_notfound, $_msg_goto, $_msg_deleted, $_msg_addline, $_msg_delline; // global $_title_diff, $_title_diff_delete; if (auth::check_role('safemode')) { die_message('PKWK_SAFE_MODE prohibits this'); } $_msg_notfound = _('The page was not found.'); $_msg_addline = _('The added line is <span class="diff_added">THIS COLOR</span>.'); $_msg_delline = _('The deleted line is <span class="diff_removed">THIS COLOR</span>.'); $_msg_goto = _('Go to $1.'); $_msg_deleted = _(' $1 has been deleted.'); $_title_diff = _('Diff of $1'); $_title_diff_delete = _('Deleting diff of $1'); $r_page = rawurlencode($page); $s_page = htmlspecialchars($page); $menu = array('<li>' . $_msg_addline . '</li>', '<li>' . $_msg_delline . '</li>'); $is_page = is_page($page); if ($is_page) { $menu[] = ' <li>' . str_replace('$1', '<a href="' . get_page_uri($page) . '">' . $s_page . '</a>', $_msg_goto) . '</li>'; } else { $menu[] = ' <li>' . str_replace('$1', $s_page, $_msg_deleted) . '</li>'; } $filename = DIFF_DIR . encode($page) . '.txt'; if (file_exists($filename)) { // if (! PKWK_READONLY) { if (!auth::check_role('readonly')) { $menu[] = '<li><a href="' . $script . '?cmd=diff&action=delete&page=' . $r_page . '">' . str_replace('$1', $s_page, $_title_diff_delete) . '</a></li>'; } $source = join('', file($filename)); auth::is_role_page($source); $msg = '<pre>' . diff_style_to_css(htmlspecialchars($source)) . '</pre>' . "\n"; } else { if ($is_page) { $source = join('', get_source($page)); auth::is_role_page($source); $diffdata = trim(htmlspecialchars($source)); $msg = '<pre><span class="diff_added">' . $diffdata . '</span></pre>' . "\n"; } else { return array('msg' => $_title_diff, 'body' => $_msg_notfound); } } $menu = join("\n", $menu); $body = <<<EOD <ul> {$menu} </ul> {$hr} EOD; return array('msg' => $_title_diff, 'body' => $body . $msg); }
function convert_html($lines) { global $vars, $digest; static $contents_id = 0; // Set digest $digest = md5(join('', get_source($vars['page']))); if (!is_array($lines)) { $lines = explode("\n", $lines); } $body =& new Body(++$contents_id); $body->parse($lines); return $body->toString(); }
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 count_comment($page) { $source = join("\n", get_source($page)); if (!preg_match("/^#comment\$/m", $source)) { return NULL; } require_once PLUGIN_DIR . 'comment.inc.php'; $comment_format = PLUGIN_COMMENT_FORMAT_STRING; $comment_format = preg_replace("/MSG/", ".*", $comment_format); $comment_format = preg_replace("/NAME/", "\\[\\[.*\\]\\]", $comment_format); $comment_format = preg_replace("/NOW/", "&new.*", $comment_format); return preg_match_all("/^-{$comment_format}/m", $source, $dumy); }
function plugin_gmapfun_action() { global $vars; $page = $vars['page']; $body = ''; if (is_page($page)) { $body = convert_html(get_source($page)); $qt = get_qt(); $before = $qt->getv('beforescript'); } pkwk_common_headers(); print $before . $body; exit; }
function plugin_diff_view($page) { global $script, $hr; global $layout_pages; $qm = get_qm(); $r_page = rawurlencode($page); $s_page = htmlspecialchars($page); $menu = array('<li>' . $qm->m['fmt_msg_addline'] . '</li>', '<li>' . $qm->m['fmt_msg_delline'] . '</li>'); //レイアウト部品の場合、スタイルを変更する $is_layout = FALSE; if (isset($layout_pages) && isset($layout_pages[$page])) { $is_layout = TRUE; } $is_page = is_page($page); if ($is_page && $is_layout) { $menu[] = ' <li><a href="' . h($script) . '?cmd=edit&page=' . $r_page . '">' . h($layout_pages[$page]) . 'を編集する</a></li>'; } else { if ($is_page) { $menu[] = ' <li>' . str_replace('$1', '<a href="' . $script . '?' . $r_page . '">' . $s_page . '</a>', $qm->m['fmt_msg_goto']) . '</li>'; } else { $menu[] = ' <li>' . str_replace('$1', $s_page, $qm->m['fmt_msg_deleted']) . '</li>'; } } $filename = DIFF_DIR . encode($page) . '.txt'; if (file_exists($filename)) { if (!PKWK_READONLY) { $menu[] = '<li><a href="' . $script . '?cmd=diff&action=delete&page=' . $r_page . '">' . $qm->replace('plg_diff.title_delete', $s_page) . '</a></li>'; } $msg = '<pre>' . diff_style_to_css(htmlspecialchars(join('', file($filename)))) . '</pre>' . "\n"; } else { if ($is_page) { $diffdata = trim(htmlspecialchars(join('', get_source($page)))); $msg = '<pre><span class="diff_added">' . $diffdata . '</span></pre>' . "\n"; } else { return array('msg' => $qm->m['plg_diff']['title'], 'body' => $qm->m['fmt_err_notfound']); } } $menu = join("\n", $menu); $body = <<<EOD <ul> {$menu} </ul> {$hr} EOD; $title = $qm->m['plg_diff']['title']; if ($is_layout) { $title = h($layout_pages[$page]) . 'の変更点'; } return array('msg' => $title, 'body' => $body . $msg); }
function plugin_freeze_action() { global $script, $vars, $function_freeze; $_title_isfreezed = _(' $1 has already been frozen'); $_title_freezed = _(' $1 has been frozen.'); $_title_freeze = _('Freeze $1'); $_msg_invalidpass = _('Invalid password.'); $_msg_freezing = _('Please input the password for freezing.'); $_btn_freeze = _('Freeze'); $page = isset($vars['page']) ? $vars['page'] : ''; if (!$function_freeze || is_cantedit($page) || !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', htmlspecialchars(strip_bracket($page)), $_title_isfreezed); } else { if (!auth::check_role('role_adm_contents') || $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 = htmlspecialchars($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_code_action() { global $vars; global $_source_messages; // if (PKWK_SAFE_MODE) die_message('PKWK_SAFE_MODE prohibits this'); if (auth::check_role('safemode')) { die_message('PKWK_SAFE_MODE prohibits this'); } $vars['refer'] = $vars['page']; if (!is_page($vars['page']) || !check_readable($vars['page'], false, false)) { return array('msg' => $_source_messages['msg_notfound'], 'body' => $_source_messages['err_notfound']); } return array('msg' => $_source_messages['msg_title'], 'body' => plugin_code_convert('pukiwiki', join('', get_source($vars['page'])) . "\n")); }
function plugin_freeze_action() { global $script, $vars, $function_freeze; global $_title_isfreezed, $_title_freezed, $_title_freeze; global $_msg_invalidpass, $_msg_freezing, $_btn_freeze; $qt = get_qt(); //キャッシュしない $qt->enable_cache = false; $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', htmlspecialchars(strip_bracket($page)), $_title_isfreezed); } else { if ($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 = htmlspecialchars($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_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: ' . htmlspecialchars($menu); } $args = func_get_args(); if (!is_page($args[0])) { return '#menu(): No such page: ' . htmlspecialchars($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 ' . htmlspecialchars($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_toc_convert() { global $vars; // global $fixed_heading_anchor; // if (!$fixed_heading_anchor) return ''; // 固有アンカーの機能が有効か? // パラメータの取得 $argv = func_get_args(); $argc = func_num_args(); //$data = $argv[ --$argc ]; $field = array('lvl', 'view', 'mode', 'id'); for ($i = 0; $i < $argc; $i++) { ${$field}[$i] = $argv[$i]; } if (empty($lvl)) { $lvl = 3; } // 表示レベル : 3 まで表示 if (empty($view)) { $view = 'toc'; } // 表示形式 : toc, tree if (empty($mode)) { $mode = 'toc'; } // 処理対象 : full, toc, part if (empty($id)) { $id = ''; } // #toc 位置識別子 $src = get_source($vars['page']); // ページの取得 if (count($src) == 0) { return ''; } // 該当ページなし if ($mode == 'part') { $idx = toc_make_index_part($src, $id, $lvl); } else { // full, toc $idx = toc_make_index($src, $mode, $lvl); } $idx = toc_convert_index($idx, $lvl); // 整形処理 if ($view == 'tree') { return toc_mode_contents($idx); } return toc_mode_toc($idx); }
function plugin_preview_action() { global $vars; $page = isset($vars['page']) ? $vars['page'] : ''; if (is_page($page)) { check_readable($page, true, true); $source = get_source($page); array_splice($source, 10); $body = convert_html($source); pkwk_common_headers(); header('Content-type: text/xml'); print '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n"; print $body; } exit; }
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 = htmlspecialchars($SubMenuPageName); $link = "<a href=\"{$script}?cmd=edit&page={$r_page}\">{$s_page}</a>"; $body = "<h1>{$link}</h1>\n{$body}"; } return $body; }
function plugin_footarea_convert() { global $vars, $footarea, $use_open_uri_in_new_window; static $foot = NULL; static $foothtml = NULL; //miko patched // Cached MenuHTML if ($foothtml !== NULL) { return preg_replace('/<ul class="list[^>]*>/', '<ul class="foot">', $foothtml); } //miko patched if (func_num_args()) { $args = func_get_args(); if (is_page($args[0])) { $foot = $args[0]; } return ''; } $page = $foot === NULL ? $footarea : $foot; if (FOOT_ENABLE_SUBFOOT) { $path = explode('/', strip_bracket($vars['page'])); while (count($path)) { $_page = join('/', $path) . '/' . FOOT_SUBFOOTBAR; if (is_page($_page)) { $page = $_page; break; } array_pop($path); } } if (!is_page($page)) { return ''; // } else if ($vars['page'] == $page) { // return '<!-- #footarea(): You already view ' . htmlspecialchars($page) . ' -->'; } $foottext = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', get_source($page)); if (function_exists('convert_filter')) { $foottext = convert_filter($foottext); } $save_newwindow = $use_open_uri_in_new_window; $use_open_uri_in_new_window = 0; $foothtml = convert_html($foottext); $use_open_uri_in_new_window = $save_newwindow; $foothtml = str_replace("\n", '', $foothtml); return preg_replace('/<ul class="list[^>]*>/', '<ul class="foot">', $foothtml); }
function plugin_headarea_convert() { global $vars, $headarea, $use_open_uri_in_new_window; static $head = NULL; static $headhtml = NULL; //miko patched // Cached MenuHTML if ($headhtml !== NULL) { return preg_replace('/<ul class="list[^>]*>/', '<ul class="head">', $headhtml); } //miko patched if (func_num_args()) { $args = func_get_args(); if (is_page($args[0])) { $head = $args[0]; } return ''; } $page = $head === NULL ? $headarea : $head; if (HEAD_ENABLE_SUBHEAD) { $path = explode('/', strip_bracket($vars['page'])); while (count($path)) { $_page = join('/', $path) . '/' . HEAD_SUBHEADBAR; if (is_page($_page)) { $page = $_page; break; } array_pop($path); } } if (!is_page($page)) { return ''; // } else if ($vars['page'] == $page) { // return '<!-- #headarea(): You already view ' . htmlsc($page) . ' -->'; } $headtext = preg_replace('/^(\\*{1,3}.*)\\[#[A-Za-z][\\w-]+\\](.*)$/m', '$1$2', get_source($page)); if (function_exists('convert_filter')) { $headtext = convert_filter($headtext); } $save_newwindow = $use_open_uri_in_new_window; $use_open_uri_in_new_window = 0; $headhtml = RendererFactory::factory($headtext); $use_open_uri_in_new_window = $save_newwindow; $headhtml = str_replace("\n", '', $headhtml); return preg_replace('/<ul class="list[^>]*>/', '<ul class="head">', $headhtml); }
function plugin_source_action() { global $vars; //, $_source_messages; // if (PKWK_SAFE_MODE) die_message('PKWK_SAFE_MODE prohibits this'); if (auth::check_role('safemode')) { 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' => _(' $1 was not found.'), 'body' => _('cannot display the page source.')); } $source = join('', get_source($page)); auth::is_role_page($source); return array('msg' => _('Source of $1'), 'body' => '<pre id="source">' . htmlspecialchars($source) . '</pre>'); }
function plugin_qhmauth_action() { global $script, $auth_method_type, $auth_users, $edit_auth_pages; $qm = get_qm(); $page = isset($vars['page']) ? $vars['page'] : ''; $msg = $qm->m['plg_qhmauth']['title']; // Checked by: $target_str = ''; if ($auth_method_type == 'pagename') { $target_str = $page; // Page name } else { if ($auth_method_type == 'contents') { $target_str = join('', get_source($page)); // Its contents } } $user_list = array(); foreach ($edit_auth_pages as $key => $val) { if (preg_match($key, $target_str)) { $user_list = array_merge($user_list, explode(',', $val)); } } if (empty($user_list)) { return array('msg' => $msg, 'body' => "<p>{$qm->m['plg_qhmauth']['err_pkwk_ini']}</p>"); } //TRUE; // No limit //-------------------------------------------- //Customize from here //Session Auth instead of Basic Auth //Thanks & Refer SiteDev + AT by AKKO if (array_key_exists($_SESSION['usr'], $auth_users)) { return array('msg' => $msg, 'body' => "<p>" . $qm->replace('plg_qhmauth.err_has_auth', $_SESSION['usr'], $script) . "</p>"); //return TRUE; } $fg = FALSE; $fg = ss_chkusr($qm->m['plg_qhmauth']['title'], $auth_users); if ($fg) { $_SESSION['usr'] = $_POST['username']; header('Location: ' . $script); exit; } auth_catbody($msg, $qm->replace('plg_qhmauth.err_deny', $script)); exit; }
/** * make_backup * バックアップを作成する * * @access public * @param String $page ページ名 * @param Boolean $delete TRUE:バックアップを削除する * * @return Void */ function make_backup($page, $delete = FALSE) { global $cycle, $maxage; global $do_backup, $del_backup; // if (PKWK_READONLY || ! $do_backup) return; if (auth::check_role('readonly') || !$do_backup) { return; } if ($del_backup && $delete) { _backup_delete($page); return; } if (!is_page($page)) { return; } $lastmod = _backup_get_filetime($page); if ($lastmod == 0 || UTIME - $lastmod > 60 * 60 * $cycle) { $backups = get_backup($page); $count = count($backups) + 1; // 直後に1件追加するので、(最大件数 - 1)を超える要素を捨てる if ($count > $maxage) { array_splice($backups, 0, $count - $maxage); } $strout = ''; foreach ($backups as $age => $data) { // BugTrack/685 by UPK //$strout .= PKWK_SPLITTER . ' ' . $data['time'] . "\n"; // Splitter format $strout .= PKWK_SPLITTER . ' ' . $data['time'] . ' ' . $data['real'] . "\n"; // Splitter format $strout .= join('', $data['data']); unset($backups[$age]); } $strout = preg_replace("/([^\n])\n*\$/", "\$1\n", $strout); // Escape 'lines equal to PKWK_SPLITTER', by inserting a space $body = preg_replace('/^(' . preg_quote(PKWK_SPLITTER) . "\\s\\d+(\\s(\\d+)|))\$/", '$1 ', get_source($page)); // BugTrack/685 by UPK // $body = PKWK_SPLITTER . ' ' . get_filetime($page) . "\n" . join('', $body); $body = PKWK_SPLITTER . ' ' . get_filetime($page) . ' ' . UTIME . "\n" . join('', $body); $body = preg_replace("/\n*\$/", "\n", $body); $fp = _backup_fopen($page, 'wb') or die_message('Cannot open ' . htmlspecialchars(_backup_get_filename($page)) . '<br />Maybe permission is not writable or filename is too long'); _backup_fputs($fp, $strout); _backup_fputs($fp, $body); _backup_fclose($fp); } }