Example #1
0
 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();