From 45c84e7ffbbeb600761c708bc6e3326e7038600f Mon Sep 17 00:00:00 2001 From: F4ilji Date: Tue, 22 Apr 2025 21:15:03 +0500 Subject: [PATCH] added feature for binding form to page and fixing bugs --- app/Filament/Components/Forms/PageForm.php | 7 +++ .../Resources/AdditionalEducationResource.php | 1 - .../ClientAdditionalEducationController.php | 9 ++- app/Http/Controllers/MainController.php | 2 +- app/Http/Controllers/PageController.php | 2 + app/Http/Middleware/AccessCheck.php | 2 + .../Middleware/FormTimePeriodMiddleware.php | 3 +- ...s_column_to_additional_education_table.php | 28 ++++++++++ .../Client/Additional-educations/Show.vue | 56 ++++++++++++++++++- .../AdditionalProgramItemBreadcrumbs.vue | 2 +- .../builder/formBuilder/FormBuilder.vue | 2 +- .../builder/pageBuilder/blocks/FormBlock.vue | 2 +- 12 files changed, 107 insertions(+), 9 deletions(-) create mode 100644 database/migrations/2025_04_22_183718_add_settings_column_to_additional_education_table.php diff --git a/app/Filament/Components/Forms/PageForm.php b/app/Filament/Components/Forms/PageForm.php index 42e09b5..22774ea 100644 --- a/app/Filament/Components/Forms/PageForm.php +++ b/app/Filament/Components/Forms/PageForm.php @@ -5,6 +5,7 @@ namespace App\Filament\Components\Forms; use App\Enums\CustomFormStatus; use App\Enums\PostStatus; use App\Filament\Components\Forms\ItemForm\Pages\ContentBuilderItem; +use App\Models\CustomForm; use Filament\Forms; use Filament\Forms\Components\Actions\Action; use Filament\Forms\Components\Section; @@ -142,6 +143,12 @@ class PageForm ->label('Скрыть хлебные крошки') ->helperText('Скрывает навигационную цепочку вверху страницы') ->columnSpan(1), + Select::make('settings.custom_form')->label('Прикрепить форму для страницы') + ->searchable() + ->preload() + ->options(CustomForm::query() + ->where('status', CustomFormStatus::PUBLISHED)->pluck('title', 'form_id')) + ->columnSpanFull() ]) ->columns(2), ]), diff --git a/app/Filament/Resources/AdditionalEducationResource.php b/app/Filament/Resources/AdditionalEducationResource.php index 3c09b91..22919f7 100644 --- a/app/Filament/Resources/AdditionalEducationResource.php +++ b/app/Filament/Resources/AdditionalEducationResource.php @@ -88,7 +88,6 @@ class AdditionalEducationResource extends Resource TextInput::make('qualification') ->label('Выдаваемый документ') - ->required() ->maxLength(255) ->placeholder('Например: "Удостоверение о повышении квалификации"') ->columnSpanFull() diff --git a/app/Http/Controllers/ClientAdditionalEducationController.php b/app/Http/Controllers/ClientAdditionalEducationController.php index 7d5a6fb..00a1508 100644 --- a/app/Http/Controllers/ClientAdditionalEducationController.php +++ b/app/Http/Controllers/ClientAdditionalEducationController.php @@ -141,11 +141,18 @@ class ClientAdditionalEducationController extends Controller fn() => $this->seoPageProvider->getSeoForModel($additionalEducationModel) ); + if (array_key_exists('custom_form', request()->input('settings_page'))) { + $form = request()->input('settings_page')['custom_form']; + } else { + $form = null; + } + $additionalEducation = new AdditionalEducationResource($additionalEducationModel); return Inertia::render('Client/Additional-educations/Show', compact( 'additionalEducation', - 'seo' + 'seo', + 'form', )); }} diff --git a/app/Http/Controllers/MainController.php b/app/Http/Controllers/MainController.php index d9fe5e5..c07b0ba 100644 --- a/app/Http/Controllers/MainController.php +++ b/app/Http/Controllers/MainController.php @@ -49,7 +49,7 @@ class MainController extends Controller $educations = $this->getEducationsData(); - $posts = Cache::remember('recent_posts', now()->addHour(), function () { + $posts = Cache::remember('posts_recent', now()->addHour(), function () { return $this->getRecentPosts(); }); diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php index 8164e80..b22d828 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Http/Controllers/PageController.php @@ -37,6 +37,7 @@ class PageController extends Controller ->first(); }); + if ($page === null) { abort(404); } @@ -51,6 +52,7 @@ class PageController extends Controller abort($page->code); } + return Inertia::render('Page', compact('page', 'subSectionPages', 'seo')); } } diff --git a/app/Http/Middleware/AccessCheck.php b/app/Http/Middleware/AccessCheck.php index a1ccaa6..498d07c 100644 --- a/app/Http/Middleware/AccessCheck.php +++ b/app/Http/Middleware/AccessCheck.php @@ -32,6 +32,8 @@ class AccessCheck abort($registeredRoute->code); } + $request->merge(['settings_page' => $registeredRoute->settings]); + // Если все проверки пройдены, продолжаем выполнение запроса return $next($request); } diff --git a/app/Http/Middleware/FormTimePeriodMiddleware.php b/app/Http/Middleware/FormTimePeriodMiddleware.php index ffbaa4d..e168d8d 100644 --- a/app/Http/Middleware/FormTimePeriodMiddleware.php +++ b/app/Http/Middleware/FormTimePeriodMiddleware.php @@ -23,8 +23,9 @@ class FormTimePeriodMiddleware abort(Response::HTTP_NOT_FOUND, 'Form not found'); } + if (!isset($form->settings['period'])) { - abort(Response::HTTP_BAD_REQUEST, 'Invalid form settings'); + return $next($request); } $period = $form->settings['period']; diff --git a/database/migrations/2025_04_22_183718_add_settings_column_to_additional_education_table.php b/database/migrations/2025_04_22_183718_add_settings_column_to_additional_education_table.php new file mode 100644 index 0000000..516c3a5 --- /dev/null +++ b/database/migrations/2025_04_22_183718_add_settings_column_to_additional_education_table.php @@ -0,0 +1,28 @@ +string('qualification')->change()->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('additional_education', function (Blueprint $table) { + $table->string('qualification')->nullable(false)->change(); + }); + } +}; diff --git a/resources/js/Pages/Client/Additional-educations/Show.vue b/resources/js/Pages/Client/Additional-educations/Show.vue index e9d7736..63e8780 100644 --- a/resources/js/Pages/Client/Additional-educations/Show.vue +++ b/resources/js/Pages/Client/Additional-educations/Show.vue @@ -13,11 +13,15 @@ import AdditionalProgramItemBreadcrumbs import BasicPageContainer from "@/componentss/ui/templates/BasicPageContainer.vue"; import BasicPageWrapper from "@/componentss/ui/wrappers/BasicPageWrapper.vue"; import ProgramItemBreadcrumbs from "@/componentss/features/educationalPrograms/components/ProgramItemBreadcrumbs.vue"; +import FormBlock from "@/componentss/shared/builder/pageBuilder/blocks/FormBlock.vue"; +import FormBuilder from "@/componentss/shared/builder/formBuilder/FormBuilder.vue"; export default { name: "Show", components: { + FormBuilder, + FormBlock, ProgramItemBreadcrumbs, BasicPageWrapper, BasicPageContainer, AdditionalProgramItemBreadcrumbs, BasicFooter, @@ -42,7 +46,10 @@ export default { }, seo: { type: Object, - } + }, + form: { + type: String + } }, methods: { getFormOfStudy(contests) { @@ -106,7 +113,7 @@ export default { -
+
@@ -169,11 +176,56 @@ export default {
+ + +
+ +
+
+
+

+ Оставить заявку на курс {{ additionalEducation.data.title }} +

+
+
+
+ +
+
+
+
+ +
+ + + +