OSDN Git Service

Cleanup, shrink, check do_plugin_init() return value
authorhenoheno <henoheno>
Mon, 9 Aug 2004 13:57:41 +0000 (22:57 +0900)
committerhenoheno <henoheno>
Mon, 9 Aug 2004 13:57:41 +0000 (22:57 +0900)
lib/plugin.php

index efbd955..6e994a6 100644 (file)
@@ -2,34 +2,28 @@
 /////////////////////////////////////////////////
 // PukiWiki - Yet another WikiWikiWeb clone.
 //
-// $Id: plugin.php,v 1.1 2004/08/01 01:54:35 henoheno Exp $
+// $Id: plugin.php,v 1.2 2004/08/09 13:57:41 henoheno Exp $
 //
 
-// ¥×¥é¥°¥¤¥óÍѤË̤ÄêµÁ¤ÎÊÑ¿ô¤òÀßÄê
+// ¥×¥é¥°¥¤¥óÍѤË̤ÄêµÁ¤Î¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤òÀßÄê
 function set_plugin_messages($messages)
 {
-       foreach ($messages as $name=>$val)
-       {
-               global $$name;
-
-               if (!isset($$name))
-               {
-                       $$name = $val;
-               }
+       foreach ($messages as $name=>$val) {
+               if (! isset($GLOBALS[$name])) $GLOBALS[$name] = $val;
        }
 }
 
 //¥×¥é¥°¥¤¥ó¤¬Â¸ºß¤¹¤ë¤«
 function exist_plugin($name)
 {
-       $name = strtolower($name);      //Ryuji_edit(2003-03-18) add Âçʸ»ú¤È¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥àÂкö
-       if (preg_match('/^\w{1,64}$/', $name)
-               and file_exists(PLUGIN_DIR . $name . '.inc.php'))
-       {
+       $name = strtolower($name);      // Âçʸ»ú¤È¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥àÂкö
+       if (preg_match('/^\w{1,64}$/', $name) &&
+           file_exists(PLUGIN_DIR . $name . '.inc.php')) {
                require_once(PLUGIN_DIR . $name . '.inc.php');
                return TRUE;
+       } else {
+               return FALSE;
        }
-       return FALSE;
 }
 
 //¥×¥é¥°¥¤¥ó´Ø¿ô(action)¤¬Â¸ºß¤¹¤ë¤«
@@ -53,84 +47,88 @@ function exist_plugin_inline($name) {
 //¥×¥é¥°¥¤¥ó¤Î½é´ü²½¤ò¼Â¹Ô
 function do_plugin_init($name)
 {
-       static $check = array();
-
-       if (array_key_exists($name,$check))
-       {
-               return $check[$name];
-       }
-
-       $func = 'plugin_'.$name.'_init';
-       if ($check[$name] = function_exists($func))
-       {
-               @call_user_func($func);
-               return TRUE;
+       static $checked = array();
+
+       if (! isset($checked[$name])) {
+               $func = 'plugin_' . $name . '_init';
+               if (function_exists($func)) {
+                       // TRUE or FALSE or NULL (return nothing)
+                       $checked[$name] = call_user_func($func);
+               } else {
+                       // Not exists
+                       $checked[$name] = null;
+               }
        }
-       return FALSE;
+       return $checked[$name];
 }
 
 //¥×¥é¥°¥¤¥ó(action)¤ò¼Â¹Ô
 function do_plugin_action($name)
 {
-       if (!exist_plugin_action($name))
-       {
-               return array();
-       }
+       if (! exist_plugin_action($name)) return array();
 
-       do_plugin_init($name);
-       $retvar = call_user_func('plugin_'.$name.'_action');
+       if(do_plugin_init($name) === FALSE)
+               die_message("Plugin init failed: $name");
 
-       // Ê¸»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¸¡½ÐÍÑ hidden ¥Õ¥£¡¼¥ë¥É¤òÁÞÆþ¤¹¤ë
-       return preg_replace('/(<form[^>]*>)/',"$1\n<div><input type=\"hidden\" name=\"encode_hint\" value=\"¤×\" /></div>",$retvar);
+       $retvar = call_user_func('plugin_' . $name . '_action');
+
+       // Ê¸»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¸¡½ÐÍÑ hidden ¥Õ¥£¡¼¥ë¥É¤òÁÞÆþ
+       return preg_replace('/(<form[^>]*>)/',
+               "$1\n" . '<div><input type="hidden" name="encode_hint" value="¤×" /></div>',
+               $retvar);
 }
 
 //¥×¥é¥°¥¤¥ó(convert)¤ò¼Â¹Ô
-function do_plugin_convert($name,$args='')
+function do_plugin_convert($name, $args = '')
 {
        global $digest;
 
-       // digest¤òÂàÈò
-       $_digest = $digest;
-
-       $aryargs = ($args !== '') ? csv_explode(',', $args) : array();
-
-       do_plugin_init($name);
-       $retvar = call_user_func_array('plugin_'.$name.'_convert',$aryargs);
-
-       // digest¤òÉü¸µ
-       $digest = $_digest;
+       if(do_plugin_init($name) === FALSE)
+               die_message("Plugin init failed: $name");
 
-       if ($retvar === FALSE)
-       {
-               return htmlspecialchars('#'.$name.($args ? "($args)" : ''));
+       if ($args !== '') {
+               $aryargs = csv_explode(',', $args);
+       } else {
+               $aryargs = array();
        }
 
-       // Ê¸»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¸¡½ÐÍÑ hidden ¥Õ¥£¡¼¥ë¥É¤òÁÞÆþ¤¹¤ë
-       return preg_replace('/(<form[^>]*>)/',"$1\n<div><input type=\"hidden\" name=\"encode_hint\" value=\"¤×\" /></div>",$retvar);
+       $_digest = $digest;  // ÂàÈò
+       $retvar  = call_user_func_array('plugin_' . $name . '_convert', $aryargs);
+       $digest  = $_digest; // Éü¸µ
+
+       if ($retvar === FALSE) {
+               return htmlspecialchars('#' . $name . ($args ? "($args)" : ''));
+       } else {
+               // Ê¸»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¸¡½ÐÍÑ hidden ¥Õ¥£¡¼¥ë¥É¤òÁÞÆþ
+               return preg_replace('/(<form[^>]*>)/',
+                       "$1\n" . '<div><input type="hidden" name="encode_hint" value="¤×" /></div>',
+                       $retvar);
+       }
 }
 
 //¥×¥é¥°¥¤¥ó(inline)¤ò¼Â¹Ô
-function do_plugin_inline($name,$args,$body)
+function do_plugin_inline($name, $args, & $body)
 {
        global $digest;
 
-       // digest¤òÂàÈò
-       $_digest = $digest;
-
-       $aryargs = ($args !== '') ? csv_explode(',',$args) : array();
-       $aryargs[] =& $body;
+       if(do_plugin_init($name) === FALSE)
+               die_message("Plugin init failed: $name");
 
-       do_plugin_init($name);
-       $retvar = call_user_func_array('plugin_'.$name.'_inline',$aryargs);
+       if ($args !== '') {
+               $aryargs = csv_explode(',', $args);
+       } else {
+               $aryargs = array();
+       }
+       $aryargs[] = & $body; // Added reference of $body
 
-       // digest¤òÉü¸µ
-       $digest = $_digest;
+       $_digest = $digest;  // ÂàÈò
+       $retvar  = call_user_func_array('plugin_' . $name . '_inline', $aryargs);
+       $digest  = $_digest; // Éü¸µ
 
-       if($retvar === FALSE)
-       {
+       if($retvar === FALSE) {
                return htmlspecialchars("&${name}" . ($args ? "($args)" : '') . ';');
+       } else {
+               return $retvar;
        }
-
-       return $retvar;
 }
 ?>