/** * After the standard validation is completed, check the database connections. * @see CModel::afterValidate() */ public function afterValidate() { parent::afterValidate(); if (count($this->getErrors()) == 0) { //check memcache first, since creating the db / user should be last. if ($this->memcacheHostname != null) { if ($this->memcachePortNumber == null) { $this->addError('memcachePortNumber', Zurmo::t('InstallModule', 'Since you specified a memcache ' . 'hostname, you must specify a port.')); return; } $memcacheResult = InstallUtil::checkMemcacheConnection($this->memcacheHostname, (int) $this->memcachePortNumber); if ($memcacheResult !== true) { $this->addError('memcacheHostname', Zurmo::t('InstallModule', 'Error code:') . " " . $memcacheResult[0] . '<br/>Message(Memcached): ' . $memcacheResult[1]); return; } } if (!$this->hostInfo) { $this->addError('hostInfo', Zurmo::t('InstallModule', 'Please enter server IP or URL.')); return; } else { if (strpos($this->hostInfo, 'http://') === false && strpos($this->hostInfo, 'https://') === false) { $this->addError('hostInfo', Zurmo::t('InstallModule', 'Host Info must start with "http://" or "https://".')); return; } } if ($this->databaseAdminUsername != null) { if ($this->databaseAdminPassword == null) { $this->addError('databaseAdminPassword', Zurmo::t('InstallModule', 'Since you specified a database ' . 'admin username, you must enter a password')); return; } $connectionResult = DatabaseCompatibilityUtil::checkDatabaseConnection($this->databaseType, $this->databaseHostname, $this->databaseAdminUsername, $this->databaseAdminPassword, (int) $this->databasePort); if ($connectionResult !== true) { $this->addError('databaseAdminUsername', Zurmo::t('InstallModule', 'Error code:') . " " . $connectionResult[0] . '<br/>Message: ' . $connectionResult[1]); return; } $userExistsResult = DatabaseCompatibilityUtil::checkDatabaseUserExists($this->databaseType, $this->databaseHostname, $this->databaseAdminUsername, $this->databaseAdminPassword, (int) $this->databasePort, $this->databaseUsername); if ($userExistsResult === true) { $this->addError('databaseUsername', Zurmo::t('InstallModule', 'You have specified an existing user. ' . 'If you would like to use this user, then do not specify the database admin username and ' . 'password. Otherwise pick a database username that does not exist.')); return; } $databaseExistsResult = DatabaseCompatibilityUtil::checkDatabaseExists($this->databaseType, $this->databaseHostname, $this->databaseAdminUsername, $this->databaseAdminPassword, (int) $this->databasePort, $this->databaseName); if ($databaseExistsResult === true) { $this->addError('databaseName', Zurmo::t('InstallModule', 'You have specified an existing database. ' . 'If you would like to use this database, then do not specify the database admin username and ' . 'password. Otherwise pick a database name that does not exist.')); return; } $createDatabaseResult = DatabaseCompatibilityUtil::createDatabase($this->databaseType, $this->databaseHostname, $this->databaseAdminUsername, $this->databaseAdminPassword, (int) $this->databasePort, $this->databaseName); if ($createDatabaseResult === false) { $this->addError('databaseName', Zurmo::t('InstallModule', 'There was a problem creating the database ' . 'Error code:') . " " . $connectionResult[0] . '<br/>Message: ' . $connectionResult[1]); return; } $createUserResult = DatabaseCompatibilityUtil::createDatabaseUser($this->databaseType, $this->databaseHostname, $this->databaseAdminUsername, $this->databaseAdminPassword, (int) $this->databasePort, $this->databaseName, $this->databaseUsername, $this->databasePassword); if ($createUserResult === false) { $this->addError('databaseUsername', Zurmo::t('InstallModule', 'There was a problem creating the user ' . 'Error code:') . " " . $connectionResult[0] . '<br/>Message: ' . $connectionResult[1]); return; } } else { $connectionResult = DatabaseCompatibilityUtil::checkDatabaseConnection($this->databaseType, $this->databaseHostname, $this->databaseUsername, $this->databasePassword, (int) $this->databasePort); if ($connectionResult !== true) { $this->addError('databaseUsername', Zurmo::t('InstallModule', 'Error code:') . " " . $connectionResult[0] . '<br/>Message: ' . $connectionResult[1]); return; } $databaseExistsResult = DatabaseCompatibilityUtil::checkDatabaseExists($this->databaseType, $this->databaseHostname, $this->databaseUsername, $this->databasePassword, (int) $this->databasePort, $this->databaseName); if ($databaseExistsResult !== true) { $this->addError('databaseName', Zurmo::t('InstallModule', 'The database name specified does not ' . 'exist or the user specified does not have access.') . '<br/>' . Zurmo::t('InstallModule', 'Error code:') . " " . $databaseExistsResult[0] . '<br/>Message: ' . $databaseExistsResult[1]); return; } else { if ($this->removeExistingData == false) { $this->addError('removeExistingData', Zurmo::t('InstallModule', 'Since you specified an existing database ' . 'you must check this box in order to proceed. THIS WILL REMOVE ALL EXISTING DATA.')); return; } } } } }
public function testCreateDatabaseUser() { // This test cannot run as saltdev. It is therefore skipped on the server. if ($this->rootUsername == 'root') { $this->assertTrue(DatabaseCompatibilityUtil::createDatabase('mysql', $this->hostname, $this->rootUsername, $this->rootPassword, $this->databasePort, $this->temporaryDatabaseName)); $this->assertTrue(DatabaseCompatibilityUtil::createDatabaseUser('mysql', $this->hostname, $this->rootUsername, $this->rootPassword, $this->databasePort, $this->temporaryDatabaseName, 'wacko', 'wacked')); $this->assertTrue(DatabaseCompatibilityUtil::createDatabaseUser('mysql', $this->hostname, $this->rootUsername, $this->rootPassword, $this->databasePort, $this->temporaryDatabaseName, 'wacko', '')); } }
public function testConnectToDatabaseCreateSuperUserBuildDatabaseAndFreeze() { // This test cannot run as saltdev. It is therefore skipped on the server. if ($this->temporaryDatabaseUsername == 'root') { $this->assertTrue(DatabaseCompatibilityUtil::createDatabase('mysql', $this->temporaryDatabaseHostname, $this->temporaryDatabaseUsername, $this->temporaryDatabasePassword, $this->temporaryDatabasePort, $this->temporaryDatabaseName)); $this->assertTrue(DatabaseCompatibilityUtil::createDatabaseUser('mysql', $this->temporaryDatabaseHostname, $this->temporaryDatabaseUsername, $this->temporaryDatabasePassword, $this->temporaryDatabasePort, $this->temporaryDatabaseName, 'wacko', 'wacked')); InstallUtil::connectToDatabase('mysql', $this->temporaryDatabaseHostname, 'wacky', $this->temporaryDatabaseUsername, $this->temporaryDatabasePassword, $this->temporaryDatabasePort); Yii::app()->user->userModel = InstallUtil::createSuperUser('super', 'super'); $messageLogger = new MessageLogger(); InstallUtil::autoBuildDatabase($messageLogger); $this->assertFalse($messageLogger->isErrorMessagePresent()); ReadPermissionsOptimizationUtil::rebuild(); InstallUtil::freezeDatabase(); $tableNames = R::getCol('show tables'); $this->assertEquals(array('_group', '_group__user', '_right', '_user', 'account', 'account_read', 'activity', 'activity_item', 'actual_permissions_cache', 'address', 'auditevent', 'contact', 'contact_opportunity', 'contact_read', 'contactstate', 'currency', 'currencyvalue', 'customfield', 'customfielddata', 'dashboard', 'email', 'filecontent', 'filemodel', 'globalmetadata', 'item', 'log', 'mashableactivity', 'meeting', 'meeting_read', 'namedsecurableitem', 'note', 'note_read', 'opportunity', 'opportunity_read', 'ownedcustomfield', 'ownedsecurableitem', 'permission', 'permitable', 'person', 'perusermetadata', 'policy', 'portlet', 'role', 'securableitem', 'task', 'task_read'), $tableNames); } }