aExtensionsByCode = []; } /** * @param string $sSourceEnv * @param array $aExtensionCodesToRemove * * @return void * @throws \Exception */ public function Prepare(string $sSourceEnv, array $aExtensionCodesToRemove) { $sEnv = $this->sFinalEnv; $this->aExtensionsByCode = $aExtensionCodesToRemove; //SetupUtils::rrmdir(APPROOT."/data/$sEnv-modules"); $this->Cleanup(); SetupUtils::copydir(APPROOT."/data/$sSourceEnv-modules", APPROOT."/data/$sEnv-modules"); $this->DeclareExtensionAsRemoved($aExtensionCodesToRemove); $oDryRemovalConfig = clone(MetaModel::GetConfig()); $oDryRemovalConfig->ChangeModulesPath($sSourceEnv, $this->sFinalEnv); $this->WriteConfigFileSafe($oDryRemovalConfig); } private function DeclareExtensionAsRemoved(array $aExtensionCodes): void { $oExtensionsMap = new iTopExtensionsMap($this->sFinalEnv); $oExtensionsMap->DeclareExtensionAsRemoved($aExtensionCodes); } public function Cleanup() { $sEnv = $this->sFinalEnv; SetupUtils::rrmdir(APPROOT."/data/$sEnv-modules"); SetupUtils::rrmdir(APPROOT."/data/cache-$sEnv"); SetupUtils::rrmdir(APPROOT."/env-$sEnv"); SetupUtils::rrmdir(APPROOT."/conf/$sEnv"); @unlink(APPROOT."/data/datamodel-$sEnv.xml"); } }