From 9da2d3f127c818a2e9f632a5e4d66cd0cf4d1d55 Mon Sep 17 00:00:00 2001 From: rMalie Date: Thu, 2 Feb 2012 15:00:02 +0000 Subject: [PATCH] // Fix installer with clear mode to false git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@12935 b9a71923-0436-4b27-9f14-aed3839534dd --- install-dev/controllers/http/database.php | 4 +- install-dev/controllers/http/process.php | 29 ++++++--- install-dev/models/install.php | 79 +++++++++++------------ 3 files changed, 62 insertions(+), 50 deletions(-) diff --git a/install-dev/controllers/http/database.php b/install-dev/controllers/http/database.php index 5fdb969f9..86c3f8410 100644 --- a/install-dev/controllers/http/database.php +++ b/install-dev/controllers/http/database.php @@ -88,7 +88,9 @@ class InstallControllerHttpDatabase extends InstallControllerHttp $this->session->database_password, $this->session->database_prefix, $this->session->database_engine, - $this->session->database_clear + + // We do not want to validate table prefix if we are already in install process + ($this->session->step == 'process') ? true : $this->session->database_clear ); return count($this->errors) ? false : true; diff --git a/install-dev/controllers/http/process.php b/install-dev/controllers/http/process.php index 9e4050aab..0ef88946f 100644 --- a/install-dev/controllers/http/process.php +++ b/install-dev/controllers/http/process.php @@ -74,7 +74,9 @@ class InstallControllerHttpProcess extends InstallControllerHttp if (file_exists(_PS_ROOT_DIR_.'/'.self::SETTINGS_FILE)) require_once _PS_ROOT_DIR_.'/'.self::SETTINGS_FILE; - if (Tools::getValue('installDatabase')) + if (Tools::getValue('generateSettingsFile')) + $this->processGenerateSettingsFile(); + else if (Tools::getValue('installDatabase') && !empty($this->session->process_validated['generateSettingsFile'])) $this->processInstallDatabase(); else if (Tools::getValue('populateDatabase') && !empty($this->session->process_validated['installDatabase'])) $this->processPopulateDatabase(); @@ -95,22 +97,32 @@ class InstallControllerHttpProcess extends InstallControllerHttp } /** - * PROCESS : installDatabase - * Generate settings file and create database structure + * PROCESS : generateSettingsFile */ - public function processInstallDatabase() + public function processGenerateSettingsFile() { - $success = $this->model_install->installDatabase( + $success = $this->model_install->generateSettingsFile( $this->session->database_server, $this->session->database_login, $this->session->database_password, $this->session->database_name, $this->session->database_prefix, - $this->session->database_engine, - $this->session->database_clear + $this->session->database_engine ); - if (!$success || $this->model_install->getErrors()) + if (!$success) + $this->ajaxJsonAnswer(false); + $this->session->process_validated['generateSettingsFile'] = true; + $this->ajaxJsonAnswer(true); + } + + /** + * PROCESS : installDatabase + * Create database structure + */ + public function processInstallDatabase() + { + if (!$this->model_install->installDatabase($this->session->database_clear) || $this->model_install->getErrors()) $this->ajaxJsonAnswer(false, $this->model_install->getErrors()); $this->session->process_validated['installDatabase'] = true; $this->ajaxJsonAnswer(true); @@ -245,6 +257,7 @@ class InstallControllerHttpProcess extends InstallControllerHttp public function display() { $this->process_steps = array(); + $this->process_steps[] = array('key' => 'generateSettingsFile', 'lang' => $this->l('Create settings.inc file')); $this->process_steps[] = array('key' => 'installDatabase', 'lang' => $this->l('Create database tables')); $this->process_steps[] = array('key' => 'populateDatabase', 'lang' => $this->l('Populate database tables')); $this->process_steps[] = array('key' => 'configureShop', 'lang' => $this->l('Configure shop informations')); diff --git a/install-dev/models/install.php b/install-dev/models/install.php index ce3c21000..e5f3f05ac 100644 --- a/install-dev/models/install.php +++ b/install-dev/models/install.php @@ -29,47 +29,6 @@ class InstallModelInstall extends InstallAbstractModel { const SETTINGS_FILE = 'config/settings.inc.php'; - /** - * PROCESS : installDatabase - * Generate settings file and create database structure - */ - public function installDatabase($database_server, $database_login, $database_password, $database_name, $database_prefix, $database_engine, $clear_database = false) - { - // Generate settings file - $this->generateSettingsFile($database_server, $database_login, $database_password, $database_name, $database_prefix, $database_engine); - - // Clear database (only tables with same prefix) - require_once _PS_ROOT_DIR_.'/'.self::SETTINGS_FILE; - if ($clear_database) - $this->clearDatabase(); - - // Install database structure - $sql_loader = new InstallSqlLoader(); - $sql_loader->setMetaData(array( - 'PREFIX_' => _DB_PREFIX_, - 'ENGINE_TYPE' => _MYSQL_ENGINE_, - )); - - try - { - $sql_loader->parse_file(_PS_INSTALL_DATA_PATH_.'db_structure.sql'); - } - catch (PrestashopInstallerException $e) - { - $this->setError($this->language->l('Database structure file not found')); - return false; - } - - if ($errors = $sql_loader->getErrors()) - { - foreach ($errors as $error) - $this->setError($this->language->l('An SQL error occured: %1$s', $error['error'])); - return false; - } - - return true; - } - /** * Generate settings file */ @@ -124,6 +83,44 @@ class InstallModelInstall extends InstallAbstractModel return true; } + /** + * PROCESS : installDatabase + * Generate settings file and create database structure + */ + public function installDatabase($clear_database = false) + { + // Clear database (only tables with same prefix) + require_once _PS_ROOT_DIR_.'/'.self::SETTINGS_FILE; + if ($clear_database) + $this->clearDatabase(); + + // Install database structure + $sql_loader = new InstallSqlLoader(); + $sql_loader->setMetaData(array( + 'PREFIX_' => _DB_PREFIX_, + 'ENGINE_TYPE' => _MYSQL_ENGINE_, + )); + + try + { + $sql_loader->parse_file(_PS_INSTALL_DATA_PATH_.'db_structure.sql'); + } + catch (PrestashopInstallerException $e) + { + $this->setError($this->language->l('Database structure file not found')); + return false; + } + + if ($errors = $sql_loader->getErrors()) + { + foreach ($errors as $error) + $this->setError($this->language->l('An SQL error occured: %1$s', $error['error'])); + return false; + } + + return true; + } + /** * Clear database (only tables with same prefix) *