$val) { $infos[$key] = $val; } $adapter = new $className($infos); if ($connect) { $adapter->getConnection(); Zend_Db_Table::setDefaultAdapter($adapter); // we don't want the connection information to appear in the logs $adapter->resetConfig(); } return $adapter; } /** * Get adapter class name * * @param string $adapterName * @return string * @throws \Exception */ private static function getAdapterClassName($adapterName) { $className = 'Piwik\Db\Adapter\\' . str_replace(' ', '\\', ucwords(str_replace(array('_', '\\'), ' ', strtolower($adapterName)))); if (!class_exists($className)) { throw new \Exception(sprintf("Adapter '%s' is not valid. Maybe check that your Matomo configuration files in config/*.ini.php are readable by the webserver.", $adapterName)); } return $className; } /** * Get default port for named adapter * * @param string $adapterName * @return int */ public static function getDefaultPortForAdapter($adapterName) { $className = self::getAdapterClassName($adapterName); return call_user_func(array($className, 'getDefaultPort')); } /** * Get list of adapters * * @return array */ public static function getAdapters() { static $adapterNames = array( // currently supported by Piwik 'Pdo\Mysql', 'Mysqli', // other adapters supported by Zend_Db // 'Pdo_Pgsql', // 'Pdo_Mssql', // 'Sqlsrv', // 'Pdo_Ibm', // 'Db2', // 'Pdo_Oci', // 'Oracle', ); $adapters = array(); foreach ($adapterNames as $adapterName) { $className = '\Piwik\Db\Adapter\\' . $adapterName; if (call_user_func(array($className, 'isEnabled'))) { $adapters[strtoupper($adapterName)] = call_user_func(array($className, 'getDefaultPort')); } } return $adapters; } /** * Checks if the available adapters are recommended by Piwik or not. * @param string $adapterName * @return bool */ public static function isRecommendedAdapter($adapterName) { return strtolower($adapterName) === 'pdo/mysql'; } }