model = $model; $this->mailService = $mailService; $this->securityHelper = $securityHelper; $this->logger = $logger; } public function run() { $model = $this->model; if ($model->getIsNewRecord() === false) { throw new InvalidCallException('Cannot register user from an existing one.'); } $transaction = $model->getDb()->beginTransaction(); try { $model->confirmed_at = $this->getModule()->enableEmailConfirmation ? null : time(); $model->password = $this->getModule()->generatePasswords ? $this->securityHelper->generatePassword(8) : $model->password; $model->trigger(UserEvent::EVENT_BEFORE_REGISTER); if(!$model->save()) { $transaction->rollBack(); return false; } if($this->getModule()->enableEmailConfirmation) { $token = TokenFactory::makeConfirmationToken($model->id); } if(isset($token)) { $this->mailService->setViewParam('token', $token); } $this->mailService->run(); $model->trigger(UserEvent::EVENT_AFTER_REGISTER); $transaction->commit(); return true; } catch(Exception $e) { $transaction->rollBack(); $this->logger->log($e->getMessage(), Logger::LEVEL_WARNING); return false; } } }