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