authorizeRoles(config('roles.const.ADMIN')); $dossiers = Dossier::whereNull('parent_id')->where('system', 0)->orderBy('libelle', 'asc')->get(); $sujets = Sujet::where('sujet_dam', 1)->get(); return view('dossiers.index')->with([ 'dossiers' => $dossiers, 'sujets' => $sujets, ]); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { Auth::user()->authorizeRoles(config('roles.const.ADMIN')); $marques = Marque::all(); $sujets = Sujet::where('sujet_dam', 1)->get(); return view('dossiers.create')->with(['marques' => $marques, 'sujets' => $sujets]); } public function createSub() { $dossiers = Dossier::whereNull('parent_id')->where('system', 0)->orderBy('libelle', 'asc')->get(); return view('dossiers.create-sub')->with(['dossiers' => $dossiers]); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { Auth::user()->authorizeRoles(config('roles.const.ADMIN')); $validatedData = $request->validate([ 'libelle' => 'required', 'sujet' => 'required', 'status' => 'required' ]); $dossierExist = Dossier::where('libelle', $request->libelle)->where('sujet_id', $request->sujet)->first(); if ($dossierExist) { session()->flash('error', "Ce nom de dossier est déjà présent dans l'application pour ce sujet. Ajout impossible."); return redirect()->route('dossier.create'); } else { // ---- Le dossier $dossier = new Dossier(); $dossier->libelle = $request->libelle; $dossier->description = $request->description; $dossier->is_private = $request->status; $dossier->sujet()->associate($request->sujet); if ($dossier->save()) { // ---- Les marques $sMarques = $request->marques; if ($sMarques != "") { $marques = explode(",", $sMarques); foreach ($marques as $marqueId) { $dossier->marques()->attach($marqueId); } } session()->flash('message', "Le dossier à été enregistré"); return redirect()->route('dossier.edit', ['dossier' => $dossier]); } else { session()->flash('error', "Une erreur s'est produite, ajout impossible"); return redirect()->route('dossier.create'); } } } public function storeSub(Request $request) { Auth::user()->authorizeRoles(config('roles.const.ADMIN')); $validatedData = $request->validate([ 'libelle' => 'required', 'parent_id' => 'required', ]); $dossierExist = Dossier::where('libelle', $request->libelle)->first(); $parent_dossier = Dossier::findOrFail($request->parent_id); if ($dossierExist) { session()->flash('error', "Ce nom de dossier est déjà présent dans l'application pour ce sujet. Ajout impossible."); return redirect()->route('dossier.create'); } else { // ---- Le dossier $dossier = new Dossier(); $dossier->libelle = $request->libelle; $dossier->description = $request->description; $dossier->is_private = 0; $dossier->parent_id = $request->parent_id; $dossier->sujet_id = $parent_dossier->sujet_id; if ($dossier->save()) { session()->flash('message', "Le dossier à été enregistré"); return redirect()->route('dossier.edit', ['dossier' => $dossier]); } else { session()->flash('error', "Une erreur s'est produite, ajout impossible"); return redirect()->route('dossier.create'); } } } /** * Display the specified resource. * * @param \App\Models\Dossier $dossier * @return \Illuminate\Http\Response */ public function show(Dossier $dossier) { // } /** * Show the form for editing the specified resource. * * @param \App\Models\Dossier $dossier * @return \Illuminate\Http\Response */ public function edit(Dossier $dossier) { Auth::user()->authorizeRoles(config('roles.const.ADMIN')); $dossierMarques = $dossier->marques; $marques = Marque::all(); $dossierSujets = $dossier->sujets; $sujets = Sujet::where('sujet_dam', 1)->get(); return view('dossiers.edit')->with(['dossier' => $dossier, 'dossierMarques' => $dossierMarques, 'marques' => $marques, 'sujets' => $sujets]); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Models\Dossier $dossier * @return \Illuminate\Http\Response */ public function update(Request $request, Dossier $dossier) { Auth::user()->authorizeRoles(config('roles.const.ADMIN')); if ($dossier->parent_id === null) { $validatedData = $request->validate([ 'libelle' => 'required', 'sujet' => 'required', 'status' => 'required' ]); $dossierExist = Dossier::where('libelle', $request->libelle)->where('sujet_id', $request->sujet)->where('id', '<>', $dossier->id)->first(); if ($dossierExist) { session()->flash('error', "Ce nom de dossier est déjà présent dans l'application pour ce sujet. Ajout impossible."); return redirect()->route('dossier.edit', ['dossier' => $dossier]); } else { // ---- Le dossier $dossier->libelle = $request->libelle; $dossier->description = $request->description; $dossier->is_private = $request->status; $dossier->sujet()->dissociate(); $dossier->sujet()->associate($request->sujet); if ($dossier->save()) { // ---- Les marques $dossier->marques()->detach(); $sMarques = $request->marques; if ($sMarques != "") { $marques = explode(",", $sMarques); foreach ($marques as $marqueId) { $dossier->marques()->attach($marqueId); } } session()->flash('message', "Le dossier à été mis à jour"); return redirect()->route('dossier.edit', ['dossier' => $dossier]); } else { session()->flash('error', "Une erreur s'est produite, enregistrement impossible"); return redirect()->route('dossier.edit'); } } }else{ $validatedData = $request->validate([ 'libelle' => 'required', ]); $dossierExist = Dossier::where('libelle', $request->libelle)->where('sujet_id', $request->sujet)->where('id', '<>', $dossier->id)->first(); if ($dossierExist) { session()->flash('error', "Ce nom de dossier est déjà présent dans l'application pour ce sujet. Ajout impossible."); return redirect()->route('dossier.edit', ['dossier' => $dossier]); } else { // ---- Le dossier $dossier->libelle = $request->libelle; $dossier->description = $request->description; if ($dossier->save()) { session()->flash('message', "Le dossier à été mis à jour"); return redirect()->route('dossier.edit', ['dossier' => $dossier]); } else { session()->flash('error', "Une erreur s'est produite, enregistrement impossible"); return redirect()->route('dossier.edit'); } } } } /** * Remove the specified resource from storage. * * @param \App\Models\Dossier $dossier * @return \Illuminate\Http\Response */ public function destroy(Dossier $dossier) { Auth::user()->authorizeRoles(config('roles.const.ADMIN')); if ($dossier->delete()) { return redirect(route('dossier.index')); } else { session()->flash('error', 'Erreur lors de la suppression'); return redirect()->route('dossier.edit', ['user' => $dossier]); } } /** * Chargement des dossiers * */ public function loadFolder(Request $request) { $response = array(); $sujetId = $request->input('sujetId'); $response['variantes'] = Variante::where('sujet_id', $sujetId)->get(); $FormatsSujet = Format::whereHas('sujets', function ($query) use ($sujetId) { $query->where('sujet_id', $sujetId); })->get(); $FormatsSystem = Format::withoutGlobalScope('App\Scopes\SystemScope')->where('system', 1)->get(); $response['formats'] = $FormatsSujet->merge($FormatsSystem); if (Auth::user()->hasRole([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')])) { $response['draggable'] = true; } else { $response['draggable'] = false; } // Envoi du role $response['role'] = Auth::user()->role; return json_encode($response); } /** * Ajouter un dossier * */ public function addFolder(Request $request) { $response = array(); Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]); $parent_id = $request->input('parent_id'); $libelle = $request->input('libelle'); $description = $request->input('description'); // ---- Le dossier $dossier = new Dossier(); $dossier->libelle = htmlspecialchars($libelle); $dossier->description = $description; $dossier->parent_id = $parent_id; $dossierParent = Dossier::where('id', $parent_id)->first(); if ($parent_id == 1 || $dossierParent->system == 1) { // dossier de dépôt $dossier->system = 1; } else { $dossier->system = 0; } $dossier->sujet_id = $dossierParent->sujet_id; $dossier->save(); $response['folder_id'] = $dossier->id; $response['system'] = $dossier->system; return json_encode($response); } /** * Ajouter un dossier de dépôt * */ public function addDepotFolder(Request $request) { $response = array(); $parent_id = $request->input('parent_id'); $libelle = $request->input('libelle'); $description = $request->input('description'); // ---- Le dossier $dossier = new Dossier(); $dossier->libelle = htmlspecialchars($libelle); $dossier->description = $description; $dossier->parent_id = 1; $dossier->system = 1; $dossier->save(); $response['folder_id'] = $dossier->id; return json_encode($response); } /** * supprimer un dossier * */ public function removeFolder(Request $request) { Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]); $dossier_id = $request->input('dossier_id'); // ---- Le dossier $dossier = Dossier::where('id', $dossier_id)->first(); if ($dossier && !is_null($dossier->parent_id)) { if ($dossier->delete()) { return json_encode($dossier->parent_id); } } return json_encode(false); } /** * déplacer un dossier * */ public function moveFolder(Request $request) { Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]); $dossier_id = $request->input('dossier_id'); $parent_id = $request->input('parent_id'); $sujet_id = $request->input('sujet_id'); // ---- Le dossier $dossier = Dossier::where('id', $dossier_id)->first(); if ($dossier && !is_null($dossier->parent_id)) { $dossier->parent_id = $parent_id; if ($dossier->save()) { Media::where('dossier_id', $dossier_id)->update(['sujet_id' => $sujet_id]); return json_encode(true); } } return json_encode(false); } /** * renommer un dossier * */ public function renameFolder(Request $request) { Auth::user()->authorizeRoles([config('roles.const.ADMIN'), config('roles.const.REDACTEUR')]); $dossier_id = $request->input('dossier_id'); $libelle = $request->input('libelle'); // ---- Le dossier $dossier = Dossier::where('id', $dossier_id)->first(); if ($dossier && !is_null($dossier->parent_id)) { $dossier->libelle = $libelle; if ($dossier->save()) { return json_encode(true); } } return json_encode(false); } /** * get propriétés d'un dossier * */ public function getFolderProperty(Request $request) { $response = array(); $dossier_id = $request->input('dossier_id'); // ---- Le dossier $dossier = Dossier::where('id', $dossier_id)->first(); if ($dossier) { $response["data"] = $dossier; } return json_encode($response); } /** * enregistre les propriétés d'un dossier * */ public function saveFolderProperty(Request $request) { $dossier_id = $request->input('dossier_id'); $libelle = $request->input('libelle'); $description = $request->input('description'); // ---- Le dossier $dossier = Dossier::where('id', $dossier_id)->first(); if ($dossier && !is_null($dossier->parent_id) && strlen($libelle) > 3) { $dossier->libelle = $libelle; $dossier->description = $description; $dossier->save(); } return json_encode(true); } public function loadFolders(Request $request) { $folders = array(); $user = Auth::user(); $sujet_id = $request->sujet_id; $dossierQuery = Dossier::where([ ['sujet_id', $sujet_id], ['is_private', 0] ]) ->whereNull('parent_id'); $dossierQuery = $dossierQuery->get(); // On récupère les dossiers privés if ($user->hasRole(config('roles.const.ADMIN'))) { $privateQuery = Dossier::where([ ['is_private', '=', 1], ['sujet_id', '=', $sujet_id], ])->get(); } else { $marques = $user->marques()->pluck("marque_id"); $privateQuery = Dossier::where([ ['is_private', '=', 1], ['sujet_id', '=', $sujet_id], ])->whereHas("marques", function ($query) use ($marques) { $query->whereIn("marque_id", $marques); })->get(); } $dossierQuery = $dossierQuery->merge($privateQuery); $dossierQuery = $dossierQuery->sortBy('libelle', SORT_NATURAL | SORT_FLAG_CASE)->values(); // Ajout du dépôt de fichier pour les admin if ($user->hasRole(config('roles.const.ADMIN'))) { $depotQuery = Dossier::whereNull('parent_id') ->where('system', 1) ->orderBy('libelle', 'ASC') ->get(); $folders['data'] = $dossierQuery->merge($depotQuery); } else { $folders['data'] = $dossierQuery; } $folders['racineCount'] = Media::where('sujet_id', $sujet_id) ->whereNull('dossier_id') ->where(function ($query) use ($user) { $query->where('statut', config('services.statut.public_etendu')) ->orWhere('statut', config('services.statut.public')) ->orWhere('created_by', $user->id); }) ->count(); return response()->json($folders); } }