OSDN Git Service

- [breaking B.C.] Ethna_Loggerリファクタリング
[ethna/ethna.git] / Ethna.php
1 <?php
2 // vim: foldmethod=marker
3 /**
4  *      Ethna.php
5  *
6  *      @author         Masaki Fujimoto <fujimoto@php.net>
7  *      @license        http://www.opensource.org/licenses/bsd-license.php The BSD License
8  *      @package        Ethna
9  *      @version        $Id$
10  */
11
12 /** Ethna depends on PEAR */
13 include_once('PEAR.php');
14
15 if (!defined('PATH_SEPARATOR')) {
16         if (OS_WINDOWS) {
17                 /** include_path separator(Windows) */
18                 define('PATH_SEPARATOR', ';');
19         } else {
20                 /** include_path separator(Unix) */
21                 define('PATH_SEPARATOR', ':');
22         }
23 }
24 if (!defined('DIRECTORY_SEPARATOR')) {
25         if (OS_WINDOWS) {
26                 /** directory separator(Windows) */
27                 define('DIRECTORY_SEPARATOR', '\\');
28         } else {
29                 /** separator(Unix) */
30                 define('DIRECTORY_SEPARATOR', '/');
31         }
32 }
33
34 /** ¥Ð¡¼¥¸¥ç¥óÄêµÁ */
35 define('ETHNA_VERSION', '2.3.0-dev');
36
37 /** Ethna¥Ù¡¼¥¹¥Ç¥£¥ì¥¯¥È¥êÄêµÁ */
38 define('ETHNA_BASE', dirname(__FILE__));
39
40 include_once(ETHNA_BASE . '/class/Ethna_ActionClass.php');
41 include_once(ETHNA_BASE . '/class/Ethna_ActionError.php');
42 include_once(ETHNA_BASE . '/class/Ethna_ActionForm.php');
43 include_once(ETHNA_BASE . '/class/Ethna_AppManager.php');
44 include_once(ETHNA_BASE . '/class/Ethna_AppObject.php');
45 include_once(ETHNA_BASE . '/class/Ethna_AppSQL.php');
46 include_once(ETHNA_BASE . '/class/Ethna_AppSearchObject.php');
47 include_once(ETHNA_BASE . '/class/Ethna_Backend.php');
48 include_once(ETHNA_BASE . '/class/Ethna_CacheManager.php');
49 include_once(ETHNA_BASE . '/class/Ethna_Config.php');
50 include_once(ETHNA_BASE . '/class/Ethna_Controller.php');
51 include_once(ETHNA_BASE . '/class/Ethna_ClassFactory.php');
52 include_once(ETHNA_BASE . '/class/Ethna_DB.php');
53 include_once(ETHNA_BASE . '/class/DB/Ethna_DB_PEAR.php');
54 include_once(ETHNA_BASE . '/class/Ethna_Filter.php');
55 include_once(ETHNA_BASE . '/class/Ethna_Handle.php');
56 include_once(ETHNA_BASE . '/class/Ethna_I18N.php');
57 include_once(ETHNA_BASE . '/class/Ethna_Logger.php');
58 include_once(ETHNA_BASE . '/class/Ethna_MailSender.php');
59 include_once(ETHNA_BASE . '/class/Ethna_Session.php');
60 include_once(ETHNA_BASE . '/class/Ethna_SkeltonGenerator.php');
61 include_once(ETHNA_BASE . '/class/Ethna_SmartyPlugin.php');
62 include_once(ETHNA_BASE . '/class/Ethna_Util.php');
63 include_once(ETHNA_BASE . '/class/Ethna_ViewClass.php');
64 include_once(ETHNA_BASE . '/class/CLI/Ethna_CLI_ActionClass.php');
65 include_once(ETHNA_BASE . '/class/View/Ethna_View_List.php');
66 include_once(ETHNA_BASE . '/class/Ethna_Plugin.php');
67 include_once(ETHNA_BASE . '/class/Ethna_Renderer.php');
68 include_once(ETHNA_BASE . '/class/Renderer/Ethna_Renderer_Smarty.php');
69
70 if (extension_loaded('soap')) {
71         include_once(ETHNA_BASE . '/class/SOAP/Ethna_SOAP_ActionForm.php');
72         include_once(ETHNA_BASE . '/class/SOAP/Ethna_SOAP_Gateway.php');
73         include_once(ETHNA_BASE . '/class/SOAP/Ethna_SOAP_GatewayGenerator.php');
74         include_once(ETHNA_BASE . '/class/SOAP/Ethna_SOAP_Util.php');
75         include_once(ETHNA_BASE . '/class/SOAP/Ethna_SOAP_WsdlGenerator.php');
76 }
77
78 /** ¥¯¥é¥¤¥¢¥ó¥È¸À¸ìÄêµÁ: ±Ñ¸ì */
79 define('LANG_EN', 'en');
80
81 /** ¥¯¥é¥¤¥¢¥ó¥È¸À¸ìÄêµÁ: ÆüËܸì */
82 define('LANG_JA', 'ja');
83
84
85 /** ¥²¡¼¥È¥¦¥§¥¤: WWW */
86 define('GATEWAY_WWW', 1);
87
88 /** ¥²¡¼¥È¥¦¥§¥¤: CLI */
89 define('GATEWAY_CLI', 2);
90
91 /** ¥²¡¼¥È¥¦¥§¥¤: XMLRPC */
92 define('GATEWAY_XMLRPC', 3);
93
94 /** ¥²¡¼¥È¥¦¥§¥¤: SOAP */
95 define('GATEWAY_SOAP', 4);
96
97
98 /** DB¼ïÊÌÄêµÁ: R/W */
99 define('DB_TYPE_RW', 1);
100
101 /** DB¼ïÊÌÄêµÁ: R/O */
102 define('DB_TYPE_RO', 2);
103
104 /** DB¼ïÊÌÄêµÁ: Misc  */
105 define('DB_TYPE_MISC', 3);
106
107
108 /** Í×ÁÇ·¿: À°¿ô */
109 define('VAR_TYPE_INT', 1);
110
111 /** Í×ÁÇ·¿: ÉâÆ°¾®¿ôÅÀ¿ô */
112 define('VAR_TYPE_FLOAT', 2);
113
114 /** Í×ÁÇ·¿: Ê¸»úÎó */
115 define('VAR_TYPE_STRING', 3);
116
117 /** Í×ÁÇ·¿: ÆüÉÕ */
118 define('VAR_TYPE_DATETIME', 4);
119
120 /** Í×ÁÇ·¿: ¿¿µ¶ÃÍ */
121 define('VAR_TYPE_BOOLEAN', 5);
122
123 /** Í×ÁÇ·¿: ¥Õ¥¡¥¤¥ë */
124 define('VAR_TYPE_FILE', 6);
125
126
127 /** ¥Õ¥©¡¼¥à·¿: text */
128 define('FORM_TYPE_TEXT', 1);
129
130 /** ¥Õ¥©¡¼¥à·¿: password */
131 define('FORM_TYPE_PASSWORD', 2);
132
133 /** ¥Õ¥©¡¼¥à·¿: textarea */
134 define('FORM_TYPE_TEXTAREA', 3);
135
136 /** ¥Õ¥©¡¼¥à·¿: select */
137 define('FORM_TYPE_SELECT', 4);
138
139 /** ¥Õ¥©¡¼¥à·¿: radio */
140 define('FORM_TYPE_RADIO', 5);
141
142 /** ¥Õ¥©¡¼¥à·¿: checkbox */
143 define('FORM_TYPE_CHECKBOX', 6);
144
145 /** ¥Õ¥©¡¼¥à·¿: button */
146 define('FORM_TYPE_SUBMIT', 7);
147
148 /** ¥Õ¥©¡¼¥à·¿: file */
149 define('FORM_TYPE_FILE', 8);
150
151 /** ¥Õ¥©¡¼¥à·¿: button */
152 define('FORM_TYPE_BUTTON', 9);
153
154 /** ¥Õ¥©¡¼¥à·¿: hidden */
155 define('FORM_TYPE_HIDDEN', 10);
156
157
158 /** ¥¨¥é¡¼¥³¡¼¥É: °ìÈÌ¥¨¥é¡¼ */
159 define('E_GENERAL', 1);
160
161 /** ¥¨¥é¡¼¥³¡¼¥É: DBÀܳ¥¨¥é¡¼ */
162 define('E_DB_CONNECT', 2);
163
164 /** ¥¨¥é¡¼¥³¡¼¥É: DBÀßÄê¤Ê¤· */
165 define('E_DB_NODSN', 3);
166
167 /** ¥¨¥é¡¼¥³¡¼¥É: DB¥¯¥¨¥ê¥¨¥é¡¼ */
168 define('E_DB_QUERY', 4);
169
170 /** ¥¨¥é¡¼¥³¡¼¥É: DB¥æ¥Ë¡¼¥¯¥­¡¼¥¨¥é¡¼ */
171 define('E_DB_DUPENT', 5);
172
173 /** ¥¨¥é¡¼¥³¡¼¥É: DB¼ïÊÌ¥¨¥é¡¼ */
174 define('E_DB_INVALIDTYPE', 6);
175
176 /** ¥¨¥é¡¼¥³¡¼¥É: ¥»¥Ã¥·¥ç¥ó¥¨¥é¡¼(Í­¸ú´ü¸ÂÀÚ¤ì) */
177 define('E_SESSION_EXPIRE', 16);
178
179 /** ¥¨¥é¡¼¥³¡¼¥É: ¥»¥Ã¥·¥ç¥ó¥¨¥é¡¼(IP¥¢¥É¥ì¥¹¥Á¥§¥Ã¥¯¥¨¥é¡¼) */
180 define('E_SESSION_IPCHECK', 17);
181
182 /** ¥¨¥é¡¼¥³¡¼¥É: ¥¢¥¯¥·¥ç¥ó̤ÄêµÁ¥¨¥é¡¼ */
183 define('E_APP_UNDEFINED_ACTION', 32);
184
185 /** ¥¨¥é¡¼¥³¡¼¥É: ¥¢¥¯¥·¥ç¥ó¥¯¥é¥¹Ì¤ÄêµÁ¥¨¥é¡¼ */
186 define('E_APP_UNDEFINED_ACTIONCLASS', 33);
187
188 /** ¥¨¥é¡¼¥³¡¼¥É: ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥ª¥Ö¥¸¥§¥¯¥ÈID½ÅÊ£¥¨¥é¡¼ */
189 define('E_APP_DUPENT', 34);
190
191 /** ¥¨¥é¡¼¥³¡¼¥É: ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥á¥½¥Ã¥É¤¬Â¸ºß¤·¤Ê¤¤ */
192 define('E_APP_NOMETHOD', 35);
193
194 /** ¥¨¥é¡¼¥³¡¼¥É: ¥í¥Ã¥¯¥¨¥é¡¼ */
195 define('E_APP_LOCK', 36);
196
197 /** ¥¨¥é¡¼¥³¡¼¥É: CSVʬ³ä¥¨¥é¡¼(¹Ô·Ñ³) */
198 define('E_UTIL_CSV_CONTINUE', 64);
199
200 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ·¿¥¨¥é¡¼(¥¹¥«¥é¡¼°ú¿ô¤ËÇÛÎó»ØÄê) */
201 define('E_FORM_WRONGTYPE_SCALAR', 128);
202
203 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ·¿¥¨¥é¡¼(ÇÛÎó°ú¿ô¤Ë¥¹¥«¥é¡¼»ØÄê) */
204 define('E_FORM_WRONGTYPE_ARRAY', 129);
205
206 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ·¿¥¨¥é¡¼(À°¿ô·¿) */
207 define('E_FORM_WRONGTYPE_INT', 130);
208
209 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ·¿¥¨¥é¡¼(ÉâÆ°¾®¿ôÅÀ¿ô·¿) */
210 define('E_FORM_WRONGTYPE_FLOAT', 131);
211
212 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ·¿¥¨¥é¡¼(ÆüÉÕ·¿) */
213 define('E_FORM_WRONGTYPE_DATETIME', 132);
214
215 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ·¿¥¨¥é¡¼(BOOL·¿) */
216 define('E_FORM_WRONGTYPE_BOOLEAN', 133);
217
218 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ·¿¥¨¥é¡¼(FILE·¿) */
219 define('E_FORM_WRONGTYPE_FILE', 134);
220
221 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍɬ¿Ü¥¨¥é¡¼ */
222 define('E_FORM_REQUIRED', 135);
223
224 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺǾ®ÃÍ¥¨¥é¡¼(À°¿ô·¿) */
225 define('E_FORM_MIN_INT', 136);
226
227 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺǾ®ÃÍ¥¨¥é¡¼(ÉâÆ°¾®¿ôÅÀ¿ô·¿) */
228 define('E_FORM_MIN_FLOAT', 137);
229
230 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺǾ®ÃÍ¥¨¥é¡¼(ʸ»úÎó·¿) */
231 define('E_FORM_MIN_STRING', 138);
232
233 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺǾ®ÃÍ¥¨¥é¡¼(ÆüÉÕ·¿) */
234 define('E_FORM_MIN_DATETIME', 139);
235
236 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺǾ®ÃÍ¥¨¥é¡¼(¥Õ¥¡¥¤¥ë·¿) */
237 define('E_FORM_MIN_FILE', 140);
238
239 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺÇÂçÃÍ¥¨¥é¡¼(À°¿ô·¿) */
240 define('E_FORM_MAX_INT', 141);
241
242 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺÇÂçÃÍ¥¨¥é¡¼(ÉâÆ°¾®¿ôÅÀ¿ô·¿) */
243 define('E_FORM_MAX_FLOAT', 142);
244
245 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺÇÂçÃÍ¥¨¥é¡¼(ʸ»úÎó·¿) */
246 define('E_FORM_MAX_STRING', 143);
247
248 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺÇÂçÃÍ¥¨¥é¡¼(ÆüÉÕ·¿) */
249 define('E_FORM_MAX_DATETIME', 144);
250
251 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺÇÂçÃÍ¥¨¥é¡¼(¥Õ¥¡¥¤¥ë·¿) */
252 define('E_FORM_MAX_FILE', 145);
253
254 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍʸ»ú¼ï(Àµµ¬É½¸½)¥¨¥é¡¼ */
255 define('E_FORM_REGEXP', 146);
256
257 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ¿ôÃÍ(¥«¥¹¥¿¥à¥Á¥§¥Ã¥¯)¥¨¥é¡¼ */
258 define('E_FORM_INVALIDVALUE', 147);
259
260 /** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍʸ»ú¼ï(¥«¥¹¥¿¥à¥Á¥§¥Ã¥¯)¥¨¥é¡¼ */
261 define('E_FORM_INVALIDCHAR', 148);
262
263 /** ¥¨¥é¡¼¥³¡¼¥É: ³ÎǧÍÑ¥¨¥ó¥È¥êÆþÎÏ¥¨¥é¡¼ */
264 define('E_FORM_CONFIRM', 149);
265
266 /** ¥¨¥é¡¼¥³¡¼¥É: ¥­¥ã¥Ã¥·¥å¥¿¥¤¥×ÉÔÀµ */
267 define('E_CACHE_INVALID_TYPE', 192);
268
269 /** ¥¨¥é¡¼¥³¡¼¥É: ¥­¥ã¥Ã¥·¥åÃͤʤ· */
270 define('E_CACHE_NO_VALUE', 193);
271
272 /** ¥¨¥é¡¼¥³¡¼¥É: ¥­¥ã¥Ã¥·¥åÍ­¸ú´ü¸Â */
273 define('E_CACHE_EXPIRED', 194);
274
275 /** ¥¨¥é¡¼¥³¡¼¥É: ¥­¥ã¥Ã¥·¥å¥¨¥é¡¼(¤½¤Î¾) */
276 define('E_CACHE_GENERAL', 195);
277
278 /** ¥¨¥é¡¼¥³¡¼¥É: ¥×¥é¥°¥¤¥ó¤¬¸«¤Ä¤«¤é¤Ê¤¤ */
279 define('E_PLUGIN_NOTFOUND', 196);
280
281 /** ¥¨¥é¡¼¥³¡¼¥É: ¥×¥é¥°¥¤¥ó¥¨¥é¡¼(¤½¤Î¾) */
282 define('E_PLUGIN_GENERAL', 197);
283
284 if (defined('E_STRICT') == false) {
285         /** PHP 5¤È¤Î¸ß´¹ÊÝ»ýÄêµÁ */
286         define('E_STRICT', 0);
287 }
288
289 /** Ethna¥°¥í¡¼¥Ð¥ëÊÑ¿ô: ¥¨¥é¡¼¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô */
290 $GLOBALS['_Ethna_error_callback_list'] = array();
291
292 /** Ethna¥°¥í¡¼¥Ð¥ëÊÑ¿ô: ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸ */
293 $GLOBALS['_Ethna_error_message_list'] = array();
294
295
296 // {{{ Ethna
297 /**
298  *      Ethna¥Õ¥ì¡¼¥à¥ï¡¼¥¯¥¯¥é¥¹
299  *
300  *      @author         Masaki Fujimoto <fujimoto@php.net>
301  *      @access         public
302  *      @package        Ethna
303  */
304 class Ethna extends PEAR
305 {
306         /**#@+
307          *      @access private
308          */
309
310         /**#@-*/
311
312         /**
313          *      Ethna_Error¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤¹¤ë(¥¨¥é¡¼¥ì¥Ù¥ë:E_USER_ERROR)
314          *
315          *      @access public
316          *      @param  string  $message                        ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸
317          *      @param  int             $code                           ¥¨¥é¡¼¥³¡¼¥É
318          *      @static
319          */
320         function &raiseError($message, $code = E_GENERAL)
321         {
322                 $userinfo = null;
323                 if (func_num_args() > 2) {
324                         $userinfo = array_slice(func_get_args(), 2);
325                         if (count($userinfo) == 1 && is_array($userinfo[0])) {
326                                 $userinfo = $userinfo[0];
327                         }
328                 }
329                 return PEAR::raiseError($message, $code, PEAR_ERROR_RETURN, E_USER_ERROR, $userinfo, 'Ethna_Error');
330         }
331
332         /**
333          *      Ethna_Error¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤¹¤ë(¥¨¥é¡¼¥ì¥Ù¥ë:E_USER_WARNING)
334          *
335          *      @access public
336          *      @param  string  $message                        ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸
337          *      @param  int             $code                           ¥¨¥é¡¼¥³¡¼¥É
338          *      @static
339          */
340         function &raiseWarning($message, $code = E_GENERAL)
341         {
342                 $userinfo = null;
343                 if (func_num_args() > 2) {
344                         $userinfo = array_slice(func_get_args(), 2);
345                         if (count($userinfo) == 1 && is_array($userinfo[0])) {
346                                 $userinfo = $userinfo[0];
347                         }
348                 }
349                 return PEAR::raiseError($message, $code, PEAR_ERROR_RETURN, E_USER_WARNING, $userinfo, 'Ethna_Error');
350         }
351
352         /**
353          *      Ethna_Error¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤¹¤ë(¥¨¥é¡¼¥ì¥Ù¥ë:E_USER_NOTICE)
354          *
355          *      @access public
356          *      @param  string  $message                        ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸
357          *      @param  int             $code                           ¥¨¥é¡¼¥³¡¼¥É
358          *      @static
359          */
360         function &raiseNotice($message, $code = E_GENERAL)
361         {
362                 $userinfo = null;
363                 if (func_num_args() > 2) {
364                         $userinfo = array_slice(func_get_args(), 2);
365                         if (count($userinfo) == 1 && is_array($userinfo[0])) {
366                                 $userinfo = $userinfo[0];
367                         }
368                 }
369                 return PEAR::raiseError($message, $code, PEAR_ERROR_RETURN, E_USER_NOTICE, $userinfo, 'Ethna_Error');
370         }
371
372         /**
373          *      ¥¨¥é¡¼È¯À¸»þ¤Î(¥Õ¥ì¡¼¥à¥ï¡¼¥¯¤È¤·¤Æ¤Î)¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤òÀßÄꤹ¤ë
374          *
375          *      @access public
376          *      @param  mixed   string:¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô̾ array:¥³¡¼¥ë¥Ð¥Ã¥¯¥¯¥é¥¹(̾|¥ª¥Ö¥¸¥§¥¯¥È)+¥á¥½¥Ã¥É̾
377          *      @static
378          */
379         function setErrorCallback($callback)
380         {
381                 $GLOBALS['_Ethna_error_callback_list'][] = $callback;
382         }
383
384         /**
385          *      ¥¨¥é¡¼È¯À¸»þ¤Î½èÍý¤ò¹Ô¤¦(¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô/¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹)
386          *      
387          *      @access public
388          *      @param  object  Ethna_Error             Ethna_Error¥ª¥Ö¥¸¥§¥¯¥È
389          *      @static
390          */
391         function handleError(&$error)
392         {
393                 for ($i = 0; $i < count($GLOBALS['_Ethna_error_callback_list']); $i++) {
394                         $callback =& $GLOBALS['_Ethna_error_callback_list'][$i];
395                         if (is_array($callback) == false) {
396                                 call_user_func($callback, $error);
397                         } else if (is_object($callback[0])) {
398                                 $object =& $callback[0];
399                                 $method = $callback[1];
400
401                                 // perform some more checks?
402                                 $object->$method($error);
403                         } else {
404                                 call_user_func($callback, $error);
405                         }
406                 }
407         }
408 }
409 // }}}
410 ?>