2 // PukiWiki - Yet another WikiWikiWeb clone.
3 // $Id: rename.inc.php,v 1.18 2004/12/30 10:03:42 henoheno Exp $
11 * http:.../pukiwiki.php?plugin=rename(&refer=¥Ú¡¼¥¸Ì¾)
19 define('PLUGIN_RENAME_LOGPAGE', ':RenameLog');
21 function plugin_rename_action()
25 $method = rename_getvar('method');
26 if ($method == 'regex') {
27 $src = rename_getvar('src');
28 $dst = rename_getvar('dst');
29 if ($src == '') return rename_phase1();
31 $src_pattern = '/' . preg_quote($src, '/') . '/';
32 $arr0 = preg_grep($src_pattern, get_existpages());
33 if (! is_array($arr0) or count($arr0) == 0)
34 return rename_phase1('nomatch');
36 $arr1 = preg_replace($src_pattern, $dst, $arr0);
37 foreach ($arr1 as $page)
38 if (! is_pagename($page))
39 return rename_phase1('notvalid');
41 return rename_regex($arr0, $arr1);
45 $page = rename_getvar('page');
46 $refer = rename_getvar('refer');
48 return rename_phase1();
49 } else if (!is_page($refer)) {
50 return rename_phase1('notpage', $refer);
51 } else if ($refer == $whatsnew) {
52 return rename_phase1('norename', $refer);
53 } else if ($page == '' or $page == $refer) {
54 return rename_phase2();
55 } else if (! is_pagename($page)) {
56 return rename_phase2('notvalid');
58 return rename_refer();
63 function rename_getvar($key)
67 return isset($vars[$key]) ? $vars[$key] : '';
70 // ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òºî¤ë
71 function rename_err($err, $page = '')
73 global $_rename_messages;
75 if ($err == '') return '';
77 $body = $_rename_messages["err_$err"];
78 if (is_array($page)) {
80 foreach ($page as $_page) $tmp .= "<br />$_page";
84 $body = sprintf($body, htmlspecialchars($page));
86 $msg = sprintf($_rename_messages['err'], $body);
90 //Âè°ìÃʳ¬:¥Ú¡¼¥¸Ì¾¤Þ¤¿¤ÏÀµµ¬É½¸½¤ÎÆþÎÏ
91 function rename_phase1($err = '', $page = '')
93 global $script, $_rename_messages;
95 $msg = rename_err($err, $page);
96 $refer = rename_getvar('refer');
97 $method = rename_getvar('method');
99 $radio_regex = $radio_page = '';
100 if ($method == 'regex') {
101 $radio_regex =' checked';
103 $radio_page = ' checked';
105 $select_refer = rename_getselecttag($refer);
107 $s_src = htmlspecialchars(rename_getvar('src'));
108 $s_dst = htmlspecialchars(rename_getvar('dst'));
111 $ret['msg'] = $_rename_messages['msg_title'];
112 $ret['body'] = <<<EOD
114 <form action="$script" method="post">
116 <input type="hidden" name="plugin" value="rename" />
117 <input type="radio" name="method" value="page"$radio_page />
118 {$_rename_messages['msg_page']}:$select_refer<br />
119 <input type="radio" name="method" value="regex"$radio_regex />
120 {$_rename_messages['msg_regex']}:<br />
122 <input type="text" name="src" size="80" value="$s_src" /><br />
124 <input type="text" name="dst" size="80" value="$s_dst" /><br />
125 <input type="submit" value="{$_rename_messages['btn_next']}" /><br />
132 //ÂèÆóÃʳ¬:¿·¤·¤¤Ì¾Á°¤ÎÆþÎÏ
133 function rename_phase2($err = '')
135 global $script, $_rename_messages;
137 $msg = rename_err($err);
138 $page = rename_getvar('page');
139 $refer = rename_getvar('refer');
140 if ($page == '') $page = $refer;
142 $related = rename_getrelated($refer);
144 if (count($related) > 0)
145 $msg_related = $_rename_messages['msg_do_related'].
146 '<input type="checkbox" name="related" value="1" checked="checked" /><br />';
147 $msg_rename = sprintf($_rename_messages['msg_rename'], make_pagelink($refer));
149 $s_page = htmlspecialchars($page);
150 $s_refer = htmlspecialchars($refer);
153 $ret['msg'] = $_rename_messages['msg_title'];
154 $ret['body'] = <<<EOD
156 <form action="$script" method="post">
158 <input type="hidden" name="plugin" value="rename" />
159 <input type="hidden" name="refer" value="$s_refer" />
161 {$_rename_messages['msg_newname']}:<input type="text" name="page" size="80" value="$s_page" /><br />
163 <input type="submit" value="{$_rename_messages['btn_next']}" /><br />
167 if (! empty($related)) {
168 $ret['body'] .= "<hr /><p>{$_rename_messages['msg_related']}</p><ul>";
170 foreach ($related as $name)
171 $ret['body'] .= '<li>' . make_pagelink($name) . '</li>';
172 $ret['body'] .= '</ul>';
177 //¥Ú¡¼¥¸Ì¾¤È´ØÏ¢¤¹¤ë¥Ú¡¼¥¸¤òÎóµó¤·¡¢phase3¤Ø
178 function rename_refer()
180 $page = rename_getvar('page');
181 $refer = rename_getvar('refer');
183 $pages[encode($refer)] = encode($page);
184 if (rename_getvar('related') != '') {
185 $from = strip_bracket($refer);
186 $to = strip_bracket($page);
187 foreach (rename_getrelated($refer) as $_page)
188 $pages[encode($_page)] = encode(str_replace($from, $to, $_page));
190 return rename_phase3($pages);
193 //Àµµ¬É½¸½¤Ç¥Ú¡¼¥¸¤òÃÖ´¹
194 function rename_regex($arr_from, $arr_to)
197 foreach ($arr_to as $page)
201 if (! empty($exists)) {
202 return rename_phase1('already', $exists);
205 foreach ($arr_from as $refer)
206 $pages[encode($refer)] = encode(array_shift($arr_to));
207 return rename_phase3($pages);
211 function rename_phase3($pages)
213 global $script, $_rename_messages;
216 $files = rename_get_files($pages);
219 foreach ($files as $_page=>$arr)
220 foreach ($arr as $old=>$new)
221 if (file_exists($new))
222 $exists[$_page][$old] = $new;
224 $pass = rename_getvar('pass');
225 if ($pass != '' && pkwk_login($pass)) {
226 return rename_proceed($pages, $files, $exists);
227 } else if ($pass != '') {
228 $msg = rename_err('adminpass');
230 $method = rename_getvar('method');
231 if ($method == 'regex') {
232 $s_src = htmlspecialchars(rename_getvar('src'));
233 $s_dst = htmlspecialchars(rename_getvar('dst'));
234 $msg .= $_rename_messages['msg_regex'] . '<br />';
235 $input .= "<input type=\"hidden\" name=\"method\" value=\"regex\" />";
236 $input .= "<input type=\"hidden\" name=\"src\" value=\"$s_src\" />";
237 $input .= "<input type=\"hidden\" name=\"dst\" value=\"$s_dst\" />";
239 $s_refer = htmlspecialchars(rename_getvar('refer'));
240 $s_page = htmlspecialchars(rename_getvar('page'));
241 $s_related = htmlspecialchars(rename_getvar('related'));
242 $msg .= $_rename_messages['msg_page'] . '<br />';
243 $input .= "<input type=\"hidden\" name=\"method\" value=\"page\" />";
244 $input .= "<input type=\"hidden\" name=\"refer\" value=\"$s_refer\" />";
245 $input .= "<input type=\"hidden\" name=\"page\" value=\"$s_page\" />";
246 $input .= "<input type=\"hidden\" name=\"related\" value=\"$s_related\" />";
249 if (! empty($exists)) {
250 $msg .= $_rename_messages['err_already_below'] . '<ul>';
251 foreach ($exists as $page=>$arr) {
253 $msg .= make_pagelink(decode($page));
254 $msg .= $_rename_messages['msg_arrow'];
255 $msg .= htmlspecialchars(decode($pages[$page]));
257 $msg .= '<ul>' . "\n";
258 foreach ($arr as $ofile=>$nfile)
259 $msg .= '<li>' . $ofile . $_rename_messages['msg_arrow'] . $nfile."</li>\n";
264 $msg .= "</ul><hr />\n";
266 $input .= '<input type="radio" name="exist" value="0" checked="checked" />' . $_rename_messages['msg_exist_none'] . '<br />';
267 $input .= '<input type="radio" name="exist" value="1" />' . $_rename_messages['msg_exist_overwrite'] . '<br />';
271 $ret['msg'] = $_rename_messages['msg_title'];
272 $ret['body'] = <<<EOD
274 <form action="$script" method="post">
276 <input type="hidden" name="plugin" value="rename" />
278 {$_rename_messages['msg_adminpass']}
279 <input type="password" name="pass" value="" />
280 <input type="submit" value="{$_rename_messages['btn_submit']}" />
283 <p>{$_rename_messages['msg_confirm']}</p>
287 $ret['body'] .= "<ul>\n";
288 foreach ($pages as $old=>$new)
289 $ret['body'] .= '<li>' . make_pagelink(decode($old)) .
290 $_rename_messages['msg_arrow'] . htmlspecialchars(decode($new)) . "</li>\n";
291 $ret['body'] .= "</ul>\n";
295 function rename_get_files($pages)
298 $dirs = array(BACKUP_DIR, DIFF_DIR, DATA_DIR);
299 if (exist_plugin_convert('attach')) $dirs[] = UPLOAD_DIR;
300 if (exist_plugin_convert('counter')) $dirs[] = COUNTER_DIR;
304 foreach ($dirs as $path) {
305 $dir = opendir($path);
306 if (! $dir) continue;
308 while ($file = readdir($dir)) {
309 if ($file == '.' or $file == '..') continue;
311 foreach ($pages as $from=>$to) {
312 $pattern = '/^' . str_replace('/', '\/', $from) . '([._].+)$/';
313 if (! preg_match($pattern, $file, $matches))
316 $newfile = $to . $matches[1];
317 $files[$from][$path . $file] = $path . $newfile;
324 function rename_proceed($pages, $files, $exists)
326 global $now, $_rename_messages;
328 if (rename_getvar('exist') == '')
329 foreach ($exists as $key=>$arr)
333 foreach ($files as $page=>$arr) {
334 foreach ($arr as $old=>$new) {
335 if ($exists[$page][$old]) unlink($new);
338 // link¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò¹¹¿·¤¹¤ë BugTrack/327 arino
344 $postdata = get_source(PLUGIN_RENAME_LOGPAGE);
345 $postdata[] = '*' . $now . "\n";
346 if (rename_getvar('method') == 'regex') {
347 $postdata[] = '-' . $_rename_messages['msg_regex'] . "\n";
348 $postdata[] = '--From:[[' . rename_getvar('src') . "]]\n";
349 $postdata[] = '--To:[[' . rename_getvar('dst') . "]]\n";
351 $postdata[] = '-' . $_rename_messages['msg_page'] . "\n";
352 $postdata[] = '--From:[[' . rename_getvar('refer') . "]]\n";
353 $postdata[] = '--To:[[' . rename_getvar('page') . "]]\n";
356 if (! empty($exists)) {
357 $postdata[] = "\n" . $_rename_messages['msg_result'] . "\n";
358 foreach ($exists as $page=>$arr) {
359 $postdata[] = '-' . decode($page) .
360 $_rename_messages['msg_arrow'] . decode($pages[$page]) . "\n";
361 foreach ($arr as $ofile=>$nfile)
362 $postdata[] = '--' . $ofile .
363 $_rename_messages['msg_arrow'] . $nfile . "\n";
365 $postdata[] = "----\n";
367 foreach ($pages as $old=>$new)
368 $postdata[] = '-' . decode($old) .
369 $_rename_messages['msg_arrow'] . decode($new) . "\n";
371 // ¹¹¿·¤Î¾×ÆͤϥÁ¥§¥Ã¥¯¤·¤Ê¤¤¡£
373 // ¥Õ¥¡¥¤¥ë¤Î½ñ¤¹þ¤ß
374 page_write(PLUGIN_RENAME_LOGPAGE, join('', $postdata));
377 $page = rename_getvar('page');
378 if ($page == '') $page = PLUGIN_RENAME_LOGPAGE;
381 header('Location: ' . get_script_uri() . '?' . rawurlencode($page));
385 function rename_getrelated($page)
388 $pages = get_existpages();
389 $pattern = '/(?:^|\/)' . preg_quote(strip_bracket($page), '/') . '(?:\/|$)/';
390 foreach ($pages as $name) {
391 if ($name == $page) continue;
392 if (preg_match($pattern, $name))
398 function rename_getselecttag($page)
403 foreach (get_existpages() as $_page) {
404 if ($_page == $whatsnew) continue;
406 $selected = ($_page == $page) ? ' selected' : '';
407 $s_page = htmlspecialchars($_page);
408 $pages[$_page] = "<option value=\"$s_page\"$selected>$s_page</option>";
411 $list = join("\n ", $pages);
414 <select name="refer">
415 <option value=""></option>