OSDN Git Service

Merge branch 'release/2.6.0beta2'
[ethna/ethna.git] / Ethna.php
index 97128b6..cf35082 100644 (file)
--- a/Ethna.php
+++ b/Ethna.php
 <?php
 // vim: foldmethod=marker
 /**
- *     Ethna.php
+ *  Ethna.php
  *
- *     @author         Masaki Fujimoto <fujimoto@php.net>
- *     @license        http://www.opensource.org/licenses/bsd-license.php The BSD License
- *     @package        Ethna
- *     @version        $Id$
+ *  @author     Masaki Fujimoto <fujimoto@php.net>
+ *  @license    http://www.opensource.org/licenses/bsd-license.php The BSD License
+ *  @package    Ethna
+ *  @version    $Id$
  */
 
-/** Ethna depends on PEAR */
-include_once('PEAR.php');
-
-/** Ethna (*currently*) depends on Smarty */
-include_once('Smarty/Smarty.class.php');
+//
+//  PEAR OS_WINDOWS constant replacement.
+//
+//  PEAR の OS_WINDOWS 定数は、defined関数で
+//  既に定義されているかをチェックしていない。
+//  よって require_once 'PEAR.php' とすると
+//  E_NOTICEが出ることから、Windows環境判定用
+//  として独自の定数を定義する
+//
+if (substr(PHP_OS, 0, 3) == 'WIN'
+ && !defined('ETHNA_OS_WINDOWS')) {
+    define('ETHNA_OS_WINDOWS', true);
+} elseif (!defined('ETHNA_OS_WINDOWS')) {
+    define('ETHNA_OS_WINDOWS', false);
+}
+//  PHP 5.1.0 以降向けの変更
+//  date.timezone が設定されていないと
+//  E_STRICT|WARNING が発生する
+if (!ini_get('date.timezone')) {
+    ini_set('date.timezone', 'Asia/Tokyo');
+}
 
 if (!defined('PATH_SEPARATOR')) {
-       if (OS_WINDOWS) {
-               /** include_path separator(Windows) */
-               define('PATH_SEPARATOR', ';');
-       } else {
-               /** include_path separator(Unix) */
-               define('PATH_SEPARATOR', ':');
-       }
+    if (ETHNA_OS_WINDOWS) {
+        /** include_path separator(Windows) */
+        define('PATH_SEPARATOR', ';');
+    } else {
+        /** include_path separator(Unix) */
+        define('PATH_SEPARATOR', ':');
+    }
 }
 if (!defined('DIRECTORY_SEPARATOR')) {
-       if (OS_WINDOWS) {
-               /** directory separator(Windows) */
-               define('DIRECTORY_SEPARATOR', '\\');
-       } else {
-               /** separator(Unix) */
-               define('DIRECTORY_SEPARATOR', '/');
-       }
+    if (ETHNA_OS_WINDOWS) {
+        /** directory separator(Windows) */
+        define('DIRECTORY_SEPARATOR', '\\');
+    } else {
+        /** separator(Unix) */
+        define('DIRECTORY_SEPARATOR', '/');
+    }
 }
 
-/** ¥Ð¡¼¥¸¥ç¥óÄêµÁ */
-define('ETHNA_VERSION', '2.3.0-dev');
+/** バージョン定義 */
+define('ETHNA_VERSION', '2.6.0-beta2');
 
-/** Ethna¥Ù¡¼¥¹¥Ç¥£¥ì¥¯¥È¥êÄêµÁ */
+/**
+ * ダミーのエラーモード
+ * PEAR非依存、かつ互換性を維持するためのもの
+ */
+define('ETHNA_ERROR_DUMMY', 'dummy');
+
+/** Ethnaベースディレクトリ定義 */
 define('ETHNA_BASE', dirname(__FILE__));
 
