Beispiel #1
0
 /**
  *
  */
 public function init()
 {
     parent::init();
     // On règle le langage de l'application selon les indications du navigateur
     /** @var \myWebUser $webUser */
     $webUser = \Yii::app()->user;
     if (!($code = $webUser->getLanguageCode())) {
         $code = \Yii::app()->request->preferredLanguage;
     }
     if (!($preferredLanguage = \Language::findByCode($code))) {
         $preferredLanguage = \Language::findByCode(\Yii::app()->language);
     }
     $webUser->setLanguageCode($preferredLanguage->code);
     // On actualise le langage de l'application car c'est cette variable de configuration qui est lue
     // par Yii::t()
     \Yii::app()->language = $preferredLanguage->code;
     // Chargement de la liste des langues disponibles
     /** @noinspection PhpUndefinedMethodInspection */
     $this->languages = \Language::model()->enabled()->alpha()->findAll();
 }
 /**
  * Page de liste des actualités, en frontend
  * @test
  */
 public function index()
 {
     $this->open('news/news');
     $this->checkFrontendSharedElements();
     $displayedNews = $this->getCssCount('css=.news');
     // Le moteur de recherche est bien affiché
     $this->assertElementPresent('id=NewsSearchForm_tagsString');
     // On cherche les news ayant un tag contenant 'ph' :
     // 'php' doit sortir mais pas 'php english' à cause de la langue active
     $this->type('NewsSearchForm_tagsString', 'ph');
     $this->clickAndWait('NewsSearchForm_submit');
     $query = "SELECT count(trans.id) FROM translated_news trans\n\t\t\tINNER JOIN translated_news_has_tag tht ON tht.translated_news_id = trans.id\n\t\t\tINNER JOIN tag ON tht.tag_id = tag.id\n\t\t\tWHERE tag.name LIKE '%ph%' AND trans.language_id = " . Language::findByCode(Yii::app()->language)->id;
     $count = Yii::app()->db->createCommand($query)->queryScalar();
     $this->assertEquals($count, $this->getCssCount('css=.news'));
     // ... et son  bouton 'effacer' le ré-initialise correctement
     $this->clickAndWait('NewsSearchForm_reset');
     $this->assertEquals($displayedNews, $this->getCssCount('css=.news'));
     // Les boutons tags sont présents et fonctionnels
     $this->assertElementPresent("//button[contains(@onclick, 'slug=php')]");
     $this->clickAndWait("//button[contains(@onclick, 'slug=php')][1]");
     $this->assertEquals($count, $this->getCssCount('css=.news'));
 }
Beispiel #3
0
 /**
  * Manages all models.
  */
 public function actionAdmin()
 {
     $session = $this->setAdminGridViewSessionVariables('TranslatedNews');
     $model = new TranslatedNews('search');
     $model->unsetAttributes();
     // clear any default values
     $model->attributes = $session->get('admin_current_filter');
     $activeLanguage = Language::findByCode(Yii::app()->language);
     $model->language_id = $activeLanguage->id;
     $pager = new CPagination();
     /** @var NewsModule $newsModule */
     $newsModule = Yii::app()->getModule('news');
     $pager->pageSize = $newsModule->adminPageSize;
     if ($page = $session->get('admin_current_page')) {
         $pager->currentPage = $page - 1;
         // la numérotation commence à 0...
     }
     $this->render('admin', array('model' => $model, 'pager' => $pager, 'availableTags' => Tag::model()->findAllByAttributes(array('language_id' => $activeLanguage->id))));
 }
