only(['search', 'main_section_id']); $data = $this->listSubSectionsAction->run($filters); $data['mainSections'] = MainSection::pluck('title', 'id'); return Inertia::render('Dashboard/SubSections/Index', $data); } /** * Показывает форму создания подраздела */ public function create(): \Inertia\Response { $mainSections = MainSection::pluck('title', 'id'); return Inertia::render('Dashboard/SubSections/Create', [ 'mainSections' => $mainSections, ]); } /** * Создает новый подраздел */ public function store(StoreSubSectionRequest $request): RedirectResponse { try { $validated = $request->validated(); $this->createSubSectionAction->run($validated); return redirect()->route('dashboard.sub-sections.index') ->with('success', 'Подраздел успешно создан!'); } catch (\Exception $e) { return back() ->withInput() ->with('error', 'Ошибка при создании подраздела: ' . $e->getMessage()); } } /** * Показывает форму редактирования подраздела */ public function edit(SubSection $subSection): \Inertia\Response { $subSection->load(['mainSection', 'pages']); $mainSections = MainSection::pluck('title', 'id'); $availablePages = Page::whereNull('sub_section_id') ->whereNotNull('title') ->pluck('title', 'id'); return Inertia::render('Dashboard/SubSections/Edit', [ 'subSection' => $subSection, 'mainSections' => $mainSections, 'availablePages' => $availablePages, ]); } /** * Обновляет существующий подраздел */ public function update(UpdateSubSectionRequest $request, SubSection $subSection): RedirectResponse { try { $validated = $request->validated(); $this->updateSubSectionAction->run($subSection, $validated); return redirect()->route('dashboard.sub-sections.index') ->with('success', 'Подраздел успешно обновлен!'); } catch (\Exception $e) { return back() ->withInput() ->with('error', 'Ошибка при обновлении подраздела: ' . $e->getMessage()); } } /** * Удаляет подраздел */ public function destroy(SubSection $subSection): RedirectResponse { try { $this->deleteSubSectionAction->run($subSection); return redirect()->route('dashboard.sub-sections.index') ->with('success', 'Подраздел успешно удален!'); } catch (\Exception $e) { return back() ->with('error', 'Ошибка при удалении подраздела: ' . $e->getMessage()); } } /** * Прикрепляет подраздел к главному разделу */ public function attachToMainSection(Request $request, SubSection $subSection): RedirectResponse { $request->validate([ 'main_section_id' => ['required', 'exists:main_sections,id'], ]); try { $mainSection = MainSection::findOrFail($request->main_section_id); $this->attachSubSectionAction->run($subSection, $mainSection); return back()->with('success', 'Подраздел прикреплен к главному разделу!'); } catch (\Exception $e) { return back()->with('error', 'Ошибка при прикреплении подраздела: ' . $e->getMessage()); } } /** * Открепляет подраздел от главного раздела */ public function detachFromMainSection(SubSection $subSection): RedirectResponse { try { $this->detachSubSectionAction->run($subSection); return back()->with('success', 'Подраздел откреплен от главного раздела!'); } catch (\Exception $e) { return back()->with('error', 'Ошибка при откреплении подраздела: ' . $e->getMessage()); } } /** * Прикрепляет страницу к подразделу */ public function attachPage(Request $request, SubSection $subSection): RedirectResponse { $request->validate([ 'page_id' => ['required', 'exists:pages,id'], ]); try { $page = Page::findOrFail($request->page_id); $this->attachPageAction->run($page, $subSection); return back()->with('success', 'Страница прикреплена к подразделу!'); } catch (\Exception $e) { return back()->with('error', 'Ошибка при прикреплении страницы: ' . $e->getMessage()); } } /** * Открепляет страницу от подраздела */ public function detachPage(SubSection $subSection, Page $page): RedirectResponse { try { if ($page->sub_section_id !== $subSection->id) { abort(403, 'Страница не принадлежит этому подразделу'); } $this->detachPageAction->run($page); return back()->with('success', 'Страница откреплена от подраздела!'); } catch (\Exception $e) { return back()->with('error', 'Ошибка при откреплении страницы: ' . $e->getMessage()); } } }