-include_once(ETHNA_BASE . '/class/Ethna_ActionClass.php');
-include_once(ETHNA_BASE . '/class/Ethna_ActionError.php');
-include_once(ETHNA_BASE . '/class/Ethna_ActionForm.php');
-include_once(ETHNA_BASE . '/class/Ethna_AppManager.php');
-include_once(ETHNA_BASE . '/class/Ethna_AppObject.php');
-include_once(ETHNA_BASE . '/class/Ethna_AppSQL.php');
-include_once(ETHNA_BASE . '/class/Ethna_AppSearchObject.php');
-include_once(ETHNA_BASE . '/class/Ethna_Backend.php');
-include_once(ETHNA_BASE . '/class/Ethna_CacheManager.php');
-include_once(ETHNA_BASE . '/class/Ethna_Config.php');
-include_once(ETHNA_BASE . '/class/Ethna_Controller.php');
-include_once(ETHNA_BASE . '/class/Ethna_ClassFactory.php');
-include_once(ETHNA_BASE . '/class/Ethna_DB.php');
-include_once(ETHNA_BASE . '/class/DB/Ethna_DB_PEAR.php');
-include_once(ETHNA_BASE . '/class/Ethna_Filter.php');
-include_once(ETHNA_BASE . '/class/Ethna_Handle.php');
-include_once(ETHNA_BASE . '/class/Handle/Ethna_Handle_Manager.php');
-include_once(ETHNA_BASE . '/class/Ethna_I18N.php');
-include_once(ETHNA_BASE . '/class/Ethna_LogWriter.php');
-include_once(ETHNA_BASE . '/class/LogWriter/Ethna_LogWriter_Echo.php');
-include_once(ETHNA_BASE . '/class/LogWriter/Ethna_LogWriter_File.php');
-include_once(ETHNA_BASE . '/class/LogWriter/Ethna_LogWriter_Syslog.php');
-include_once(ETHNA_BASE . '/class/Ethna_Logger.php');
-include_once(ETHNA_BASE . '/class/Ethna_MailSender.php');
-include_once(ETHNA_BASE . '/class/Ethna_Session.php');
-include_once(ETHNA_BASE . '/class/Ethna_SkeltonGenerator.php');
-include_once(ETHNA_BASE . '/class/Ethna_SmartyPlugin.php');
-include_once(ETHNA_BASE . '/class/Ethna_Util.php');
-include_once(ETHNA_BASE . '/class/Ethna_ViewClass.php');
-include_once(ETHNA_BASE . '/class/CLI/Ethna_CLI_ActionClass.php');
-include_once(ETHNA_BASE . '/class/View/Ethna_View_List.php');
+require_once ETHNA_BASE . '/class/ActionClass.php';
+require_once ETHNA_BASE . '/class/ActionError.php';
+require_once ETHNA_BASE . '/class/ActionForm.php';
+require_once ETHNA_BASE . '/class/AppManager.php';
+require_once ETHNA_BASE . '/class/AppObject.php';
+require_once ETHNA_BASE . '/class/AppSQL.php';
+require_once ETHNA_BASE . '/class/AppSearchObject.php';
+require_once ETHNA_BASE . '/class/Backend.php';
+require_once ETHNA_BASE . '/class/CacheManager.php';
+require_once ETHNA_BASE . '/class/Config.php';
+require_once ETHNA_BASE . '/class/Controller.php';
+require_once ETHNA_BASE . '/class/ClassFactory.php';
+require_once ETHNA_BASE . '/class/DB.php';
+require_once ETHNA_BASE . '/class/Error.php';
+require_once ETHNA_BASE . '/class/Filter.php';
+require_once ETHNA_BASE . '/class/Handle.php';
+require_once ETHNA_BASE . '/class/I18N.php';
+require_once ETHNA_BASE . '/class/Logger.php';
+require_once ETHNA_BASE . '/class/MailSender.php';
+require_once ETHNA_BASE . '/class/Session.php';
+require_once ETHNA_BASE . '/class/Generator.php';
+require_once ETHNA_BASE . '/class/UrlHandler.php';
+require_once ETHNA_BASE . '/class/Util.php';
+require_once ETHNA_BASE . '/class/ViewClass.php';
+require_once ETHNA_BASE . '/class/View/Json.php';
+require_once ETHNA_BASE . '/class/View/Redirect.php';
+require_once ETHNA_BASE . '/class/View/403.php';
+require_once ETHNA_BASE . '/class/View/404.php';
+require_once ETHNA_BASE . '/class/View/500.php';
+require_once ETHNA_BASE . '/class/View/List.php';
+require_once ETHNA_BASE . '/class/Plugin.php';
+require_once ETHNA_BASE . '/class/Renderer.php';
+require_once ETHNA_BASE . '/class/CLI/ActionClass.php';
 
 if (extension_loaded('soap')) {
-       include_once(ETHNA_BASE . '/class/SOAP/Ethna_SOAP_ActionForm.php');
-       include_once(ETHNA_BASE . '/class/SOAP/Ethna_SOAP_Gateway.php');
-       include_once(ETHNA_BASE . '/class/SOAP/Ethna_SOAP_GatewayGenerator.php');
-       include_once(ETHNA_BASE . '/class/SOAP/Ethna_SOAP_Util.php');
-       include_once(ETHNA_BASE . '/class/SOAP/Ethna_SOAP_WsdlGenerator.php');
+    require_once ETHNA_BASE . '/class/SOAP/ActionForm.php';
+    require_once ETHNA_BASE . '/class/SOAP/Gateway.php';
+    require_once ETHNA_BASE . '/class/SOAP/GatewayGenerator.php';
+    require_once ETHNA_BASE . '/class/SOAP/Util.php';
+    require_once ETHNA_BASE . '/class/SOAP/WsdlGenerator.php';
 }
 
