Пример #1
0
 /**
  * Check the database version is the version we are expecting. If it isn't,
  * attempt to automatically upgrade the database.
  */
 protected function checkDatabaseVersion()
 {
     $version_conf = new Zend_Config_Ini(APPLICATION_PATH . '/configs/version.ini', 'version');
     $expected_db_version = (int) $version_conf->gd->expect_db_version;
     try {
         $current_db_version = (int) GD_Config::get("db_version");
         if ($current_db_version < $expected_db_version) {
             $session = new Zend_Session_Namespace('gd_session');
             if ($session->upgrade_attempts >= 1) {
                 $session->upgrade_attempts = 0;
                 die("Database upgrade failed.");
             } else {
                 $cfg = Zend_Db_Table::getDefaultAdapter()->getConfig();
                 $db_adm = new GD_Db_Admin($cfg["host"], $cfg["username"], $cfg["password"], $cfg["dbname"]);
                 $db_adm->upgradeDatabase($current_db_version, $expected_db_version);
                 if (isset($session->upgrade_attempts)) {
                     $session->upgrade_attempts++;
                 } else {
                     $session->upgrade_attempts = 1;
                 }
                 $this->_response->setRedirect('/');
                 $this->_response->sendResponse();
             }
         } else {
             if ($current_db_version > $expected_db_version) {
                 die("Database version was too new??? Expected '{$expected_db_version}' and it is currently at '{$current_db_version}'.");
             }
         }
     } catch (Exception $ex) {
         $this->_request->setParam('db_error_detail', $ex->getMessage());
         $this->_request->setModuleName('default');
         $this->_request->setControllerName('error');
         $this->_request->setActionName('database');
         return;
     }
 }