コード例 #1
0
ファイル: base.php プロジェクト: bermi/akelos
 /**
  * @static
  * @param array $database_settings
  * @return AkDbAdapter
  */
 static function &getInstance($database_specifications = AK_DEFAULT_DATABASE_PROFILE, $auto_connect = true, $namespace = null)
 {
     $settings_hash = is_string($database_specifications) ? $database_specifications : AkDbAdapter::hash($database_specifications);
     $static_var_name = 'AkDbAdapter_getInstance_' . $settings_hash;
     if (!($Connection = Ak::getStaticVar($static_var_name))) {
         defined('AK_DATABASE_SETTINGS_NAMESPACE') || define('AK_DATABASE_SETTINGS_NAMESPACE', 'database');
         $namespace = empty($namespace) ? AK_DATABASE_SETTINGS_NAMESPACE : $namespace;
         if (empty($database_specifications)) {
             $database_specifications = Ak::getSettings($namespace, false, $settings_hash);
         } elseif (is_string($database_specifications)) {
             $environment_settings = Ak::getSettings($namespace, false, $database_specifications);
             if (!empty($environment_settings)) {
                 $database_specifications = $environment_settings;
             } elseif (strstr($database_specifications, '://')) {
                 $database_specifications = AkDbAdapter::getDbSettingsFromDsn($database_specifications);
                 $settings_hash = AK_ENVIRONMENT;
             } else {
                 global $database_settings;
                 if (isset($database_settings) && !file_exists(AkConfig::getDir('config') . DS . $namespace . '.yml')) {
                     trigger_error(Ak::t("You are still using the old config/config.php database configuration. Please upgrade to use the config/database.yml configuration."), E_USER_NOTICE);
                 }
                 if (!file_exists(AkConfig::getDir('config') . DS . $namespace . '.yml')) {
                     trigger_error(Ak::t("Could not find the database configuration file in %dbconfig.", array('%dbconfig' => AkConfig::getDir('config') . DS . $namespace . '.yml')), E_USER_ERROR);
                 } else {
                     trigger_error(Ak::t("Could not find the database profile '%profile_name' in config/%dbfile.yml.", array('%profile_name' => $database_specifications, '%dbfile' => $namespace)), E_USER_ERROR);
                 }
                 $return = false;
                 return $return;
             }
         } elseif (!empty($database_settings[$settings_hash])) {
             $database_specifications = $database_settings[$settings_hash];
         }
         if (empty($database_specifications)) {
             trigger_error(Ak::t('Could not find database settings for %namespace.yml/%settings_hash', array('%namespace' => $namespace, '%settings_hash' => $settings_hash)), E_USER_ERROR);
         }
         // Compatibility with RoR database.yml format
         $database_specifications['user'] = isset($database_specifications['user']) ? $database_specifications['user'] : (isset($database_specifications['username']) ? $database_specifications['username'] : '');
         $database_specifications['type'] = isset($database_specifications['type']) ? $database_specifications['type'] : $database_specifications['adapter'];
         $database_specifications['database_name'] = isset($database_specifications['database_name']) ? $database_specifications['database_name'] : (isset($database_specifications['database']) ? $database_specifications['database'] : '');
         $class_name = 'Ak' . AkInflector::camelize($database_specifications['type']) . 'DbAdapter';
         $adapter_class_file = AK_ACTIVE_RECORD_DIR . DS . 'adapters' . DS . AkInflector::underscore($database_specifications['type']) . '.php';
         if (!@(include_once $adapter_class_file)) {
             trigger_error(Ak::t('Could not find database adapter file on %path', array('%path' => $adapter_class_file)), E_USER_ERROR);
         }
         $Connection = new $class_name($database_specifications, $auto_connect);
         Ak::setStaticVar($static_var_name, $Connection);
     }
     return $Connection;
 }