コード例 #1
0
 /**
  * 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;
                 }
             }
         }
     }
 }
コード例 #2
0
 public function testCheckMemcacheConnection()
 {
     if (!MEMCACHE_ON) {
         $this->markTestSkipped('Memcache level caching is turned off.');
     }
     $this->assertTrue(InstallUtil::checkMemcacheConnection('127.0.0.1', 11211));
     $this->assertTrue(InstallUtil::checkMemcacheConnection('localhost', 11211));
     $results = InstallUtil::checkMemcacheConnection('10.3.3.3', 11211);
     $this->assertTrue(110 == $results[0] || 10060 == $results[0]);
     $results = InstallUtil::checkMemcacheConnection('localhost', 12345);
     $this->assertTrue(111 == $results[0] || 10061 == $results[0] || 10060 == $results[0]);
 }