-/** ¥¯¥é¥¤¥¢¥ó¥È¸À¸ìÄêµÁ: ±Ñ¸ì */
-define('LANG_EN', 'en');
-
-/** ¥¯¥é¥¤¥¢¥ó¥È¸À¸ìÄêµÁ: ÆüËܸì */
-define('LANG_JA', 'ja');
-
-
-/** ¥²¡¼¥È¥¦¥§¥¤: WWW */
+/** ゲートウェイ: WWW */
 define('GATEWAY_WWW', 1);
 
-/** ¥²¡¼¥È¥¦¥§¥¤: CLI */
+/** ã\82²ã\83¼ã\83\88ã\82¦ã\82§ã\82¤: CLI */
 define('GATEWAY_CLI', 2);
 
-/** ¥²¡¼¥È¥¦¥§¥¤: XMLRPC */
+/** ã\82²ã\83¼ã\83\88ã\82¦ã\82§ã\82¤: XMLRPC */
 define('GATEWAY_XMLRPC', 3);
 
-/** ¥²¡¼¥È¥¦¥§¥¤: SOAP */
+/** ã\82²ã\83¼ã\83\88ã\82¦ã\82§ã\82¤: SOAP */
 define('GATEWAY_SOAP', 4);
 
 
-/** DB¼ïÊÌÄêµÁ: R/W */
+/** DB種別定義: R/W */
 define('DB_TYPE_RW', 1);
 
-/** DB¼ïÊÌÄêµÁ: R/O */
+/** DB種別定義: R/O */
 define('DB_TYPE_RO', 2);
 
-/** DB¼ïÊÌÄêµÁ: Misc  */
+/** DB種別定義: Misc  */
 define('DB_TYPE_MISC', 3);
 
 
-/** Í×ÁÇ·¿: À°¿ô */
+/** 要素型: 整数 */
 define('VAR_TYPE_INT', 1);
 
-/** Í×ÁÇ·¿: ÉâÆ°¾®¿ôÅÀ¿ô */
+/** 要素型: 浮動小数点数 */
 define('VAR_TYPE_FLOAT', 2);
 
-/** Í×ÁÇ·¿: Ê¸»úÎó */
+/** 要素型: 文字列 */
 define('VAR_TYPE_STRING', 3);
 
-/** Í×ÁÇ·¿: ÆüÉÕ */
+/** 要素型: 日付 */
 define('VAR_TYPE_DATETIME', 4);
 
-/** Í×ÁÇ·¿: ¿¿µ¶ÃÍ */
+/** 要素型: 真偽値 */
 define('VAR_TYPE_BOOLEAN', 5);
 
-/** Í×ÁÇ·¿: ¥Õ¥¡¥¤¥ë */
+/** 要素型: ファイル */
 define('VAR_TYPE_FILE', 6);
 
 
-/** ¥Õ¥©¡¼¥à·¿: text */
+/** フォーム型: text */
 define('FORM_TYPE_TEXT', 1);
 
-/** ¥Õ¥©¡¼¥à·¿: password */
+/** フォーム型: password */
 define('FORM_TYPE_PASSWORD', 2);
 
-/** ¥Õ¥©¡¼¥à·¿: textarea */
+/** フォーム型: textarea */
 define('FORM_TYPE_TEXTAREA', 3);
 
-/** ¥Õ¥©¡¼¥à·¿: select */
+/** フォーム型: select */
 define('FORM_TYPE_SELECT', 4);
 
-/** ¥Õ¥©¡¼¥à·¿: radio */
+/** フォーム型: radio */
 define('FORM_TYPE_RADIO', 5);
 
-/** ¥Õ¥©¡¼¥à·¿: checkbox */
+/** フォーム型: checkbox */
 define('FORM_TYPE_CHECKBOX', 6);
 
-/** ¥Õ¥©¡¼¥à·¿: button */
+/** フォーム型: button */
 define('FORM_TYPE_SUBMIT', 7);
 
