OSDN Git Service

86af8aff893a4c112813323ca25976dc38a56a66
[pukiwiki/pukiwiki.git] / plugin.php
1 <?php
2 /////////////////////////////////////////////////
3 // PukiWiki - Yet another WikiWikiWeb clone.
4 //
5 // $Id: plugin.php,v 1.8 2003/07/27 13:51:36 arino Exp $
6 //
7
8 // ¥×¥é¥°¥¤¥óÍѤË̤ÄêµÁ¤ÎÊÑ¿ô¤òÀßÄê
9 function set_plugin_messages($messages)
10 {
11         foreach ($messages as $name=>$val)
12         {
13                 global $$name;
14                 
15                 if (!isset($$name))
16                 {
17                         $$name = $val;
18                 }
19         }
20 }
21
22 //¥×¥é¥°¥¤¥ó¤¬Â¸ºß¤¹¤ë¤«
23 function exist_plugin($name)
24 {
25         $name = strtolower($name);      //Ryuji_edit(2003-03-18) add Âçʸ»ú¤È¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥àÂкö
26         if (preg_match('/^\w{1,64}$/',$name)
27                 and file_exists(PLUGIN_DIR.$name.'.inc.php'))
28         {
29                 require_once(PLUGIN_DIR.$name.'.inc.php');
30                 return TRUE;
31         }
32         return FALSE;
33 }
34
35 //¥×¥é¥°¥¤¥ó(action)¤¬Â¸ºß¤¹¤ë¤«
36 function exist_plugin_action($name)
37 {
38         if (!exist_plugin($name))
39         {
40                 return FALSE;
41         }
42         return function_exists('plugin_'.$name.'_action');
43 }
44
45 //¥×¥é¥°¥¤¥ó(convert)¤¬Â¸ºß¤¹¤ë¤«
46 function exist_plugin_convert($name)
47 {
48         if (!exist_plugin($name))
49         {
50                 return FALSE;
51         }
52         return function_exists('plugin_'.$name.'_convert');
53 }
54
55 //¥×¥é¥°¥¤¥ó(inline)¤¬Â¸ºß¤¹¤ë¤«
56 function exist_plugin_inline($name)
57 {
58         if (!exist_plugin($name))
59         {
60                 return FALSE;
61         }
62         return function_exists('plugin_'.$name.'_inline');
63 }
64
65 //¥×¥é¥°¥¤¥ó¤Î½é´ü²½¤ò¼Â¹Ô
66 function do_plugin_init($name)
67 {
68         static $check = array();
69         
70         if (array_key_exists($name,$check))
71         {
72                 return $check[$name];
73         }
74         
75         $func = 'plugin_'.$name.'_init';
76         if ($check[$name] = function_exists($func))
77         {
78                 @call_user_func($func);
79                 return TRUE;
80         }
81         return FALSE;
82 }
83
84 //¥×¥é¥°¥¤¥ó(action)¤ò¼Â¹Ô
85 function do_plugin_action($name)
86 {
87         if (!exist_plugin_action($name))
88         {
89                 return array();
90         }
91         
92         do_plugin_init($name);
93         $retvar = call_user_func('plugin_'.$name.'_action');
94         
95         // Ê¸»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¸¡½ÐÍÑ hidden ¥Õ¥£¡¼¥ë¥É¤òÁÞÆþ¤¹¤ë
96         return preg_replace('/(<form[^>]*>)/',"$1\n<div><input type=\"hidden\" name=\"encode_hint\" value=\"¤×\" /></div>",$retvar);
97 }
98
99 //¥×¥é¥°¥¤¥ó(convert)¤ò¼Â¹Ô
100 function do_plugin_convert($name,$args='')
101 {
102         $aryargs = ($args !== '') ? explode(',',$args) : array();
103
104         do_plugin_init($name);
105         $retvar = call_user_func_array('plugin_'.$name.'_convert',$aryargs);
106         
107         if ($retvar === FALSE)
108         {
109                 return htmlspecialchars('#'.$name.($args ? "($args)" : ''));
110         }
111         
112         // Ê¸»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¸¡½ÐÍÑ hidden ¥Õ¥£¡¼¥ë¥É¤òÁÞÆþ¤¹¤ë
113         return preg_replace('/(<form[^>]*>)/',"$1\n<div><input type=\"hidden\" name=\"encode_hint\" value=\"¤×\" /></div>",$retvar);
114 }
115
116 //¥×¥é¥°¥¤¥ó(inline)¤ò¼Â¹Ô
117 function do_plugin_inline($name,$args,$body)
118 {
119         $aryargs = ($args !== '') ? explode(',',$args) : array();
120         $aryargs[] =& $body;
121
122         do_plugin_init($name);
123         $retvar = call_user_func_array('plugin_'.$name.'_inline',$aryargs);
124         
125         if($retvar === FALSE)
126         {
127                 return htmlspecialchars("&${name}" . ($args ? "($args)" : '') . ';');
128         }
129         
130         return $retvar;
131 }
132 ?>