add bootstrap validation for Direction
Tests & Lint & Deploy to Railway / build (2.6.6, 20.x, 8.3) (push) Successful in 1m47s Details
Tests & Lint & Deploy to Railway / deploy (push) Failing after 5s Details

This commit is contained in:
aslan 2024-03-06 17:11:35 +03:00
parent 2c209f5ddc
commit cc89ecabe8
6 changed files with 116 additions and 62 deletions

View File

@ -2,6 +2,7 @@
namespace App\Helpers; namespace App\Helpers;
use App\Models\Direction;
use App\Models\Faculty; use App\Models\Faculty;
class PositionHelper class PositionHelper
@ -11,4 +12,10 @@ class PositionHelper
$maxPosition = Faculty::max('position'); $maxPosition = Faculty::max('position');
return $maxPosition >= 254 ? 255 : $maxPosition + 1; return $maxPosition >= 254 ? 255 : $maxPosition + 1;
} }
public static function direction()
{
$maxPosition = Direction::max('position');
return $maxPosition >= 254 ? 255 : $maxPosition + 1;
}
} }

View File

@ -6,6 +6,6 @@ return [
'name' => 'Поле "Название" должно быть уникальным для отображения на сайте', 'name' => 'Поле "Название" должно быть уникальным для отображения на сайте',
'description' => 'Поле "Описание" может быть пустым для отображения на сайте', 'description' => 'Поле "Описание" может быть пустым для отображения на сайте',
'educational_institution_id' => 'Поле "Учебное заведение" указывает на привязку к учебному заведению', 'educational_institution_id' => 'Поле "Учебное заведение" указывает на привязку к учебному заведению',
'URL' => 'Поле "Учебное заведение" указывает на привязку к учебному заведению' 'slug' => 'Поле "Учебное заведение" указывает на привязку к учебному заведению'
] ]
]; ];

View File

@ -3,10 +3,35 @@
return [ return [
'faculty' => [ 'faculty' => [
'position' => 'Поле "Позиция" нужно для упарядочивания отображения на сайте', 'position' => 'Поле "Позиция" нужно для упорядочивания отображения на сайте',
'name' => 'Поле "Название" должно быть уникальным для отображения на сайте', 'name' => 'Поле "Название" должно быть уникальным для отображения на сайте',
'description' => 'Поле "Описание" может быть пустым для отображения на сайте', 'description' => 'Поле "Описание" может быть пустым для отображения на сайте',
'educational_institution_id' => 'Поле "Учебное заведение" указывает на привязку к учебному заведению', 'educational_institution_id' => 'Поле "Учебное заведение" указывает на привязку к учебному заведению',
'URL' => 'Поле "Учебное заведение" указывает на привязку к учебному заведению' 'slug' => 'Поле "URL" нужно для отображения в браузере'
] ],
'direction' => [
'position' => 'Поле "Позиция" нужно для упорядочивания отображения на сайте',
'name' => 'Поле "Название" должно быть уникальным для отображения на сайте',
'description' => 'Поле "Описание" может быть пустым для отображения на сайте',
'educational_institution_id' => 'Поле "Учебное заведение" указывает на привязку к учебному заведению',
'department_id' => 'Поле "Кафедра" указывает на привязку направления к кафедре',
'education_level_id' => 'Поле "Уровень Образования" указывает на привязку направления к уровню образованию',
'education_form_id' => 'Поле "Форма образования" указывает на привязку направления к форма образованию',
'budget_places' => 'Поле "Бюджетные места" указывает на количество бюджетных мест в направлении',
'paid_places' => 'Поле "Платные места" указывает на количество платных мест в направлении',
'cost_paid_place' => 'Поле "Стоимость обучения" указывает на стоимость платных мест в направлении',
'slug' => 'Поле "Учебное заведение" указывает на привязку к учебному заведению',
'code' => 'Поле "URL" нужно для отображения в браузере',
'quota' => 'Поле "Квота" указывает на количество мест по квоте',
'period' => 'Поле "Период обучения" указывает на период обучения',
'direction_profile' => 'Поле "Профиль подготовки" указывает на привязку направления к профилям подготовки',
],
'entrance-examination' => [
'examination_type_id' => 'Поле "Тип экзамена" указывает на привязку вступительного испытания к типу экзамена',
'subject_id' => 'Поле "Предмет" указывает на привязку вступительного испытания к предмету',
'subject_type_id' => 'Поле "Тип Предмета" указывает на привязку вступительного испытания к типу предмету',
'scores' => 'Поле "Кол-во баллов" указывает на привязку вступительного испытания к Кол-ву баллов',
'position' => 'Поле "Позиция" нужно для упорядочивания отображения на сайте',
],
]; ];

