public function saveData($aData, $aModuleHash = array(), $clearCache = true, $hideEvents = false) { if (!$aData) { return false; } if (!$aModuleHash) { $aModuleHash = $this->_getModuleHash(); } $sModuleEtcDir = $this->_getEtcDir(); // dispatching pre-disable event $aStatusHash = $this->getModulesStatusHash(); if ($this->_isCorrection) { // For correction $aData is an array of modules to be corrected, not a list of all modules with new statuses. // To prevent status changes of all other modules we are re-creating $aData from $aStatusHash. // Then in $sStatusHash we change current statuses of modules that require correction to an opposite one to simulate // normal process of enabling/disabling of modules. $newData = array(); foreach ($aStatusHash as $module => $oldStatus) { $newData[$module] = $oldStatus; $aStatusHash[$module] = isset($aData[$module]) ? !$oldStatus : $oldStatus; } $aData = $newData; } if ($aModuleHash) { foreach ($aModuleHash as $sFile => $sFullPath) { if (!file_exists($sFullPath)) { continue; } $oModuleBaseConfigCheck = simplexml_load_file($sFullPath); $this->checkModulesCompatibility($aData, $oModuleBaseConfigCheck, $aModuleHash); } } $eventArg = array('aitsys' => $this, 'data' => $aData, 'module_hash' => $aModuleHash, 'status_hash' => $aStatusHash); if (!$hideEvents) { $this->tool()->event('aitoc_module_save_data_before', $eventArg); } foreach ($aStatusHash as $sModule => $bIsActive) { if (!isset($aData[$sModule]) or !$aData[$sModule]) { $aEventParams = array('object' => $this, 'aitocmodulename' => $sModule); if (!$hideEvents) { Mage::dispatchEvent('aitoc_module_disable_before', $aEventParams); } } } // checking if we got any error from events $aErrors = $this->_getErrorList(); if (!empty($aErrors)) { return $aErrors; } if ($aModuleHash) { foreach ($aModuleHash as $sFile => $sFullPath) { if (!file_exists($sFullPath)) { continue; } $sModuleName = substr($sFile, 0, strpos($sFile, '.')); if (!$hideEvents) { $this->tool()->event('aitoc_module_modify_before', array('aitsys' => $this, 'key' => $sModuleName)); } $sModuleDir = $this->_getModuleDir($sModuleName); // get main module config $oModuleMainConfig = $this->_getModuleConfig($sModuleDir); // set module status if (isset($aData[$sModuleName]) and $aData[$sModuleName]) { $sModuleActive = 'true'; //$this->_addModuleClassRewrite($oModuleMainConfig, $sModuleName); //deprecated since 2.19.0 } else { $sModuleActive = 'false'; } // get base module config $oModuleCustomConfig = $this->_getModuleConfig($sModuleDir, true); $this->_setFileMergeData($oModuleCustomConfig, $sModuleDir); $oModuleBaseConfig = simplexml_load_file($sFullPath); $oModuleBaseConfig->modules->{$sModuleName}->active = $sModuleActive; if ($iPriority = $oModuleBaseConfig->modules->{$sModuleName}->priority) { $this->_aModulePriority[$sModuleName] = (int) $iPriority; } else { $this->_aModulePriority[$sModuleName] = 0; } $sFileContent = $oModuleBaseConfig->asXML(); if ($this->_isCorrection || $this->_checkFileSaveWithContent($sFullPath, $sFileContent)) { // check if module's status was changed // check if module has license helper // launch module's specific install/uninstall methods from license helper if (array_key_exists($sModuleName, $aData) && array_key_exists($sModuleName, $aStatusHash) && $aData[$sModuleName] != $aStatusHash[$sModuleName]) { if ($sModuleActive == 'false') { $this->tool()->getLicenseHelper($sModuleName)->uninstallBefore(); } else { $this->tool()->getLicenseHelper($sModuleName)->installBefore(); } } // check if module has resource setup files // also if it has version in `core_resource` // run 'activate' or 'uninstall' scripts if ($oModuleMainConfig and isset($oModuleMainConfig->global->resources)) { $resourceName = ''; foreach ($oModuleMainConfig->global->resources->children() as $key => $object) { if ($object->setup) { $resourceName = $key; break; } } if ($resourceName) { // check if module has version in `core_resource`, so it was previously enabled $dbVersion = Mage::getResourceModel('core/resource')->getDBVersion($resourceName); if ($dbVersion && array_key_exists($sModuleName, $aData) && array_key_exists($sModuleName, $aStatusHash) && $aData[$sModuleName] != $aStatusHash[$sModuleName]) { if ($sModuleActive == 'false') { $aitsysSetup = new Aitoc_Aitsys_Model_Mysql4_Setup('core_setup'); $aitsysSetup->applyAitocModuleUninstall($sModuleName); } else { $aitsysSetup = new Aitoc_Aitsys_Model_Mysql4_Setup('core_setup'); $aitsysSetup->applyAitocModuleActivate($sModuleName); } } } } // save module status in the database for future correction checks Aitoc_Aitsys_Model_Module_Status::updateStatus($sModuleName, $sModuleActive != 'false'); } } $this->_clearFileMergeData($aData, $aModuleHash, $aStatusHash); // set new php class inheritance /* deprecated since 2.19.0 if ($this->_aModuleClassRewrite) { $aModuleOrder = $this->_getModuleOrder(); foreach ($this->_aModuleClassRewrite as $sKey => $aData) { $aReplaceHash = $this->_setRewriteClass($sKey, $aData, $aModuleOrder); if ($aReplaceHash) { foreach ($aReplaceHash as $sModuleName => $aReplace) { if ($aReplace['extends']) // must change inheritance { // modify class inheritance $sExtends = ' extends '; $aReplaceData = array ( 'search' => array($sExtends . $aReplace['original']), 'replace' => array($sExtends . $aReplace['extends']), ); } else { $aReplaceData = array(); } $this->_checkFileSaveWithBackup($aReplace['path'], 'php', $aReplaceData); $this->_aConfigReplace[$sModuleName][$aReplace['module']] = $aReplace['config']; } } } } */ // checking write permissions to var $this->_checkFileWritePermissions(Mage::getBaseDir('var')); // save updated config modules files /* deprecated since 2.19.0 if ($this->_aConfigReplace) { foreach ($this->_aConfigReplace as $sModuleName => $aData) { $aReplaceData = array(); foreach ($aData as $sKey => $sVal) { $aReplaceData['search'][] = $sKey; $aReplaceData['replace'][] = $sVal; } $sModuleDir = $this->_getModuleDir($sModuleName); $sConfigFilePath = $sModuleDir . '/etc/config'; $this->_checkFileSaveWithBackup($sConfigFilePath, 'xml', $aReplaceData); } } */ if (!$this->_aErrorList) { if ($this->_aFileMerge) { $oPatch = new Aitoc_Aitsys_Model_Aitpatch(); $oPatch->setPatchFiles($this->_aFileMerge); $aErrorList = $oPatch->applyPatchDryrun(); if ($aErrorList) { foreach ($aErrorList as $aError) { $this->_addError($aError['file'], $aError['type']); } } else { $oPatch->applyPatch(); } } if (!$this->_aErrorList) { $this->_saveAllFileContent(); $this->_deleteFiles(); } } } if ($clearCache) { $this->tool()->clearCache(); } if (!$hideEvents) { $this->tool()->event('aitoc_module_save_data_after', $eventArg); } return $this->_getErrorList(); }
<?php /* @var $this Aitoc_Aitsys_Model_Mysql4_Setup */ $this->startSetup(); if (!Mage::registry('aitsys_correction_setup')) { Mage::register('aitsys_correction_setup', true); $this->run("\n \n CREATE TABLE IF NOT EXISTS {$this->getTable('aitsys_status')} (\n `id` INT(10) UNSIGNED NOT NULL auto_increment ,\n `module` VARCHAR(50) NOT NULL,\n `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,\n PRIMARY KEY ( `id` ),\n KEY `module` ( `module` )\n ) ENGINE=MyISAM DEFAULT CHARSET=utf8;\n \n "); foreach ($this->tool()->platform()->getModules() as $module) { Aitoc_Aitsys_Model_Module_Status::updateStatus($module->getKey(), $module->getValue()); } } $this->endSetup();