OSDN Git Service

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