View File

@ -1,15 +1,20 @@
@php use App\Helpers\PositionHelper; @endphp
@extends('layouts.admin_layout') @extends('layouts.admin_layout')
@section('content') @section('content')
@auth() @auth()
<h1 class=""> Создать Направление</h1> <h1 class=""> Создать Направление</h1>
{{ Form::open(['url' => route('directions.store'), 'method' => 'POST', 'class' => '']) }} {{ Form::open(['url' => route('directions.store'), 'method' => 'POST', 'class' => 'needs-validation', 'novalidate']) }}
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('department_id', 'Кафедра') }} {{ Form::label('department_id', 'Кафедра', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.department_id')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::select('department_id', $departments, null, ['class' => 'form-select']) }} {{ Form::select('department_id', $departments, null, ['class' => 'form-select', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.department_id'), 'required']) }}
<div class="invalid-feedback">
Поле "Кафедра" обязательно!
</div>
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -19,10 +24,11 @@
</div> </div>
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('education_level_id', 'Увовень образования') }} {{ Form::label('education_level_id', 'Уровень образования', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.education_level_id')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::select('education_level_id', $levels, null, ['class' => 'form-select']) }} {{ Form::select('education_level_id', $levels, null, ['class' => 'form-select', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.education_level_id'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -32,10 +38,11 @@
</div> </div>
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('education_form_id', 'Форма образования') }} {{ Form::label('education_form_id', 'Форма образования', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.education_form_id')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::select('education_form_id', $forms, null, ['class' => 'form-select']) }} {{ Form::select('education_form_id', $forms, null, ['class' => 'form-select', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.education_form_id'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -47,10 +54,11 @@
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('position', 'Позиция') }} {{ Form::label('position', 'Позиция', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.position')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::number('position', '', ['class' => 'form-control']) }} {{ Form::number('position', PositionHelper::direction(), ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.position'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -60,10 +68,11 @@
</div> </div>
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('code', 'Код') }} {{ Form::label('code', 'Код', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.code')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::text('code', '', ['class' => 'form-control']) }} {{ Form::text('code', '', ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.code'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -73,10 +82,10 @@
</div> </div>
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('slug', 'URL') }} {{ Form::label('slug', 'URL', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.slug')]) }}
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::text('slug', '', ['class' => 'form-control']) }} {{ Form::text('slug', '', ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.slug')]) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -86,10 +95,11 @@
</div> </div>
<div class="mt-3"> <div class="mt-3">
{{ Form::label('name', 'Название') }} {{ Form::label('name', 'Название', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.name')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::text('name', '', ['class' => 'form-control']) }} {{ Form::text('name', '', ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.name'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -98,10 +108,10 @@
</div> </div>
<div class="mt-3"> <div class="mt-3">
{{ Form::label('description', 'Описание') }} {{ Form::label('description', 'Описание', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.description')]) }}
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::text('description', '', ['class' => 'form-control']) }} {{ Form::text('description', '', ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.name')]) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -110,14 +120,14 @@
</div> </div>
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('budget_places', 'Кол-во бюджетных мест') }} {{ Form::label('budget_places', 'Кол-во бюджетных мест', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.budget_places')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::number('budget_places', null, ['class' => 'form-select']) }} {{ Form::number('budget_places', null, ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.budget_places'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -127,10 +137,11 @@
</div> </div>
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('quota', 'Квота') }} {{ Form::label('quota', 'Квота', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.quota')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::number('quota', null, ['class' => 'form-select']) }} {{ Form::number('quota', null, ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.quota'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -140,10 +151,11 @@
</div> </div>
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('paid_places', 'Кол-во мест по договорам') }} {{ Form::label('paid_places', 'Кол-во мест по договорам', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.paid_places')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::number('paid_places', null, ['class' => 'form-select']) }} {{ Form::number('paid_places', null, ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.paid_places'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -154,10 +166,11 @@
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('cost_paid_place', 'Стоимость обучения') }} {{ Form::label('cost_paid_place', 'Стоимость обучения', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.cost_paid_place')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::number('cost_paid_place', null, ['class' => 'form-select']) }} {{ Form::number('cost_paid_place', null, ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.cost_paid_place'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -168,10 +181,11 @@
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('period', 'Период обучения') }} {{ Form::label('period', 'Период обучения', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.period')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::text('period', null, ['class' => 'form-select']) }} {{ Form::text('period', null, ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.period'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -184,10 +198,11 @@
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('direction_profile', 'Профиль подготовки') }} {{ Form::label('direction_profile', 'Профиль подготовки', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.direction_profile')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::select('direction_profiles[]', $directionProfiles, null, ['class' => 'form-control rounded border-gray-300 w-1/3 h-32', 'multiple' => 'multiple']) }} {{ Form::select('direction_profiles[]', $directionProfiles, null, ['class' => 'form-control rounded border-gray-300 w-1/3 h-32', 'multiple' => 'multiple', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.direction_profile'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -204,10 +219,11 @@
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('entrance-examination[0][examination_type_id]', 'Тип экзамена') }} {{ Form::label('entrance-examination[0][examination_type_id]', 'Тип экзамена', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.entrance-examination.examination_type_id')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1"> <div class="mt-1">
{{ Form::select('entrance-examination[0][examination_type_id]', $examination_types, null, ['class' => 'form-select']) }} {{ Form::select('entrance-examination[0][examination_type_id]', $examination_types, null, ['class' => 'form-select', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.entrance-examination.examination_type_id'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -217,10 +233,11 @@
</div> </div>
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('entrance-examination[0][subject_id]', 'Предмет') }} {{ Form::label('entrance-examination[0][subject_id]', 'Предмет', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.entrance-examination.subject_id')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1 col"> <div class="mt-1 col">
{{ Form::select('entrance-examination[0][subject_id]', $subjects, null, ['class' => 'form-select']) }} {{ Form::select('entrance-examination[0][subject_id]', $subjects, null, ['class' => 'form-select', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.entrance-examination.subject_id'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -230,10 +247,11 @@
</div> </div>
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('entrance-examination[0][subject_type_id]', 'Тип предмета') }} {{ Form::label('entrance-examination[0][subject_type_id]', 'Тип предмета', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.entrance-examination.subject_type_id')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1 col"> <div class="mt-1 col">
{{ Form::select('entrance-examination[0][subject_type_id]', $subjectTypes, null, ['class' => 'form-select']) }} {{ Form::select('entrance-examination[0][subject_type_id]', $subjectTypes, null, ['class' => 'form-select', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.entrance-examination.subject_type_id'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -243,10 +261,11 @@
</div> </div>
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('entrance-examination[0][scores]', 'Кол-во баллов') }} {{ Form::label('entrance-examination[0][scores]', 'Кол-во баллов', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.entrance-examination.scores')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1 col"> <div class="mt-1 col">
{{ Form::text('entrance-examination[0][scores]', '', ['class' => 'form-control']) }} {{ Form::number('entrance-examination[0][scores]', '', ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.entrance-examination.scores'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -256,10 +275,11 @@
</div> </div>
<div class="col"> <div class="col">
<div class="mt-3"> <div class="mt-3">
{{ Form::label('entrance-examination[0][position]', 'Позиция') }} {{ Form::label('entrance-examination[0][position]', 'Позиция', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.entrance-examination.position')]) }}
<span class="text-danger">*</span>
</div> </div>
<div class="mt-1 col"> <div class="mt-1 col">
{{ Form::text('entrance-examination[0][position]', '', ['class' => 'form-control']) }} {{ Form::number('entrance-examination[0][position]', '', ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.entrance-examination.position'), 'required']) }}
</div> </div>
<div> <div>
@if ($errors->any()) @if ($errors->any())
@ -282,6 +302,7 @@
{{ Form::close() }} {{ Form::close() }}
</div> </div>
@include('admin.catalog.direction.script') @include('admin.catalog.direction.script')
@include('layouts.bootstrap_validation')
@endauth @endauth
@endsection @endsection

View File

@ -81,22 +81,5 @@
</div> </div>
</div> </div>
@endauth @endauth
<script> @include('layouts.bootstrap_validation')
(function () {
'use strict'
var forms = document.querySelectorAll('.needs-validation')
Array.prototype.slice.call(forms)
.forEach(function (form) {
form.addEventListener('submit', function (event) {
if (!form.checkValidity()) {
event.preventDefault()
event.stopPropagation()
}
form.classList.add('was-validated')
}, false)
})
})()
</script>
@endsection @endsection

View File

@ -0,0 +1,18 @@
<script>
(function () {
'use strict'
var forms = document.querySelectorAll('.needs-validation')
Array.prototype.slice.call(forms)
.forEach(function (form) {
form.addEventListener('submit', function (event) {
if (!form.checkValidity()) {
event.preventDefault()
event.stopPropagation()
}
form.classList.add('was-validated')
}, false)
})
})()
</script>