diff --git a/app/Helpers/PositionHelper.php b/app/Helpers/PositionHelper.php index bfc74ab..24f4c3e 100644 --- a/app/Helpers/PositionHelper.php +++ b/app/Helpers/PositionHelper.php @@ -3,6 +3,7 @@ namespace App\Helpers; use App\Models\Direction; +use App\Models\DirectionDescription; use App\Models\DirectionProfile; use App\Models\Document; use App\Models\EntranceExamination; @@ -73,4 +74,10 @@ class PositionHelper $maxPosition = Document::max('position'); return $maxPosition >= 254 ? 255 : $maxPosition + 1; } + + public static function directionDescription() + { + $maxPosition = DirectionDescription::max('position'); + return $maxPosition >= 254 ? 255 : $maxPosition + 1; + } } diff --git a/app/Http/Controllers/admin/Catalog/DirectionDescriptionController.php b/app/Http/Controllers/admin/Catalog/DirectionDescriptionController.php new file mode 100644 index 0000000..b74631e --- /dev/null +++ b/app/Http/Controllers/admin/Catalog/DirectionDescriptionController.php @@ -0,0 +1,72 @@ +validated(); + $fileName = $request->file('file')->getClientOriginalName(); + $name = Storage::put('public', $request->file('file')); + + $directionDescription = new DirectionDescription(); + $directionDescription->url = Storage::url($name); + $directionDescription->direction_code = Direction::select('code', 'id') + ->where('code', $validated['direction_code']) + ->first() + ->id; + $directionDescription->file_name = $fileName; + $directionDescription->position = $validated['position']; + $directionDescription->save(); + return redirect()->route('direction_descriptions.index'); + } + + public function edit(DirectionDescription $directionDescription) + { + $directionCodes = Direction::pluck('full_name', 'code'); + return view('admin.catalog.direction_description.edit', compact('directionDescription', 'directionCodes')); + } + + public function update(UpdateDirectionDescriptionRequest $request, DirectionDescription $directionDescription) + { + $validated = $request->validated(); + $fileName = $request->file('file')->getClientOriginalName(); + $name = Storage::put('public', $request->file('file')); + + $directionDescription->url = Storage::url($name); + $directionDescription->direction_code = Direction::select('code', 'id') + ->where('code', $validated['direction_code']) + ->first() + ->id; + $directionDescription->file_name = $fileName; + $directionDescription->position = $validated['position']; + $directionDescription->save(); + return redirect()->route('direction_descriptions.index'); + } + + public function destroy(DirectionDescription $directionDescription) + { + $directionDescription->delete(); + return redirect()->route('direction_descriptions.index'); + } +} diff --git a/app/Http/Requests/admin/StoreDirectionDescriptionRequest.php b/app/Http/Requests/admin/StoreDirectionDescriptionRequest.php new file mode 100644 index 0000000..85a16c9 --- /dev/null +++ b/app/Http/Requests/admin/StoreDirectionDescriptionRequest.php @@ -0,0 +1,23 @@ + 'required|string|max:255|exists:directions,code', + 'file' => 'required|file', + 'file_name' => 'nullable|string|max:255', + 'position' => 'required|int|numeric|max:255', + ]; + } +} diff --git a/app/Http/Requests/admin/UpdateDirectionDescriptionRequest.php b/app/Http/Requests/admin/UpdateDirectionDescriptionRequest.php new file mode 100644 index 0000000..0acc4d3 --- /dev/null +++ b/app/Http/Requests/admin/UpdateDirectionDescriptionRequest.php @@ -0,0 +1,23 @@ + 'required|string|max:255|exists:directions,code', + 'file' => 'required|file', + 'file_name' => 'nullable|string|max:255', + 'position' => 'required|int|numeric|max:255', + ]; + } +} diff --git a/app/Models/DirectionDescription.php b/app/Models/DirectionDescription.php new file mode 100644 index 0000000..a4c2578 --- /dev/null +++ b/app/Models/DirectionDescription.php @@ -0,0 +1,18 @@ + + */ +class DirectionDescriptionFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'file_name' => fake()->name(), + 'position' => 1, + 'url' => fake()->url(), + ]; + } +} diff --git a/database/migrations/2024_06_13_081633_create_direction_descriptions_table.php b/database/migrations/2024_06_13_081633_create_direction_descriptions_table.php new file mode 100644 index 0000000..01350ed --- /dev/null +++ b/database/migrations/2024_06_13_081633_create_direction_descriptions_table.php @@ -0,0 +1,31 @@ +id(); + $table->foreignId('direction_code')->constrained('directions'); + $table->string('file_name', 255)->nullable(); + $table->string('position', 255); + $table->string('url', 255); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('direction_descriptions'); + } +}; diff --git a/database/seeders/DirectionDescriptionSeeder.php b/database/seeders/DirectionDescriptionSeeder.php new file mode 100644 index 0000000..933f078 --- /dev/null +++ b/database/seeders/DirectionDescriptionSeeder.php @@ -0,0 +1,17 @@ + +
+

Прикрепить файл

