diff --git a/setup/applicationinstaller.class.inc.php b/setup/applicationinstaller.class.inc.php index 84abc7e04..581409898 100644 --- a/setup/applicationinstaller.class.inc.php +++ b/setup/applicationinstaller.class.inc.php @@ -89,15 +89,13 @@ class ApplicationInstaller * some information about the progress and the success of the various * sequential steps. * - * @param bool $bSwitchToMaintenance - * * @param bool $bVerbose * @param string|null $sMessage * @param string|null $sInstallComment * * @return boolean True if the installation was successful, false otherwise */ - public function ExecuteAllSteps($bSwitchToMaintenance = true, $bVerbose = true, &$sMessage = null, $sInstallComment = null) + public function ExecuteAllSteps($bVerbose = true, &$sMessage = null, $sInstallComment = null) { $sStep = ''; $sStepLabel = ''; @@ -116,7 +114,7 @@ class ApplicationInstaller echo "Starting the installation...\n"; } } - $aRes = $this->ExecuteStep($sStep, $bSwitchToMaintenance, $sInstallComment); + $aRes = $this->ExecuteStep($sStep, $sInstallComment); $sStep = $aRes['next-step']; $sStepLabel = $aRes['next-step-label']; $sMessage = $aRes['message']; @@ -182,12 +180,11 @@ class ApplicationInstaller * and the next step to perform * * @param string $sStep The identifier of the step to execute - * @param bool $bSwitchToMaintenance * @param string|null $sInstallComment * * @return array (status => , message => , percentage-completed => , next-step => , next-step-label => ) */ - public function ExecuteStep($sStep = '', $bSwitchToMaintenance= true, $sInstallComment = null) + public function ExecuteStep($sStep = '', $sInstallComment = null) { try { @@ -604,7 +601,7 @@ class ApplicationInstaller $oFactory->SaveToFile(APPROOT.'data/datamodel-'.$sEnvironment.'-with-delta.xml'); } - $oMFCompiler = new MFCompiler($oFactory); + $oMFCompiler = new MFCompiler($oFactory, $sEnvironment); $oMFCompiler->Compile($sTargetPath, null, $bUseSymbolicLinks); //$aCompilerLog = $oMFCompiler->GetLog(); //SetupPage::log_info(implode("\n", $aCompilerLog)); @@ -981,7 +978,8 @@ class ApplicationInstaller // the default value on upgrade differs from the default value at first install $oConfig->Set('tracking_level_linked_set_default', LINKSET_TRACKING_NONE, 'first_install'); } - + + $oConfig->Set('access_mode', ACCESS_FULL); // Final config update: add the modules $oConfig->UpdateFromParams($aParamValues, $sModulesDir, $bPreserveModuleSettings); if ($bOldAddon) diff --git a/setup/compiler.class.inc.php b/setup/compiler.class.inc.php index be428b748..d7f9256c3 100644 --- a/setup/compiler.class.inc.php +++ b/setup/compiler.class.inc.php @@ -58,10 +58,13 @@ class MFCompiler protected $sMainPHPCode; // Code that goes into core/main.php protected $aSnippets; protected $aRelations; + protected $sEnvironment; - public function __construct($oModelFactory) + public function __construct($oModelFactory, $sEnvironment) { $this->oFactory = $oModelFactory; + $this->sEnvironment = $sEnvironment; + $this->oFactory->ApplyChanges(); $this->aLog = array(); @@ -106,10 +109,15 @@ class MFCompiler public function Compile($sTargetDir, $oP = null, $bUseSymbolicLinks = false, $bSkipTempDir = false) { $sFinalTargetDir = $sTargetDir; + $bIsAlreadyInMaintenanceMode = SetupUtils::IsInMaintenanceMode(); if ($bUseSymbolicLinks || $bSkipTempDir) { // Skip the creation of a temporary dictionary, not compatible with symbolic links $sTempTargetDir = $sFinalTargetDir; + if (($this->sEnvironment == 'production') && !$bIsAlreadyInMaintenanceMode) + { + SetupUtils::EnterMaintenanceMode(new Config(utils::GetConfigFilePath($this->sEnvironment))); + } } else { @@ -137,9 +145,17 @@ class MFCompiler if ($sTempTargetDir != $sFinalTargetDir) { // Move the results to the target directory + if (($this->sEnvironment == 'production') && !$bIsAlreadyInMaintenanceMode) + { + SetupUtils::EnterMaintenanceMode(new Config(utils::GetConfigFilePath($this->sEnvironment))); + } SetupUtils::movedir($sTempTargetDir, $sFinalTargetDir); } - + if (($this->sEnvironment == 'production') && !$bIsAlreadyInMaintenanceMode) + { + SetupUtils::ExitMaintenanceMode(); + } + // Reset the opcache since otherwise the PHP "model" files may still be cached !! // In case of bad luck (this happens **sometimes** - see N. 550), we may analyze the database structure // with the previous datamodel still loaded (in opcode cache) and thus fail to create the new fields diff --git a/setup/runtimeenv.class.inc.php b/setup/runtimeenv.class.inc.php index 376a18df8..a1c7228e0 100644 --- a/setup/runtimeenv.class.inc.php +++ b/setup/runtimeenv.class.inc.php @@ -525,7 +525,7 @@ class RunTimeEnvironment $sTargetDir = APPROOT.'env-'.$this->sTargetEnv; self::MakeDirSafe($sTargetDir); $bSkipTempDir = ($this->sFinalEnv != $this->sTargetEnv); // No need for a temporary directory if sTargetEnv is already a temporary directory - $oMFCompiler = new MFCompiler($oFactory); + $oMFCompiler = new MFCompiler($oFactory, $this->sFinalEnv); $oMFCompiler->Compile($sTargetDir, null, $bUseSymLinks, $bSkipTempDir); $sCacheDir = APPROOT.'data/cache-'.$this->sTargetEnv;