Esempio n. 1
0
	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();
	}
Esempio n. 2
0
 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);
 }