-/** ¥Õ¥©¡¼¥à·¿: file */
+/** フォーム型: file */
 define('FORM_TYPE_FILE', 8);
 
-/** ¥Õ¥©¡¼¥à·¿: button */
+/** フォーム型: button */
 define('FORM_TYPE_BUTTON', 9);
 
-/** ¥Õ¥©¡¼¥à·¿: hidden */
+/** フォーム型: hidden */
 define('FORM_TYPE_HIDDEN', 10);
 
 
-/** ¥¨¥é¡¼¥³¡¼¥É: °ìÈÌ¥¨¥é¡¼ */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: ä¸\80è\88¬ã\82¨ã\83©ã\83¼ */
 define('E_GENERAL', 1);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: DBÀܳ¥¨¥é¡¼ */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: DBæ\8e¥ç¶\9aã\82¨ã\83©ã\83¼ */
 define('E_DB_CONNECT', 2);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: DBÀßÄê¤Ê¤· */
+/** エラーコード: DB設定なし */
 define('E_DB_NODSN', 3);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: DB¥¯¥¨¥ê¥¨¥é¡¼ */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: DBã\82¯ã\82¨ã\83ªã\82¨ã\83©ã\83¼ */
 define('E_DB_QUERY', 4);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: DB¥æ¥Ë¡¼¥¯¥­¡¼¥¨¥é¡¼ */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: DBã\83¦ã\83\8bã\83¼ã\82¯ã\82­ã\83¼ã\82¨ã\83©ã\83¼ */
 define('E_DB_DUPENT', 5);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: DB¼ïÊÌ¥¨¥é¡¼ */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: DB種å\88¥ã\82¨ã\83©ã\83¼ */
 define('E_DB_INVALIDTYPE', 6);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥»¥Ã¥·¥ç¥ó¥¨¥é¡¼(Í­¸ú´ü¸ÂÀÚ¤ì) */
+/** エラーコード: セッションエラー(有効期限切れ) */
 define('E_SESSION_EXPIRE', 16);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥»¥Ã¥·¥ç¥ó¥¨¥é¡¼(IP¥¢¥É¥ì¥¹¥Á¥§¥Ã¥¯¥¨¥é¡¼) */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: ã\82»ã\83\83ã\82·ã\83§ã\83³ã\82¨ã\83©ã\83¼(IPã\82¢ã\83\89ã\83¬ã\82¹ã\83\81ã\82§ã\83\83ã\82¯ã\82¨ã\83©ã\83¼) */
 define('E_SESSION_IPCHECK', 17);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥¢¥¯¥·¥ç¥ó̤ÄêµÁ¥¨¥é¡¼ */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: ã\82¢ã\82¯ã\82·ã\83§ã\83³æ\9cªå®\9a義ã\82¨ã\83©ã\83¼ */
 define('E_APP_UNDEFINED_ACTION', 32);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥¢¥¯¥·¥ç¥ó¥¯¥é¥¹Ì¤ÄêµÁ¥¨¥é¡¼ */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: ã\82¢ã\82¯ã\82·ã\83§ã\83³ã\82¯ã\83©ã\82¹æ\9cªå®\9a義ã\82¨ã\83©ã\83¼ */
 define('E_APP_UNDEFINED_ACTIONCLASS', 33);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥ª¥Ö¥¸¥§¥¯¥ÈID½ÅÊ£¥¨¥é¡¼ */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88IDé\87\8dè¤\87ã\82¨ã\83©ã\83¼ */
 define('E_APP_DUPENT', 34);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥á¥½¥Ã¥É¤¬Â¸ºß¤·¤Ê¤¤ */
+/** エラーコード: アプリケーションメソッドが存在しない */
 define('E_APP_NOMETHOD', 35);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥í¥Ã¥¯¥¨¥é¡¼ */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: ã\83­ã\83\83ã\82¯ã\82¨ã\83©ã\83¼ */
 define('E_APP_LOCK', 36);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: CSVʬ³ä¥¨¥é¡¼(¹Ô·Ñ³) */
+/** エラーコード: 読み込みエラー */
+define('E_APP_READ', 37);
+
+/** エラーコード: 書き込みエラー */
+define('E_APP_WRITE', 38);
+
+/** エラーコード: CSV分割エラー(行継続) */
 define('E_UTIL_CSV_CONTINUE', 64);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ·¿¥¨¥é¡¼(¥¹¥«¥é¡¼°ú¿ô¤ËÇÛÎó»ØÄê) */
