From 98b406dbac462afea3968027e10b325209b2d995 Mon Sep 17 00:00:00 2001 From: Muammer Top Date: Thu, 8 Jul 2021 11:04:32 +0300 Subject: [PATCH] #4322 ocify.co fixes --- .../BasicRegisterFormBuilder.php | 39 +++++++++ .../BasicRegister/BasicRegisterFormFields.php | 83 ++++++++++++++++++ .../BasicRegisterFormHandler.php | 87 +++++++++++++++++++ .../Command/HandleActivateRequest.php | 37 ++++++++ .../Command/HandleAutomaticRegistration.php | 32 +++++++ .../Command/HandleEmailRegistration.php | 28 ++++++ .../Command/HandleManualRegistration.php | 38 ++++++++ .../src/ProfileModuleServiceProvider.php | 2 + 8 files changed, 346 insertions(+) create mode 100644 addons/default/visiosoft/profile-module/src/Profile/BasicRegister/BasicRegisterFormBuilder.php create mode 100644 addons/default/visiosoft/profile-module/src/Profile/BasicRegister/BasicRegisterFormFields.php create mode 100644 addons/default/visiosoft/profile-module/src/Profile/BasicRegister/BasicRegisterFormHandler.php create mode 100644 addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleActivateRequest.php create mode 100644 addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleAutomaticRegistration.php create mode 100644 addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleEmailRegistration.php create mode 100644 addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleManualRegistration.php diff --git a/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/BasicRegisterFormBuilder.php b/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/BasicRegisterFormBuilder.php new file mode 100644 index 000000000..e882d8810 --- /dev/null +++ b/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/BasicRegisterFormBuilder.php @@ -0,0 +1,39 @@ + [ + 'text' => 'anomaly.module.users::button.register', + ], + ]; + + protected $options = [ + 'redirect' => '/', + 'success_message' => 'anomaly.module.users::success.user_registered', + 'pending_message' => 'anomaly.module.users::message.pending_admin_activation', + 'confirm_message' => 'anomaly.module.users::message.pending_email_activation', + 'activated_message' => 'anomaly.module.users::message.account_activated', + ]; + + public function getRoles() + { + return $this->roles; + } + + public function setRoles($roles) + { + $this->roles = $roles; + + return $this; + } +} diff --git a/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/BasicRegisterFormFields.php b/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/BasicRegisterFormFields.php new file mode 100644 index 000000000..e36126360 --- /dev/null +++ b/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/BasicRegisterFormFields.php @@ -0,0 +1,83 @@ + [ + 'required' => true, + 'type' => 'anomaly.field_type.text', + 'config' => [ + "max" => 0, + ], + 'rules' => [ + 'valid_recaptcha' + ], + 'validators' => [ + 'valid_recaptcha' => [ + 'message' => false, + 'handler' => ReCaptchaRule::class + ] + ] + ], + ]; + } + + if (setting_value('visiosoft.module.profile::show_checkbox_terms_on_register')) { + $register = array_merge($register, [ + "accept_protection_law" => [ + 'required' => true, + "type" => "anomaly.field_type.boolean", + "config" => [ + "default_value" => false, + "mode" => "checkbox", + "label" => 'visiosoft.module.profile::field.accept_protection_law_label', + ] + ], + "accept_privacy_terms" => [ + 'required' => true, + "type" => "anomaly.field_type.boolean", + "config" => [ + "default_value" => false, + "mode" => "checkbox", + "label" => 'visiosoft.module.profile::field.accept_privacy_terms_label', + ] + ], + "receive_sms_emails" => [ + "type" => "anomaly.field_type.boolean", + "config" => [ + "default_value" => false, + "mode" => "checkbox", + "label" => 'visiosoft.module.profile::field.receive_sms_emails_label', + ] + ], + ]); + } + + $builder->setFields( + array_merge( + $register, + [ + 'username' => [ + 'required' => true, + ], + 'email' => [ + 'instructions' => false, + ], + 'password' => [ + 'instructions' => false, + ], + ] + ) + ); + } +} diff --git a/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/BasicRegisterFormHandler.php b/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/BasicRegisterFormHandler.php new file mode 100644 index 000000000..320ae3fdd --- /dev/null +++ b/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/BasicRegisterFormHandler.php @@ -0,0 +1,87 @@ +canSave()) { + return; + } + + /* Create Profile in Register */ + $domain = setting_value('streams::domain'); + $domain = str_replace('https://', '', $domain); + $domain = str_replace('http://', '', $domain); + $domain = str_replace('/', '', $domain); + $domain = str_replace('www', '', $domain); + + if (!setting_value('visiosoft.module.advs::register_email_field')) { + $builder->setFormValue('email', $builder->getPostValue('username') . "@" . $domain); + } + + $fields = $builder->getPostData(); + $fields['display_name'] = $fields['username']; + $fields['gsm_phone'] = $builder->getPostValue('phone'); + unset( + $fields['phone'], + $fields['accept_protection_law'], + $fields['accept_privacy_terms'], + $fields['receive_sms_emails'], + $fields['recaptcha_token'] + ); + + $register = $users->create($fields); + $register->setAttribute('password', $fields['password']); + $users->save($register); + + /* @var UserInterface $user */ + $user = $register; + $builder->setFormEntry($register); + + $activator->start($user); + + $mode = config('anomaly.module.users::config.activation_mode', 'automatic'); + + switch ($mode) { + case 'automatic': + dispatch_now(new HandleAutomaticRegistration($builder)); + break; + + case 'manual': + dispatch_now(new HandleManualRegistration($builder)); + break; + + case 'email': + dispatch_now(new HandleEmailRegistration($builder)); + break; + } + + $user = $builder->getFormEntry(); + + foreach ($builder->getRoles() as $role) { + if ($role = $this->dispatch(new GetRole($role))) { + $user->attachRole($role); + } + } + + $events->dispatch(new UserHasRegistered($user)); + } +} diff --git a/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleActivateRequest.php b/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleActivateRequest.php new file mode 100644 index 000000000..eb2605889 --- /dev/null +++ b/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleActivateRequest.php @@ -0,0 +1,37 @@ +get('code')) { + return false; + } + + if (!$email = $request->get('email')) { + return false; + } + + if (!$user = $users->findByEmail($encrypter->decrypt($email))) { + return false; + } + + if ($activated = $activator->activate($user, $encrypter->decrypt($code))) { + $authenticator->login($user); + } + + return $activated; + } +} diff --git a/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleAutomaticRegistration.php b/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleAutomaticRegistration.php new file mode 100644 index 000000000..d30d71eac --- /dev/null +++ b/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleAutomaticRegistration.php @@ -0,0 +1,32 @@ +builder = $builder; + } + + public function handle(UserAuthenticator $authenticator, UserActivator $activator, MessageBag $messages) + { + /* @var UserInterface $user */ + $user = $this->builder->getFormEntry(); + + $activator->force($user); + $authenticator->login($user); + + if (!is_null($message = $this->builder->getFormOption('activated_message'))) { + $messages->info($message); + } + + $messages->success('anomaly.module.users::message.logged_in'); + } +} diff --git a/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleEmailRegistration.php b/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleEmailRegistration.php new file mode 100644 index 000000000..f452f8a25 --- /dev/null +++ b/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleEmailRegistration.php @@ -0,0 +1,28 @@ +builder = $builder; + } + + public function handle(UserActivator $activator, MessageBag $messages) + { + /* @var UserInterface $user */ + $user = $this->builder->getFormEntry(); + + $activator->send($user, $this->builder->getFormOption('activate_redirect', '/')); + + if (!is_null($message = $this->builder->getFormOption('confirm_message'))) { + $messages->info($message); + } + } +} diff --git a/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleManualRegistration.php b/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleManualRegistration.php new file mode 100644 index 000000000..2ee93633b --- /dev/null +++ b/addons/default/visiosoft/profile-module/src/Profile/BasicRegister/Command/HandleManualRegistration.php @@ -0,0 +1,38 @@ +builder = $builder; + } + + public function handle(MessageBag $messages, Repository $config) + { + if (!is_null($message = $this->builder->getFormOption('pending_message'))) { + $messages->info($message); + } + + /* @var UserInterface $user */ + $user = $this->builder->getFormEntry(); + + $recipients = $config->get('anomaly.module.users::notifications.pending_user', []); + + foreach ($recipients as $email) { + (new AnonymousNotifiable) + ->route('mail', $email) + ->notify( + new UserPendingActivation($user) + ); + } + } +} diff --git a/addons/default/visiosoft/profile-module/src/ProfileModuleServiceProvider.php b/addons/default/visiosoft/profile-module/src/ProfileModuleServiceProvider.php index e057acba9..b43cd7ceb 100644 --- a/addons/default/visiosoft/profile-module/src/ProfileModuleServiceProvider.php +++ b/addons/default/visiosoft/profile-module/src/ProfileModuleServiceProvider.php @@ -16,6 +16,7 @@ use Visiosoft\ProfileModule\Education\EducationModel; use Visiosoft\ProfileModule\Education\EducationRepository; use Visiosoft\ProfileModule\Http\Middleware\authCheck; use Visiosoft\ProfileModule\Http\Middleware\OGImage; +use Visiosoft\ProfileModule\Profile\BasicRegister\BasicRegisterFormBuilder; use Visiosoft\ProfileModule\Profile\Password\ForgotPassFormBuilder; use Visiosoft\ProfileModule\Profile\Password\PasswordFormBuilder; use Visiosoft\ProfileModule\Profile\Profile\ProfileFormBuilder; @@ -144,6 +145,7 @@ class ProfileModuleServiceProvider extends AddonServiceProvider AdressRepositoryInterface::class => AdressRepository::class, EducationRepositoryInterface::class => EducationRepository::class, 'register2' => Register2FormBuilder::class, + 'basic_register' => BasicRegisterFormBuilder::class, 'forgot_pass' => ForgotPassFormBuilder::class, ];