* @copyright (c), Thread */ class RegisterForm extends CommonForm { /** * @return array */ public function rules() { $rules = [[['password', 'password_confirmation'], 'required']]; if ($this->_username_attribute === 'email') { $rules[] = [['email'], 'required']; } elseif ($this->_username_attribute === 'username') { $rules[] = [['username'], 'required']; } return ArrayHelper::merge($rules, parent::rules()); } /** * @return array */ public function scenarios() { return [ 'register' => ['username', 'email', 'password', 'password_confirmation'], ]; } /** * Add new user to base */ public function addUser() { $model = new User([ 'scenario' => 'userCreate', 'username' => $this->username, 'email' => $this->email, 'published' => User::STATUS_KEY_ON, 'group_id' => Group::USER, ]); $model->setPassword($this->password)->generateAuthKey(); if ($model->validate()) { /** @var $transaction */ $transaction = self::getDb()->beginTransaction(); try { $save = $model->save(); if ($save) { $transaction->commit(); return $this->addProfile($model->id); } else { $transaction->rollBack(); return false; } } catch (\Exception $e) { Yii::getLogger()->log($e->getMessage(), Logger::LEVEL_ERROR); $transaction->rollBack(); } } else { $this->addErrors($model->getErrors()); return false; } } /** * Create new empty profile for a new user * * @param $userId * @return bool * @throws \Exception */ private function addProfile($userId) { $model = new Profile([ 'scenario' => 'basicCreate', 'user_id' => $userId, ]); if ($model->validate()) { /** @var PDO $transaction */ $transaction = self::getDb()->beginTransaction(); try { $save = $model->save(); ($save) ? $transaction->commit() : $transaction->rollBack(); return $save; } catch (\Exception $e) { $transaction->rollBack(); throw new \Exception($e); } } else { $this->addErrors($model->getErrors()); return false; } } }