Beispiel #4
0
 /**
  * Renvoie le contenu traduit de la news.
  * Le langage demandé est celui de code $languageCode, qui est par défaut le langage de l'utilisateur.
  * Si celui-ci n'existe pas ou si la news n'est pas traduite dans ce langage, on cherche la version
  * dans le langage par défaut paramétré pour le module.
  * @param null $languageCode
  * @return null|TranslatedNews
  * @internal Mise en cache du langage par défaut pour limiter les accès à la base de données
  */
 public function getTranslation($languageCode = null)
 {
     // Si on cherche la traduction par défaut et qu'elle a déjà été calculée, on ne recommence pas les traitements
     if (!$languageCode && $this->activeTranslation) {
         return $this->activeTranslation;
     }
     // On cherche le texte associé au langage de code $languageCode. Par défaut ce sera le langage de l'utilisateur
     if (!$languageCode) {
         $languageCode = Yii::app()->language;
     }
     if ($language = Language::findByCode($languageCode)) {
         /** @var $tl TranslatedNews */
         foreach ($this->translatedNews as $tl) {
             if ($tl->language_id == $language->id) {
                 $this->activeTranslation = $tl;
                 break;
             }
         }
     }
     // Si la news n'est pas traduite dans le langage demandé, on la cherche dans le langage par défaut
     if (!$this->activeTranslation && $languageCode != Yii::app()->modules['admin']['defaultAppLanguage']) {
         $this->activeTranslation = $this->getTranslation(Yii::app()->modules['admin']['defaultAppLanguage']);
     }
     // Si on n'a toujours rien trouvé, on renvoie la première traduction disponible
     if (!$this->activeTranslation && $this->translatedNews) {
         $this->activeTranslation = count($this->translatedNews) ? $this->translatedNews[0] : 0;
     }
     return $this->activeTranslation;
 }
Beispiel #5
0
 /**
  * Renvoie le texte de nom $name. Renvoie null si la page ne contient aucun texte de ce nom.
  * @param string  $name         Code d'identification de ce texte pour la page courante $this
  * @param string  $languageCode Si cet argument vaut null, on utilise le langage renseigné pour l'application
  * @param boolean $defaultText
  * @return WebText|null
  */
 public function getTextByName($name, $languageCode = null, $defaultText = true)
 {
     // On cherche le texte associé au langage de code $languageCode
     // Par défaut ce sera le langage de l'utilisateur
     if (!$languageCode && !($languageCode = Yii::app()->language)) {
         $languageCode = Yii::app()->language;
     }
     $language = Language::findByCode($languageCode);
     $text = WebText::model()->findByAttributes(array('name' => $name, 'language_id' => $language->id, 'web_page_id' => $this->id));
     if (!$text && $languageCode != 'fr') {
         // Si le texte n'existe pas dans le langage demandé, on le récupère en français
         $language = Language::model()->findByCode('fr');
         $text = WebText::model()->findByAttributes(array('name' => $name, 'language_id' => $language->id, 'web_page_id' => $this->id));
     }
     if (!$text && $defaultText) {
         $text = WebText::defaultObject();
     }
     return $text;
 }
Beispiel #6
0
 /**
  * @return array
  */
 public function scopes()
 {
     return array('defaultOrder' => array('order' => 'news.event_date DESC, t.id DESC'), 'enabled' => array('condition' => 'news.enabled = 1'), 'activeLanguage' => array('condition' => 'language_id = ' . Language::findByCode(Yii::app()->language)->id));
 }
 public function set_Language_entity($code, $entityname, $errormessage, $controller, $action, $mode)
 {
     if ($mode == 'create') {
         $entity = new $entityname();
     } else {
         $entity = Language::findByCode($code)->getFirst();
         if ($mode = 'edit' and !$entity) {
             return $this->dispatcher->forward(array("controller" => "Error", "action" => "error404"));
         } else {
             if (!$entity) {
                 $this->flash->error($errormessage);
                 return $this->dispatcher->forward(array("controller" => $controller, "action" => $action));
             }
         }
     }
     return $entity;
 }
Beispiel #8
0
 /**
  * @return null|Language
  */
 public function getLanguage()
 {
     return Language::findByCode($this->getLanguageCode());
 }