*/ class Mage_Core_Model_App_Emulation extends Varien_Object { /** * Start enviromment emulation of the specified store * * Function returns information about initial store environment and emulates environment of another store * * @param integer $storeId * @param string $area * @param boolean $emulateSroreInlineTranslation emulate inline translation of the specified store or just disable it * * @return Varien_Object information about environment of the initial store */ public function startEnvironmentEmulation($storeId, $area = Mage_Core_Model_App_Area::AREA_FRONTEND, $emulateSroreInlineTranslation = false) { if (is_null($area)) { $area = Mage_Core_Model_App_Area::AREA_FRONTEND; } if ($emulateSroreInlineTranslation) { $initialTranslateInline = $this->_emulateInlineTranslation($storeId, $area); } else { $initialTranslateInline = $this->_emulateInlineTranslation(); } $initialDesign = $this->_emulateDesign($storeId, $area); // Current store needs to be changed right before locale change and after design change Mage::app()->setCurrentStore($storeId); $initialLocaleCode = $this->_emulateLocale($storeId, $area); $initialEnvironmentInfo = new Varien_Object(); $initialEnvironmentInfo->setInitialTranslateInline($initialTranslateInline) ->setInitialDesign($initialDesign) ->setInitialLocaleCode($initialLocaleCode); return $initialEnvironmentInfo; } /** * Stop enviromment emulation * * Function restores initial store environment * * @param Varien_Object $initialEnvironmentInfo information about environment of the initial store * * @return Mage_Core_Model_App_Emulation */ public function stopEnvironmentEmulation(Varien_Object $initialEnvironmentInfo) { $this->_restoreInitialInlineTranslation($initialEnvironmentInfo->getInitialTranslateInline()); $initialDesign = $initialEnvironmentInfo->getInitialDesign(); $this->_restoreInitialDesign($initialDesign); // Current store needs to be changed right before locale change and after design change Mage::app()->setCurrentStore($initialDesign['store']); $this->_restoreInitialLocale($initialEnvironmentInfo->getInitialLocaleCode(), $initialDesign['area']); return $this; } /** * Emulate inline translation of the specified store * * Function disables inline translation if $storeId is null * * @param integer|null $storeId * @param string $area * * @return boolean initial inline translation state */ protected function _emulateInlineTranslation($storeId = null, $area = Mage_Core_Model_App_Area::AREA_FRONTEND) { if (is_null($storeId)) { $newTranslateInline = false; } else { if ($area == Mage_Core_Model_App_Area::AREA_ADMINHTML) { $newTranslateInline = Mage::getStoreConfigFlag('dev/translate_inline/active_admin', $storeId); } else { $newTranslateInline = Mage::getStoreConfigFlag('dev/translate_inline/active', $storeId); } } $translateModel = Mage::getSingleton('core/translate'); $initialTranslateInline = $translateModel->getTranslateInline(); $translateModel->setTranslateInline($newTranslateInline); return $initialTranslateInline; } /** * Apply design of the specified store * * @param integer $storeId * @param string $area * * @return array initial design parameters(package, store, area) */ protected function _emulateDesign($storeId, $area = Mage_Core_Model_App_Area::AREA_FRONTEND) { $initialDesign = Mage::getDesign()->setAllGetOld(array( 'package' => Mage::getStoreConfig('design/package/name', $storeId), 'store' => $storeId, 'area' => $area )); Mage::getDesign()->setTheme(''); Mage::getDesign()->setPackageName(''); return $initialDesign; } /** * Apply locale of the specified store * * @param integer $storeId * @param string $area * * @return string initial locale code */ protected function _emulateLocale($storeId, $area = Mage_Core_Model_App_Area::AREA_FRONTEND) { $initialLocaleCode = Mage::app()->getLocale()->getLocaleCode(); $newLocaleCode = Mage::getStoreConfig(Mage_Core_Model_Locale::XML_PATH_DEFAULT_LOCALE, $storeId); Mage::app()->getLocale()->setLocaleCode($newLocaleCode); Mage::getSingleton('core/translate')->setLocale($newLocaleCode)->init($area, true); return $initialLocaleCode; } /** * Restore initial inline translation state * * @param boolean $initialTranslateInline * * @return Mage_Core_Model_App_Emulation */ protected function _restoreInitialInlineTranslation($initialTranslateInline) { $translateModel = Mage::getSingleton('core/translate'); $translateModel->setTranslateInline($initialTranslateInline); return $this; } /** * Restore design of the initial store * * @param array $initialDesign * * @return Mage_Core_Model_App_Emulation */ protected function _restoreInitialDesign(array $initialDesign) { Mage::getDesign()->setAllGetOld($initialDesign); Mage::getDesign()->setTheme(''); Mage::getDesign()->setPackageName(''); return $this; } /** * Restore locale of the initial store * * @param string $initialLocaleCode * @param string $initialArea * * @return Mage_Core_Model_App_Emulation */ protected function _restoreInitialLocale($initialLocaleCode, $initialArea = Mage_Core_Model_App_Area::AREA_ADMINHTML) { Mage::app()->getLocale()->setLocaleCode($initialLocaleCode); Mage::getSingleton('core/translate')->setLocale($initialLocaleCode)->init($initialArea, true); return $this; } }