OSDN Git Service

BugTrack2/122: tempnam() fails when open_basedir is specified in php.ini
[pukiwiki/pukiwiki.git] / plugin / back.inc.php
index 1ca4279..9bd8fd4 100644 (file)
@@ -1,57 +1,73 @@
 <?php
-// $Id: back.inc.php,v 1.2 2003/02/28 02:40:52 panda Exp $
-/*
- * PukiWiki back ¥×¥é¥°¥¤¥ó
- * (C) 2002, Katsumi Saito <katsumi@jo1upk.ymt.prug.or.jp>
- *
- * [»ÈÍÑÎã]
- * #back(,,0)
- * #back(,left)
- * #back(,right,0)
- * #back(Ìá¤ë,center,0,http://localhost)
- *
- * [°ú¿ô]
- * 1 - Ê¸¸À                  ¾Êά»þ:Ìá¤ë
- * 2 - left, center, right   ¾Êά»þ:center
- * 3 - <hr> ¥¿¥°¤Î̵ͭ       ¾Êά»þ:½ÐÎÏ
- * 4 - Ä̾ï¤Ï¡¢Ìá¤ë¤Ê¤ï¤±¤Ê¤ó¤Ç¤¹¤¬¡¢¤É¤¦¤·¤Æ¤â¤Î¾ì¹ç¤ÎÈô¤ÓÀè¤ò»ØÄê²Äǽ
- */
+// $Id: back.inc.php,v 1.9 2005/06/20 14:57:34 henoheno Exp $
+// Copyright (C)
+//   2003-2004 PukiWiki Developers Team
+//   2002      Katsumi Saito <katsumi@jo1upk.ymt.prug.or.jp>
+//
+// back plugin
 
+// Allow specifying back link by page name and anchor, or
+// by relative or site-abusolute path
+define('PLUGIN_BACK_ALLOW_PAGELINK', PKWK_SAFE_MODE); // FALSE(Compat), TRUE
+
+// Allow JavaScript (Compat)
+define('PLUGIN_BACK_ALLOW_JAVASCRIPT', TRUE); // TRUE(Compat), FALSE, PKWK_ALLOW_JAVASCRIPT
+
+// ----
+define('PLUGIN_BACK_USAGE', '#back([text],[center|left|right][,0(no hr)[,Page-or-URI-to-back]])');
 function plugin_back_convert()
 {
-       $argv = func_get_args();
-
-       // ½é´üÃÍÀßÄê
-       $word  = 'Ìá¤ë';
-       $align = 'center';
-       $hr    = 1;
-       $href  = 'javascript:history.go(-1)';
-       $ret   = '';
-
-       // ¥Ñ¥é¥á¡¼¥¿¤ÎȽÃÇ
-       if (func_num_args() > 0) {
-               $word = htmlspecialchars(trim(strip_tags($argv[0])));
-               if ($word == '') $word = 'Ìá¤ë';
-       }
-       if (func_num_args() > 1) {
-               $align = htmlspecialchars(trim(strip_tags($argv[1])));
-               if ($align == '') $align = 'center';
-       }
-       if (func_num_args() > 2) {
-               $hr = trim(strip_tags($argv[2]));
-       }
-       if (func_num_args() > 3) {
-               $href = rawurlencode(trim(strip_tags($argv[3])));
-               if ($href == '') $href = 'javascript:history.go(-1)';
-       }
+       global $_msg_back_word, $script;
 
-       // <hr> ¥¿¥°¤ò½ÐÎϤ¹¤ë¤«¤É¤¦¤«
-       if ($hr) {
-               $ret = "<hr class=\"full_hr\" />\n";
+       if (func_num_args() > 4) return PLUGIN_BACK_USAGE;
+       list($word, $align, $hr, $href) = array_pad(func_get_args(), 4, '');
+
+       $word = trim($word);
+       $word = ($word == '') ? $_msg_back_word : htmlspecialchars($word);
+
+       $align = strtolower(trim($align));
+       switch($align){
+       case ''      : $align = 'center';
+                      /*FALLTHROUGH*/
+       case 'center': /*FALLTHROUGH*/
+       case 'left'  : /*FALLTHROUGH*/
+       case 'right' : break;
+       default      : return PLUGIN_BACK_USAGE;
        }
 
-       $ret.= "<div style=\"text-align:$align\">[ <a href=\"$href\">$word</a> ]</div>\n";
+       $hr = (trim($hr) != '0') ? '<hr class="full_hr" />' . "\n" : '';
 
-       return $ret;
+       $link = TRUE;
+       $href = trim($href);
+       if ($href != '') {
+               if (PLUGIN_BACK_ALLOW_PAGELINK) {
+                       if (is_url($href)) {
+                               $href = rawurlencode($href);
+                       } else {
+                               $array = anchor_explode($href);
+                               $array[0] = rawurlencode($array[0]);
+                               $array[1] = ($array[1] != '') ? '#' . rawurlencode($array[1]) : '';
+                               $href = $script . '?' . $array[0] .  $array[1];
+                               $link = is_page($array[0]);
+                       }
+               } else {
+                       $href = rawurlencode($href);
+               }
+       } else {
+               if (! PLUGIN_BACK_ALLOW_JAVASCRIPT)
+                       return PLUGIN_BACK_USAGE . ': Set a page name or an URI';
+               $href  = 'javascript:history.go(-1)';
+       }
+
+       if($link){
+               // Normal link
+               return $hr . '<div style="text-align:' . $align . '">' .
+                       '[ <a href="' . $href . '">' . $word . '</a> ]</div>' . "\n";
+       } else {
+               // Dangling link
+               return $hr . '<div style="text-align:' . $align . '">' .
+                       '[ <span class="noexists">' . $word . '<a href="' . $href .
+                       '">?</a></span> ]</div>' . "\n";
+       }
 }
 ?>