|
|
@@ -39,6 +39,7 @@ termes. |
|
|
|
namespace common\models; |
|
|
|
|
|
|
|
use yii\web\IdentityInterface; |
|
|
|
use yii\db\Query ; |
|
|
|
|
|
|
|
/** |
|
|
|
* User model |
|
|
@@ -55,7 +56,8 @@ use yii\web\IdentityInterface; |
|
|
|
* @property string $password write-only password |
|
|
|
* @property boolean $confiance |
|
|
|
*/ |
|
|
|
class User extends ActiveRecord implements IdentityInterface { |
|
|
|
class User extends ActiveRecord implements IdentityInterface |
|
|
|
{ |
|
|
|
|
|
|
|
const STATUS_DELETED = 0; |
|
|
|
const STATUS_ACTIVE = 10; |
|
|
@@ -71,14 +73,16 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
/** |
|
|
|
* @inheritdoc |
|
|
|
*/ |
|
|
|
public static function tableName() { |
|
|
|
public static function tableName() |
|
|
|
{ |
|
|
|
return '{{%user}}'; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @inheritdoc |
|
|
|
*/ |
|
|
|
public function behaviors() { |
|
|
|
public function behaviors() |
|
|
|
{ |
|
|
|
return [ |
|
|
|
TimestampBehavior::className(), |
|
|
|
]; |
|
|
@@ -87,7 +91,8 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
/** |
|
|
|
* @inheritdoc |
|
|
|
*/ |
|
|
|
public function rules() { |
|
|
|
public function rules() |
|
|
|
{ |
|
|
|
return [ |
|
|
|
['confiance', 'default', 'value' => 1], |
|
|
|
[['no_mail', 'mail_prod_lundi', 'mail_prod_mardi', 'mail_prod_mercredi', 'mail_prod_jeudi', 'mail_prod_vendredi', 'mail_prod_samedi', 'mail_prod_dimanche'], 'boolean'], |
|
|
@@ -104,7 +109,14 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
]; |
|
|
|
} |
|
|
|
|
|
|
|
public function verifyPasswordOld($attribute, $params) { |
|
|
|
/** |
|
|
|
* Vérifie le mot de passe envoyé par l'utilisateur. |
|
|
|
* |
|
|
|
* @param string $attribute |
|
|
|
* @param array $params |
|
|
|
*/ |
|
|
|
public function verifyPasswordOld($attribute, $params) |
|
|
|
{ |
|
|
|
if (strlen($this->password_old)) { |
|
|
|
if (!$this->validatePassword($this->password_old)) { |
|
|
|
$this->addError($attribute, 'Mot de passe invalide.'); |
|
|
@@ -124,40 +136,68 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function verifyPasswordNew($attribute, $params) { |
|
|
|
/** |
|
|
|
* Vérifie le mot de passe de l'utilisateur. |
|
|
|
* |
|
|
|
* @param string $attribute |
|
|
|
* @param array $params |
|
|
|
*/ |
|
|
|
public function verifyPasswordNew($attribute, $params) |
|
|
|
{ |
|
|
|
if (strlen($this->password_new) < 6) { |
|
|
|
$this->addError($attribute, 'Votre mot de passe doit comporter au moins 6 caractères.'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function verifyPasswordNewConfirm($attribute, $params) { |
|
|
|
/** |
|
|
|
* Vérifie la confirmation de mot de passe de l'utilisateur. |
|
|
|
* |
|
|
|
* @param string $attribute |
|
|
|
* @param array $params |
|
|
|
*/ |
|
|
|
public function verifyPasswordNewConfirm($attribute, $params) |
|
|
|
{ |
|
|
|
if ($this->password_new != $this->password_new_confirm) { |
|
|
|
$this->addError($attribute, 'Les deux mots de passe doivent être identiques'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function verifyEmail($attribute, $params) { |
|
|
|
/** |
|
|
|
* Vérifie l'email de l'utilisateur. |
|
|
|
* |
|
|
|
* @param string $attribute |
|
|
|
* @param array $params |
|
|
|
*/ |
|
|
|
public function verifyEmail($attribute, $params) |
|
|
|
{ |
|
|
|
$user = User::find()->where("email LIKE :email AND id != :id")->params(array(':email' => '%' . $this->email . '%', ':id' => $this->id))->one(); |
|
|
|
|
|
|
|
if ($user) |
|
|
|
$this->addError($attribute, 'Cette adresse email est déjà utilisée par un autre utilisateur '); |
|
|
|
} |
|
|
|
|
|
|
|
public function getUserEtablissement() { |
|
|
|
/* |
|
|
|
* Relations |
|
|
|
*/ |
|
|
|
|
|
|
|
public function getUserEtablissement() |
|
|
|
{ |
|
|
|
return $this->hasMany(UserEtablissement::className(), ['id_user' => 'id']); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @inheritdoc |
|
|
|
*/ |
|
|
|
public static function findIdentity($id) { |
|
|
|
public static function findIdentity($id) |
|
|
|
{ |
|
|
|
return static::findOne(['id' => $id/* , 'status' => self::STATUS_ACTIVE */]); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @inheritdoc |
|
|
|
*/ |
|
|
|
public static function findIdentityByAccessToken($token, $type = null) { |
|
|
|
public static function findIdentityByAccessToken($token, $type = null) |
|
|
|
{ |
|
|
|
throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.'); |
|
|
|
} |
|
|
|
|
|
|
@@ -167,12 +207,20 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
* @param string $username |
|
|
|
* @return static|null |
|
|
|
*/ |
|
|
|
public static function findByUsername($username) { |
|
|
|
return static::findOne(['username' => $username/* , 'status' => self::STATUS_ACTIVE */]); |
|
|
|
public static function findByUsername($username) |
|
|
|
{ |
|
|
|
return static::findOne(['username' => $username]); |
|
|
|
} |
|
|
|
|
|
|
|
public static function findByEmail($email) { |
|
|
|
return static::findOne(['email' => $email /* , 'status' => self::STATUS_ACTIVE */]); |
|
|
|
/** |
|
|
|
* Recherche un utilisateur via son adresse email. |
|
|
|
* |
|
|
|
* @param string $email |
|
|
|
* @return User |
|
|
|
*/ |
|
|
|
public static function findByEmail($email) |
|
|
|
{ |
|
|
|
return static::findOne(['email' => $email]); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@@ -181,7 +229,8 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
* @param string $token password reset token |
|
|
|
* @return static|null |
|
|
|
*/ |
|
|
|
public static function findByPasswordResetToken($token) { |
|
|
|
public static function findByPasswordResetToken($token) |
|
|
|
{ |
|
|
|
if (!static::isPasswordResetTokenValid($token)) { |
|
|
|
return null; |
|
|
|
} |
|
|
@@ -191,11 +240,19 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
]); |
|
|
|
} |
|
|
|
|
|
|
|
public static function findBy($params = []) { |
|
|
|
/** |
|
|
|
* Recherche des utilisateurs suivant les paramètres : id_etablissement, |
|
|
|
* inactifs, id_point_vente, nom, prenom, email, telephone. |
|
|
|
* |
|
|
|
* @param array $params |
|
|
|
* @return Query |
|
|
|
*/ |
|
|
|
public static function findBy($params = []) |
|
|
|
{ |
|
|
|
if (!isset($params['id_etablissement'])) |
|
|
|
$params['id_etablissement'] = Yii::$app->user->identity->id_etablissement; |
|
|
|
|
|
|
|
$query = (new \yii\db\Query()) |
|
|
|
$query = (new Query()) |
|
|
|
->select(['user.id AS user_id', 'user.prenom', 'user.nom', 'user.telephone', 'user.email', 'user.created_at', 'user.date_derniere_connexion', 'user_etablissement.*']) |
|
|
|
->from('user'); |
|
|
|
|
|
|
@@ -224,15 +281,22 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
->groupBy('user.id'); |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($params['nom'])) |
|
|
|
if (isset($params['nom'])) { |
|
|
|
$query->andFilterWhere(['like', 'nom', $params['nom']]); |
|
|
|
if (isset($params['prenom'])) |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($params['prenom'])) { |
|
|
|
$query->andFilterWhere(['like', 'prenom', $params['prenom']]); |
|
|
|
if (isset($params['email'])) |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($params['email'])) { |
|
|
|
$query->andFilterWhere(['like', 'email', $params['email']]); |
|
|
|
if (isset($params['telephone'])) |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($params['telephone'])) { |
|
|
|
$query->andFilterWhere(['like', 'telephone', $params['telephone']]); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return $query; |
|
|
|
} |
|
|
|
|
|
|
@@ -242,7 +306,8 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
* @param string $token password reset token |
|
|
|
* @return boolean |
|
|
|
*/ |
|
|
|
public static function isPasswordResetTokenValid($token) { |
|
|
|
public static function isPasswordResetTokenValid($token) |
|
|
|
{ |
|
|
|
if (empty($token)) { |
|
|
|
return false; |
|
|
|
} |
|
|
@@ -255,21 +320,24 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
/** |
|
|
|
* @inheritdoc |
|
|
|
*/ |
|
|
|
public function getId() { |
|
|
|
public function getId() |
|
|
|
{ |
|
|
|
return $this->getPrimaryKey(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @inheritdoc |
|
|
|
*/ |
|
|
|
public function getAuthKey() { |
|
|
|
public function getAuthKey() |
|
|
|
{ |
|
|
|
return $this->auth_key; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @inheritdoc |
|
|
|
*/ |
|
|
|
public function validateAuthKey($authKey) { |
|
|
|
public function validateAuthKey($authKey) |
|
|
|
{ |
|
|
|
return $this->getAuthKey() === $authKey; |
|
|
|
} |
|
|
|
|
|
|
@@ -279,7 +347,8 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
* @param string $password password to validate |
|
|
|
* @return boolean if password provided is valid for current user |
|
|
|
*/ |
|
|
|
public function validatePassword($password) { |
|
|
|
public function validatePassword($password) |
|
|
|
{ |
|
|
|
return Yii::$app->security->validatePassword($password, $this->password_hash); |
|
|
|
} |
|
|
|
|
|
|
@@ -288,32 +357,37 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
* |
|
|
|
* @param string $password |
|
|
|
*/ |
|
|
|
public function setPassword($password) { |
|
|
|
public function setPassword($password) |
|
|
|
{ |
|
|
|
$this->password_hash = Yii::$app->security->generatePasswordHash($password); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Generates "remember me" authentication key |
|
|
|
*/ |
|
|
|
public function generateAuthKey() { |
|
|
|
public function generateAuthKey() |
|
|
|
{ |
|
|
|
$this->auth_key = Yii::$app->security->generateRandomString(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Generates new password reset token |
|
|
|
*/ |
|
|
|
public function generatePasswordResetToken() { |
|
|
|
public function generatePasswordResetToken() |
|
|
|
{ |
|
|
|
$this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Removes password reset token |
|
|
|
*/ |
|
|
|
public function removePasswordResetToken() { |
|
|
|
public function removePasswordResetToken() |
|
|
|
{ |
|
|
|
$this->password_reset_token = null; |
|
|
|
} |
|
|
|
|
|
|
|
public function attributeLabels() { |
|
|
|
public function attributeLabels() |
|
|
|
{ |
|
|
|
return [ |
|
|
|
'id' => 'ID', |
|
|
|
'username' => 'Identifiant', |
|
|
@@ -335,16 +409,34 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
]; |
|
|
|
} |
|
|
|
|
|
|
|
public function isBoulanger() { |
|
|
|
/** |
|
|
|
* Retourne si l'utilisateur est un boulanger ou non. |
|
|
|
* |
|
|
|
* @return boolean |
|
|
|
*/ |
|
|
|
public function isBoulanger() |
|
|
|
{ |
|
|
|
return ($this->status == User::STATUS_ADMIN || $this->status == User::STATUS_BOULANGER) && $this->id_etablissement; |
|
|
|
} |
|
|
|
|
|
|
|
public function getNomMagasin() { |
|
|
|
/** |
|
|
|
* Retourne le nom du producteur. |
|
|
|
* |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
public function getNomMagasin() |
|
|
|
{ |
|
|
|
$etablissement = Etablissement::findOne($this->id_etablissement); |
|
|
|
return $etablissement->nom; |
|
|
|
} |
|
|
|
|
|
|
|
public function getEtablissementsFavoris() { |
|
|
|
/** |
|
|
|
* Retourne les établissements liés à l'utilisateur. |
|
|
|
* |
|
|
|
* @return array |
|
|
|
*/ |
|
|
|
public function getEtablissementsFavoris() |
|
|
|
{ |
|
|
|
$etabs = (new \yii\db\Query()) |
|
|
|
->select('*') |
|
|
|
->from(['user_etablissement', 'etablissement']) |
|
|
@@ -356,37 +448,20 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
return $etabs; |
|
|
|
} |
|
|
|
|
|
|
|
public function etatPaiementEtablissement() { |
|
|
|
$etablissement = Etablissement::findOne($this->id_etablissement); |
|
|
|
|
|
|
|
if ($etablissement) { |
|
|
|
return $etablissement->etatPaiement(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function periodeEssai() { |
|
|
|
$etablissement = Etablissement::findOne($this->id_etablissement); |
|
|
|
|
|
|
|
if ($etablissement) { |
|
|
|
$date_limite = strtotime($etablissement->date_creation) + 30 * 24 * 60 * 60; |
|
|
|
$date = time(); |
|
|
|
|
|
|
|
if ($date < $date_limite) { |
|
|
|
$date = $date_limite - $date; |
|
|
|
return (int) ($date / (24 * 60 * 60)); |
|
|
|
} else { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function getCredit($id_etablissement) { |
|
|
|
/** |
|
|
|
* Retourne le crédit de l'utilisateur pour un producteur donné. |
|
|
|
* |
|
|
|
* @param integer $id_etablissement |
|
|
|
* @return float |
|
|
|
*/ |
|
|
|
public function getCredit($id_etablissement) |
|
|
|
{ |
|
|
|
$user_etablissement = UserEtablissement::find() |
|
|
|
->where([ |
|
|
|
'id_user' => $this->id, |
|
|
|
'id_etablissement' => $id_etablissement |
|
|
|
]) |
|
|
|
->one(); |
|
|
|
->where([ |
|
|
|
'id_user' => $this->id, |
|
|
|
'id_etablissement' => $id_etablissement |
|
|
|
]) |
|
|
|
->one(); |
|
|
|
|
|
|
|
if ($user_etablissement) { |
|
|
|
return $user_etablissement->credit; |
|
|
@@ -395,12 +470,23 @@ class User extends ActiveRecord implements IdentityInterface { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
public function updateDerniereConnexion() { |
|
|
|
/** |
|
|
|
* Met à jour la date de dernière connexion de l'utilisateur. |
|
|
|
*/ |
|
|
|
public function updateDerniereConnexion() |
|
|
|
{ |
|
|
|
$this->date_derniere_connexion = date('Y-m-d H:i:s'); |
|
|
|
$this->save(); |
|
|
|
} |
|
|
|
|
|
|
|
public function sendMailWelcome($password) { |
|
|
|
/** |
|
|
|
* Envoie un email de bienvenue à l'utilisateur lors de son inscription |
|
|
|
* via le backend du site. |
|
|
|
* |
|
|
|
* @param string $password |
|
|
|
*/ |
|
|
|
public function sendMailWelcome($password) |
|
|
|
{ |
|
|
|
if (strlen($this->email)) { |
|
|
|
$etablissement = Etablissement::findOne(Yii::$app->user->identity->id_etablissement); |
|
|
|
Yii::$app->mailer->compose(); |