/** * Set or remove given $noCacheTag from cookie * * @param $noCacheTag * @param bool $remove * @return void */ public function setNoCacheTag($noCacheTag, $remove = false) { static $noCacheTags, $shopId; if (!isset($noCacheTags)) { if ($this->request->getCookie('nocache')) { $noCacheTags = $this->request->getCookie('nocache'); $noCacheTags = explode(', ', $noCacheTags); } else { $noCacheTags = array(); } $shopId = Shopware()->Shop()->getId(); } if (!empty($noCacheTag)) { $noCacheTag .= '-' . $shopId; } if (empty($noCacheTag)) { $newCacheTags = array(); } elseif ($remove && in_array($noCacheTag, $noCacheTags)) { // remove $noCacheTag from $newCacheTags $newCacheTags = array_diff($noCacheTags, array($noCacheTag)); } elseif (!$remove && !in_array($noCacheTag, $noCacheTags)) { // add $noCacheTag to $newCacheTags $newCacheTags = $noCacheTags; $newCacheTags[] = $noCacheTag; } if (isset($newCacheTags)) { $this->response->setCookie('nocache', implode(', ', $newCacheTags), 0, $this->request->getBasePath() . '/', $this->request->getHttpHost() == 'localhost' ? null : $this->request->getHttpHost()); } }
/** * Init backend locales * * @param Zend_Auth $auth */ protected function initLocale($auth = null) { $bootstrap = $this->Application()->Bootstrap(); if($auth !== null) { $user = $auth->getIdentity(); /** @var $locale \Shopware\Models\Shop\Locale */ } $locale = null; if (isset($user->locale)) { $locale = $user->locale; } else { $default = $this->getDefaultLocale(); $locale = Shopware()->Models()->getRepository( 'Shopware\Models\Shop\Locale' )->find($default); } $bootstrap->getResource('Locale')->setLocale($locale->toString()); $bootstrap->getResource('Snippets')->setLocale($locale); $template = $bootstrap->getResource('Template'); $baseHash = $this->request->getScheme() . '://' . $this->request->getHttpHost() . $this->request->getBaseUrl() . '?' . Shopware::REVISION; $baseHash = substr(sha1($baseHash), 0 , 5); $template->setCompileId('backend_' . $locale->toString() . '_' . $baseHash); if (isset($user->role)) { $template->setCacheId($user->role->getName()); } if($this->action !== null && $this->action->View()->hasTemplate()) { $this->action->View()->Template()->setCompileId($template->getCompileId()); $this->action->View()->Template()->setCacheId($template->getCacheId()); } }
/** * @param \Enlight_Controller_Request_RequestHttp $request * @return \Shopware\Models\Shop\Shop */ public function getActiveByRequest($request) { /** @var $shop \Shopware\Models\Shop\Shop */ $shop = null; $host = $request->getHttpHost(); $requestPath = $request->getRequestUri(); $builder = $this->getActiveQueryBuilder(); $builder->andWhere("shop.host=:host OR (shop.host IS NULL AND main.host=:host)"); if($request->isSecure()) { $builder->orWhere("shop.secureHost=:host OR (shop.secureHost IS NULL AND main.secureHost=:host)"); } $builder->setParameter('host', $host); /** @var $shops \Shopware\Models\Shop\Shop[] */ $shops = $builder->getQuery()->getResult(); foreach ($shops as $currentShop) { $this->getEntityManager()->detach($currentShop); if ($currentShop->getBasePath() === null) { $shop = $currentShop; } elseif (strpos($requestPath, $currentShop->getBasePath()) === 0) { $shop = $currentShop; break; } } if ($shop === null) { $builder = $this->getActiveQueryBuilder(); $builder->andWhere('shop.hosts LIKE :host') ->setParameter('host', '%' . $host . '%'); $shop = $builder->getQuery()->getOneOrNullResult(); } if ($shop !== null) { $this->fixActive($shop); } return $shop; }
/** * Refresh referrer log * * @param \Enlight_Controller_Request_RequestHttp $request */ public function refreshReferer($request) { $referer = $request->getHeader('Referer', $request->getParam('referer')); $partner = $request->getParam('partner', $request->getParam('sPartner')); if (empty($referer) || strpos($referer, 'http') !== 0 || strpos($referer, $request->getHttpHost()) !== false ) { return; } Shopware()->Session()->sReferer = $referer; if ($partner !== null) { $referer .= '$' . $partner; } $sql = 'INSERT INTO s_statistics_referer (datum, referer) VALUES (NOW(), ?)'; Shopware()->Db()->query($sql, array($referer)); }
/** * @param EnlightRequest $request */ public function updateFromEnlightRequest(EnlightRequest $request) { $this->setHost($request->getHttpHost()); $this->setBaseUrl($request->getBaseUrl()); $this->setSecure($request->isSecure()); $this->setGlobalParams(self::getGlobalParamsFromRequest($request)); $this->setParams($request->getQuery()); }
/** * Returns the symfony request context. * * @param Enlight_Controller_Request_RequestHttp $request * @return Symfony\Component\Routing\RequestContext */ protected function getRequestContext($request) { return new RequestContext('', $request->getMethod(), $request->getHttpHost(), $request->getScheme()); }
/** * @param \Enlight_Controller_Request_RequestHttp $request * @return \Shopware\Models\Shop\Shop */ public function getActiveByRequest($request) { /** @var $shop \Shopware\Models\Shop\Shop */ $shop = null; $host = $request->getHttpHost(); if (empty($host)) { return $shop; } $requestPath = $request->getRequestUri(); $builder = $this->getActiveQueryBuilder(); $builder->andWhere("shop.host=:host OR (shop.host IS NULL AND main.host=:host)"); if ($request->isSecure()) { $builder->orWhere("shop.secureHost=:host OR (shop.secureHost IS NULL AND main.secureHost=:host)"); } $builder->setParameter('host', $host); /** @var $shops \Shopware\Models\Shop\Shop[] */ $shops = $builder->getQuery()->getResult(); foreach ($shops as $currentShop) { $this->fixActive($currentShop); } //returns the right shop depending on the url $shop = $this->getShopByRequest($shops, $requestPath); if ($shop !== null) { return $shop; } $builder = $this->getActiveQueryBuilder(); $builder->andWhere('shop.hosts LIKE :host1 OR shop.hosts LIKE :host2 OR shop.hosts LIKE :host3')->setParameter('host1', "%\n" . $host . "\n%")->setParameter('host2', $host . "\n%")->setParameter('host3', "%\n" . $host); $shop = $builder->getQuery()->getOneOrNullResult(); if ($shop !== null) { $this->fixActive($shop); } return $shop; }
/** * @param Enlight_Controller_Request_RequestHttp $request * @param Enlight_Controller_Response_ResponseHttp $response */ protected function upgradeShop($request, $response) { $bootstrap = $this->Application()->Bootstrap(); $shop = $this->Application()->Shop(); $cookieKey = null; $cookieValue = null; switch (true) { case $request->getPost('sLanguage') !== null: $cookieKey = 'shop'; $cookieValue = $request->getPost('sLanguage'); break; case $request->getPost('sCurrency') !== null: $cookieKey = 'currency'; $cookieValue = $request->getPost('sCurrency'); break; case $request->getPost('__shop') !== null: $cookieKey = 'shop'; $cookieValue = $request->getPost('__shop'); break; case $request->getQuery('__shop') !== null: $cookieKey = 'shop'; $cookieValue = $request->getQuery('__shop'); break; case $request->getPost('__currency') !== null: $cookieKey = 'currency'; $cookieValue = $request->getPost('__currency'); break; case $request->getQuery('__template') !== null: $cookieKey = 'template'; $cookieValue = $request->getQuery('__template'); break; } // Redirect on shop change if ($cookieKey === 'shop') { /** @var $repository Shopware\Models\Shop\Repository */ $repository = Shopware()->Models()->getRepository('Shopware\\Models\\Shop\\Shop'); $newShop = $repository->getActiveById($cookieValue); if ($newShop !== null) { if ($newShop->getHost() !== null && $newShop->getHost() !== $shop->getHost() || $newShop->getBaseUrl() !== null && $newShop->getBaseUrl() !== $shop->getBaseUrl()) { $url = sprintf('%s://%s%s%s', $request::SCHEME_HTTP, $newShop->getHost(), $newShop->getBaseUrl(), '/'); $path = rtrim($newShop->getBasePath(), '/') . '/'; $response->setCookie($cookieKey, $cookieValue, 0, $path); $response->setRedirect($url); return; } } } // Refresh on shop change if ($cookieKey !== null && $cookieKey != 'template') { $path = rtrim($shop->getBasePath(), '/') . '/'; $response->setCookie($cookieKey, $cookieValue, 0, $path); if ($request->isPost() && $request->getQuery('__shop') === null) { $url = sprintf('%s://%s%s', $request->getScheme(), $request->getHttpHost(), $request->getRequestUri()); $response->setRedirect($url); return; } } // Upgrade currency if ($request->getCookie('currency') !== null) { $currencyValue = $request->getCookie('currency'); foreach ($shop->getCurrencies() as $currency) { if ($currencyValue == $currency->getId() || $currencyValue == $currency->getCurrency()) { $shop->setCurrency($currency); break; } } } // Start session in frontend controllers $session = Shopware()->Session(); if ($cookieKey !== null) { $session->{$cookieKey} = $cookieValue; } // Refresh basket on currency change if (isset($session->sBasketCurrency) && $shop->getCurrency()->getId() != $session->sBasketCurrency) { Shopware()->Modules()->Basket()->sRefreshBasket(); } // Upgrade template if (isset($session->template) && !empty($session->Admin)) { $repository = 'Shopware\\Models\\Shop\\Template'; $repository = Shopware()->Models()->getRepository($repository); $template = $session->template; $template = $repository->findOneBy(array('template' => $template)); if ($template !== null) { $shop->setTemplate($template); } else { unset($session->template); } } else { unset($session->template); } // Save upgrades $shop->registerResources($bootstrap); if ($request->isSecure()) { $template = $bootstrap->getResource('Template'); $template->setCompileId($template->getCompileId() . '_secure'); } }