+/** エラーコード: フォーム値型エラー(スカラー引数に配列指定) */
 define('E_FORM_WRONGTYPE_SCALAR', 128);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ·¿¥¨¥é¡¼(ÇÛÎó°ú¿ô¤Ë¥¹¥«¥é¡¼»ØÄê) */
+/** エラーコード: フォーム値型エラー(配列引数にスカラー指定) */
 define('E_FORM_WRONGTYPE_ARRAY', 129);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ·¿¥¨¥é¡¼(À°¿ô·¿) */
+/** エラーコード: フォーム値型エラー(整数型) */
 define('E_FORM_WRONGTYPE_INT', 130);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ·¿¥¨¥é¡¼(ÉâÆ°¾®¿ôÅÀ¿ô·¿) */
+/** エラーコード: フォーム値型エラー(浮動小数点数型) */
 define('E_FORM_WRONGTYPE_FLOAT', 131);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ·¿¥¨¥é¡¼(ÆüÉÕ·¿) */
+/** エラーコード: フォーム値型エラー(日付型) */
 define('E_FORM_WRONGTYPE_DATETIME', 132);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ·¿¥¨¥é¡¼(BOOL·¿) */
+/** エラーコード: フォーム値型エラー(BOOL型) */
 define('E_FORM_WRONGTYPE_BOOLEAN', 133);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ·¿¥¨¥é¡¼(FILE·¿) */
+/** エラーコード: フォーム値型エラー(FILE型) */
 define('E_FORM_WRONGTYPE_FILE', 134);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍɬ¿Ü¥¨¥é¡¼ */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: ã\83\95ã\82©ã\83¼ã\83 å\80¤å¿\85é \88ã\82¨ã\83©ã\83¼ */
 define('E_FORM_REQUIRED', 135);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺǾ®ÃÍ¥¨¥é¡¼(À°¿ô·¿) */
+/** エラーコード: フォーム値最小値エラー(整数型) */
 define('E_FORM_MIN_INT', 136);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺǾ®ÃÍ¥¨¥é¡¼(ÉâÆ°¾®¿ôÅÀ¿ô·¿) */
+/** エラーコード: フォーム値最小値エラー(浮動小数点数型) */
 define('E_FORM_MIN_FLOAT', 137);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺǾ®ÃÍ¥¨¥é¡¼(ʸ»úÎó·¿) */
+/** エラーコード: フォーム値最小値エラー(文字列型) */
 define('E_FORM_MIN_STRING', 138);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺǾ®ÃÍ¥¨¥é¡¼(ÆüÉÕ·¿) */
+/** エラーコード: フォーム値最小値エラー(日付型) */
 define('E_FORM_MIN_DATETIME', 139);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺǾ®ÃÍ¥¨¥é¡¼(¥Õ¥¡¥¤¥ë·¿) */
+/** エラーコード: フォーム値最小値エラー(ファイル型) */
 define('E_FORM_MIN_FILE', 140);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺÇÂçÃÍ¥¨¥é¡¼(À°¿ô·¿) */
+/** エラーコード: フォーム値最大値エラー(整数型) */
 define('E_FORM_MAX_INT', 141);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺÇÂçÃÍ¥¨¥é¡¼(ÉâÆ°¾®¿ôÅÀ¿ô·¿) */
+/** エラーコード: フォーム値最大値エラー(浮動小数点数型) */
 define('E_FORM_MAX_FLOAT', 142);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺÇÂçÃÍ¥¨¥é¡¼(ʸ»úÎó·¿) */
+/** エラーコード: フォーム値最大値エラー(文字列型) */
 define('E_FORM_MAX_STRING', 143);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺÇÂçÃÍ¥¨¥é¡¼(ÆüÉÕ·¿) */
+/** エラーコード: フォーム値最大値エラー(日付型) */
 define('E_FORM_MAX_DATETIME', 144);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃͺÇÂçÃÍ¥¨¥é¡¼(¥Õ¥¡¥¤¥ë·¿) */
