Exemplo n.º 1
0
 /**
  * Creates database object based on form data.
  * 
  * @return array The database connection info. Can be passed into Piwik::createDatabaseObject.
  */
 public function createDatabaseObject()
 {
     $dbname = $this->getSubmitValue('dbname');
     if (empty($dbname)) {
         throw new Exception("No database name");
     }
     $adapter = $this->getSubmitValue('adapter');
     $port = Piwik_Db_Adapter::getDefaultPortForAdapter($adapter);
     $dbInfos = array('host' => $this->getSubmitValue('host'), 'username' => $this->getSubmitValue('username'), 'password' => $this->getSubmitValue('password'), 'dbname' => $dbname, 'tables_prefix' => $this->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 {
         @Piwik::createDatabaseObject($dbInfos);
     } catch (Zend_Db_Adapter_Exception $e) {
         $db = Piwik_Db_Adapter::factory($adapter, $dbInfos, $connect = false);
         // 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']);
             // select the newly created database
             @Piwik::createDatabaseObject($dbInfos);
         } else {
             throw $e;
         }
     }
     return $dbInfos;
 }
Exemplo n.º 2
0
	/**
	 * Installation Step 3: Database Set-up
	 */
	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_Adapter::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_Adapter::factory($adapter, $dbInfos, $connect = false);

					// 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);

		echo $view->render();
	}