/** * 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; } }
/** * 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); }
/** * 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]); }
/** * 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; }
/** * 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__); } }
/** * 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]); }