256 lines
7.8 KiB
PHP
256 lines
7.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\User;
|
|
use App\Models\Marque;
|
|
use App\Models\Sujet;
|
|
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;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Gate;
|
|
|
|
class UserController extends Controller
|
|
{
|
|
/**
|
|
* Create the controller instance.
|
|
*/
|
|
public function __construct()
|
|
{
|
|
$this->authorizeResource(User::class);
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function index()
|
|
{
|
|
$users = User::all();
|
|
return view('users.index')->with([
|
|
'users' => $users
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function create()
|
|
{
|
|
$marques = Marque::orderBy('libMarq', 'asc')->get();
|
|
$sujets = Sujet::where('sujet_dam', true)->orderBy('libelle', 'asc')->get();
|
|
return view('users.create')->with([
|
|
'marques' => $marques,
|
|
'sujets' => $sujets
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*
|
|
* @param \App\Http\Requests\Bo\Users\StoreUserRequest $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function store(StoreUserRequest $request)
|
|
{
|
|
return DB::transaction(function () use ($request) {
|
|
$user = new User();
|
|
$user->fill($request->validated());
|
|
|
|
if ($user->saveOrFail()) {
|
|
$user->marques()->sync($request->validated('marques'));
|
|
$user->sujets()->sync($request->validated('sujets'));
|
|
|
|
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');
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 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);
|
|
|
|
$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);
|
|
}
|
|
|
|
/**
|
|
* Display the specified resource.
|
|
*
|
|
* @param \App\Models\User $user
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function show(User $user)
|
|
{
|
|
$marques = $user->marques;
|
|
$sujets = $user->sujets;
|
|
return view('users.show')->with([
|
|
'user' => $user,
|
|
'marques' => $marques,
|
|
'sujets' => $sujets
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*
|
|
* @param \App\Models\User $user
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function edit(User $user)
|
|
{
|
|
$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();
|
|
|
|
return view('users.edit')->with([
|
|
'user' => $user,
|
|
'users' => $users,
|
|
'userMarques' => $userMarques,
|
|
'marques' => $marques,
|
|
'userSujets' => $userSujets,
|
|
'sujets' => $sujets
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param \App\Http\Requests\Bo\Users\UpdateUserRequest $request
|
|
* @param \App\Models\User $user
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function update(UpdateUserRequest $request, User $user)
|
|
{
|
|
return DB::transaction(function () use ($request, $user) {
|
|
$user->fill($request->validated());
|
|
|
|
if ($user->saveOrFail()) {
|
|
$user->marques()->sync($request->validated('marques'));
|
|
$user->sujets()->sync($request->validated('sujets'));
|
|
|
|
return redirect()->route('user.edit', ['user' => $user])
|
|
->with('success', 'L\'utilisateur a été mis à jour');
|
|
}
|
|
return redirect()->back()->with('error', 'Une erreur s\'est produite, modification impossible');
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param \App\Models\User $user
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function destroy(Request $request, User $user)
|
|
{
|
|
try {
|
|
return DB::transaction(function () use ($user) {
|
|
if ($user->deleteOrFail()) {
|
|
return redirect()
|
|
->route('user.index')
|
|
->with('success', trans('L\'utilisateur à été supprimé'));
|
|
}
|
|
return redirect()->back()->with('error', 'Erreur lors de la suppression');
|
|
});
|
|
} catch (\Exception $e) {
|
|
report($e);
|
|
return redirect()->back()->with('error', 'Erreur lors de la suppression');
|
|
}//end try
|
|
}
|
|
|
|
/**
|
|
* Ajouter un dossier en favoris
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param \App\Models\Dossier $dossier
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function favorisFolder(Request $request, Dossier $dossier)
|
|
{
|
|
/** @var \App\Models\User $localUser */
|
|
$localUser = auth()->user();
|
|
|
|
$dossierFavExists = $localUser->dossiers()
|
|
->where('id', $dossier->id)->exists();
|
|
|
|
if (!$request->boolean('favoris') and $dossierFavExists) {
|
|
$localUser->dossiers()->detach($dossier->id);
|
|
} elseif ($request->boolean('favoris') and !$dossierFavExists) {
|
|
$localUser->dossiers()->attach($dossier->id);
|
|
}
|
|
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();
|
|
}
|
|
}
|