/** * */ 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')); }
/** * 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)))); }
/** * 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; }
/** * 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; }
/** * @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; }
/** * @return null|Language */ public function getLanguage() { return Language::findByCode($this->getLanguageCode()); }