/**
  * 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();
         $user->status = User::STATUS_NOTACTIVATED;
         $b = $user->save();
         $activationToken = new UserTokens();
         $activationToken->user_id = $user->id;
         $activationToken->token_type = ETokenType::ACCOUNT_ACTIVATION;
         $activationToken->token = sha1(mt_rand(10000, 99999) . time() . $user->email);
         $activationToken->save();
         $auth = Yii::$app->authManager;
         $userRole = $auth->getRole('user');
         $auth->assign($userRole, $user->id);
         if ($b) {
             $x = new UserInfo();
             $x->user_id = $user->id;
             $x->save();
             EventService::createEvent(EEvent::ACCOUNT_CREATE(), new UserId($user->id));
             $this->sendActivationMail($user, $activationToken->token);
             return $user;
         }
     }
     return null;
 }
 /**
  * @param UserId     $uid
  * @param ETokenType $tokenType
  * @param bool       $expireable
  * @param \DateTime|null       $expirationDate
  */
 public static function createToken(UserId $uid, ETokenType $tokenType, $expireable = false, $expirationDate = null)
 {
     $token = new UserTokens();
     $token->user_id = $uid->getId();
     $token->token_type = $tokenType->getValue();
     $token->token_expirable = $expireable;
     if (!is_null($expirationDate)) {
         $token->token_expiration_date = $expirationDate->format('Y-m-d H:i:s');
     }
     return $token->save();
 }