*/ Prado::using('Application.Common.Class.Errors'); Prado::using('Application.API.Class.BException'); Prado::using('Application.API.Class.APIConfig'); Prado::using('System.Data.ActiveRecord.TActiveRecord'); class APIDbModule extends TActiveRecord { /** * Get Data Source Name (DSN). * * For SQLite params are: * array('type' => 'type', 'path' => '/some/system/path'); * For others params are: * array('type' => 'type', 'name' => 'name', 'host' => 'IP or hostname', 'port' => 'database port'); * * @access public * @param array $db_params database connection params * @return string Data Source Name (DSN) */ public static function getDsn(array $db_params) { $dsn_params = array(); if(array_key_exists('path', $db_params) && !empty($db_params['path'])) { $dsn_params[] = $db_params['type'] . ':' . $db_params['path']; } else { $dsn_params[] = $db_params['type'] . ':' . 'dbname=' . $db_params['name']; if(array_key_exists('ip_addr', $db_params)) { $dsn_params[] = 'host=' . $db_params['ip_addr']; } if(array_key_exists('port', $db_params)) { $dsn_params[] = 'port=' . $db_params['port']; } } $dsn = implode(';', $dsn_params); return $dsn; } public function getDbConnection() { $config = new APIConfig(); $db_params = $config->getConfig('db'); $db_connection = self::getAPIDbConnection($db_params); return $db_connection; } /** * Get API catalog database connection. * * @access public * @param array database parameters from api config * @param bool force connection try (used when db_params are not saved yet) * @return object TDbConnection instance or null if errors occured during connecting * @throws BCatalogExcemption if cataloga access is not supported */ public static function getAPIDbConnection(array $db_params, $force = false) { $db_connection = null; if ((array_key_exists('enabled', $db_params) && $db_params['enabled'] === '1') || $force === true) { $dsn = self::getDsn($db_params); $db_connection = null; if (array_key_exists('login', $db_params) && array_key_exists('password', $db_params)) { $db_connection = new TDbConnection($dsn, $db_params['login'], $db_params['password']); } else { $db_connection = new TDbConnection($dsn); } $db_connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db_connection->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); } else { throw new BCatalogException( DatabaseError::MSG_ERROR_DATABASE_ACCESS_NOT_SUPPORTED, DatabaseError::ERROR_DATABASE_ACCESS_NOT_SUPPORTED ); } return $db_connection; } public function getColumnValue($column_name) { // column name to lower due to not correct working PDO::CASE_LOWER for SQLite database $column_name = strtolower($column_name); $value = parent::getColumnValue($column_name); return $value; } }