+ {{ Form::open(['url' => route('direction_descriptions.store'), 'method' => 'POST', 'files'=>'true', 'class' => 'needs-validation', 'novalidate']) }} + +
+ {{ Form::label('direction_code', 'Направление', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.department_id')]) }} + * +
+
+ {{ Form::select('direction_code', $directionCodes, null, ['class' => 'form-select', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.department_id'), 'required']) }} +
+ Поле "Направление" обязательно! +
+
+
+ @if ($errors->any()) + {{ $errors->first('direction_code') }} + @endif +
+ +
+ {{ Form::label('file', 'Путь к Файлу', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.department_id')]) }} + * +
+
+ {{ Form::file('file', ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.department_id'), 'required']) }} +
+ Поле "Путь к документу" обязательно! +
+
+
+ @if ($errors->any()) + {{ $errors->first('file') }} + @endif +
+
+ {{ Form::label('file_name', 'Имя файла') }} +
+
+ {{ Form::text('file_name', '', ['class' => 'form-control']) }} +
+
+ @if ($errors->any()) + {{ $errors->first('name') }} + @endif +
+ +
+ {{ Form::label('position', 'Позиция') }} +
+
+ {{ Form::text('position', PositionHelper::directionDescription(), ['class' => 'form-control']) }} +
+
+ @if ($errors->any()) + {{ $errors->first('position') }} + @endif +
+ +
+ {{ Form::submit('Загрузить файл', ['class' => 'btn btn-primary'])}} +
+ {{Form::close()}} +
+ + @endauth +@endsection diff --git a/resources/views/admin/catalog/direction_description/edit.blade.php b/resources/views/admin/catalog/direction_description/edit.blade.php new file mode 100644 index 0000000..9836cd0 --- /dev/null +++ b/resources/views/admin/catalog/direction_description/edit.blade.php @@ -0,0 +1,71 @@ +@extends('layouts.admin_layout') +@section('content') + @auth() +
+
+

Заменить файл

+ {{ Form::open(['url' => route('direction_descriptions.update', $directionDescription), 'method' => 'PATCH', 'files'=>'true', 'class' => 'needs-validation', 'novalidate']) }} + +
+ {{ Form::label('direction_code', 'Направление', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.department_id')]) }} + * +
+
+ {{ Form::select('direction_code', $directionCodes, null, ['class' => 'form-select', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.department_id'), 'required']) }} +
+ Поле "Направление" обязательно! +
+
+
+ @if ($errors->any()) + {{ $errors->first('direction_code') }} + @endif +
+ +
+ {{ Form::label('file', 'Путь к Файлу', ['data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.department_id')]) }} + * +
+
+ {{ Form::file('file', ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.direction.department_id'), 'required']) }} +
+ Поле "Путь к документу" обязательно! +
+
+
+ @if ($errors->any()) + {{ $errors->first('file') }} + @endif +
+
+ {{ Form::label('file_name', 'Имя файла') }} +
+
+ {{ Form::text('file_name', $directionDescription->file_name, ['class' => 'form-control']) }} +
+
+ @if ($errors->any()) + {{ $errors->first('name') }} + @endif +
+ +
+ {{ Form::label('position', 'Позиция') }} +
+
+ {{ Form::text('position', $directionDescription->position, ['class' => 'form-control']) }} +
+
+ @if ($errors->any()) + {{ $errors->first('position') }} + @endif +
+ +
+ {{ Form::submit('Загрузить файл', ['class' => 'btn btn-primary'])}} +
+ {{Form::close()}} +
+
+ @endauth +@endsection diff --git a/resources/views/admin/catalog/direction_description/index.blade.php b/resources/views/admin/catalog/direction_description/index.blade.php new file mode 100644 index 0000000..44f5735 --- /dev/null +++ b/resources/views/admin/catalog/direction_description/index.blade.php @@ -0,0 +1,35 @@ +@php use App\Models\Direction; @endphp +@extends('layouts.admin_layout') +@section('content') +
+

Документы

+
+ Добавить документ +
+
+ + + + + + + + + + @foreach($directionDescriptions as $directionDescription) + + + + + @endforeach + +
Направлениефайлдействия
{{ Str::limit(Direction::where('id', $directionDescription->direction_code)->first()->full_name, 50) }}{{ $directionDescription->file_name }}редактировать + + удалить + +
+
+
+
+@endsection diff --git a/resources/views/layouts/admin_layout.blade.php b/resources/views/layouts/admin_layout.blade.php index 9c32440..8413b6f 100644 --- a/resources/views/layouts/admin_layout.blade.php +++ b/resources/views/layouts/admin_layout.blade.php @@ -56,7 +56,9 @@
  • Обратная связь
  • Документы
  • Экран Приема
  • +
  • Направления
  • +
  • Файлы для Направлений
  • @can('viewAny', Auth::user())
  • Список администраторов
  • diff --git a/routes/admin.php b/routes/admin.php index fa4ff38..1e3029f 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -10,6 +10,7 @@ use App\Http\Controllers\admin\Catalog\Direction\ExaminationTypeController; use App\Http\Controllers\admin\Catalog\Direction\SubjectController; use App\Http\Controllers\admin\Catalog\Direction\SubjectTypeController; use App\Http\Controllers\admin\Catalog\DirectionController; +use App\Http\Controllers\admin\Catalog\DirectionDescriptionController; use App\Http\Controllers\admin\Catalog\EducationalInstitutionController; use App\Http\Controllers\admin\Catalog\FacultyController; use App\Http\Controllers\admin\DocumentController; @@ -69,6 +70,8 @@ Route::middleware(['auth', 'verified'])->prefix('admin')->group(function () { Route::resource('/direction_profiles', DirectionProfileController::class) ->scoped(['direction_profile' => 'slug']); + Route::resource('/direction_descriptions', DirectionDescriptionController::class) + ->scoped(['direction_descriptions' => 'slug']); Route::resource('/feedback', FeedbackController::class)->only(['index', 'edit', 'update']); Route::resource('/feedback_statuses', FeedbackStatusController::class);