Ejemplo n.º 1
0
 /**
  * Si le formulaire est valide, on crée une clé d'identification & on expédie à l'utilisateur un mail de ré-initialisation
  *
  * @return bool
  */
 public function processRequest()
 {
     if ($this->validate()) {
         try {
             /** @var User $user */
             if (!($user = User::findIdentityByEmail($this->email))) {
                 // CHECK_SECURITY
                 // On ne devrait pas avoir ce cas là puisque l'existence du mail dans la base de données a été vérifiée dans lr formulaire
                 // Il s'agit sans doute d'une tentative de piratage
                 return false;
             }
             $user->reset_password_token = Yii::$app->getSecurity()->generateRandomString();
             if (!$user->save()) {
                 Yii::error('Erreur sur $user->save()', __METHOD__);
                 return false;
             }
             Yii::$app->mailer->compose('/mail/askResetPassword', compact('user'))->setFrom(Yii::$app->params['adminEmail'])->setTo(h::safeRecipientEmail($user->email))->setSubject(HUsers::t('titles', 'Your password reset request'))->send();
             return true;
         } catch (Exception $x) {
             Yii::error($x->getMessage(), __METHOD__);
             return false;
         }
     } else {
         return false;
     }
 }
Ejemplo n.º 2
0
 /**
  * Renvoie les $nbNews dernières actualités. Par défaut, on sélectionne la langue de l'application
  *
  * @param string  $languageCode
  * @param int     $nbNews
  * @param boolean $getOnlyActiveNews
  * @return $this
  */
 public function lastNews($nbNews, $getOnlyActiveNews = true, $languageCode = null)
 {
     if (is_null($languageCode)) {
         $languageCode = h::getIso639Code(Yii::$app->language);
     }
     $this->joinWith('base');
     if ($getOnlyActiveNews) {
         $this->andWhere('base_news.enabled = 1');
     }
     return $this->byLanguageCode($languageCode)->addOrderBy('base_news.event_date DESC')->limit($nbNews);
 }
Ejemplo n.º 3
0
 /**
  * Cherche une page associée à la page/racine de code $basePageCode
  *
  * @param string      $basePageCode
  * @param bool        $enabledOnly
  * @param string|null $languageCode
  * @return $this
  */
 public function byCode($basePageCode, $enabledOnly = true, $languageCode = null)
 {
     if (is_null($languageCode)) {
         $languageCode = h::getIso639Code(Yii::$app->language);
     }
     $this->innerJoin('base_pages b', 'b.id = base_id AND b.code = :code');
     if ($enabledOnly) {
         $this->andWhere('b.enabled = 1');
     }
     return $this->innerJoin('languages l', 'l.id = language_id AND l.iso_639_code = :langCode')->addParams(['langCode' => $languageCode, 'code' => $basePageCode]);
 }
Ejemplo n.º 4
0
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search(array $params)
 {
     $query = WebNews::find()->byLanguageCode(h::getIso639Code())->joinWith('base');
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     if (!$params) {
         return $dataProvider;
     }
     if (!$this->load($params) || !$this->validate()) {
         $this->error = static::ERR_KO;
         return $dataProvider;
     }
     if ($this->tagId) {
         $query->byTagId($this->tagId, false);
     }
     if (trim($this->title)) {
         $query->titleContains($this->title);
     }
     if (trim($this->body)) {
         $query->bodyContains($this->body);
     }
     return $dataProvider;
 }
Ejemplo n.º 5
0
 /**
  * Met à jour la liste des index de menus. Ceux-ci sont dédoublonnés et réalignés à partir de l'index 1. l'ordre initial des pages est
  * conservé. Si deux pages avaient le même index de menu, elles sont reclassées par #id
  */
 private function resetMenuIndexes()
 {
     try {
         Yii::$app->db->transaction(function () {
             $idx = 0;
             /** @var array $row ['id' => id, 'menu_index' => val] */
             foreach (BasePagesQuery::getMenuIndexesMap() as $row) {
                 if (BasePagesQuery::updateMenuIndexes($row['id'], ++$idx) != 1) {
                     throw new Exception("Erreur sur BasePagesQuery::updateMenuIndexes({$row['id']}, {$idx})");
                 }
             }
         });
     } catch (\Exception $x) {
         Yii::$app->session->addFlash('warning', HLib::t('messages', 'An error has occurred'));
         Yii::error(h::_($x), __METHOD__);
     }
 }
Ejemplo n.º 6
0
 /**
  * Affichage de la liste des objets, avec ou sans filtre selon le contenu de la session
  * (frontend)
  *
  * @param int $page Numéro de la page courante (commence à 1)
  * @return mixed
  */
 public function actionDisplaySearchResults($page)
 {
     // Récupération d'une liste éventuellement filtrée selon les critères du moteur de recherche
     $searchModel = new WebNewsSearch();
     $advancedSearchFilters = $searchModel->retrieveFiltersFromSession();
     $dataProvider = $searchModel->search($advancedSearchFilters);
     // Détermination de l'ordre de tri
     $sortClausesSessionKey = WebNews::class . '.display-search-results.sort';
     $dataProvider->query = ListSorter::updateQuery($dataProvider->query, $sortClausesSessionKey);
     Yii::$app->session->set(WebNews::class . '.index.page', $page);
     $dataProvider->pagination->page = --$page;
     /** @var HCms $module */
     $module = $this->module;
     if (isset($module->frontendLayout)) {
         $this->layout = $module->frontendLayout;
     }
     /** @noinspection PhpUndefinedMethodInspection */
     return $this->render('displaySearchResults', ['searchModel' => $searchModel, 'dataProvider' => $dataProvider, 'tags' => ArrayHelper::map(WebTag::find()->byLanguageCode(h::getIso639Code())->orderByLabel()->all(), 'id', 'label'), 'sortClausesSessionKey' => $sortClausesSessionKey]);
 }