+/** エラーコード: フォーム値最大値エラー(ファイル型) */
 define('E_FORM_MAX_FILE', 145);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍʸ»ú¼ï(Àµµ¬É½¸½)¥¨¥é¡¼ */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: ã\83\95ã\82©ã\83¼ã\83 å\80¤æ\96\87å­\97種(æ­£è¦\8f表ç\8f¾)ã\82¨ã\83©ã\83¼ */
 define('E_FORM_REGEXP', 146);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍ¿ôÃÍ(¥«¥¹¥¿¥à¥Á¥§¥Ã¥¯)¥¨¥é¡¼ */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: ã\83\95ã\82©ã\83¼ã\83 å\80¤æ\95°å\80¤(ã\82«ã\82¹ã\82¿ã\83 ã\83\81ã\82§ã\83\83ã\82¯)ã\82¨ã\83©ã\83¼ */
 define('E_FORM_INVALIDVALUE', 147);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥Õ¥©¡¼¥àÃÍʸ»ú¼ï(¥«¥¹¥¿¥à¥Á¥§¥Ã¥¯)¥¨¥é¡¼ */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: ã\83\95ã\82©ã\83¼ã\83 å\80¤æ\96\87å­\97種(ã\82«ã\82¹ã\82¿ã\83 ã\83\81ã\82§ã\83\83ã\82¯)ã\82¨ã\83©ã\83¼ */
 define('E_FORM_INVALIDCHAR', 148);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ³ÎǧÍÑ¥¨¥ó¥È¥êÆþÎÏ¥¨¥é¡¼ */
+/** ã\82¨ã\83©ã\83¼ã\82³ã\83¼ã\83\89: ç¢ºèª\8dç\94¨ã\82¨ã\83³ã\83\88ã\83ªå\85¥å\8a\9bã\82¨ã\83©ã\83¼ */
 define('E_FORM_CONFIRM', 149);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥­¥ã¥Ã¥·¥å¥¿¥¤¥×ÉÔÀµ */
-define('E_CACHE_INVALID_TYPE', 256);
+/** エラーコード: キャッシュタイプ不正 */
+define('E_CACHE_INVALID_TYPE', 192);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥­¥ã¥Ã¥·¥åÃͤʤ· */
-define('E_CACHE_NO_VALUE', 257);
+/** エラーコード: キャッシュ値なし */
+define('E_CACHE_NO_VALUE', 193);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥­¥ã¥Ã¥·¥åÍ­¸ú´ü¸Â */
-define('E_CACHE_EXPIRED', 258);
+/** エラーコード: キャッシュ有効期限 */
+define('E_CACHE_EXPIRED', 194);
 
-/** ¥¨¥é¡¼¥³¡¼¥É: ¥­¥ã¥Ã¥·¥å¥¨¥é¡¼(¤½¤Î¾) */
-define('E_CACHE_GENERAL', 259);
+/** エラーコード: キャッシュエラー(その他) */
+define('E_CACHE_GENERAL', 195);
 
+/** エラーコード: プラグインが見つからない */
+define('E_PLUGIN_NOTFOUND', 196);
 
+/** エラーコード: プラグインエラー(その他) */
+define('E_PLUGIN_GENERAL', 197);
+
+/** PHP 5との互換保持定義 */
 if (defined('E_STRICT') == false) {
-       /** PHP 5¤È¤Î¸ß´¹ÊÝ»ýÄêµÁ */
-       define('E_STRICT', 0);
+    define('E_STRICT', 2048);
+}
+if (defined('E_DEPRECATED') == false) {
+    define('E_DEPRECATED', 8192);
 }
 
-/** Ethna¥°¥í¡¼¥Ð¥ëÊÑ¿ô: ¥¨¥é¡¼¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô */
+/** Ethnaグローバル変数: エラーコールバック関数 */
 $GLOBALS['_Ethna_error_callback_list'] = array();
 
-/** Ethna¥°¥í¡¼¥Ð¥ëÊÑ¿ô: ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸ */
+/** Ethnaã\82°ã\83­ã\83¼ã\83\90ã\83«å¤\89æ\95°: ã\82¨ã\83©ã\83¼ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ */
 $GLOBALS['_Ethna_error_message_list'] = array();
 
 
 // {{{ Ethna
 /**
- *     Ethna¥Õ¥ì¡¼¥à¥ï¡¼¥¯¥¯¥é¥¹
+ *  Ethnaã\83\95ã\83¬ã\83¼ã\83 ã\83¯ã\83¼ã\82¯ã\82¯ã\83©ã\82¹
  *
- *     @author         Masaki Fujimoto <fujimoto@php.net>
- *     @access         public
- *     @package        Ethna
+ *  @author     Masaki Fujimoto <fujimoto@php.net>
+ *  @access     public
+ *  @package    Ethna
  */
