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)が存在するか |
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 |
?> |
?> |