get(); 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) { 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) { 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) { return DB::transaction(function () use ($directory) { foreach ($directory->children as $directoryChild) { $directoryChild->directory_id = null; $directoryChild->saveOrFail(); } if ($directory->deleteOrFail()) { return redirect() ->route('bo.directories.index') ->with('warning', trans( ':model a bien été supprimé', ['model' => Str::singular(trans('models.classes.directories'))] )); } return redirect() ->back() ->with('error', trans( ':model n\'a pas été supprimé', ['model' => Str::singular(trans('models.classes.directories'))] )); }); } /** * 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 mixed $directoryId * @return void */ public function assignOrder(array $directories, mixed $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 redirect() ->route('bo.directories.index') ->with('success', trans( ':model a été mis à jour', ['model' => Str::singular(trans('models.classes.directories'))] )); } return redirect() ->back() ->with('error', trans( ':model n\'a été mis à jour', ['model' => Str::singular(trans('models.classes.directories'))] )); } }