You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

822 lines
24KB

  1. <?php
  2. /**
  3. * Copyright distrib (2018)
  4. *
  5. * contact@opendistrib.net
  6. *
  7. * Ce logiciel est un programme informatique servant à aider les producteurs
  8. * à distribuer leur production en circuits courts.
  9. *
  10. * Ce logiciel est régi par la licence CeCILL soumise au droit français et
  11. * respectant les principes de diffusion des logiciels libres. Vous pouvez
  12. * utiliser, modifier et/ou redistribuer ce programme sous les conditions
  13. * de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
  14. * sur le site "http://www.cecill.info".
  15. *
  16. * En contrepartie de l'accessibilité au code source et des droits de copie,
  17. * de modification et de redistribution accordés par cette licence, il n'est
  18. * offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
  19. * seule une responsabilité restreinte pèse sur l'auteur du programme, le
  20. * titulaire des droits patrimoniaux et les concédants successifs.
  21. *
  22. * A cet égard l'attention de l'utilisateur est attirée sur les risques
  23. * associés au chargement, à l'utilisation, à la modification et/ou au
  24. * développement et à la reproduction du logiciel par l'utilisateur étant
  25. * donné sa spécificité de logiciel libre, qui peut le rendre complexe à
  26. * manipuler et qui le réserve donc à des développeurs et des professionnels
  27. * avertis possédant des connaissances informatiques approfondies. Les
  28. * utilisateurs sont donc invités à charger et tester l'adéquation du
  29. * logiciel à leurs besoins dans des conditions permettant d'assurer la
  30. * sécurité de leurs systèmes et ou de leurs données et, plus généralement,
  31. * à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
  32. *
  33. * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
  34. * pris connaissance de la licence CeCILL, et que vous en avez accepté les
  35. * termes.
  36. */
  37. namespace common\models;
  38. use common\helpers\GlobalParam;
  39. use yii\web\IdentityInterface;
  40. use yii\db\Query;
  41. use common\components\ActiveRecordCommon;
  42. /**
  43. * User model
  44. *
  45. * @property integer $id
  46. * @property string $username
  47. * @property string $password_hash
  48. * @property string $password_reset_token
  49. * @property string $email
  50. * @property string $auth_key
  51. * @property integer $status
  52. * @property integer $created_at
  53. * @property integer $updated_at
  54. * @property string $password write-only password
  55. * @property boolean $confiance
  56. */
  57. class User extends ActiveRecordCommon implements IdentityInterface
  58. {
  59. const TYPE_INDIVIDUAL = 'individual';
  60. const TYPE_LEGAL_PERSON = 'legal-person';
  61. const TYPE_GUEST = 'guest';
  62. const STATUS_DELETED = 0;
  63. const STATUS_ACTIVE = 10;
  64. const STATUS_PRODUCER = 11;
  65. const STATUS_ADMIN = 13;
  66. const ID_USER_SYSTEM = 0;
  67. var $password_old;
  68. var $password_new;
  69. var $password_new_confirm;
  70. var $points_sale = [];
  71. var $user_groups = [];
  72. var $one_name;
  73. var $product_price_percent;
  74. /**
  75. * @inheritdoc
  76. */
  77. public static function tableName()
  78. {
  79. return '{{%user}}';
  80. }
  81. /**
  82. * @inheritdoc
  83. */
  84. public function behaviors()
  85. {
  86. return [
  87. TimestampBehavior::className(),
  88. ];
  89. }
  90. /**
  91. * @inheritdoc
  92. */
  93. public function rules()
  94. {
  95. return [
  96. [['no_mail', 'mail_distribution_monday', 'mail_distribution_tuesday', 'mail_distribution_wednesday', 'mail_distribution_thursday', 'mail_distribution_friday', 'mail_distribution_saturday', 'mail_distribution_sunday', 'is_main_contact'], 'boolean'],
  97. [['lastname', 'name', 'phone', 'address', 'type', 'name_legal_person', 'evoliz_code'], 'string'],
  98. ['lastname', 'verifyOneName', 'skipOnError' => false, 'skipOnEmpty' => false],
  99. ['email', 'email', 'message' => 'Cette adresse email n\'est pas valide'],
  100. ['email', 'verifyEmail'],
  101. ['status', 'default', 'value' => self::STATUS_ACTIVE],
  102. ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED, self::STATUS_ADMIN, self::STATUS_PRODUCER]],
  103. ['password_old', 'verifyPasswordOld'],
  104. ['password_new', 'verifyPasswordNew'],
  105. ['password_new_confirm', 'verifyPasswordNewConfirm'],
  106. [['date_last_connection', 'password_old', 'password_new', 'password_new_confirm', 'password_hash', 'points_sale', 'product_price_percent', 'user_groups'], 'safe'],
  107. ];
  108. }
  109. public function attributeLabels()
  110. {
  111. return [
  112. 'id' => 'ID',
  113. 'name' => 'Prénom',
  114. 'lastname' => 'Nom',
  115. 'phone' => 'Téléphone',
  116. 'address' => 'Adresse',
  117. 'username' => 'Identifiant',
  118. 'password' => 'Mot de passe',
  119. 'rememberMe' => 'Se souvenir de moi',
  120. 'no_mail' => 'Ne pas recevoir d\'email de la part du Chat des Noisettes',
  121. 'mail_distribution_monday' => 'Lundi',
  122. 'mail_distribution_tuesday' => 'Mardi',
  123. 'mail_distribution_wednesday' => 'Mercredi',
  124. 'mail_distribution_thursday' => 'Jeudi',
  125. 'mail_distribution_friday' => 'Vendredi',
  126. 'mail_distribution_saturday' => 'Samedi',
  127. 'mail_distribution_sunday' => 'Dimanche',
  128. 'password_old' => 'Ancien mot de passe',
  129. 'password_new' => 'Nouveau mot de passe',
  130. 'password_new_confirm' => 'Confirmation du nouveau mot de passe',
  131. 'points_sale' => 'Points de vente',
  132. 'type' => 'Type',
  133. 'name_legal_person' => 'Libellé',
  134. 'is_main_contact' => 'Contact principal',
  135. 'product_price_percent' => 'Prix produits : pourcentage',
  136. 'user_groups' => "Groupes d'utilisateurs",
  137. 'evoliz_code' => 'Code client Evoliz'
  138. ];
  139. }
  140. /**
  141. * Retourne les options de base nécessaires à la fonction de recherche.
  142. *
  143. * @return array
  144. */
  145. public static function defaultOptionsSearch()
  146. {
  147. return [
  148. 'with' => [],
  149. 'join_with' => ['userProducer', 'userUserGroup'],
  150. 'orderby' => 'user.name ASC, user.lastname ASC',
  151. 'attribute_id_producer' => ''
  152. ];
  153. }
  154. /**
  155. * Vérifie le mot de passe envoyé par l'utilisateur.
  156. *
  157. * @param string $attribute
  158. * @param array $params
  159. */
  160. public function verifyPasswordOld($attribute, $params)
  161. {
  162. if (strlen($this->password_old)) {
  163. if (!$this->validatePassword($this->password_old)) {
  164. $this->addError($attribute, 'Mot de passe invalide.');
  165. }
  166. }
  167. if (!strlen($this->password_old) && (strlen($this->password_new) || strlen($this->password_new_confirm))) {
  168. $this->addError($attribute, 'Ce champs ne peut être vide');
  169. }
  170. if (!strlen($this->password_new) && (strlen($this->password_old) || strlen($this->password_new_confirm))) {
  171. $this->addError('password_new', 'Ce champs ne peut être vide');
  172. }
  173. if (!strlen($this->password_new_confirm) && (strlen($this->password_old) || strlen($this->password_new))) {
  174. $this->addError('password_new_confirm', 'Ce champs ne peut être vide');
  175. }
  176. }
  177. /**
  178. * Vérifie le mot de passe de l'utilisateur.
  179. *
  180. * @param string $attribute
  181. * @param array $params
  182. */
  183. public function verifyPasswordNew($attribute, $params)
  184. {
  185. if (strlen($this->password_new) < 6) {
  186. $this->addError($attribute, 'Votre mot de passe doit comporter au moins 6 caractères.');
  187. }
  188. }
  189. /**
  190. * Vérifie la confirmation de mot de passe de l'utilisateur.
  191. *
  192. * @param string $attribute
  193. * @param array $params
  194. */
  195. public function verifyPasswordNewConfirm($attribute, $params)
  196. {
  197. if ($this->password_new != $this->password_new_confirm) {
  198. $this->addError($attribute, 'Les deux mots de passe doivent être identiques');
  199. }
  200. }
  201. /**
  202. * Vérifie l'email de l'utilisateur.
  203. *
  204. * @param string $attribute
  205. * @param array $params
  206. */
  207. public function verifyEmail($attribute, $params)
  208. {
  209. if ($this->id) {
  210. $user = User::find()->where("email LIKE :email AND type != :guest AND id != :id")->params(array(':email' => '%' . $this->email . '%', ':id' => $this->id, ':guest' => 'guest'))->one();
  211. } else {
  212. $user = User::find()->where("email LIKE :email AND type != :guest")->params(array(':email' => '%' . $this->email . '%', ':guest' => 'guest'))->one();
  213. }
  214. if ($user) {
  215. $this->addError($attribute, 'Cette adresse email est déjà utilisée par un autre utilisateur ');
  216. }
  217. }
  218. /**
  219. * Vérifie que l'utilisateur a au moins un nom de défini
  220. *
  221. * @param $attribute
  222. * @param $params
  223. */
  224. public function verifyOneName($attribute, $params)
  225. {
  226. if (strlen($this->lastname) == 0 && strlen($this->name_legal_person) == 0) {
  227. $this->addError('lastname', 'Vous devez saisir au moins un nom.');
  228. $this->addError('name_legal_person', 'Vous devez saisir au moins un nom.');
  229. }
  230. }
  231. /*
  232. * Relations
  233. */
  234. public function getUserProducer()
  235. {
  236. return $this->hasMany(UserProducer::className(), ['id_user' => 'id']);
  237. }
  238. public function getUserUserGroup()
  239. {
  240. return $this->hasMany(UserUserGroup::className(), ['id_user' => 'id']);
  241. }
  242. public function getOrder()
  243. {
  244. return $this->hasMany(Order::className(), ['id_user' => 'id']);
  245. }
  246. public function getName(): string
  247. {
  248. return $this->name;
  249. }
  250. public function getLastname(): string
  251. {
  252. return $this->lastname;
  253. }
  254. /**
  255. * @inheritdoc
  256. */
  257. public static function findIdentity($id)
  258. {
  259. return static::findOne(['id' => $id]);
  260. }
  261. /**
  262. * @inheritdoc
  263. */
  264. public static function findIdentityByAccessToken($token, $type = null)
  265. {
  266. throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
  267. }
  268. /**
  269. * Finds user by username
  270. *
  271. * @param string $username
  272. * @return static|null
  273. */
  274. public static function findByUsername($username)
  275. {
  276. return static::findOne(['username' => $username]);
  277. }
  278. /**
  279. * Recherche un utilisateur via son adresse email.
  280. *
  281. * @param string $email
  282. * @return User
  283. */
  284. public static function findByEmail($email)
  285. {
  286. return static::findOne(['email' => $email]);
  287. }
  288. /**
  289. * Finds user by password reset token
  290. *
  291. * @param string $token password reset token
  292. * @return static|null
  293. */
  294. public static function findByPasswordResetToken($token)
  295. {
  296. if (!static::isPasswordResetTokenValid($token)) {
  297. return null;
  298. }
  299. return static::findOne([
  300. 'password_reset_token' => $token,
  301. ]);
  302. }
  303. /**
  304. * Recherche des utilisateurs suivant les paramètres : id_etablissement,
  305. * inactifs, id_point_vente, nom, prenom, email, telephone.
  306. *
  307. * @param array $params
  308. * @return Query
  309. */
  310. public static function findBy($params = [])
  311. {
  312. if (!isset($params['id_producer'])) {
  313. $params['id_producer'] = GlobalParam::getCurrentProducerId();
  314. }
  315. $query = (new Query())
  316. ->select(['user.id AS user_id', 'user.name', 'user.lastname', 'user.phone', 'user.email', 'user.created_at', 'user.date_last_connection', 'user_producer.*', 'user.address', 'user.name_legal_person'])
  317. ->from('user');
  318. $active = (isset($params['inactive']) && $params['inactive']) ? 0 : 1;
  319. $query->innerJoin('user_producer', 'user.id = user_producer.id_user AND user_producer.active = ' . $active . ' AND user_producer.id_producer = :id_producer', [':id_producer' => $params['id_producer']]);
  320. if (isset($params['id_point_sale']) && $params['id_point_sale']) {
  321. $point_sale = PointSale::findOne(['id' => $params['id_point_sale']]);
  322. $conditionLinkUserPointSale = 'user.id = user_point_sale.id_user AND user_point_sale.id_point_sale = :id_point_sale';
  323. $usersPointSaleLink = false;
  324. $usersPointSaleHasOrder = false;
  325. if (isset($params['users_point_sale_link']) && $params['users_point_sale_link']) {
  326. $usersPointSaleLink = true;
  327. } elseif (isset($params['users_point_sale_has_order']) && $params['users_point_sale_has_order']) {
  328. $usersPointSaleHasOrder = true;
  329. } elseif ($point_sale->restricted_access) {
  330. $usersPointSaleLink = true;
  331. } else {
  332. $usersPointSaleHasOrder = true;
  333. }
  334. if ($usersPointSaleLink) {
  335. $query->innerJoin('user_point_sale', 'user.id = user_point_sale.id_user AND user_point_sale.id_point_sale = :id_point_sale', [':id_point_sale' => $params['id_point_sale']]);
  336. } elseif ($usersPointSaleHasOrder) {
  337. $query->innerJoin(
  338. 'order',
  339. 'user.id = order.id_user AND order.id_point_sale = :id_point_sale',
  340. [':id_point_sale' => $params['id_point_sale']]
  341. )->groupBy('user.id');
  342. }
  343. }
  344. if (isset($params['subscribers']) && $params['subscribers']) {
  345. $query->innerJoin(
  346. 'subscription',
  347. 'user.id = subscription.id_user AND subscription.id_producer = :id_producer',
  348. [':id_producer' => GlobalParam::getCurrentProducerId()]
  349. )->groupBy('user.id');
  350. }
  351. if (isset($params['inactive']) && $params['inactive']) {
  352. $query->innerJoin(
  353. 'order',
  354. 'user.id = order.id_user'
  355. )
  356. ->groupBy('user.id');
  357. }
  358. if (isset($params['name'])) {
  359. $query->andFilterWhere(['like', 'name', $params['name']]);
  360. }
  361. if (isset($params['lastname'])) {
  362. $query->andFilterWhere(['like', 'lastname', $params['lastname']]);
  363. }
  364. if (isset($params['email'])) {
  365. $query->andFilterWhere(['like', 'email', $params['email']]);
  366. }
  367. if (isset($params['phone'])) {
  368. $query->andFilterWhere(['like', 'phone', $params['phone']]);
  369. }
  370. $query->orderBy('user.type DESC, user.lastname ASC, user.name ASC');
  371. return $query;
  372. }
  373. /**
  374. * Finds out if password reset token is valid
  375. *
  376. * @param string $token password reset token
  377. * @return boolean
  378. */
  379. public static function isPasswordResetTokenValid($token)
  380. {
  381. if (empty($token)) {
  382. return false;
  383. }
  384. $expire = Yii::$app->params['user.passwordResetTokenExpire'];
  385. $parts = explode('_', $token);
  386. $timestamp = (int)end($parts);
  387. return $timestamp + $expire >= time();
  388. }
  389. /**
  390. * @inheritdoc
  391. */
  392. public function getId()
  393. {
  394. return $this->getPrimaryKey();
  395. }
  396. /**
  397. * @inheritdoc
  398. */
  399. public function getAuthKey()
  400. {
  401. return $this->auth_key;
  402. }
  403. /**
  404. * @inheritdoc
  405. */
  406. public function validateAuthKey($authKey)
  407. {
  408. return $this->getAuthKey() === $authKey;
  409. }
  410. /**
  411. * Validates password
  412. *
  413. * @param string $password password to validate
  414. * @return boolean if password provided is valid for current user
  415. */
  416. public function validatePassword($password)
  417. {
  418. return Yii::$app->security->validatePassword($password, $this->password_hash);
  419. }
  420. /**
  421. * Generates password hash from password and sets it to the model
  422. *
  423. * @param string $password
  424. */
  425. public function setPassword($password)
  426. {
  427. $this->password_hash = Yii::$app->security->generatePasswordHash($password);
  428. }
  429. /**
  430. * Generates "remember me" authentication key
  431. */
  432. public function generateAuthKey()
  433. {
  434. $this->auth_key = Yii::$app->security->generateRandomString();
  435. }
  436. /**
  437. * Generates new password reset token
  438. */
  439. public function generatePasswordResetToken()
  440. {
  441. $this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time();
  442. }
  443. /**
  444. * Removes password reset token
  445. */
  446. public function removePasswordResetToken()
  447. {
  448. $this->password_reset_token = null;
  449. }
  450. /**
  451. * Retourne l'utilisateur courant.
  452. *
  453. * @return User
  454. */
  455. public static function getCurrent()
  456. {
  457. if (!Yii::$app->user->isGuest) {
  458. return Yii::$app->user->identity;
  459. }
  460. return false;
  461. }
  462. /**
  463. * Retourne si l'utilisateur courant est connecté ou non.
  464. *
  465. * @return boolean
  466. */
  467. public static function isCurrentConnected()
  468. {
  469. return !Yii::$app->user->isGuest;
  470. }
  471. /**
  472. * Retourne si l'utilisateur est un producteur ou non.
  473. *
  474. * @return boolean
  475. */
  476. public function isProducer()
  477. {
  478. return ($this->status == User::STATUS_ADMIN || $this->status == User::STATUS_PRODUCER) && $this->id_producer;
  479. }
  480. /**
  481. * Retourne si l'utilisateur courant est un producteur ou non.
  482. *
  483. * @return boolean
  484. */
  485. public static function isCurrentProducer()
  486. {
  487. $user = User::getCurrent();
  488. if ($user) {
  489. return $user->isProducer();
  490. }
  491. return false;
  492. }
  493. /**
  494. * Retourne si l'utilisateur est un admin ou non.
  495. *
  496. * @return boolean
  497. */
  498. public function isAdmin()
  499. {
  500. return $this->status == User::STATUS_ADMIN;
  501. }
  502. /**
  503. * Retourne si l'utilisateur courant est un admin ou non.
  504. *
  505. * @return boolean
  506. */
  507. public static function isCurrentAdmin()
  508. {
  509. $user = User::getCurrent();
  510. if ($user) {
  511. return $user->isAdmin();
  512. }
  513. return false;
  514. }
  515. /**
  516. * Retourne le nom du producteur.
  517. *
  518. * @return string
  519. */
  520. public function getNameProducer()
  521. {
  522. $producer = Producer::findOne($this->id_producer);
  523. return $producer->name;
  524. }
  525. /**
  526. * Retourne les établissements liés à l'utilisateur.
  527. *
  528. * @return array
  529. */
  530. public function getBookmarkedProducers()
  531. {
  532. $producers = (new \yii\db\Query())
  533. ->select('*')
  534. ->from(['user_producer', 'producer'])
  535. ->where('user_producer.id_producer = producer.id')
  536. ->andWhere(['user_producer.id_user' => $this->id])
  537. ->andWhere(['user_producer.active' => 1])
  538. ->all();
  539. return $producers;
  540. }
  541. /**
  542. * Retourne le crédit de l'utilisateur pour un producteur donné.
  543. *
  544. * @param integer $id_etablissement
  545. * @return float
  546. */
  547. public function getCredit($idProducer)
  548. {
  549. $userProducer = UserProducer::searchOne([
  550. 'id_user' => $this->id
  551. ]);
  552. if ($userProducer) {
  553. return $userProducer->credit;
  554. }
  555. return 0;
  556. }
  557. /**
  558. * Retourne le point de vente favoris d'un utilisateur : le point de vente auquel le client est lié,
  559. * le point de vente de la dernière commande sinon.
  560. *
  561. * @return PointSale
  562. */
  563. public function getFavoritePointSale()
  564. {
  565. $arrayUserPointSale = UserPointSale::find()
  566. ->innerJoinWith('pointSale', true)
  567. ->where([
  568. 'user_point_sale.id_user' => $this->id,
  569. 'point_sale.id_producer' => GlobalParam::getCurrentProducerId()
  570. ])
  571. ->all();
  572. if (count($arrayUserPointSale) == 1) {
  573. $pointSale = PointSale::findOne(['id' => $arrayUserPointSale[0]->id_point_sale]);
  574. } else {
  575. $lastOrder = Order::find()->innerJoinWith('pointSale', true)->where([
  576. 'order.id_user' => $this->id,
  577. 'point_sale.id_producer' => GlobalParam::getCurrentProducerId()
  578. ])
  579. ->orderBy('order.id DESC')
  580. ->one();
  581. if ($lastOrder) {
  582. $pointSale = PointSale::findOne(['id' => $lastOrder->id_point_sale]);
  583. }
  584. }
  585. if (isset($pointSale)) {
  586. return $pointSale;
  587. }
  588. return false;
  589. }
  590. /**
  591. * Met à jour la date de dernière connexion de l'utilisateur.
  592. */
  593. public function updateLastConnection()
  594. {
  595. $this->date_last_connection = date('Y-m-d H:i:s');
  596. $this->save();
  597. }
  598. /**
  599. * Envoie un email de bienvenue à l'utilisateur lors de son inscription
  600. * via le backend du site.
  601. *
  602. * @param string $password
  603. */
  604. public function sendMailWelcome($password)
  605. {
  606. if (strlen($this->email)) {
  607. $producer = Producer::findOne(GlobalParam::getCurrentProducerId());
  608. Yii::$app->mailer->compose();
  609. $mail = Yii::$app->mailer->compose(
  610. ['html' => 'createUserAdmin-html', 'text' => 'createUserAdmin-text'], ['user' => $this, 'producer' => $producer, 'password' => $password]
  611. )
  612. ->setTo($this->email)
  613. ->setFrom(['contact@opendistrib.net' => 'distrib'])
  614. ->setSubject('[distrib] Inscription')
  615. ->send();
  616. }
  617. }
  618. public function getFullAddress($nl2br = false)
  619. {
  620. $address = '';
  621. if (isset($this->lastname) && isset($this->name) && strlen($this->lastname) && strlen($this->name)) {
  622. $address .= $this->lastname . ' ' . $this->name . "\n";
  623. }
  624. if (isset($this->name_legal_person) && strlen($this->name_legal_person)) {
  625. $address .= $this->name_legal_person . "\n";
  626. }
  627. $address .= $this->address;
  628. if ($nl2br) {
  629. $address = nl2br($address);
  630. }
  631. return $address;
  632. }
  633. public function getUsername($withType = false)
  634. {
  635. $username = '';
  636. if (isset($this->name_legal_person) && strlen($this->name_legal_person)) {
  637. $username = $this->name_legal_person;
  638. if ($withType) {
  639. $username = 'Personne morale / ' . $username;
  640. }
  641. } else {
  642. $username = $this->lastname . ' ' . $this->name;
  643. }
  644. return $username;
  645. }
  646. public static function getUsernameFromArray($modelArray, $withType = false)
  647. {
  648. $username = '';
  649. if (isset($modelArray['name_legal_person']) && strlen($modelArray['name_legal_person'])) {
  650. $username = $modelArray['name_legal_person'];
  651. if ($withType) {
  652. $username = 'Personne morale / ' . $username;
  653. }
  654. } else {
  655. $username = $modelArray['lastname'] . ' ' . $modelArray['name'];
  656. }
  657. return $username;
  658. }
  659. public static function populateDropdownList()
  660. {
  661. $usersArray = User::findBy()->all();
  662. $usersArrayDropdown = ['' => '--'];
  663. foreach ($usersArray as $user) {
  664. $usersArrayDropdown[$user['user_id']] = User::getUsernameFromArray($user, true);
  665. }
  666. return $usersArrayDropdown;;
  667. }
  668. /**
  669. * Retourne l'ID de l'utilisateur courant connecté.
  670. *
  671. * @return mixed
  672. */
  673. public static function getCurrentId()
  674. {
  675. if (!Yii::$app->user->isGuest) {
  676. return Yii::$app->user->identity->id;
  677. }
  678. return false;
  679. }
  680. /**
  681. * Retourne le status de l'utilisateur courant connecté.
  682. *
  683. * @return integer|boolean
  684. */
  685. public static function getCurrentStatus()
  686. {
  687. if (!Yii::$app->user->isGuest) {
  688. return Yii::$app->user->identity->status;
  689. }
  690. return false;
  691. }
  692. public static function hasAccessBackend()
  693. {
  694. return User::getCurrentStatus() == USER::STATUS_ADMIN || User::getCurrentStatus() == USER::STATUS_PRODUCER;
  695. }
  696. public function belongsToUserGroup($userGroupId)
  697. {
  698. if (!$this->userUserGroup) {
  699. $this->populateRelation('userUserGroup', UserUserGroup::searchAll([
  700. 'id_user' => $this->id
  701. ]));
  702. }
  703. if ($this->userUserGroup) {
  704. foreach ($this->userUserGroup as $userUserGroup) {
  705. if ($userUserGroup->id_user_group == $userGroupId) {
  706. return true;
  707. }
  708. }
  709. }
  710. return false;
  711. }
  712. public static function getTypeChoicesArray()
  713. {
  714. return [
  715. User::TYPE_INDIVIDUAL => 'Particulier',
  716. User::TYPE_LEGAL_PERSON => 'Personne morale',
  717. User::TYPE_GUEST => 'Visiteur'
  718. ];
  719. }
  720. }