getDirectoriesForComponent(); return \view('bo.pages.directories.index', \compact('directories')); } /** * Store a newly created resource in storage. * * @param \App\Http\Requests\Bo\Directory\StoreDirectoryRequest $request * @return \Illuminate\Http\Response */ public function store(StoreDirectoryRequest $request) { return DB::transaction(function () use ($request) { $directory = new Directory(); $directory->fill($request->validated()); if ($directory->saveOrFail()) { return redirect() ->route('bo.directories.index') ->with('success', trans( ':model a été créé', ['model' => Str::singular(trans('models.classes.directories'))] )); } return redirect() ->back() ->with('error', trans( ':model n\'a pas été créé', ['model' => Str::singular(trans('models.classes.directories'))] )); }); } /** * Show the form for editing the specified resource. * * @param \App\Models\Directory $directory * @return \Illuminate\Http\Response */ public function edit(Directory $directory) { $this->authorize('edit', $directory); return view('bo.pages.directories.edit', ['directoryModel' => $directory]); } /** * Update the specified resource in storage. * * @param \App\Http\Requests\Bo\Directories\UpdateDirectoryRequest $request * @param \App\Models\Directory $directory * @return \Illuminate\Http\Response */ public function update(UpdateDirectoryRequest $request, Directory $directory) { $this->authorize('edit', $directory); return DB::transaction(function () use ($request, $directory) { $directory->fill($request->validated()); if ($directory->saveOrFail()) { return redirect() ->route('bo.directories.edit', $directory) ->with('success', trans( ':model a été mis à jour', ['model' => Str::singular(trans('models.classes.directories'))] )); } return redirect() ->back() ->with('error', trans( ':model n\'a pas été mis à jour', ['model' => Str::singular(trans('models.classes.directories'))] )); }); } /** * Remove the specified resource from storage. * * @param \App\Models\Directory $directory * @return \Illuminate\Http\Response */ public function destroy(Directory $directory) { $this->authorize('delete', $directory); return DB::transaction(function () use ($directory) { foreach ($directory->children as $directoryChild) { $directoryChild->directory_id = null; $directoryChild->saveOrFail(); } /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Document> */ $documents = $directory->documents()->get()->sortBy('lang', \SORT_REGULAR, true); if ($documents->count()) { $documents->each(function (Document $document) { $document->deleteOrFail(); }); } /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Setting> */ $buttons = Setting::query()->whereIn('key', ['Button1', 'Button2', 'Button3'])->get(); foreach ($buttons as $button) { if (isset($button->value) && intval($button->value) === $directory->id) { return [ $button->id => trans( ':model :name n\'a pas été supprimé, un bouton est encore associé à ce dernier dans les paramètres :', [ 'model' => Str::singular(trans('models.classes.directories')), 'name' => $directory->name['fr'] ] ) ]; } } if ($directory->deleteOrFail()) { return $this->getDirectoriesForComponent(); } }); } /** * Save the new order/structure of directories. * * @param \Illuminate\Http\Request $request * @return void */ public function saveOrder(Request $request) { $this->assignOrder($request->directories, null); } /** * Assign the new order and directory id to each directory. * * @param array $directories * @param integer $directoryId * @return void */ public function assignOrder(array $directories, int $directoryId = null) { foreach ($directories as $newDirectory) { $directory = Directory::where('id', $newDirectory['id'])->first(); $directory['order'] = $newDirectory['order']; $directory['directory_id'] = $directoryId; $directory->saveOrFail(); if (isset($newDirectory['children']) && count($newDirectory['children']) > 0) { $this->assignOrder($newDirectory['children'], $newDirectory['id']); } } } /** * Save the new order/structure of directories. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function needAuthorization(Request $request) { $directory = Directory::where('id', $request->id)->firstOrFail(); $directory->needAuthorization = $directory->needAuthorization ? false : true; if ($directory->saveOrFail()) { return $directory; } } /** * Get directories for component * * @return \Illuminate\Database\Eloquent\Collection */ private function getDirectoriesForComponent() { return Directory::query() ->withCount('documents') ->orderBy('order', 'ASC')->get(); } }