Example #1
0
 /**
  * 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());
     }
 }
Example #2
0
    /**
     * 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());
        }
    }
Example #3
0
    /**
     * @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;
    }
Example #4
0
    /**
     * 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));
    }
Example #5
0
 /**
  * @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());
 }
Example #6
0
 /**
  * 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());
 }
Example #7
0
 /**
  * @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;
 }
Example #8
0
 /**
  * @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');
     }
 }