ldc-dam/app/Http/Controllers/UserController.php

257 lines
7.8 KiB
PHP
Raw Normal View History

2019-05-16 17:20:30 +02:00
<?php
namespace App\Http\Controllers;
2022-04-19 14:49:09 +02:00
use App\Models\User;
use App\Models\Marque;
use App\Models\Sujet;
2019-05-16 17:20:30 +02:00
use Illuminate\Http\Request;
use Adldap\Laravel\Facades\Adldap;
use App\Enums\Users\RoleEnum;
use App\Http\Requests\Bo\Users\StoreUserRequest;
use App\Http\Requests\Bo\Users\UpdateUserRequest;
use App\Models\Dossier;
2022-03-28 17:43:52 +02:00
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Gate;
2019-05-16 17:20:30 +02:00
class UserController extends Controller
{
/**
* Create the controller instance.
*/
public function __construct()
{
$this->authorizeResource(User::class);
}
2019-05-16 17:20:30 +02:00
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$users = User::all();
2022-03-28 17:43:52 +02:00
return view('users.index')->with([
'users' => $users
2022-03-28 17:43:52 +02:00
]);
2019-05-16 17:20:30 +02:00
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
2022-03-28 17:43:52 +02:00
$marques = Marque::orderBy('libMarq', 'asc')->get();
$sujets = Sujet::where('sujet_dam', true)->orderBy('libelle', 'asc')->get();
2022-03-28 17:43:52 +02:00
return view('users.create')->with([
'marques' => $marques,
2022-03-28 17:43:52 +02:00
'sujets' => $sujets
]);
2019-05-16 17:20:30 +02:00
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Users\StoreUserRequest $request
2019-05-16 17:20:30 +02:00
* @return \Illuminate\Http\Response
*/
public function store(StoreUserRequest $request)
2019-05-16 17:20:30 +02:00
{
return DB::transaction(function () use ($request) {
$user = new User();
$user->fill($request->validated());
2022-03-28 17:43:52 +02:00
if ($user->saveOrFail()) {
$user->marques()->sync($request->validated('marques'));
$user->sujets()->sync($request->validated('sujets'));
2022-03-28 17:43:52 +02:00
return redirect()->route('user.edit', ['user' => $user])
->with('success', 'L\'utilisateur a été enregistré');
}
return redirect()->back()->with('error', 'Une erreur s\'est produite, ajout impossible');
});
2019-05-16 17:20:30 +02:00
}
2022-03-28 17:43:52 +02:00
/**
* Check le matricule avant ajout de l'utilisateur
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function checkMatricule(Request $request)
{
Gate::authorize('checkMatricule', User::class);
2022-03-28 17:43:52 +02:00
$response = [];
$response["exist_bdd"] = false;
$response["exist_ldap"] = false;
$matricule = $request->input('matricule');
// ---- Ctrl de la présence du matricule en base
$user = User::where('matricule', $request->matricule)->first();
if ($user) {
$response["exist_bdd"] = true;
}
$adldap = Adldap::getFacadeRoot();
$results = $adldap->search()->where('uid', '=', $matricule)->first();
if ($results) {
$response["exist_ldap"] = true;
$ldap_user = [];
$ldap_user['firstname'] = $results->getAttribute('givenname')[0];
$ldap_user['lastname'] = $results->getAttribute('sn')[0];
$ldap_user['email'] = $results->getAttribute('mail')[0];
$response["ldap_user"] = $ldap_user;
}
return response()->json($response);
}
2019-05-16 17:20:30 +02:00
/**
* Display the specified resource.
*
2022-04-19 14:49:09 +02:00
* @param \App\Models\User $user
2019-05-16 17:20:30 +02:00
* @return \Illuminate\Http\Response
*/
public function show(User $user)
{
2022-03-28 17:43:52 +02:00
$marques = $user->marques;
$sujets = $user->sujets;
return view('users.show')->with([
'user' => $user,
2022-03-28 17:43:52 +02:00
'marques' => $marques,
'sujets' => $sujets
]);
2019-05-16 17:20:30 +02:00
}
/**
* Show the form for editing the specified resource.
*
2022-04-19 14:49:09 +02:00
* @param \App\Models\User $user
2019-05-16 17:20:30 +02:00
* @return \Illuminate\Http\Response
*/
public function edit(User $user)
{
2022-03-28 17:43:52 +02:00
$userMarques = $user->marques;
$marques = Marque::orderBy('libMarq', 'asc')->get();
$userSujets = $user->sujets;
$sujets = Sujet::where('sujet_dam', true)->orderBy('libelle', 'asc')->get();
$users = User::query()
->select(['id', 'email'])
->whereNotIn('role', [
RoleEnum::reader
])
->where('id', '!=', $user->id)
->orderBy('email')
->get();
2022-03-28 17:43:52 +02:00
return view('users.edit')->with([
'user' => $user,
'users' => $users,
'userMarques' => $userMarques,
'marques' => $marques,
'userSujets' => $userSujets,
'sujets' => $sujets
2022-03-28 17:43:52 +02:00
]);
2019-05-16 17:20:30 +02:00
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\Users\UpdateUserRequest $request
* @param \App\Models\User $user
2019-05-16 17:20:30 +02:00
* @return \Illuminate\Http\Response
*/
public function update(UpdateUserRequest $request, User $user)
2019-05-16 17:20:30 +02:00
{
return DB::transaction(function () use ($request, $user) {
$user->fill($request->validated());
2022-03-28 17:43:52 +02:00
if ($user->saveOrFail()) {
$user->marques()->sync($request->validated('marques'));
$user->sujets()->sync($request->validated('sujets'));
2022-03-28 17:43:52 +02:00
return redirect()->route('user.edit', ['user' => $user])
->with('success', 'L\'utilisateur a été mis à jour');
2022-03-28 17:43:52 +02:00
}
return redirect()->back()->with('error', 'Une erreur s\'est produite, modification impossible');
});
2019-05-16 17:20:30 +02:00
}
/**
* Remove the specified resource from storage.
*
* @param \Illuminate\Http\Request $request
2022-04-19 16:07:27 +02:00
* @param \App\Models\User $user
2019-05-16 17:20:30 +02:00
* @return \Illuminate\Http\Response
*/
public function destroy(Request $request, User $user)
2019-05-16 17:20:30 +02:00
{
2022-03-28 17:43:52 +02:00
try {
return DB::transaction(function () use ($user) {
2022-04-20 15:23:31 +02:00
if ($user->deleteOrFail()) {
return redirect()
->route('user.index')
->with('success', trans('L\'utilisateur à été supprimé'));
2022-03-28 17:43:52 +02:00
}
return redirect()->back()->with('error', 'Erreur lors de la suppression');
2022-03-28 17:43:52 +02:00
});
} catch (\Exception $e) {
report($e);
return redirect()->back()->with('error', 'Erreur lors de la suppression');
2022-03-28 17:43:52 +02:00
}//end try
2019-05-16 17:20:30 +02:00
}
2019-05-22 17:10:16 +02:00
2022-03-28 17:43:52 +02:00
/**
* Ajouter un dossier en favoris
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Dossier $dossier
2022-03-28 17:43:52 +02:00
* @return \Illuminate\Http\JsonResponse
*/
public function favorisFolder(Request $request, Dossier $dossier)
2022-03-28 17:43:52 +02:00
{
/** @var \App\Models\User $localUser */
$localUser = auth()->user();
$dossierFavExists = $localUser->dossiers()
->where('id', $dossier->id)->exists();
2022-03-28 17:43:52 +02:00
if (!$request->boolean('favoris') and $dossierFavExists) {
$localUser->dossiers()->detach($dossier->id);
} elseif ($request->boolean('favoris') and !$dossierFavExists) {
$localUser->dossiers()->attach($dossier->id);
2022-03-28 17:43:52 +02:00
}
return response()->json();
}
/**
* Ajouter un panier en favoris
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function favorisBasket(Request $request)
{
/** @var \App\Models\User $localUser */
$localUser = auth()->user();
$basket_id = $request->input('basket_id');
$favoris = $request->input('favoris');
$basketFav = $localUser->paniersFavoris()->where('id', $basket_id)->first();
if ($favoris == "false" && $basketFav) {
$localUser->paniersFavoris()->detach($basket_id);
} elseif ($favoris == "true" && !$basketFav) {
$localUser->paniersFavoris()->attach($basket_id);
}
return response()->json();
}
2019-05-16 17:20:30 +02:00
}