オープンソース・ソフトウェアの開発とダウンロード

CVS リポジトリの参照

Diff of /pukiwiki/pukiwiki/lib/plugin.php

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.1 by henoheno, Sun Aug 1 01:54:35 2004 UTC revision 1.2 by henoheno, Mon Aug 9 13:57:41 2004 UTC
# Line 5  Line 5 
5  // $Id$  // $Id$
6  //  //
7    
8  // プラグイン用に未定義の変数を設定  // プラグイン用に未定義のグローバル変数を設定
9  function set_plugin_messages($messages)  function set_plugin_messages($messages)
10  {  {
11          foreach ($messages as $name=>$val)          foreach ($messages as $name=>$val) {
12          {                  if (! isset($GLOBALS[$name])) $GLOBALS[$name] = $val;
                 global $$name;  
   
                 if (!isset($$name))  
                 {  
                         $$name = $val;  
                 }  
13          }          }
14  }  }
15    
16  //プラグインが存在するか  //プラグインが存在するか
17  function exist_plugin($name)  function exist_plugin($name)
18  {  {
19          $name = strtolower($name);      //Ryuji_edit(2003-03-18) add 大文字と小文字を区別しないファイルシステム対策          $name = strtolower($name);      // 大文字と小文字を区別しないファイルシステム対策
20          if (preg_match('/^\w{1,64}$/', $name)          if (preg_match('/^\w{1,64}$/', $name) &&
21                  and file_exists(PLUGIN_DIR . $name . '.inc.php'))              file_exists(PLUGIN_DIR . $name . '.inc.php')) {
         {  
22                  require_once(PLUGIN_DIR . $name . '.inc.php');                  require_once(PLUGIN_DIR . $name . '.inc.php');
23                  return TRUE;                  return TRUE;
24            } else {
25                    return FALSE;
26          }          }
         return FALSE;  
27  }  }
28    
29  //プラグイン関数(action)が存在するか  //プラグイン関数(action)が存在するか
# Line 53  function exist_plugin_inline($name) { Line 47  function exist_plugin_inline($name) {
47  //プラグインの初期化を実行  //プラグインの初期化を実行
48  function do_plugin_init($name)  function do_plugin_init($name)
49  {  {
50          static $check = array();          static $checked = array();
   
         if (array_key_exists($name,$check))  
         {  
                 return $check[$name];  
         }  
51    
52          $func = 'plugin_'.$name.'_init';          if (! isset($checked[$name])) {
53          if ($check[$name] = function_exists($func))                  $func = 'plugin_' . $name . '_init';
54          {                  if (function_exists($func)) {
55                  @call_user_func($func);                          // TRUE or FALSE or NULL (return nothing)
56                  return TRUE;                          $checked[$name] = call_user_func($func);
57                    } else {
58                            // Not exists
59                            $checked[$name] = null;
60                    }
61          }          }
62          return FALSE;          return $checked[$name];
63  }  }
64    
65  //プラグイン(action)を実行  //プラグイン(action)を実行
66  function do_plugin_action($name)  function do_plugin_action($name)
67  {  {
68          if (!exist_plugin_action($name))          if (! exist_plugin_action($name)) return array();
69          {  
70                  return array();          if(do_plugin_init($name) === FALSE)
71          }                  die_message("Plugin init failed: $name");
72    
73          do_plugin_init($name);          $retvar = call_user_func('plugin_' . $name . '_action');
         $retvar = call_user_func('plugin_'.$name.'_action');  
74    
75          // 文字エンコーディング検出用 hidden フィールドを挿入する          // 文字エンコーディング検出用 hidden フィールドを挿入
76          return preg_replace('/(<form[^>]*>)/',"$1\n<div><input type=\"hidden\" name=\"encode_hint\" value=\"ぷ\" /></div>",$retvar);          return preg_replace('/(<form[^>]*>)/',
77                    "$1\n" . '<div><input type="hidden" name="encode_hint" value="ぷ" /></div>',
78                    $retvar);
79  }  }
80    
81  //プラグイン(convert)を実行  //プラグイン(convert)を実行
82  function do_plugin_convert($name,$args='')  function do_plugin_convert($name, $args = '')
83  {  {
84          global $digest;          global $digest;
85    
86          // digestを退避          if(do_plugin_init($name) === FALSE)
87          $_digest = $digest;                  die_message("Plugin init failed: $name");
88    
89          $aryargs = ($args !== '') ? csv_explode(',', $args) : array();          if ($args !== '') {
90                    $aryargs = csv_explode(',', $args);
91          do_plugin_init($name);          } else {
92          $retvar = call_user_func_array('plugin_'.$name.'_convert',$aryargs);                  $aryargs = array();
93            }
94          // digestを復元  
95          $digest = $_digest;          $_digest = $digest;  // 退避
96            $retvar  = call_user_func_array('plugin_' . $name . '_convert', $aryargs);
97          if ($retvar === FALSE)          $digest  = $_digest; // 復元
98          {  
99                  return htmlspecialchars('#'.$name.($args ? "($args)" : ''));          if ($retvar === FALSE) {
100                    return htmlspecialchars('#' . $name . ($args ? "($args)" : ''));
101            } else {
102                    // 文字エンコーディング検出用 hidden フィールドを挿入
103                    return preg_replace('/(<form[^>]*>)/',
104                            "$1\n" . '<div><input type="hidden" name="encode_hint" value="ぷ" /></div>',
105                            $retvar);
106          }          }
   
         // 文字エンコーディング検出用 hidden フィールドを挿入する  
         return preg_replace('/(<form[^>]*>)/',"$1\n<div><input type=\"hidden\" name=\"encode_hint\" value=\"ぷ\" /></div>",$retvar);  
107  }  }
108    
109  //プラグイン(inline)を実行  //プラグイン(inline)を実行
110  function do_plugin_inline($name,$args,$body)  function do_plugin_inline($name, $args, & $body)
111  {  {
112          global $digest;          global $digest;
113    
114          // digestを退避          if(do_plugin_init($name) === FALSE)
115          $_digest = $digest;                  die_message("Plugin init failed: $name");
116    
117          $aryargs = ($args !== '') ? csv_explode(',',$args) : array();          if ($args !== '') {
118          $aryargs[] =& $body;                  $aryargs = csv_explode(',', $args);
119            } else {
120          do_plugin_init($name);                  $aryargs = array();
121          $retvar = call_user_func_array('plugin_'.$name.'_inline',$aryargs);          }
122            $aryargs[] = & $body; // Added reference of $body
123    
124          // digestを復元          $_digest = $digest;  // 退避
125          $digest = $_digest;          $retvar  = call_user_func_array('plugin_' . $name . '_inline', $aryargs);
126            $digest  = $_digest; // 復元
127    
128          if($retvar === FALSE)          if($retvar === FALSE) {
         {  
129                  return htmlspecialchars("&${name}" . ($args ? "($args)" : '') . ';');                  return htmlspecialchars("&${name}" . ($args ? "($args)" : '') . ';');
130            } else {
131                    return $retvar;
132          }          }
   
         return $retvar;  
133  }  }
134  ?>  ?>

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26