authorizeRoles(config('roles.const.ADMIN')); $dossiers = Dossier::whereNull('parent_id')->where('system', 0) ->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]); } /** * 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', ]); $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->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'); } } } /** * 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')); $validatedData = $request->validate([ 'libelle' => 'required', 'sujet' => '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->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'); } } } /** * 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(); $userId = Auth::user()->id; $sujetId = $request->input('sujetId'); $dossierQuery = Dossier::where('sujet_id', $sujetId) ->whereNull('parent_id'); // Seuls les admins ont accès à toutes les marques if(!Auth::user()->hasRole(config('roles.const.ADMIN')) ){ $marques = Auth::user()->marques()->pluck("marque_id"); $dossierQuery->whereHas("marques", function($query) use ($marques){ $query->whereIn("marque_id", $marques); }); } $dossierQuery = $dossierQuery->orderBy('libelle', 'ASC')->get(); // Ajout du dépôt de fichier pour les admin if(Auth::user()->hasRole(config('roles.const.ADMIN')) ){ $depotQuery = Dossier::whereNull('parent_id') ->where('system', 1) ->orderBy('libelle', 'ASC') ->get(); $response['data'] = $dossierQuery->merge($depotQuery); }else{ $response['data'] = $dossierQuery; } $response['count'] = Media::where('sujet_id', $sujetId) ->whereNull('dossier_id') ->where(function ($query) use ( $userId ) { $query->where('statut', config('services.statut.public_etendu')) ->orWhere('statut', config('services.statut.public')) ->orWhere('created_by', $userId); }) ->count(); $response['typevues'] = Typevue::where('sujet_id', $sujetId)->get(); $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; } 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); } }