OSDN Git Service

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