Customer.php 7.94 KB
<?php

namespace common\models;
use common\widgets\Mailer;
use Yii;
use yii\base\NotSupportedException;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord;

class Customer extends User implements \yii\web\IdentityInterface
{
    public $password_repeat;
	public $role;
	public $verifyCode;
	public $old_image;
	public $authKey;

	
	public static function tableName()
    {
        return 'customer';
    }

	public function rules()
	{
		return [
			[['username', 'password','phone','verifyCode','name','surname'], 'required','on'=>['person','company','customer']],
			[['verifyCode'], 'captcha','captchaAction'=>'reg/captcha','on'=>['person','company','customer']],
			[['password_repeat'], 'required','on'=>['person','company','customer','edit_person']],
			[['password_repeat'], 'password_repeat','on'=>['person','company','customer','edit_person']],
			[['username'], 'is_username','on'=>['person','company','customer']],
			[['username'], 'email','on'=>['person','company','customer','edit_person']],
			[['company'], 'required','on'=>['company']],
			
			[['username', 'password','phone','role','name','surname'], 'required','on'=>['edit_person','edit_customer','edit_company']],
			[['company'], 'required','on'=>['edit_company']],
                        [['sex','body','birth_day','birth_mouth','birth_year'], 'safe','on'=>['edit_person']],
			[['sex','status','children','body','old_image','birth_day','birth_mouth','birth_year'], 'safe','on'=>['edit_customer']],
                        [['body'], 'safe','on'=>['edit_company']],
                       // [['image'], 'file', 'extensions'=>'jpg, gif, png','skipOnEmpty'=>true,'on'=>['edit_person','edit_customer','edit_company']],
		];
	}	
	
	public function attributeLabels()
	{
		return [
			'username'=>'Логин (E-mail)',
			'password'=>'Пароль',
			'password_repeat'=>'Повторить пароль',
			'phone'=>'Телефон',
			'verifyCode'=>'Код проверки',
			'name'=>'Имя',
			'surname'=>'Фамилия',
			'company'=>'Компания',
			'sex'=>'Пол',
			'status'=>'Семейное положение',
			'children'=>'Дети',
			'edu'=>'Образование',
			'work'=>'Работа',
			'langs'=>'Иностранные языки',
			'prava'=>'Водительское удостоверение',
			'body'=>'О себе',
			'image'=>'Изображения',
		];
	}
	
	public function password_repeat($attribute){
		if($this->password != $this->password_repeat)
			$this->addError('password_repeat','Не правильный повтор пароля.');
	}

	public function is_username($attribute)
    {	
		if(Customer::find()
			//->where( ['username' => $this->username],['id!='.$_GET['id']] )
			->where('username = :username', [':username' => $this->username])
			->exists())
            $this->addError('username','Такой пользователь уже есть.');
    }

	
    public function afterSave($insert, $changedAttributes)
    {
        parent::afterSave($insert, $changedAttributes);

        // установка роли пользователя
        $auth = Yii::$app->authManager;
        $role = $auth->getRole($this->role);
        if (!$insert) {
            $auth->revokeAll($this->id);
        }
        $auth->assign($role, $this->id);


    }

	public function beforeSave($insert) {
	

        $this->date_time = new \yii\db\Expression('NOW()');

                /**
		if($image = UploadedFile::getInstance($this,'image')){

                        $this->deleteImage($this->old_image);
                        //$this->image = $image;
						$this->image = time() . '_' . rand(1, 1000) . '.' . $image->extension;
                        $image->saveAs('upload/profile/'.$this->image);

						$resizeObj = new resize('upload/profile/'.$this->image);
						$resizeObj -> resizeImage(240, 240, 'crop');
                        $resizeObj -> saveImage('upload/profile/ico/'.$this->image, 100);
                    }elseif(!empty($this->old_image)) $this->image = $this->old_image;
                  **/

		return parent::beforeSave($insert);
	}

    public function beforeDelete() {
        //$this->deleteImage($this->image);
        return parent::beforeDelete();
    }

    public function deleteImage($file){
                    if(!empty($file)){
                        @unlink('upload/profile/'.$file);
                        @unlink('upload/profile/ico/'.$file);
                       // @unlink('upload/fotos/big/'.$file);
                    }
    }


    public function getOld(){
        if(empty($this->birth_year) || empty($this->birth_mouth) || empty($this->birth_day))return;
        $birthday = $this->birth_year.'-'.$this->birth_mouth.'-'.$this->birth_day;
        if($birthday=="0000-00-00")return;
        $birthday_timestamp = strtotime($birthday);
        $age = date('Y') - date('Y', $birthday_timestamp);
        if (date('md', $birthday_timestamp) > date('md')) {
          $age--;
        }
        return $age;

    }
        
    /**
     * @inheritdoc
     */
    public static function findIdentity($id)
    {
        
        /**Yii::$app->db->createCommand()
                            ->update('user', [ 
                                'time_online' => (time() + (10*60)),
                                ], 'id = '.$id)
                            ->execute(); **/       
        return static::find()->select(['customer.*','auth_assignment.item_name as role'])->where(['id'=>$id])->join('LEFT JOIN','auth_assignment','auth_assignment.user_id = customer.id')->one();
    }

    /**
     * @inheritdoc
     */
    public static function findIdentityByAccessToken($token, $type = null)
    {
          return static::findOne(['access_token' => $token]);
    }

    /**
     * Finds user by username
     *
     * @param  string      $username
     * @return static|null
     */
    public static function findByUsername($username)
    {
        return static::findOne(['username' => $username]);
    }

    /**
     * @inheritdoc
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @inheritdoc
     */
    public function getAuthKey()
    {
        return $this->authKey;
    }

    /**
     * @inheritdoc
     */
    public function validateAuthKey($authKey)
    {
        return $this->authKey === $authKey;
    }

    /**
     * Validates password
     *
     * @param  string  $password password to validate
     * @return boolean if password provided is valid for current user
     */
    public function validatePassword($password)
    {
        return $this->password === $password;
    }
	
	public function getImageProfile(){
		return !empty($this->image) ? $this->image : 'user_photo.png';
	}

    public static function findByPasswordResetToken($token)
    {
        if (!static::isPasswordResetTokenValid($token)) {
            return null;
        }

        return static::findOne([
            'password_reset_token' => $token,
            'status' => self::STATUS_ACTIVE,
        ]);
    }

    /**
     * Finds out if password reset token is valid
     *
     * @param string $token password reset token
     * @return boolean
     */
    public static function isPasswordResetTokenValid($token)
    {
        if (empty($token)) {
            return false;
        }

        $timestamp = (int) substr($token, strrpos($token, '_') + 1);
        $expire = Yii::$app->params['user.passwordResetTokenExpire'];
        return $timestamp + $expire >= time();
    }

    /**
     * Generates new password reset token
     */
    public function generatePasswordResetToken()
    {
        $this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time();
    }

    public static function findByEmail($email)
    {
        return static::findOne(['email' => $email, 'status' => self::STATUS_ACTIVE]);
    }

    public function getName(){
        return $this->username. ' '.$this->surname;
    }


    /**
     * Removes password reset token
     */
    public function removePasswordResetToken()
    {
        $this->password_reset_token = null;
    }
}