/**
  * Signs user up.
  *
  * @return User|null the saved model or null if saving fails
  */
 public function signup()
 {
     if ($this->validate()) {
         $user = new User();
         $user->username = $this->username;
         $user->email = $this->email;
         $user->setPassword($this->password);
         $user->generateAuthKey();
         if ($user->save()) {
             return $user;
         }
     }
     return null;
 }
 /**
  * Creates a form model given a token.
  *
  * @param  string                          $token
  * @param  array                           $config name-value pairs that will be used to initialize the object properties
  * @throws \yii\base\InvalidParamException if token is empty or not valid
  */
 public function __construct($token, $config = [])
 {
     if (empty($token) || !is_string($token)) {
         throw new InvalidParamException('Password reset token cannot be blank.');
     }
     $this->_user = User::findByPasswordResetToken($token);
     if (!$this->_user) {
         throw new InvalidParamException('Wrong password reset token.');
     }
     parent::__construct($config);
 }
 /**
  * Sends an email with a link, for resetting the password.
  *
  * @return boolean whether the email was send
  */
 public function sendEmail()
 {
     /* @var $user User */
     $user = User::findOne(['status' => User::STATUS_ACTIVE, 'email' => $this->email]);
     if ($user) {
         if (!User::isPasswordResetTokenValid($user->password_reset_token)) {
             $user->generatePasswordResetToken();
         }
         if ($user->save()) {
             return \Yii::$app->mailer->compose(['html' => 'passwordResetToken-html', 'text' => 'passwordResetToken-text'], ['user' => $user])->setFrom([\Yii::$app->params['supportEmail'] => \Yii::$app->name . ' robot'])->setTo($this->email)->setSubject('Password reset for ' . \Yii::$app->name)->send();
         }
     }
     return false;
 }
 public function actionProfile()
 {
     $model = User::findOne(Yii::$app->user->identity->id);
     $model->scenario = "profile";
     if ($model->load(Yii::$app->request->post())) {
         if (!empty($model->password)) {
             $model->password_hash = Yii::$app->security->generatePasswordHash($model->password);
         }
         if ($model->save()) {
             if (!empty($_FILES)) {
                 // prepare path
                 $path = !empty(Yii::$app->params['uploaddir']) ? Yii::$app->params['uploaddir'] : Yii::getAlias("@app/files/");
                 $path = $path . 'users/';
                 @mkdir($path, 0755, true);
                 @chmod($path, 0755);
                 $photo = UploadedFile::getInstanceByName('photo');
                 if ($photo) {
                     // NORMAL
                     //$photo->saveAs($path . $model->id. '.jpg');
                     // THUMBNAIL
                     $thumbnail = Image::thumbnail($photo->tempName, 160, 160);
                     $thumbnail->save($path . $model->id . '.jpg', ['quality' => 100]);
                 }
                 Yii::$app->getSession()->setFlash('success', 'Your profile have updated!');
             } else {
                 Yii::$app->getSession()->setFlash('success', 'Your profile have updated!');
             }
         } else {
             Yii::$app->getSession()->setFlash('warning', 'Terdapat error!');
         }
         return $this->refresh();
     } else {
         return $this->render('profile', ['model' => $model]);
     }
 }