/** * Get cached header js for redirect or load and save to cache * * @param $type string * @param $objId string|int * @param $automaticRedirect * @return mixed|string|void */ protected function _getCachedJsHeaderByType($type, $objId, $automaticRedirect) { $storeViewId = $this->_config->getStoreViewId(); switch ($type) { case self::CATEGORY: $cacheKey = $storeViewId . '_sg_mobile_category_' . $objId . '_redirect_type_' . intval($automaticRedirect); break; case self::PRODUCT: $cacheKey = $storeViewId . '_sg_mobile_item_' . $objId . '_redirect_type_' . intval($automaticRedirect); break; case self::PAGE: $cacheKey = $storeViewId . '_sg_mobile_page_' . $objId . '_redirect_type_' . intval($automaticRedirect); break; case self::SEARCH: $cacheKey = $storeViewId . '_sg_mobile_catalogsearch_' . md5($objId) . '_redirect_type_' . intval($automaticRedirect); break; case self::INDEX: $cacheKey = $storeViewId . '_sg_mobile_index_redirect_type_' . intval($automaticRedirect); break; default: $cacheKey = $storeViewId . '_sg_mobile_default_type_' . intval($automaticRedirect); break; } $cache = Mage::app()->getCacheInstance(); $value = $cache->load($cacheKey); if ($value !== false) { $jsHeader = unserialize($value); } else { $builder = new ShopgateBuilder($this->_config); $shopgateRedirect = $builder->buildRedirect(); if (!in_array(Mage::app()->getRequest()->getControllerName(), array(self::CATEGORY, self::PRODUCT, self::SEARCH, self::INDEX)) && !Mage::getStoreConfig(Shopgate_Framework_Model_Config::XML_PATH_SHOPGATE_ENABLE_DEFAULT_REDIRECT)) { $shopgateRedirect->suppressRedirect(); } $disabledRoutes = explode(',', Mage::getStoreConfig(Shopgate_Framework_Model_Config::XML_PATH_SHOPGATE_DISABLE_REDIRECT_ROUTES)); $route = Mage::app()->getRequest()->getRouteName(); if (in_array($route, $disabledRoutes)) { $shopgateRedirect->suppressRedirect(); } $disabledControllers = explode(',', Mage::getStoreConfig(Shopgate_Framework_Model_Config::XML_PATH_SHOPGATE_DISABLE_REDIRECT_CONTROLLERS)); $controllerName = Mage::app()->getRequest()->getControllerName(); if (in_array($controllerName, $disabledControllers)) { $shopgateRedirect->suppressRedirect(); } if ($controllerName == 'product') { $productId = Mage::app()->getRequest()->getParam('id'); $disabledProducts = explode(',', Mage::getStoreConfig(Shopgate_Framework_Model_Config::XML_PATH_SHOPGATE_DISABLE_REDIRECT_PRODUCTS)); if (in_array($productId, $disabledProducts)) { $shopgateRedirect->suppressRedirect(); } } if ($controllerName == 'category') { $categoryId = Mage::app()->getRequest()->getParam('id'); $disabledCategories = explode(',', Mage::getStoreConfig(Shopgate_Framework_Model_Config::XML_PATH_SHOPGATE_DISABLE_REDIRECT_CATEGORIES)); if (in_array($categoryId, $disabledCategories)) { $shopgateRedirect->suppressRedirect(); } } switch ($type) { case self::CATEGORY: $jsHeader = $shopgateRedirect->buildScriptCategory($objId, $automaticRedirect); break; case self::PRODUCT: $jsHeader = $shopgateRedirect->buildScriptItem($objId, $automaticRedirect); break; case self::PAGE: $jsHeader = $shopgateRedirect->buildScriptCms($objId, $automaticRedirect); break; case self::SEARCH: $jsHeader = $shopgateRedirect->buildScriptSearch($objId, $automaticRedirect); break; case self::INDEX: $jsHeader = $shopgateRedirect->buildScriptShop($automaticRedirect); break; default: $jsHeader = $shopgateRedirect->buildScriptDefault($automaticRedirect); break; } $cache->save(serialize($jsHeader), $cacheKey, array('shopgate_mobile_redirect', Mage_Core_Model_Layout_Update::LAYOUT_GENERAL_CACHE_TAG), 7200); } return $jsHeader; }
public function doMobileRedirect() { $indexFile = 'index.php'; if (version_compare(_PS_VERSION_, '1.4.1.0', '>=') && Configuration::get('PS_HOMEPAGE_PHP_SELF') !== false) { $indexFile = Configuration::get('PS_HOMEPAGE_PHP_SELF'); } $shopgateConfig = new ShopgateConfigPresta(); // instantiate and set up redirect class $shopgateBuilder = new ShopgateBuilder($shopgateConfig); $shopgateRedirector = $shopgateBuilder->buildRedirect(); /* redirect logic */ $controller = Tools::getValue('controller'); if ($id_product = Tools::getValue('id_product', 0)) { $productId = PSShopgatePlugin::prefix . $id_product . '_0'; $shopgateJsHeader = $shopgateRedirector->buildScriptItem($productId); } elseif ($id_category = Tools::getValue('id_category', 0)) { $shopgateJsHeader = $shopgateRedirector->buildScriptCategory($id_category); } elseif (isset($_SERVER['SCRIPT_FILENAME']) && mb_strpos($_SERVER['SCRIPT_FILENAME'], $indexFile) !== false && empty($controller)) { // TODO: doesn't work yet! $shopgateJsHeader = $shopgateRedirector->buildScriptShop(); } else { $shopgateJsHeader = $shopgateRedirector->buildScriptDefault(); } return $shopgateJsHeader; }
/** * @return mixed|string */ public static function calculateRedirect() { $shopgateConfig = new ShopgateConfigPrestashop(); $shopgateBuilder = new ShopgateBuilder($shopgateConfig); $shopgateRedirect = $shopgateBuilder->buildRedirect(); $controller = Tools::getValue('controller'); /** * prepare controller for older versions */ if (!$controller) { $fileInfo = pathinfo($_SERVER['SCRIPT_NAME']); $controller = $fileInfo['filename']; } switch ($controller) { case 'category': return $shopgateRedirect->buildScriptCategory(Tools::getValue('id_category', 0)); case 'product': return $shopgateRedirect->buildScriptItem(Tools::getValue('id_product', 0)); case 'search': return $shopgateRedirect->buildScriptSearch(Tools::getValue('search_query', '')); case 'index': return $shopgateRedirect->buildScriptShop(); default: if ($manufacturerId = Tools::getValue('id_manufacturer')) { /** @var ManufacturerCore $manufacturer */ $manufacturer = new Manufacturer($manufacturerId); return $shopgateRedirect->buildScriptBrand($manufacturer->name); } return $shopgateRedirect->buildScriptDefault(); } }