示例#1
0
 public function __construct()
 {
     parent::__construct();
     $this->prependSiteTitle(lang('Register'));
     $this->currency = ModelSettings::getInstance();
     $role = UserRole::TYPE_OWNER;
     if ($this->get->email->getValue()) {
         $this->invite = OrganisationInvite::getByEmail($this->get->email->getValue());
         if ($this->invite->hasRow()) {
             $this->organisation = ModelOrganisation::getById($this->invite->organisation_id);
             $role = $this->invite->role;
         }
     }
     if ($this->isPostBack()) {
         $this->post->name->addValidation(new ValidateInputNotNullOrEmpty());
         $this->post->email->addValidation(new ValidateInputEmail());
         if ($this->organisation === null || !$this->organisation->hasRow()) {
             $this->post->company->addValidation(new ValidateInputNotNullOrEmpty());
         }
         $this->post->password->addValidation(new ValidateInputNotNullOrEmpty());
         $this->post->terms->addValidation(new ValidateInputNotNullOrEmpty());
         $this->post->password_repeat->addValidation(new ValidateInputNotNullOrEmpty());
         if (!$this->hasErrors()) {
             // Do not create organisation if invite is available
             if ($this->organisation === null || !$this->organisation->hasRow()) {
                 // Check if organisation name is taken
                 if (ModelOrganisation::getByName($this->input('company'))->hasRow()) {
                     $this->setError(lang('An organisation with the name %s already exists - please request an invite from the organisation owner instead.', $this->input('company')));
                     response()->refresh();
                 }
                 $organisation = new ModelOrganisation();
                 $organisation->setName($this->input('company'));
                 $organisation->save();
                 $role = UserRole::TYPE_OWNER;
             } else {
                 $organisation = $this->organisation;
             }
             $user = new ModelUser();
             $user->username = $this->post->email->getValue();
             $user->data->name = $this->input('name');
             $user->setPassword($this->input('password'));
             try {
                 $user->save();
                 $this->sendWelcomeMail($user);
             } catch (UserException $e) {
                 if ($e->getCode() === ModelUser::ERROR_TYPE_EXISTS) {
                     $error = lang('The e-mail is already registered.');
                 } else {
                     $error = $e->getMessage();
                 }
                 $this->setError($error);
                 response()->refresh();
             }
             $user->addOrganisation($organisation, $role);
             $user->auth();
             // Delete invite
             if ($this->invite && $this->invite->hasRow()) {
                 $this->invitationAcceptedMail($this->invite, $organisation, $user);
                 $this->invite->delete();
             }
             redirect(url('controlpanel.organisations'));
         }
     }
 }