diff --git a/app/Http/Controllers/EmployerController.php b/app/Http/Controllers/EmployerController.php index a0cdaed..139b21b 100644 --- a/app/Http/Controllers/EmployerController.php +++ b/app/Http/Controllers/EmployerController.php @@ -401,72 +401,66 @@ class EmployerController extends Controller } // Регистрация работодателя - public function register_employer(Request $request) { - $params = $request->all(); - + public function register_employer(Request $request) + { $rules = [ - //'surname' => ['required', 'string', 'max:255'], - //'name_man' => ['required', 'string', 'max:255'], - 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], + 'surname' => ['nullable', 'string', 'max:255'], + 'name_man' => ['nullable', 'string', 'max:255'], + 'email' => ['required', 'email', 'max:255', 'unique:users'], 'name_company' => ['required', 'string', 'max:255'], 'password' => ['required', 'string', 'min:6'], + 'password_confirmation' => ['required', 'same:password'], + 'politik' => ['required', 'accepted'], ]; $messages = [ 'required' => 'Укажите обязательное поле', + 'email' => 'Введите корректный email', + 'unique' => 'Email уже зарегистрирован', + 'same' => 'Пароль и подтверждение пароля не совпадают', 'min' => [ - 'string' => 'Поле «:attribute» должно быть не меньше :min символов', - 'integer' => 'Поле «:attribute» должно быть :min или больше', - 'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт' + 'string' => 'Поле должно быть не менее :min символов', ], 'max' => [ - 'string' => 'Поле «:attribute» должно быть не больше :max символов', - 'integer' => 'Поле «:attribute» должно быть :max или меньше', - 'file' => 'Файл «:attribute» должен быть не больше :max Кбайт' - ] + 'string' => 'Поле должно быть не более :max символов', + ], + 'accepted' => 'Необходимо согласиться с политикой конфиденциальности', ]; - $email = $request->get('email'); - if (!preg_match("/^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$/", $email)) { - return json_encode(Array("ERROR" => "Error: Отсутствует емайл или некорректный емайл")); - } + $validator = Validator::make($request->all(), $rules, $messages); - if ($request->get('password') !== $request->get('confirmed')){ - return json_encode(Array("ERROR" => "Error: Не совпадают пароль и подтверждение пароля")); + if ($validator->fails()) { + return response()->json(['ERRORS' => $validator->errors()], 422); } - if (strlen($request->get('password')) < 6) { - return json_encode(Array("ERROR" => "Error: Недостаточная длина пароля! Увеличьте себе длину пароля!")); - } + $params = $request->all(); - if (empty($request->get('surname'))) { + if (empty($params['surname'])) { $params['surname'] = 'Неизвестно'; } - if (empty($request->get('name_man'))) { + if (empty($params['name_man'])) { $params['name_man'] = 'Неизвестно'; } - $validator = Validator::make($params, $rules, $messages); - if ($validator->fails()) { - return json_encode(Array("ERROR" => "Error: Регистрация оборвалась ошибкой! Не все обязательные поля заполнены. Либо вы уже были зарегистрированы в системе.")); - } else { - $user = $this->create($params); + if ($user = $this->create($params)) { event(new Registered($user)); try { Mail::to(env('EMAIL_ADMIN'))->send(new MailCreateEmployer($params)); } catch (Throwable $e) { - Log::error($e); + Log::error('Ошибка при отправке письма: ' . $e->getMessage()); } Auth::guard()->login($user); - } - if ($user) { - return json_encode(Array("REDIRECT" => redirect()->route('employer.cabinet')->getTargetUrl()));; - } else { - return json_encode(Array("ERROR" => "Error2: Данные были утеряны!")); + return response()->json([ + 'REDIRECT' => route('employer.cabinet'), + ]); } + + return response()->json([ + 'ERROR' => 'Произошла ошибка при регистрации. Попробуйте снова.', + ]); } // Создание пользователя diff --git a/app/Http/Controllers/WorkerController.php b/app/Http/Controllers/WorkerController.php index e64f858..6a0870d 100644 --- a/app/Http/Controllers/WorkerController.php +++ b/app/Http/Controllers/WorkerController.php @@ -575,60 +575,47 @@ class WorkerController extends Controller // Регистрация соискателя public function register_worker(Request $request) { - $params = $request->all(); - $params['is_worker'] = 1; - $rules = [ 'surname' => ['required', 'string', 'max:255'], 'name_man' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255', 'unique:users'], - 'password' => ['required', 'string', 'min:6'] + 'password' => ['required', 'string', 'min:6'], + 'password_confirmation' => ['required', 'same:password'], + 'politik' => ['required', 'accepted'], + 'job_titles' => ['required', 'numeric'] ]; $messages = [ 'required' => 'Укажите обязательное поле', + 'email' => 'Введите корректный email', + 'unique' => 'Email уже зарегистрирован', + 'same' => 'Пароль и подтверждение пароля не совпадают', 'min' => [ - 'string' => 'Поле «:attribute» должно быть не меньше :min символов', - 'integer' => 'Поле «:attribute» должно быть :min или больше', - 'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт' + 'string' => 'Поле должно быть не менее :min символов', ], - 'max' => [ - 'string' => 'Поле «:attribute» должно быть не больше :max символов', - 'integer' => 'Поле «:attribute» должно быть :max или меньше', - 'file' => 'Файл «:attribute» должен быть не больше :max Кбайт' - ] + 'accepted' => 'Необходимо согласиться с политикой конфиденциальности', + 'numeric' => 'Укажите обязательное поле', ]; - $email = $request->get('email'); - if (!preg_match("/^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$/", $email)) { - return json_encode(Array("ERROR" => "Error: Отсутствует емайл или некорректный емайл")); - } - - if ($request->get('password') !== $request->get('confirmed')){ - return json_encode(Array("ERROR" => "Error: Не совпадают пароль и подтверждение пароля")); - } + $validator = Validator::make($request->all(), $rules, $messages); - if (strlen($request->get('password')) < 6) { - return json_encode(Array("ERROR" => "Error: Недостаточная длина пароля! Увеличьте себе длину пароля!")); + if ($validator->fails()) { + return response()->json(['ERRORS' => $validator->errors()], 422); } - if (($request->has('politik')) && ($request->get('politik') == 1)) { - $validator = Validator::make($params, $rules, $messages); - - if ($validator->fails()) { - return json_encode(array("ERROR" => "Error1: Регистрация оборвалась ошибкой! Не все обязательные поля заполнены. Либо вы уже были зарегистрированы в системе.")); - } - - if ($user = $this->create($params)) { - event(new Registered($user)); - return json_encode(Array("REDIRECT" => redirect()->to('/')->getTargetUrl())); - } else { - return json_encode(Array("ERROR" => "Error2: Данные были утеряны!")); - } + $params = $request->all(); + $params['is_worker'] = 1; - } else { - return json_encode(Array("ERROR" => "Error3: Вы не согласились с политикой конфидициальности!")); + if ($user = $this->create($params)) { + event(new Registered($user)); + return response()->json([ + 'REDIRECT' => url('/') + ]); } + + return response()->json([ + 'ERROR' => 'Произошла ошибка при регистрации. Попробуйте снова.' + ]); } // Звездная оценка и ответ diff --git a/public/css/general.css b/public/css/general.css index 12987ec..4ad84a6 100644 --- a/public/css/general.css +++ b/public/css/general.css @@ -50,3 +50,13 @@ .review-image-modal{ cursor: pointer; } + +.error-message, .employer_error-message { + margin-top: 5px; + font-weight: bold; +} + +#captcha_error, #captcha_employer_error { + margin-top: 0; + margin-bottom: 15px; +} diff --git a/resources/views/js/captha.blade.php b/resources/views/js/captha.blade.php index 3aefe09..8a0cde0 100644 --- a/resources/views/js/captha.blade.php +++ b/resources/views/js/captha.blade.php @@ -68,7 +68,7 @@ if (document.getElementById("cpatchaTextBox").value == code) { console.log('Валидная капча 1!'); }else{ - alert("Неверная капча! Повторите вновь"); + // alert("Неверная капча! Повторите вновь"); createCaptcha(); } } @@ -77,7 +77,7 @@ if (document.getElementById("cpatchaTextBox2").value == code2) { console.log('Валидная капча 2!'); }else{ - alert("Неверная капча! Повторите вновь"); + // alert("Неверная капча! Повторите вновь"); createCaptcha(); } } @@ -111,6 +111,7 @@ form2.addEventListener('submit', function (event) { if (document.getElementById("cpatchaTextBox2").value == code2) { console.log('Валидный кот'); + $('#captcha_employer_error').text(''); return true; } else { console.log('Ошибка2'); diff --git a/resources/views/js/modals.blade.php b/resources/views/js/modals.blade.php index 749d2f4..532a127 100644 --- a/resources/views/js/modals.blade.php +++ b/resources/views/js/modals.blade.php @@ -170,79 +170,43 @@ }); }); - $(document).on('click', '#button_reg_worker', function() { - $('#messages_error_reg').html(''); - - var field_login = $('#email_worker'); - var field_pwd = $('#password_worker'); - var field_confirm_pwd = $('#password_confirmation_worker'); - var field_politik_worker = $('#politik'); - var field_telephone_worker = $('#telephone_worker'); - var field_job_titles_worker = $('#job_titles_worker'); - var field_surname_worker = $('#surname_worker'); - var field_name_man = $('#name_man_worker'); - var field_surname2_worker = $('#surname2_worker'); - - var login = field_login.val(); - var pwd = field_pwd.val(); - var confirm_pwd = field_confirm_pwd.val(); - var politik = field_politik_worker.val(); - var telephone = field_telephone_worker.val(); - var job_titles = field_job_titles_worker.val(); - var surname = field_surname_worker.val(); - var name_man = field_name_man.val(); - var surname2 = field_surname2_worker.val(); - + $('#form1').on('submit', function (e) { + e.preventDefault(); if (document.getElementById("cpatchaTextBox1").value == code) { - console.log('Валидный кот'); - + console.log('Валидная капча'); } else { - console.log('Ошибка1'); - event.preventDefault(); - $('#block-info').css({'display': 'block'}); - $('#messages_error_reg').html('ERROR: Капча неверная!'); - + $('#captcha_error').text('Капча неверная!'); return false; } - if (!document.getElementById('politik').checked) { - event.preventDefault(); - $('#block-info').css({'display': 'block'}); - $('#messages_error_reg').html('ERROR: Вы не согласились с политикой конфидициальности!'); - return false; - } + $('.error-message').text(''); + + let formData = $(this).serialize(); $.ajax({ - type: "GET", - url: "{{ route('register_worker') }}", - data: "email="+login+"&password="+pwd+"&confirmed="+confirm_pwd+"&politik="+politik+ - "&telephone="+telephone+"&job_titles="+job_titles+"&surname="+surname+"&name_man="+name_man+ - "&surname2="+surname2+"&subscribe_email="+login, - success: function (data) { - let d = JSON.parse(data); - if (typeof d['REDIRECT'] !== "undefined") { + url: $(this).attr('action'), + method: $(this).attr('method'), + data: formData, + success: function (response) { + if (response.REDIRECT) { successfulRegistrationWorker() } - - if (typeof d['ERROR'] !== "undefined") { - console.log(d['ERROR']); - $('#block-info').css({'display': 'block'}); - $('#messages_error_reg').html(d['ERROR']); - } - console.log(d['REDIRECT']); - - }, - headers: { - 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, - error: function (data) { - data = JSON.stringify(data); - console.log('Error: ' + data); + error: function (jqXHR) { + if (jqXHR.status === 422) { + let errors = jqXHR.responseJSON.ERRORS; + + for (let field in errors) { + if (errors.hasOwnProperty(field)) { + $('#' + field + '_error').text(errors[field][0]); + } + } + } else { + alert('Произошла ошибка при регистрации. Попробуйте снова.'); + } } }); - - return false; }); $(document).on('click', '.open-login-modal', function(e) { @@ -255,76 +219,42 @@ }); }); - $(document).on('click', '#button_reg_employer', function() { - - $('#messages_error_reg').html(''); - - var field_login = $('#email_employer'); - var field_pwd = $('#password_employer'); - var field_confirm_pwd = $('#password_confirmation_employer'); - var field_politik_employer = $('#politik_employer'); - var field_telephone_employer = $('#telephone_employer'); - var field_company_employer = $('#company_employer'); - var field_surname_employer = $('#surname_employer'); - var field_name_man_employer = $('#name_man_employer'); - var field_surname2_employer = $('#surname2_employer'); - - var login = field_login.val(); - var pwd = field_pwd.val(); - var confirm_pwd = field_confirm_pwd.val(); - var politik = field_politik_employer.val(); - var telephone = field_telephone_employer.val(); - var company_employer = field_company_employer.val(); - var surname = field_surname_employer.val(); - var name_man = field_name_man_employer.val(); - var surname2 = field_surname2_employer.val(); + $('#form2').on('submit', function (e) { + e.preventDefault(); if (document.getElementById("cpatchaTextBox2").value == code2) { - console.log('Валидный кот'); - + console.log('Валидная капча'); } else { - console.log('Ошибка2'); - event.preventDefault(); - $('#block-info').css({'display': 'block'}); - $('#messages_error_reg').html('ERROR: Капча неверная!'); + $('#captcha_employer_error').text('Капча неверная!'); return false; } - console.log('login: '+login+' password: '+pwd); - if (!document.getElementById('politik_employer').checked) { - event.preventDefault(); - $('#block-info').css({'display': 'block'}); - $('#messages_error_reg').html('ERROR: Вы не согласились с политикой конфидициальности!'); - return false; - } + $('.employer_error-message').text(''); + + let formData = $(this).serialize(); $.ajax({ - type: "GET", - url: "{{ route('register_employer') }}", - data: "email="+login+"&password="+pwd+"&confirmed="+confirm_pwd+"&politik="+politik+ - "&telephone="+telephone+"&name_company="+company_employer+"&surname="+surname+"&name_man="+name_man+ - "&surname2="+surname2+"&subscribe_email="+login, - success: function (data) { - console.log('Вход в систему'); - let d = JSON.parse(data); - if(typeof d['REDIRECT'] !== "undefined") { - successfulRegistrationEmployer() - } - if (typeof d['ERROR'] !== "undefined") { - console.log(d['ERROR']); - $('#block-info').css({'display': 'block'}); - $('#messages_error_reg').html(d['ERROR']); + url: $(this).attr('action'), + method: $(this).attr('method'), + data: formData, + success: function (response) { + if (response.REDIRECT) { + successfulRegistrationEmployer(); } - console.log(d['REDIRECT']); - }, - headers: { - 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, - error: function (data) { - data = JSON.stringify(data); - console.log('Error: ' + data); + error: function (jqXHR) { + if (jqXHR.status === 422) { + let errors = jqXHR.responseJSON.ERRORS; + + for (let field in errors) { + if (errors.hasOwnProperty(field)) { + $('#' + field + '_employer_error').text(errors[field][0]); + } + } + } else { + alert('Произошла ошибка при регистрации. Попробуйте снова.'); + } } }); - return false; }); diff --git a/resources/views/modals/register.blade.php b/resources/views/modals/register.blade.php index 9ea999c..0c327ac 100644 --- a/resources/views/modals/register.blade.php +++ b/resources/views/modals/register.blade.php @@ -24,19 +24,22 @@ -