diff --git a/addons/default/visiosoft/base-theme/resources/views/addons/anomaly/users-module/register.twig b/addons/default/visiosoft/base-theme/resources/views/addons/anomaly/users-module/register.twig
index bc88dc7ff..10e57e3fc 100644
--- a/addons/default/visiosoft/base-theme/resources/views/addons/anomaly/users-module/register.twig
+++ b/addons/default/visiosoft/base-theme/resources/views/addons/anomaly/users-module/register.twig
@@ -38,7 +38,7 @@
- {{ trans('visiosoft.theme.base::field.email') }}
+ {{ trans('visiosoft.theme.base::field.email_or_phone_number') }}
*
diff --git a/addons/default/visiosoft/profile-module/resources/lang/en/message.php b/addons/default/visiosoft/profile-module/resources/lang/en/message.php
index ba7c92cc0..2bcc15ec9 100644
--- a/addons/default/visiosoft/profile-module/resources/lang/en/message.php
+++ b/addons/default/visiosoft/profile-module/resources/lang/en/message.php
@@ -22,4 +22,6 @@ return [
'please_confirm_transaction' => 'Please Confirm Transaction',
'password_do_not_match' => 'Passwords do not match',
'your_password_changed' => 'Your password was successfully updated',
+ 'error_valid_email_or_phone' => 'Phone number or E-mail address format is not correct.',
+ 'registered_phone' => 'This phone number has already been registered.',
];
diff --git a/addons/default/visiosoft/profile-module/resources/lang/tr/message.php b/addons/default/visiosoft/profile-module/resources/lang/tr/message.php
index bc6ceba01..ed21ae75e 100644
--- a/addons/default/visiosoft/profile-module/resources/lang/tr/message.php
+++ b/addons/default/visiosoft/profile-module/resources/lang/tr/message.php
@@ -1,11 +1,11 @@
"Eposta alanı zorunludur!",
- "username" => "Kullanıcı Adı alanı zorunludur!",
- "success_update" => "Profil Başarıyla Güncellendi!",
- "adress_success_update" => "Adres Başarıyla Güncellendi!",
- "adress_success_create" => "Adres Başarıyla Oluşturuldu!",
+ "email" => "Eposta alanı zorunludur!",
+ "username" => "Kullanıcı Adı alanı zorunludur!",
+ "success_update" => "Profil Başarıyla Güncellendi!",
+ "adress_success_update" => "Adres Başarıyla Güncellendi!",
+ "adress_success_create" => "Adres Başarıyla Oluşturuldu!",
"login_error" => "Giriş Bilgileri Hatalıdır.",
"login_noMail_old_user" => "Girdiğiniz e-posta adresi bulunamadı.",
"login_noMail_old_user2" => "Lütfen e-posta adresini kontrol edip tekrar deneyin.",
@@ -16,10 +16,12 @@ return [
"notified_about_ads" => "Allow notifications about my ads",
"receive_messages_email" => "I want to receive messages as email",
"no_packages_module" => "Paket Modülü Bulunamadı!",
- "required_add"=> "Lütfen gerekli tüm satırları doldurun.",
+ "required_add" => "Lütfen gerekli tüm satırları doldurun.",
"no_extend_package" => "İlan Yayınlama Süresi paketiniz bulunamadı.",
"saved" => "Kayıt Edildi!",
'please_confirm_transaction' => 'Lütfen işlemi onaylayın',
'password_do_not_match' => 'Şifreler eşleşmiyor',
'your_password_changed' => 'Şifreniz başarıyla güncellendi',
+ 'error_valid_email_or_phone' => 'E-Posta Adresi veya Telefon numarası formatı geçersiz.',
+ 'registered_phone' => 'Bu telefon numarası ile daha önceden sisteme kayıt olunmuştur.',
];
diff --git a/addons/default/visiosoft/profile-module/src/Profile/Contract/ProfileRepositoryInterface.php b/addons/default/visiosoft/profile-module/src/Profile/Contract/ProfileRepositoryInterface.php
index f973eff3d..d2fcaba94 100644
--- a/addons/default/visiosoft/profile-module/src/Profile/Contract/ProfileRepositoryInterface.php
+++ b/addons/default/visiosoft/profile-module/src/Profile/Contract/ProfileRepositoryInterface.php
@@ -19,4 +19,6 @@ interface ProfileRepositoryInterface extends EntryRepositoryInterface
public function findByUserID($id);
public function CheckPhoneNumber($phoneNumber);
+
+ public function findPhoneNumber($phone_number);
}
diff --git a/addons/default/visiosoft/profile-module/src/Profile/ProfileRepository.php b/addons/default/visiosoft/profile-module/src/Profile/ProfileRepository.php
index 744b1534c..655aa75e2 100644
--- a/addons/default/visiosoft/profile-module/src/Profile/ProfileRepository.php
+++ b/addons/default/visiosoft/profile-module/src/Profile/ProfileRepository.php
@@ -138,5 +138,11 @@ class ProfileRepository extends EntryRepository implements ProfileRepositoryInte
->first();
}
+ public function findPhoneNumber($phone_number)
+ {
+ return $this->model->where('gsm_phone', $phone_number)
+ ->first();
+ }
+
}
diff --git a/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormBuilder.php b/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormBuilder.php
index 4bf7cfedc..2d2bfc072 100644
--- a/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormBuilder.php
+++ b/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormBuilder.php
@@ -3,8 +3,8 @@
use Anomaly\Streams\Platform\Ui\Form\FormBuilder;
use Visiosoft\ProfileModule\Profile\Register2\Command\AssociateActivationRoles;
use Visiosoft\ProfileModule\Profile\Register2\Command\SetOptions;
-use Anomaly\UsersModule\User\Validation\ValidatePassword;
use Anomaly\UsersModule\User\UserModel;
+use Visiosoft\ProfileModule\Profile\Validation\ValidateRegister;
/**
* Class RegisterFormBuilder
@@ -47,7 +47,17 @@ class Register2FormBuilder extends FormBuilder
'required' => true,
],
'email' => [
+ 'type' => 'anomaly.field_type.text',
'instructions' => false,
+ 'rules' => [
+ 'valid_register',
+ ],
+ 'validators' => [
+ 'valid_register' => [
+ 'message' => false,
+ 'handler' => ValidateRegister::class,
+ ],
+ ],
],
'password' => [
'instructions' => false,
diff --git a/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormHandler.php b/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormHandler.php
index 0166b3b35..f77e6ca83 100644
--- a/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormHandler.php
+++ b/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormHandler.php
@@ -38,16 +38,24 @@ class Register2FormHandler
UserActivator $activator
)
{
-
if (!$builder->canSave()) {
return;
}
+
+ $profile_parameters = array();
+
+ /* Create Profile in Register */
+ if (!filter_var($builder->getPostValue('email'), FILTER_VALIDATE_EMAIL)) {
+ $profile_parameters['gsm_phone'] = $builder->getPostValue('email');
+ $builder->setFormValue('email', $builder->getPostValue('email') . "@" . setting_value('streams::domain'));
+ }
+
$builder->saveForm(); // Save the new user.
/* @var UserInterface $user */
$user = $builder->getFormEntry();
- /* Create Profile in Register */
- ProfileModel::query()->create(['user_no_id' => $user->getId()]);
+ $profile_parameters['user_no_id'] = $user->getId();
+ ProfileModel::query()->create($profile_parameters);
$activator->start($user);
diff --git a/addons/default/visiosoft/profile-module/src/Profile/SignIn/SignInFormBuilder.php b/addons/default/visiosoft/profile-module/src/Profile/SignIn/SignInFormBuilder.php
new file mode 100644
index 000000000..77eb18e2f
--- /dev/null
+++ b/addons/default/visiosoft/profile-module/src/Profile/SignIn/SignInFormBuilder.php
@@ -0,0 +1,50 @@
+ [
+ 'text' => 'anomaly.module.users::button.login',
+ ],
+ ];
+
+ protected $options = [
+ 'redirect' => '/',
+ 'breadcrumb' => false,
+ 'success_message' => false,
+ ];
+
+ public function onPost(UserSecurity $security)
+ {
+ $response = $security->attempt();
+
+ if ($response instanceof Response) {
+
+ $this->setFormResponse($response);
+
+ $this->setSave(false);
+ }
+ }
+
+ public function getUser()
+ {
+ return $this->user;
+ }
+
+ public function setUser(UserInterface $user)
+ {
+ $this->user = $user;
+
+ return $this;
+ }
+}
diff --git a/addons/default/visiosoft/profile-module/src/Profile/SignIn/SignInFormFields.php b/addons/default/visiosoft/profile-module/src/Profile/SignIn/SignInFormFields.php
new file mode 100644
index 000000000..741633345
--- /dev/null
+++ b/addons/default/visiosoft/profile-module/src/Profile/SignIn/SignInFormFields.php
@@ -0,0 +1,62 @@
+get('anomaly.module.users::config.login');
+
+ if ($method == 'username') {
+ $login = [
+ 'username' => [
+ 'label' => 'anomaly.module.users::field.username.name',
+ 'type' => 'anomaly.field_type.text',
+ 'required' => true,
+ ],
+ ];
+ } else {
+ $login = [
+ 'email' => [
+ 'label' => 'anomaly.module.users::field.email.name',
+ 'type' => 'anomaly.field_type.text',
+ 'required' => true,
+ ],
+ ];
+ }
+
+ $builder->setFields(
+ array_merge(
+ $login,
+ [
+ 'password' => [
+ 'label' => 'anomaly.module.users::field.password.name',
+ 'type' => 'anomaly.field_type.text',
+ 'required' => true,
+ 'config' => [
+ 'type' => 'password',
+ ],
+ 'rules' => [
+ 'valid_credentials',
+ ],
+ 'validators' => [
+ 'valid_credentials' => [
+ 'handler' => 'Visiosoft\ProfileModule\Profile\Validation\ValidateCredentials@handle',
+ 'message' => 'anomaly.module.users::message.invalid_login',
+ ],
+ ],
+ ],
+ 'remember_me' => [
+ 'label' => false,
+ 'type' => 'anomaly.field_type.boolean',
+ 'config' => [
+ 'mode' => 'checkbox',
+ 'label' => 'anomaly.module.users::field.remember_me.name',
+ ],
+ ],
+ ]
+ )
+ );
+ }
+}
diff --git a/addons/default/visiosoft/profile-module/src/Profile/SignIn/SignInFormHandler.php b/addons/default/visiosoft/profile-module/src/Profile/SignIn/SignInFormHandler.php
new file mode 100644
index 000000000..421de2b52
--- /dev/null
+++ b/addons/default/visiosoft/profile-module/src/Profile/SignIn/SignInFormHandler.php
@@ -0,0 +1,38 @@
+getUser()) {
+ return;
+ }
+
+ $response = $security->check($user);
+
+ if ($response instanceof Response) {
+
+ $authenticator->logout($user);
+
+ $builder->setFormResponse($response);
+
+ return;
+ }
+
+ $authenticator->login($user, $builder->getFormValue('remember_me'));
+
+ $builder->setFormResponse($redirect->intended($builder->getFormOption('redirect', '/')));
+ }
+}
diff --git a/addons/default/visiosoft/profile-module/src/Profile/Validation/ValidateCredentials.php b/addons/default/visiosoft/profile-module/src/Profile/Validation/ValidateCredentials.php
new file mode 100644
index 000000000..d5ea0a30c
--- /dev/null
+++ b/addons/default/visiosoft/profile-module/src/Profile/Validation/ValidateCredentials.php
@@ -0,0 +1,83 @@
+extensions = $extensions;
+ $this->repository = $userRepository;
+ $this->profile = $profileRepository;
+ }
+
+ public function authenticate(array $credentials)
+ {
+ $authenticators = $this->extensions
+ ->search('anomaly.module.users::authenticator.*')
+ ->enabled();
+
+ /* @var AuthenticatorExtensionInterface $authenticator */
+ foreach ($authenticators as $authenticator) {
+ if ($authenticator->slug == "default_authenticator") {
+ if (!isset($credentials['password']) && !isset($credentials['email'])) {
+ $response = null;
+ }
+
+ //Is email or phone number
+ if (!filter_var($credentials['email'], FILTER_VALIDATE_EMAIL)) {
+ if ($profile = $this->profile->findPhoneNumber($credentials['email'])) {
+ if ($user = $this->repository->find($profile->user_no_id)) {
+ $credentials['email'] = $user->email;
+ }
+ }
+ }
+ $response = $this->repository->findByCredentials($credentials);
+
+ } else {
+ $response = $authenticator->authenticate($credentials);
+ }
+
+ if ($response instanceof UserInterface) {
+ return $response;
+ }
+
+ if ($response instanceof RedirectResponse) {
+ return $response;
+ }
+ }
+
+ return false;
+ }
+
+
+ public function handle(SignInFormBuilder $builder)
+ {
+
+ if (!$response = $this->authenticate($builder->getPostData())) {
+ return false;
+ }
+
+ if ($response instanceof UserInterface) {
+ $builder->setUser($response);
+ }
+
+ if ($response instanceof Response) {
+ $builder->setFormResponse($response);
+ }
+
+ return true;
+ }
+}
diff --git a/addons/default/visiosoft/profile-module/src/Profile/Validation/ValidateRegister.php b/addons/default/visiosoft/profile-module/src/Profile/Validation/ValidateRegister.php
new file mode 100644
index 000000000..e260ab62f
--- /dev/null
+++ b/addons/default/visiosoft/profile-module/src/Profile/Validation/ValidateRegister.php
@@ -0,0 +1,21 @@
+getPostValue('email'), FILTER_VALIDATE_EMAIL)) {
+ if (!is_numeric($builder->getPostValue('email'))) {
+ $builder->addFormError('email', trans('visiosoft.module.profile::message.error_valid_email_or_phone'));
+ return false;
+ } elseif (!is_null($profileRepository->findPhoneNumber($builder->getPostValue('email')))) {
+ $builder->addFormError('email', trans('visiosoft.module.profile::message.registered_phone'));
+ return false;
+ }
+ }
+ return true;
+ }
+}
diff --git a/addons/default/visiosoft/profile-module/src/ProfileModuleServiceProvider.php b/addons/default/visiosoft/profile-module/src/ProfileModuleServiceProvider.php
index 6adae3291..f49c46b5f 100644
--- a/addons/default/visiosoft/profile-module/src/ProfileModuleServiceProvider.php
+++ b/addons/default/visiosoft/profile-module/src/ProfileModuleServiceProvider.php
@@ -14,6 +14,7 @@ use Anomaly\Streams\Platform\Model\Profile\ProfileProfileEntryModel;
use Visiosoft\ProfileModule\Profile\ProfileModel;
use Illuminate\Routing\Router;
use Visiosoft\ProfileModule\Profile\Register2\Register2FormBuilder;
+use Visiosoft\ProfileModule\Profile\SignIn\SignInFormBuilder;
use Visiosoft\ProfileModule\Profile\sites\SitesFormBuilder;
use Visiosoft\ProfileModule\Profile\User\UserFormBuilder;
@@ -175,6 +176,7 @@ class ProfileModuleServiceProvider extends AddonServiceProvider
'updatePassword' => PasswordFormBuilder::class,
'userProfile' => UserFormBuilder::class,
'profile' => ProfileFormBuilder::class,
+ 'signIn' => SignInFormBuilder::class,
ProfileAdressEntryModel::class => AdressModel::class,
ProfileProfileEntryModel::class => ProfileModel::class,
];