OSDN Git Service

BugTrack2/361 Simplify URL. Keep slash / and colon : in page name URL
[pukiwiki/pukiwiki.git] / plugin / rename.inc.php
index b148617..857957a 100644 (file)
@@ -1,6 +1,8 @@
 <?php
 // PukiWiki - Yet another WikiWikiWeb clone
-// $Id: rename.inc.php,v 1.26 2005/02/27 07:10:57 henoheno Exp $
+// $Id: rename.inc.php,v 1.38 2011/01/25 15:01:01 henoheno Exp $
+// Copyright (C) 2002-2005, 2007 PukiWiki Developers Team
+// License: GPL v2 or (at your option) any later version
 //
 // Rename plugin: Rename page-name and related data
 //
@@ -43,10 +45,10 @@ function plugin_rename_action()
                } else if (! is_page($refer)) {
                        return plugin_rename_phase1('notpage', $refer);
 
-               } else if ($refer == $whatsnew) {
+               } else if ($refer === $whatsnew) {
                        return plugin_rename_phase1('norename', $refer);
 
-               } else if ($page == '' || $page == $refer) {
+               } else if ($page == '' || $page === $refer) {
                        return plugin_rename_phase2();
 
                } else if (! is_pagename($page)) {
@@ -58,14 +60,14 @@ function plugin_rename_action()
        }
 }
 
-// ÊÑ¿ô¤ò¼èÆÀ¤¹¤ë
+// 変数を取得する
 function plugin_rename_getvar($key)
 {
        global $vars;
        return isset($vars[$key]) ? $vars[$key] : '';
 }
 
-// ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òºî¤ë
+// エラーメッセージを作る
 function plugin_rename_err($err, $page = '')
 {
        global $_rename_messages;
@@ -78,13 +80,13 @@ function plugin_rename_err($err, $page = '')
                foreach ($page as $_page) $tmp .= '<br />' . $_page;
                $page = $tmp;
        }
-       if ($page != '') $body = sprintf($body, htmlspecialchars($page));
+       if ($page != '') $body = sprintf($body, htmlsc($page));
 
        $msg = sprintf($_rename_messages['err'], $body);
        return $msg;
 }
 
-//Âè°ìÃʳ¬:¥Ú¡¼¥¸Ì¾¤Þ¤¿¤ÏÀµµ¬É½¸½¤ÎÆþÎÏ
+//第一段階:ページ名または正規表現の入力
 function plugin_rename_phase1($err = '', $page = '')
 {
        global $script, $_rename_messages;
@@ -101,8 +103,8 @@ function plugin_rename_phase1($err = '', $page = '')
        }
        $select_refer = plugin_rename_getselecttag($refer);
 
-       $s_src = htmlspecialchars(plugin_rename_getvar('src'));
-       $s_dst = htmlspecialchars(plugin_rename_getvar('dst'));
+       $s_src = htmlsc(plugin_rename_getvar('src'));
+       $s_dst = htmlsc(plugin_rename_getvar('dst'));
 
        $ret = array();
        $ret['msg']  = $_rename_messages['msg_title'];
@@ -115,10 +117,10 @@ $msg
   <label for="_p_rename_page">{$_rename_messages['msg_page']}:</label>$select_refer<br />
   <input type="radio"  name="method" id="_p_rename_regex" value="regex"$radio_regex />
   <label for="_p_rename_regex">{$_rename_messages['msg_regex']}:</label><br />
-  From:<br />
-  <input type="text" name="src" size="80" value="$s_src" /><br />
-  To:<br />
-  <input type="text" name="dst" size="80" value="$s_dst" /><br />
+  <label for="_p_rename_from">From:</label><br />
+  <input type="text" name="src" id="_p_rename_from" size="80" value="$s_src" /><br />
+  <label for="_p_rename_to">To:</label><br />
+  <input type="text" name="dst" id="_p_rename_to"   size="80" value="$s_dst" /><br />
   <input type="submit" value="{$_rename_messages['btn_next']}" /><br />
  </div>
 </form>
@@ -126,7 +128,7 @@ EOD;
        return $ret;
 }
 
