「システム側が自動的に更新するページ」を保護するための設定 $cantedit (RecentChanges、RecentDeleted などが該当する) に関するコードを集約し、想定されている挙動にそった動作に改める。
unfreeze.inc.php,v 1.10および1.11(CVS)において、PLUGIN_UNFREEZE_EDITを有効にしている場合、凍結解除後に編集フォームを表示していますが、編集可能かどうかのチェックをしていないようです。
これにより
$whatsnew = 'RecentChanges'; // Modified page list $whatsdeleted = 'RecentDeleted'; // Removeed page list
の編集フォームが表示されます。(編集結果は保存できません)
func.php,v 1.91 line 47- // If the page exists function is_page($page, $clearcache = FALSE) { if ($clearcache) clearstatcache(); return file_exists(get_filename($page)); } + +function is_cantedit($page) +{ + global $cantedit; + static $is_cantedit; + if (! isset($is_cantedit)) { + foreach($cantedit as $key) { + $is_cantedit[$key] = TRUE; + } + } + return isset($is_cantedit[$page]); +} function is_editable($page) { - global $cantedit; static $is_editable = array(); if (! isset($is_editable[$page])) { $is_editable[$page] = ( is_pagename($page) && ! is_freeze($page) && - ! in_array($page, $cantedit) + ! is_cantedit($page) ); } return $is_editable[$page]; }
html.php,v 1.63 line 12- function catbody($title, $page, $body) { global $script, $vars, $arg, $defaultpage, $whatsnew, $help_page, $hr; - global $attach_link, $related_link, $cantedit, $function_freeze; + global $attach_link, $related_link, $function_freeze;
html.php,v 1.57 line 91- html.php,v 1.63 line 84- // Init flags - $is_page = (is_pagename($_page) && ! arg_check('backup') && $_page != $whatsnew); + $is_page = (is_pagename($_page) && ! arg_check('backup') && ! is_cantedit($_page)); $is_read = (arg_check('read') && is_page($_page)); $is_freeze = is_freeze($_page);リロードも非表示となりますが、skinについては上記の対応で問題ないと思います。
freeze.inc.php,v 1.9 line 10- function plugin_freeze_action() { - global $script, $vars, $function_freeze; + global $script, $vars, $function_freeze, $cantedit; 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)); + if (! $function_freeze || ! is_page($page) || is_cantedit($page)); return array('msg' => '', 'body' => '');
unfreeze.inc.php,v 1.10 line 10- unfreeze.inc.php,v 1.11 line 12- function plugin_unfreeze_action() { - global $script, $vars, $function_freeze; + global $script, $vars, $function_freeze, $cantedit; 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)); + if (! $function_freeze || ! is_page($page) || is_cantedit($page)); return array('msg' => '', 'body' => '');
rename.inc.php,v 1.34 line 13- function plugin_rename_action() { - global $whatsnew; - if (PKWK_READONLY) die_message('PKWK_READONLY prohibits this'); line 46- } else if (! is_page($refer)) { return plugin_rename_phase1('notpage', $refer); - } else if ($refer === $whatsnew) { + } else if (is_cantedit($refer)) { return plugin_rename_phase1('norename', $refer); } else if ($page === '' || $page === $refer) { return plugin_rename_phase2(); line 405- function plugin_rename_getselecttag($page) { - global $whatsnew; - $pages = array(); foreach (get_existpages() as $_page) { - if ($_page === $whatsnew) continue; + if (is_cantedit($_page)) continue; $selected = ($_page === $page) ? ' selected' : '';
article.inc.php,v 1.25 line 46- function plugin_article_action() { global $script, $post, $vars, $cols, $rows, $now; global $_title_collided, $_msg_collided, $_title_updated; global $_plugin_article_mailto, $_no_subject, $_no_name; global $_msg_article_mail_sender, $_msg_article_mail_page; if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing'); - if ($post['msg'] == '') + if ($post['msg'] == '' || is_cantedit($post['refer'])) return array('msg'=>'','body'=>''); line 143- function plugin_article_convert() { global $script, $vars, $digest; global $_btn_article, $_btn_name, $_btn_subject; static $numbers = array(); - if (PKWK_READONLY) return ''; // Show nothing + if (PKWK_READONLY || is_cantedit($vars['page'])) return ''; // Show nothing
comment.inc.php,v 1.36 line 21- function plugin_comment_action() { global $script, $vars, $now, $_title_updated, $_no_name; global $_msg_comment_collided, $_title_comment_collided; if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing'); - if (! isset($vars['msg'])) return array('msg'=>'', 'body'=>''); // Do nothing + if ($post['msg'] == '' || is_cantedit($post['refer'])) + return array('msg'=>'','body'=>''); // Do nothing line 87- function plugin_comment_convert() { global $vars, $digest, $_btn_comment, $_btn_name, $_msg_comment; static $numbers = array(); static $comment_cols = PLUGIN_COMMENT_SIZE_MSG; - if (PKWK_READONLY) return ''; // Show nothing + if (PKWK_READONLY || is_cantedit($vars['page'])) return ''; // Show nothing
template.inc.php,v 1.21 line 8- function plugin_template_action() { global $script, $vars; global $_title_edit; global $_msg_template_start, $_msg_template_end, $_msg_template_page, $_msg_template_refer; global $_btn_template_create, $_title_template; global $_err_template_already, $_err_template_invalid, $_msg_template_force;
if (PKWK_READONLY) die_message('PKWK_READONLY prohibits editing'); - if (! isset($vars['refer']) || ! is_page($vars['refer'])) + if (! isset($vars['refer']) || ! is_page($vars['refer']) || is_cantedit($vars['refer'])) return FALSE;
function is_cantedit($page) { global $cantedit; static $hash; if (! isset($hash)) { foreach($cantedit as $part) { $hash[$part] = TRUE; } } return isset($hash[$page]); }