/** * @static * @param array $database_settings * @return AkDbAdapter */ function &getInstance($database_specifications = AK_DEFAULT_DATABASE_PROFILE, $auto_connect = true) { static $connections; $settings_hash = is_string($database_specifications) ? $database_specifications : AkDbAdapter::_hash($database_specifications); if (empty($connections[$settings_hash])) { global $database_settings; if (is_string($database_specifications)) { if (!empty($database_settings[$database_specifications])) { $database_specifications = $database_settings[$database_specifications]; } elseif (strstr($database_specifications, '://')) { $database_specifications = AkDbAdapter::_getDbSettingsFromDsn($database_specifications); $settings_hash = AK_ENVIRONMENT; } else { trigger_error(Ak::t("Could not find the database profile '%profile_name' in config/config.php.", array('%profile_name' => $database_specifications)), E_USER_ERROR); $return = false; return $return; } } elseif (!empty($database_settings[$settings_hash])) { $database_specifications = $database_settings[$settings_hash]; } $available_adapters = Ak::toArray(AK_AVAILABLE_DATABASES); $class_name = 'AkDbAdapter'; $designated_database = strtolower($database_specifications['type']); if (in_array($designated_database, $available_adapters)) { $class_name = 'Ak' . ucfirst($designated_database) . 'DbAdapter'; require_once AK_LIB_DIR . DS . 'AkActiveRecord' . DS . 'AkDbAdapters' . DS . $class_name . '.php'; } $connections[$settings_hash] =& new $class_name($database_specifications, $auto_connect); } return $connections[$settings_hash]; }
/** * @static * @param array $database_settings * @return AkDbAdapter */ public static function &getInstance($database_specifications = AK_DEFAULT_DATABASE_PROFILE, $auto_connect = true) { static $connections; $settings_hash = is_string($database_specifications) ? $database_specifications : AkDbAdapter::_hash($database_specifications); if (empty($connections[$settings_hash])) { if (empty($database_specifications)) { $settings_hash = AK_ENVIRONMENT; $database_specifications = Ak::getSettings('database', false, $settings_hash); } else { if (is_string($database_specifications)) { $environment_settings = Ak::getSettings('database', 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(AK_CONFIG_DIR . DS . 'database.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(AK_CONFIG_DIR . DS . 'database.yml')) { trigger_error(Ak::t("Could not find the database configuration file in %dbconfig.", array('%dbconfig' => AK_CONFIG_DIR . DS . 'database.yml')), E_USER_ERROR); } else { trigger_error(Ak::t("Could not find the database profile '%profile_name' in config/database.yml.", array('%profile_name' => $database_specifications)), E_USER_ERROR); } $return = false; return $return; } } elseif (!empty($database_settings[$settings_hash])) { $database_specifications = $database_settings[$settings_hash]; } } $available_adapters = Ak::toArray(AK_AVAILABLE_DATABASES); $class_name = 'AkDbAdapter'; $designated_database = strtolower($database_specifications['type']); if (in_array($designated_database, $available_adapters)) { $class_name = 'Ak' . ucfirst($designated_database) . 'DbAdapter'; require_once AK_LIB_DIR . DS . 'AkActiveRecord' . DS . 'AkDbAdapters' . DS . $class_name . '.php'; } $connections[$settings_hash] = new $class_name($database_specifications, $auto_connect); } return $connections[$settings_hash]; }