示例#1
0
 public function renderDefault(array $param = array(), $status = 200)
 {
     $data = array();
     foreach (LangQuery::create()->find() as $lang) {
         $data[LangUrlForm::LANG_PREFIX . $lang->getId()] = $lang->getUrl();
     }
     $langUrlForm = $this->createForm(AdminForm::LANG_URL, 'form', $data);
     $this->getParserContext()->addForm($langUrlForm);
     return $this->render('languages', array_merge($param, array('lang_without_translation' => ConfigQuery::getDefaultLangWhenNoTranslationAvailable(), 'one_domain_per_lang' => ConfigQuery::isMultiDomainActivated())), $status);
 }
示例#2
0
 /**
  * Save the previous URL in session which is based on the referer header or the request, or
  * the _previous_url request attribute, if defined.
  *
  * If the value of _previous_url is "dont-save", the current referrer is not saved.
  *
  * @param \Symfony\Component\HttpKernel\Event\PostResponseEvent $event
  */
 public function registerPreviousUrl(PostResponseEvent $event)
 {
     $request = $event->getRequest();
     if (!$request->isXmlHttpRequest() && $event->getResponse()->isSuccessful()) {
         $referrer = $request->attributes->get('_previous_url', null);
         if (null !== $referrer) {
             // A previous URL (or the keyword 'dont-save') has been specified.
             if ('dont-save' == $referrer) {
                 // We should not save the current URL as the previous URL
                 $referrer = null;
             }
         } else {
             // The current URL will become the previous URL
             $referrer = $request->getUri();
         }
         // Set previous URL, if defined
         if (null !== $referrer) {
             $session = $request->getSession();
             if (ConfigQuery::isMultiDomainActivated()) {
                 $components = parse_url($referrer);
                 $lang = LangQuery::create()->filterByUrl(sprintf("%s://%s", $components["scheme"], $components["host"]), ModelCriteria::LIKE)->findOne();
                 if (null !== $lang) {
                     $session->setReturnToUrl($referrer);
                 }
             } else {
                 if (false !== strpos($referrer, $request->getSchemeAndHttpHost())) {
                     $session->setReturnToUrl($referrer);
                 }
             }
         }
     }
 }
示例#3
0
 protected function manageLocale(RewritingResolver $rewrittenUrlData, TheliaRequest $request)
 {
     $lang = LangQuery::create()->findOneByLocale($rewrittenUrlData->locale);
     $langSession = $request->getSession()->getLang();
     if ($lang != $langSession) {
         if (ConfigQuery::isMultiDomainActivated()) {
             $this->redirect(sprintf("%s/%s", $lang->getUrl(), $rewrittenUrlData->rewrittenUrl));
         } else {
             $request->getSession()->setLang($lang);
         }
     }
 }
示例#4
0
 /**
  * A simple helper to get the URL based on the language.
  *
  * @param  string      $locale the locale, or null to get the current one
  * @return null|string the URL for the current language, or null if the "One domain for each lang" feature is disabled.
  */
 protected function getUrlLanguage($locale = null)
 {
     // Check if the functionality is activated
     if (!ConfigQuery::isMultiDomainActivated()) {
         return null;
     }
     // If we don't have a locale value, use the locale value in the session
     if (!$locale) {
         $locale = $this->getCurrentEditionLocale();
     }
     return LangQuery::create()->findOneByLocale($locale)->getUrl();
 }
 /**
  * @param  Request                 $request
  * @return null|\Thelia\Model\Lang
  */
 protected function detectLang(Request $request)
 {
     $lang = null;
     //first priority => lang parameter present in request (get or post)
     if ($request->query->has("lang")) {
         $lang = LangQuery::create()->findOneByCode($request->query->get("lang"));
         if (is_null($lang)) {
             return Lang::getDefaultLanguage();
         }
         //if each lang has its own domain, we redirect the user to the good one.
         if (ConfigQuery::isMultiDomainActivated()) {
             //if lang domain is different from actuel domain, redirect to the good one
             if (rtrim($lang->getUrl(), "/") != $request->getSchemeAndHttpHost()) {
                 // TODO : search if http status 302 is the good one.
                 $redirect = new RedirectResponse($lang->getUrl(), 302);
                 return $redirect;
             } else {
                 //the user is actually on the good domain, nothing to change
                 return null;
             }
         } else {
             //one domain for all languages, the lang is set into session
             return $lang;
         }
     }
     //check if lang is not defined. If not we have to search the good one.
     if (null === $request->getSession()->getLang(false)) {
         if (ConfigQuery::isMultiDomainActivated()) {
             //find lang with domain
             return LangQuery::create()->filterByUrl($request->getSchemeAndHttpHost(), ModelCriteria::LIKE)->findOne();
         }
         //find default lang
         return Lang::getDefaultLanguage();
     }
 }
示例#6
0
 /**
  * @param  TheliaRequest $request
  * @return null|\Thelia\Model\Lang
  */
 protected function detectLang(TheliaRequest $request)
 {
     // first priority => lang parameter present in request (get or post)
     if ($request->query->has("lang")) {
         // The lang parameter may contains a lang code (fr, en, ru) for Thelia < 2.2,
         // or a locale (fr_FR, en_US, etc.) for Thelia > 2.2.beta1
         $requestedLangCodeOrLocale = $request->query->get("lang");
         if (strlen($requestedLangCodeOrLocale) > 2) {
             $lang = LangQuery::create()->findOneByLocale($requestedLangCodeOrLocale);
         } else {
             $lang = LangQuery::create()->findOneByCode($requestedLangCodeOrLocale);
         }
         if (is_null($lang)) {
             return Lang::getDefaultLanguage();
         }
         // if each lang has its own domain, we redirect the user to the proper one.
         if (ConfigQuery::isMultiDomainActivated()) {
             $domainUrl = $lang->getUrl();
             if (!empty($domainUrl)) {
                 // if lang domain is different from current domain, redirect to the proper one
                 if (rtrim($domainUrl, "/") != $request->getSchemeAndHttpHost()) {
                     // TODO : search if http status 302 is the good one.
                     return new RedirectResponse($domainUrl, 302);
                 } else {
                     //the user is currently on the proper domain, nothing to change
                     return null;
                 }
             }
             Tlog::getInstance()->warning("The domain URL for language " . $lang->getTitle() . " (id " . $lang->getId() . ") is not defined.");
             return Lang::getDefaultLanguage();
         } else {
             // one domain for all languages, the lang has to be set into session
             return $lang;
         }
     }
     // Next, check if lang is defined in the current session. If not we have to set one.
     if (null === $request->getSession()->getLang(false)) {
         if (ConfigQuery::isMultiDomainActivated()) {
             // find lang with domain
             return LangQuery::create()->filterByUrl($request->getSchemeAndHttpHost(), ModelCriteria::LIKE)->findOne();
         }
         // At this point, set the lang to the default one.
         return Lang::getDefaultLanguage();
     }
     return null;
 }