/** * 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; } }