2 /////////////////////////////////////////////////
3 // PukiWiki - Yet another WikiWikiWeb clone.
5 // $Id: plugin.php,v 1.5 2004/11/04 12:11:18 henoheno Exp $
8 // ¥×¥é¥°¥¤¥óÍѤË̤ÄêµÁ¤Î¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤òÀßÄê
9 function set_plugin_messages($messages)
11 foreach ($messages as $name=>$val) {
12 if (! isset($GLOBALS[$name])) $GLOBALS[$name] = $val;
16 //¥×¥é¥°¥¤¥ó¤¬Â¸ºß¤¹¤ë¤«
17 function exist_plugin($name)
19 static $exists = array();
21 $name = strtolower($name); // Âçʸ»ú¤È¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥àÂкö
22 if(isset($exists[$name])) return $exists[$name];
24 if (preg_match('/^\w{1,64}$/', $name) &&
25 file_exists(PLUGIN_DIR . $name . '.inc.php')) {
26 $exists[$name] = TRUE;
27 require_once(PLUGIN_DIR . $name . '.inc.php');
30 $exists[$name] = FALSE;
35 //¥×¥é¥°¥¤¥ó´Ø¿ô(action)¤¬Â¸ºß¤¹¤ë¤«
36 function exist_plugin_action($name) {
37 return function_exists('plugin_' . $name . '_action') ? TRUE : exist_plugin($name) ?
38 function_exists('plugin_' . $name . '_action') : FALSE;
41 //¥×¥é¥°¥¤¥ó´Ø¿ô(convert)¤¬Â¸ºß¤¹¤ë¤«
42 function exist_plugin_convert($name) {
43 return function_exists('plugin_' . $name . '_convert') ? TRUE : exist_plugin($name) ?
44 function_exists('plugin_' . $name . '_convert') : FALSE;
47 //¥×¥é¥°¥¤¥ó´Ø¿ô(inline)¤¬Â¸ºß¤¹¤ë¤«
48 function exist_plugin_inline($name) {
49 return function_exists('plugin_' . $name . '_inline') ? TRUE : exist_plugin($name) ?
50 function_exists('plugin_' . $name . '_inline') : FALSE;
53 //¥×¥é¥°¥¤¥ó¤Î½é´ü²½¤ò¼Â¹Ô
54 function do_plugin_init($name)
56 static $checked = array();
58 if (! isset($checked[$name])) {
59 $func = 'plugin_' . $name . '_init';
60 if (function_exists($func)) {
61 // TRUE or FALSE or NULL (return nothing)
62 $checked[$name] = call_user_func($func);
65 $checked[$name] = null;
68 return $checked[$name];
71 //¥×¥é¥°¥¤¥ó(action)¤ò¼Â¹Ô
72 function do_plugin_action($name)
74 if (! exist_plugin_action($name)) return array();
76 if(do_plugin_init($name) === FALSE)
77 die_message("Plugin init failed: $name");
79 $retvar = call_user_func('plugin_' . $name . '_action');
81 // Insert a hidden field, supports idenrtifying text enconding
82 if (PKWK_ENCODING_HINT != '')
83 $retvar = preg_replace('/(<form[^>]*>)/', "$1\n" .
84 '<div><input type="hidden" name="encode_hint" value="' . PKWK_ENCODING_HINT . '" /></div>',
90 //¥×¥é¥°¥¤¥ó(convert)¤ò¼Â¹Ô
91 function do_plugin_convert($name, $args = '')
95 if(do_plugin_init($name) === FALSE)
96 return "[Plugin init failed: $name]";
99 $aryargs = csv_explode(',', $args);
104 $_digest = $digest; // ÂàÈò
105 $retvar = call_user_func_array('plugin_' . $name . '_convert', $aryargs);
106 $digest = $_digest; // Éü¸µ
108 if ($retvar === FALSE) {
109 $retvar = htmlspecialchars('#' . $name . ($args != '' ? "($args)" : ''));
110 } else if (PKWK_ENCODING_HINT != '') {
111 // Insert a hidden field, supports idenrtifying text enconding
112 $retvar = preg_replace('/(<form[^>]*>)/', "$1\n" .
113 '<div><input type="hidden" name="encode_hint" value="' . PKWK_ENCODING_HINT . '" /></div>',
121 //¥×¥é¥°¥¤¥ó(inline)¤ò¼Â¹Ô
122 function do_plugin_inline($name, $args, & $body)
126 if(do_plugin_init($name) === FALSE)
127 return "[Plugin init failed: $name]";
130 $aryargs = csv_explode(',', $args);
134 $aryargs[] = & $body; // Added reference of $body
136 $_digest = $digest; // ÂàÈò
137 $retvar = call_user_func_array('plugin_' . $name . '_inline', $aryargs);
138 $digest = $_digest; // Éü¸µ
140 if($retvar === FALSE) {
141 return htmlspecialchars("&${name}" . ($args ? "($args)" : '') . ';');