#4322 ocify.co fixes

This commit is contained in:
Muammer Top 2021-07-08 11:04:32 +03:00
parent a4b2840c78
commit 98b406dbac
8 changed files with 346 additions and 0 deletions

View File

@ -0,0 +1,39 @@
<?php namespace Visiosoft\ProfileModule\Profile\BasicRegister;
use Anomaly\Streams\Platform\Ui\Form\FormBuilder;
use Anomaly\UsersModule\User\UserModel;
class BasicRegisterFormBuilder extends FormBuilder
{
protected $roles = [
'user',
];
protected $model = UserModel::class;
protected $actions = [
'blue' => [
'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;
}
}

View File

@ -0,0 +1,83 @@
<?php namespace Visiosoft\ProfileModule\Profile\BasicRegister;
use Visiosoft\ProfileModule\Profile\Validation\ValidateRegister;
use Visiosoft\ProfileModule\Rules\ReCaptchaRule;
class BasicRegisterFormFields
{
public function handle(BasicRegisterFormBuilder $builder)
{
$captchaSiteKey = setting_value('visiosoft.module.profile::google_captcha_site_key');
$captchaSecretKey = setting_value('visiosoft.module.profile::google_captcha_secret_key');
$register = [];
if ($captchaSiteKey && $captchaSecretKey) {
$register = [
'recaptcha_token' => [
'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,
],
]
)
);
}
}

View File

@ -0,0 +1,87 @@
<?php namespace Visiosoft\ProfileModule\Profile\BasicRegister;
use Anomaly\UsersModule\Role\Command\GetRole;
use Anomaly\UsersModule\User\Contract\UserInterface;
use Anomaly\UsersModule\User\Contract\UserRepositoryInterface;
use Anomaly\UsersModule\User\Event\UserHasRegistered;
use Anomaly\UsersModule\User\UserActivator;
use Illuminate\Contracts\Events\Dispatcher;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Visiosoft\ProfileModule\Profile\BasicRegister\Command\HandleAutomaticRegistration;
use Visiosoft\ProfileModule\Profile\BasicRegister\Command\HandleEmailRegistration;
use Visiosoft\ProfileModule\Profile\BasicRegister\Command\HandleManualRegistration;
class BasicRegisterFormHandler
{
use DispatchesJobs;
public function handle(
Dispatcher $events,
UserRepositoryInterface $users,
BasicRegisterFormBuilder $builder,
UserActivator $activator
)
{
if (!$builder->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));
}
}

View File

@ -0,0 +1,37 @@
<?php namespace Visiosoft\ProfileModule\Profile\BasicRegister\Command;
use Anomaly\UsersModule\User\Contract\UserRepositoryInterface;
use Anomaly\UsersModule\User\UserActivator;
use Anomaly\UsersModule\User\UserAuthenticator;
use Illuminate\Contracts\Encryption\Encrypter;
use Illuminate\Http\Request;
class HandleActivateRequest
{
public function handle(
UserRepositoryInterface $users,
UserAuthenticator $authenticator,
UserActivator $activator,
Encrypter $encrypter,
Request $request
)
{
if (!$code = $request->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;
}
}

View File

@ -0,0 +1,32 @@
<?php namespace Visiosoft\ProfileModule\Profile\BasicRegister\Command;
use Anomaly\Streams\Platform\Message\MessageBag;
use Anomaly\UsersModule\User\Contract\UserInterface;
use Visiosoft\ProfileModule\Profile\BasicRegister\BasicRegisterFormBuilder;
use Anomaly\UsersModule\User\UserActivator;
use Anomaly\UsersModule\User\UserAuthenticator;
class HandleAutomaticRegistration
{
protected $builder;
public function __construct(BasicRegisterFormBuilder $builder)
{
$this->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');
}
}

View File

@ -0,0 +1,28 @@
<?php namespace Visiosoft\ProfileModule\Profile\BasicRegister\Command;
use Anomaly\UsersModule\User\UserActivator;
use Anomaly\Streams\Platform\Message\MessageBag;
use Anomaly\UsersModule\User\Contract\UserInterface;
use Visiosoft\ProfileModule\Profile\BasicRegister\BasicRegisterFormBuilder;
class HandleEmailRegistration
{
protected $builder;
public function __construct(BasicRegisterFormBuilder $builder)
{
$this->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);
}
}
}

View File

@ -0,0 +1,38 @@
<?php namespace Visiosoft\ProfileModule\Profile\BasicRegister\Command;
use Anomaly\Streams\Platform\Message\MessageBag;
use Anomaly\UsersModule\User\Contract\UserInterface;
use Anomaly\UsersModule\User\Notification\UserPendingActivation;
use Visiosoft\ProfileModule\Profile\BasicRegister\BasicRegisterFormBuilder;
use Illuminate\Contracts\Config\Repository;
use Illuminate\Notifications\AnonymousNotifiable;
class HandleManualRegistration
{
protected $builder;
public function __construct(BasicRegisterFormBuilder $builder)
{
$this->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)
);
}
}
}

View File

@ -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,
];