-//ÂèÆóÃʳ¬:¿·¤·¤¤Ì¾Á°¤ÎÆþÎÏ
+//第二段階:新しい名前の入力
 function plugin_rename_phase2($err = '')
 {
        global $script, $_rename_messages;
@@ -139,12 +141,12 @@ function plugin_rename_phase2($err = '')
        $msg_related = '';
        $related = plugin_rename_getrelated($refer);
        if (! empty($related))
-               $msg_related = $_rename_messages['msg_do_related'] .
-                       '<input type="checkbox" name="related" value="1" checked="checked" /><br />';
+               $msg_related = '<label for="_p_rename_related">' . $_rename_messages['msg_do_related'] . '</label>' .
+               '<input type="checkbox" name="related" id="_p_rename_related" value="1" checked="checked" /><br />';
 
        $msg_rename = sprintf($_rename_messages['msg_rename'], make_pagelink($refer));
-       $s_page  = htmlspecialchars($page);
-       $s_refer = htmlspecialchars($refer);
+       $s_page  = htmlsc($page);
+       $s_refer = htmlsc($refer);
 
        $ret = array();
        $ret['msg']  = $_rename_messages['msg_title'];
@@ -155,7 +157,8 @@ $msg
   <input type="hidden" name="plugin" value="rename" />
   <input type="hidden" name="refer"  value="$s_refer" />
   $msg_rename<br />
-  {$_rename_messages['msg_newname']}:<input type="text" name="page" size="80" value="$s_page" /><br />
+  <label for="_p_rename_newname">{$_rename_messages['msg_newname']}:</label>
+  <input type="text" name="page" id="_p_rename_newname" size="80" value="$s_page" /><br />
   $msg_related
   <input type="submit" value="{$_rename_messages['btn_next']}" /><br />
  </div>
@@ -163,7 +166,7 @@ $msg
 EOD;
        if (! empty($related)) {
                $ret['body'] .= '<hr /><p>' . $_rename_messages['msg_related'] . '</p><ul>';
-               sort($related);
+               sort($related, SORT_STRING);
                foreach ($related as $name)
                        $ret['body'] .= '<li>' . make_pagelink($name) . '</li>';
                $ret['body'] .= '</ul>';
@@ -171,7 +174,7 @@ EOD;
        return $ret;
 }
 
-//¥Ú¡¼¥¸Ì¾¤È´ØÏ¢¤¹¤ë¥Ú¡¼¥¸¤òÎóµó¤·¡¢phase3¤Ø
+//ページ名と関連するページを列挙し、phase3へ
 function plugin_rename_refer()
 {
        $page  = plugin_rename_getvar('page');
@@ -187,7 +190,7 @@ function plugin_rename_refer()
        return plugin_rename_phase3($pages);
 }
 
-//Àµµ¬É½¸½¤Ç¥Ú¡¼¥¸¤òÃÖ´¹
+//正規表現でページを置換
 function plugin_rename_regex($arr_from, $arr_to)
 {
        $exists = array();
@@ -227,16 +230,16 @@ function plugin_rename_phase3($pages)
 
        $method = plugin_rename_getvar('method');
        if ($method == 'regex') {
-               $s_src = htmlspecialchars(plugin_rename_getvar('src'));
-               $s_dst = htmlspecialchars(plugin_rename_getvar('dst'));
+               $s_src = htmlsc(plugin_rename_getvar('src'));
+               $s_dst = htmlsc(plugin_rename_getvar('dst'));
                $msg   .= $_rename_messages['msg_regex'] . '<br />';
                $input .= '<input type="hidden" name="method" value="regex" />';
                $input .= '<input type="hidden" name="src"    value="' . $s_src . '" />';
                $input .= '<input type="hidden" name="dst"    value="' . $s_dst . '" />';
        } else {
-               $s_refer   = htmlspecialchars(plugin_rename_getvar('refer'));
-               $s_page    = htmlspecialchars(plugin_rename_getvar('page'));
-               $s_related = htmlspecialchars(plugin_rename_getvar('related'));
+               $s_refer   = htmlsc(plugin_rename_getvar('refer'));
+               $s_page    = htmlsc(plugin_rename_getvar('page'));
+               $s_related = htmlsc(plugin_rename_getvar('related'));
                $msg   .= $_rename_messages['msg_page'] . '<br />';
                $input .= '<input type="hidden" name="method"  value="page" />';
                $input .= '<input type="hidden" name="refer"   value="' . $s_refer   . '" />';
@@ -249,7 +252,7 @@ function plugin_rename_phase3($pages)
                foreach ($exists as $page=>$arr) {
                        $msg .= '<li>' . make_pagelink(decode($page));
                        $msg .= $_rename_messages['msg_arrow'];
-                       $msg .= htmlspecialchars(decode($pages[$page]));
+                       $msg .= htmlsc(decode($pages[$page]));
                        if (! empty($arr)) {
                                $msg .= '<ul>' . "\n";
                                foreach ($arr as $ofile=>$nfile)
@@ -275,20 +278,20 @@ function plugin_rename_phase3($pages)
  <div>
   <input type="hidden" name="plugin" value="rename" />
   $input
-  {$_rename_messages['msg_adminpass']}
-  <input type="password" name="pass" value="" />
+  <label for="_p_rename_adminpass">{$_rename_messages['msg_adminpass']}</label>
+  <input type="password" name="pass" id="_p_rename_adminpass" value="" />
   <input type="submit" value="{$_rename_messages['btn_submit']}" />
  </div>
 </form>
 <p>{$_rename_messages['msg_confirm']}</p>
 EOD;
 
-       ksort($pages);
+       ksort($pages, SORT_STRING);
        $ret['body'] .= '<ul>' . "\n";
        foreach ($pages as $old=>$new)
                $ret['body'] .= '<li>' .  make_pagelink(decode($old)) .
                        $_rename_messages['msg_arrow'] .
-                       htmlspecialchars(decode($new)) .  '</li>' . "\n";
+                       htmlsc(decode($new)) .  '</li>' . "\n";
        $ret['body'] .= '</ul>' . "\n";
        return $ret;
 }
@@ -304,21 +307,20 @@ function plugin_rename_get_files($pages)
        $matches = array();
        foreach ($dirs as $path) {
                $dir = opendir($path);
-               if (! $dir) continue;
-
-               while ($file = readdir($dir)) {
+               if (! $dir) continue;   // TODO: !== FALSE or die()?
+               while (($file = readdir($dir)) !== FALSE) {
                        if ($file == '.' || $file == '..') continue;
-
-                       foreach ($pages as $from=>$to) {
+                       foreach ($pages as $from => $to) {
+                               // TODO: preg_quote()?
                                $pattern = '/^' . str_replace('/', '\/', $from) . '([._].+)$/';
-                               if (! preg_match($pattern, $file, $matches))
-                                       continue;
-
-                               $newfile = $to . $matches[1];
-                               $files[$from][$path . $file] = $path . $newfile;
+                               if (preg_match($pattern, $file, $matches)) {
+                                       $newfile = $to . $matches[1];
+                                       $files[$from][$path . $file] = $path . $newfile;
+                               }
                        }
                }
        }
+
        return $files;
 }
 
@@ -337,7 +339,7 @@ function plugin_rename_proceed($pages, $files, $exists)
                                unlink($new);
                        rename($old, $new);
 
-                       // link¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò¹¹¿·¤¹¤ë BugTrack/327 arino
+                       // linkデータベースを更新する BugTrack/327 arino
                        links_update($old);
                        links_update($new);
                }
@@ -371,17 +373,17 @@ function plugin_rename_proceed($pages, $files, $exists)
                $postdata[] = '-' . decode($old) .
                        $_rename_messages['msg_arrow'] . decode($new) . "\n";
 
-       // ¹¹¿·¤Î¾×ÆͤϥÁ¥§¥Ã¥¯¤·¤Ê¤¤¡£
+       // 更新の衝突はチェックしない。
 
-       // ¥Õ¥¡¥¤¥ë¤Î½ñ¤­¹þ¤ß
+       // ファイルの書き込み
        page_write(PLUGIN_RENAME_LOGPAGE, join('', $postdata));
 
-       //¥ê¥À¥¤¥ì¥¯¥È
+       //リダイレクト
        $page = plugin_rename_getvar('page');
        if ($page == '') $page = PLUGIN_RENAME_LOGPAGE;
 
        pkwk_headers_sent();
-       header('Location: ' . get_script_uri() . '?' . rawurlencode($page));
+       header('Location: ' . get_script_uri() . '?' . pagename_urlencode($page));
        exit;
 }
 
@@ -391,7 +393,7 @@ function plugin_rename_getrelated($page)
        $pages = get_existpages();
        $pattern = '/(?:^|\/)' . preg_quote(strip_bracket($page), '/') . '(?:\/|$)/';
        foreach ($pages as $name) {
-               if ($name == $page) continue;
+               if ($name === $page) continue;
                if (preg_match($pattern, $name)) $related[] = $name;
        }
        return $related;
@@ -403,14 +405,14 @@ function plugin_rename_getselecttag($page)
 
        $pages = array();
        foreach (get_existpages() as $_page) {
-               if ($_page == $whatsnew) continue;
+               if ($_page === $whatsnew) continue;
 
-               $selected = ($_page == $page) ? ' selected' : '';
-               $s_page = htmlspecialchars($_page);
+               $selected = ($_page === $page) ? ' selected' : '';
+               $s_page = htmlsc($_page);
                $pages[$_page] = '<option value="' . $s_page . '"' . $selected . '>' .
                        $s_page . '</option>';
        }
-       ksort($pages);
+       ksort($pages, SORT_STRING);
        $list = join("\n" . ' ', $pages);
 
        return <<<EOD
@@ -421,4 +423,4 @@ function plugin_rename_getselecttag($page)
 EOD;
 
 }
-?>
+