function databaseSetup() { $this->checkPreviousStepIsValid( __FUNCTION__ ); // case the user hits the back button $this->session->skipThisStep = array( 'firstWebsiteSetup' => false, 'displayJavascriptCode' => false, ); $view = new Piwik_Installation_View( $this->pathView . 'databaseSetup.tpl', $this->getInstallationSteps(), __FUNCTION__ ); $this->skipThisStep( __FUNCTION__ ); $view->showNextStep = false; $form = new Piwik_Installation_FormDatabaseSetup(); if($form->validate()) { $adapter = $form->getSubmitValue('adapter'); $port = Piwik_Db::getDefaultPortForAdapter($adapter); $dbInfos = array( 'host' => $form->getSubmitValue('host'), 'username' => $form->getSubmitValue('username'), 'password' => $form->getSubmitValue('password'), 'dbname' => $form->getSubmitValue('dbname'), 'tables_prefix' => $form->getSubmitValue('tables_prefix'), 'adapter' => $adapter, 'port' => $port, ); if(($portIndex = strpos($dbInfos['host'], '/')) !== false) { // unix_socket=/path/sock.n $dbInfos['port'] = substr($dbInfos['host'], $portIndex); $dbInfos['host'] = ''; } else if(($portIndex = strpos($dbInfos['host'], ':')) !== false) { // host:port $dbInfos['port'] = substr($dbInfos['host'], $portIndex + 1 ); $dbInfos['host'] = substr($dbInfos['host'], 0, $portIndex); } try{ try { Piwik::createDatabaseObject($dbInfos); $this->session->databaseCreated = true; } catch (Zend_Db_Adapter_Exception $e) { $db = Piwik_Db::factory($adapter, $dbInfos); // database not found, we try to create it if($db->isErrNo($e, '1049')) { $dbInfosConnectOnly = $dbInfos; $dbInfosConnectOnly['dbname'] = null; Piwik::createDatabaseObject($dbInfosConnectOnly); Piwik::createDatabase($dbInfos['dbname']); $this->session->databaseCreated = true; } else { throw $e; } } Piwik::checkDatabaseVersion(); $this->session->databaseVersionOk = true; $this->session->db_infos = $dbInfos; $this->redirectToNextStep( __FUNCTION__ ); } catch(Exception $e) { $view->errorMessage = $e->getMessage(); } } $view->addForm($form); $view->infos = self::getSystemInformation(); echo $view->render(); }
public static function createDatabaseObject($dbInfos = null) { $config = Zend_Registry::get('config'); if (is_null($dbInfos)) { $dbInfos = $config->database->toArray(); } $dbInfos['profiler'] = $config->Debug->enable_sql_profiler; $db = null; Piwik_PostEvent('Reporting.createDatabase', $db); if (is_null($db)) { if ($dbInfos['port'][0] == '/') { $dbInfos['unix_socket'] = $dbInfos['port']; unset($dbInfos['host']); unset($dbInfos['port']); } // not used by Zend Framework unset($dbInfos['tables_prefix']); unset($dbInfos['adapter']); $db = Piwik_Db::factory($config->database->adapter, $dbInfos); $db->getConnection(); Zend_Db_Table::setDefaultAdapter($db); $db->resetConfig(); // we don't want this information to appear in the logs } Zend_Registry::set('db', $db); }