-class Ethna extends PEAR
+class Ethna
 {
-       /**#@+
-        *      @access private
-        */
-
-       /**#@-*/
-
-       /**
-        *      Ethna_Error¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤¹¤ë(¥¨¥é¡¼¥ì¥Ù¥ë:E_USER_ERROR)
-        *
-        *      @access public
-        *      @param  string  $message                        ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸
-        *      @param  int             $code                           ¥¨¥é¡¼¥³¡¼¥É
-        *      @static
-        */
-       function &raiseError($message, $code = E_GENERAL)
-       {
-               $userinfo = null;
-               if (func_num_args() > 2) {
-                       $userinfo = array_slice(func_get_args(), 2);
-                       if (count($userinfo) == 1 && is_array($userinfo[0])) {
-                               $userinfo = $userinfo[0];
-                       }
-               }
-               return PEAR::raiseError($message, $code, PEAR_ERROR_RETURN, E_USER_ERROR, $userinfo, 'Ethna_Error');
-       }
-
-       /**
-        *      Ethna_Error¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤¹¤ë(¥¨¥é¡¼¥ì¥Ù¥ë:E_USER_WARNING)
-        *
-        *      @access public
-        *      @param  string  $message                        ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸
-        *      @param  int             $code                           ¥¨¥é¡¼¥³¡¼¥É
-        *      @static
-        */
-       function &raiseWarning($message, $code = E_GENERAL)
-       {
-               $userinfo = null;
-               if (func_num_args() > 2) {
-                       $userinfo = array_slice(func_get_args(), 2);
-                       if (count($userinfo) == 1 && is_array($userinfo[0])) {
-                               $userinfo = $userinfo[0];
-                       }
-               }
-               return PEAR::raiseError($message, $code, PEAR_ERROR_RETURN, E_USER_WARNING, $userinfo, 'Ethna_Error');
-       }
-
-       /**
-        *      Ethna_Error¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤¹¤ë(¥¨¥é¡¼¥ì¥Ù¥ë:E_USER_NOTICE)
-        *
-        *      @access public
-        *      @param  string  $message                        ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸
-        *      @param  int             $code                           ¥¨¥é¡¼¥³¡¼¥É
-        *      @static
-        */
-       function &raiseNotice($message, $code = E_GENERAL)
-       {
-               $userinfo = null;
-               if (func_num_args() > 2) {
-                       $userinfo = array_slice(func_get_args(), 2);
-                       if (count($userinfo) == 1 && is_array($userinfo[0])) {
-                               $userinfo = $userinfo[0];
-                       }
-               }
-               return PEAR::raiseError($message, $code, PEAR_ERROR_RETURN, E_USER_NOTICE, $userinfo, 'Ethna_Error');
-       }
-
-       /**
-        *      ¥¨¥é¡¼È¯À¸»þ¤Î(¥Õ¥ì¡¼¥à¥ï¡¼¥¯¤È¤·¤Æ¤Î)¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤òÀßÄꤹ¤ë
-        *
-        *      @access public
-        *      @param  mixed   string:¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô̾ array:¥³¡¼¥ë¥Ð¥Ã¥¯¥¯¥é¥¹(̾|¥ª¥Ö¥¸¥§¥¯¥È)+¥á¥½¥Ã¥É̾
-        *      @static
-        */
-       function setErrorCallback($callback)
-       {
-               $GLOBALS['_Ethna_error_callback_list'][] = $callback;
-       }
-
-       /**
-        *      ¥¨¥é¡¼È¯À¸»þ¤Î½èÍý¤ò¹Ô¤¦(¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô/¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹)
-        *      
-        *      @access public
-        *      @param  object  Ethna_Error             Ethna_Error¥ª¥Ö¥¸¥§¥¯¥È
-        *      @static
-        */
-       function handleError(&$error)
-       {
-               for ($i = 0; $i < count($GLOBALS['_Ethna_error_callback_list']); $i++) {
-                       $callback =& $GLOBALS['_Ethna_error_callback_list'][$i];
-                       if (is_array($callback) == false) {
-                               call_user_func($callback, $error);
-                       } else if (is_object($callback[0])) {
-                               $object =& $callback[0];
-                               $method = $callback[1];
-
-                               // perform some more checks?
-                               $object->$method($error);
-                       } else {
-                               call_user_func($callback, $error);
-                       }
-               }
-       }
+    /**
+     *  渡されたオブジェクトが Ethna_Error オブジェクト
+     *  またはそのサブクラスのオブジェクトかどうかチェックします。
+     *
+     *  @param mixed  $data    チェックする変数
+     *  @param mixed  $msgcode チェックするエラーメッセージまたはエラーコード  
+     *  @return mixed 変数が、Ethna_Error の場合に TRUEを返します。
+     *                第2引数が設定された場合は、さらに 所与された $msgcode
+     *                を含む場合のみ TRUEを返します。
+     *  @static
+     */
+    public static function isError($data, $msgcode = NULL)
+    {
+        if (!is_object($data)) {
+            return false;
+        }
+
+        $class_name = get_class($data);
+        if (strcasecmp($class_name, 'Ethna_Error') === 0
+         || is_subclass_of($data, 'Ethna_Error')) {
+            if ($msgcode == NULL) {
+                return true;
+            } elseif ($data->getCode() == $msgcode) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     *  Ethna_Errorオブジェクトを生成する(エラーレベル:E_USER_ERROR)
+     *
+     *  @access public
+     *  @param  string  $message            エラーメッセージ
+     *  @param  int     $code               エラーコード
+     *  @static
+     */
+    public static function raiseError($message, $code = E_GENERAL)
+    {
+        $userinfo = null;
+        if (func_num_args() > 2) {
+            $userinfo = array_slice(func_get_args(), 2);
+            if (count($userinfo) == 1 && is_array($userinfo[0])) {
+                $userinfo = $userinfo[0];
+            }
+        }
+        $error = new Ethna_Error($message, $code, ETHNA_ERROR_DUMMY, E_USER_ERROR, $userinfo, 'Ethna_Error');
+        return $error;
+    }
+
+    /**
+     *  Ethna_Errorオブジェクトを生成する(エラーレベル:E_USER_WARNING)
+     *
+     *  @access public
+     *  @param  string  $message            エラーメッセージ
+     *  @param  int     $code               エラーコード
+     *  @static
+     */
+    public static function raiseWarning($message, $code = E_GENERAL)
+    {
+        $userinfo = null;
+        if (func_num_args() > 2) {
+            $userinfo = array_slice(func_get_args(), 2);
+            if (count($userinfo) == 1 && is_array($userinfo[0])) {
+                $userinfo = $userinfo[0];
+            }
+        }
+
+        $error = new Ethna_Error($message, $code, ETHNA_ERROR_DUMMY, E_USER_WARNING, $userinfo, 'Ethna_Error');
+        return $error;
+    }
+
+    /**
+     *  Ethna_Errorオブジェクトを生成する(エラーレベル:E_USER_NOTICE)
+     *
+     *  @access public
+     *  @param  string  $message            エラーメッセージ
+     *  @param  int     $code               エラーコード
+     *  @static
+     */
+    public static function raiseNotice($message, $code = E_GENERAL)
+    {
+        $userinfo = null;
+        if (func_num_args() > 2) {
+            $userinfo = array_slice(func_get_args(), 2);
+            if (count($userinfo) == 1 && is_array($userinfo[0])) {
+                $userinfo = $userinfo[0];
+            }
+        }
+
+        $error = new Ethna_Error($message, $code, ETHNA_ERROR_DUMMY, E_USER_NOTICE, $userinfo, 'Ethna_Error');
+        return $error;
+    }
+
+    /**
+     *  エラー発生時の(フレームワークとしての)コールバック関数を設定する
+     *
+     *  @access public
+     *  @param  mixed   string:コールバック関数名 array:コールバッククラス(名|オブジェクト)+メソッド名
+     *  @static
+     */
+    public static function setErrorCallback($callback)
+    {
+        $GLOBALS['_Ethna_error_callback_list'][] = $callback;
+    }
+
+    /**
+     *  エラー発生時の(フレームワークとしての)コールバック関数をクリアする
+     *
+     *  @access public
+     *  @static
+     */
+    public static function clearErrorCallback()
+    {
+        $GLOBALS['_Ethna_error_callback_list'] = array();
+    }
+
+    /**
+     *  エラー発生時の処理を行う(コールバック関数/メソッドを呼び出す)
+     *  
+     *  @access public
+     *  @param  object  Ethna_Error     Ethna_Errorオブジェクト
+     *  @static
+     */
+    public static function handleError(&$error)
+    {
+        for ($i = 0; $i < count($GLOBALS['_Ethna_error_callback_list']); $i++) {
+            $callback =& $GLOBALS['_Ethna_error_callback_list'][$i];
+            if (is_array($callback) == false) {
+                call_user_func($callback, $error);
+            } else if (is_object($callback[0])) {
+                $object =& $callback[0];
+                $method = $callback[1];
+
+                // perform some more checks?
+                $object->$method($error);
+            } else {  
+                //  call statically
+                call_user_func($callback, $error);
+            }
+        }
+    }
 }
 // }}}
-?>
+