composer require ldc/web-status-checker-laravel remove Old static status checker Fix ImportMedia WIP commands OK many fixes Fix and try to optimize folder component Fix front icons + actions based on icons Favico front fix alert Fix Media upload on depot fix folder component buttons Full front fix with perf due tu vuejs Download medias Navigate within medias superfix Move media + loader isLocked boolean and remove media fix Folder scroll fix arcadia link color red Fix panier show external Tons of fixes back as front REwrited all
340 lines
11 KiB
PHP
340 lines
11 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\Http\Requests\DestroyUserRequest;
|
|
use App\Models\Media;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class UserController extends Controller
|
|
{
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function index()
|
|
{
|
|
/** @var \App\Models\User $localUser */
|
|
$localUser = auth()->user();
|
|
$localUser->authorizeRoles(config('roles.const.ADMIN'));
|
|
$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()
|
|
{
|
|
/** @var \App\Models\User $localUser */
|
|
$localUser = auth()->user();
|
|
$localUser->authorizeRoles(config('roles.const.ADMIN'));
|
|
$roles = config('roles.label');
|
|
$marques = Marque::orderBy('libMarq', 'asc')->get();
|
|
$sujets = Sujet::where('sujet_dam', true)->orderBy('libelle', 'asc')->get();
|
|
return view('users.create')->with([
|
|
'roles' => $roles, '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)
|
|
{
|
|
/** @var \App\Models\User $localUser */
|
|
$localUser = auth()->user();
|
|
$localUser->authorizeRoles(config('roles.const.ADMIN'));
|
|
$validatedData = $request->validate([
|
|
'matricule' => 'required',
|
|
'firstname' => 'required',
|
|
'lastname' => 'required',
|
|
'email' => 'email',
|
|
'role' => 'required'
|
|
]);
|
|
|
|
$user = User::where('matricule', $request->matricule)->first();
|
|
if ($user) {
|
|
session()->flash('error', "Ce matricule est déjà présent dans l'application. Ajout impossible.");
|
|
return redirect()->route('user.create');
|
|
} else {
|
|
// ---- L'utilisateur
|
|
$user = new User();
|
|
$user->matricule = $request->matricule;
|
|
$user->firstname = $request->firstname;
|
|
$user->lastname = $request->lastname;
|
|
$user->email = $request->email;
|
|
$user->role = $request->role;
|
|
|
|
if ($user->save()) {
|
|
// ---- Les marques
|
|
$sMarques = $request->marques;
|
|
if ($sMarques != "") {
|
|
$marques = explode(",", $sMarques);
|
|
foreach ($marques as $marqueId) {
|
|
$user->marques()->attach($marqueId);
|
|
}
|
|
}
|
|
|
|
// ---- Les sujets
|
|
$sSujets = $request->sujets;
|
|
if ($sSujets != "") {
|
|
$sujets = explode(",", $sSujets);
|
|
foreach ($sujets as $sujetId) {
|
|
$user->sujets()->attach($sujetId);
|
|
}
|
|
} else {
|
|
session()->flash('error', "Vous devez ajouter au moins un sujet.");
|
|
return redirect()->route('user.create');
|
|
}
|
|
|
|
session()->flash('success', "L'utilisateur a été enregistré");
|
|
return redirect()->route(
|
|
'user.edit',
|
|
['user' => $user]
|
|
);
|
|
} else {
|
|
session()->flash('error', "Une erreur s'est produite, ajout impossible");
|
|
return redirect()->route('user.create');
|
|
} //end if
|
|
}//end if
|
|
}
|
|
|
|
/**
|
|
* Check le matricule avant ajout de l'utilisateur
|
|
*
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function checkMatricule(Request $request)
|
|
{
|
|
/** @var \App\Models\User $localUser */
|
|
$localUser = auth()->user();
|
|
$localUser->authorizeRoles(config('roles.const.ADMIN'));
|
|
$response = [];
|
|
$response["exist_bdd"] = false;
|
|
$response["exist_ldap"] = false;
|
|
|
|
// This will get all the request data.
|
|
$data = $request->all();
|
|
$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)
|
|
{
|
|
$roles = config('roles.label');
|
|
$marques = $user->marques;
|
|
$sujets = $user->sujets;
|
|
return view('users.show')->with([
|
|
'user' => $user, 'roles' => $roles,
|
|
'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)
|
|
{
|
|
/** @var \App\Models\User $localUser */
|
|
$localUser = auth()->user();
|
|
$localUser->authorizeRoles(config('roles.const.ADMIN'));
|
|
|
|
$roles = config('roles.label');
|
|
$userMarques = $user->marques;
|
|
$marques = Marque::orderBy('libMarq', 'asc')->get();
|
|
$userSujets = $user->sujets;
|
|
$sujets = Sujet::where('sujet_dam', true)->orderBy('libelle', 'asc')->get();
|
|
$users = User::select(['id', 'email'])->whereIn('role', [
|
|
config('roles.const.ADMIN'), config('roles.const.CONTRIBUTEUR'),
|
|
config('roles.const.REDACTEUR')
|
|
])->where('id', '!=', $user->id)->get();
|
|
return view('users.edit')->with([
|
|
'user' => $user, 'roles' => $roles, 'users' => $users,
|
|
'userMarques' => $userMarques, 'marques' => $marques,
|
|
'userSujets' => $userSujets, 'sujets' => $sujets
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param \App\Models\User $user
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function update(Request $request, User $user)
|
|
{
|
|
/** @var \App\Models\User $localUser */
|
|
$localUser = auth()->user();
|
|
$localUser->authorizeRoles(config('roles.const.ADMIN'));
|
|
$validatedData = $request->validate([
|
|
'firstname' => 'required',
|
|
'lastname' => 'required',
|
|
'email' => 'email',
|
|
'role' => 'required'
|
|
]);
|
|
|
|
// ---- L'utilisateur
|
|
$user->firstname = $request->firstname;
|
|
$user->lastname = $request->lastname;
|
|
$user->email = $request->email;
|
|
$user->role = $request->role;
|
|
$user->save();
|
|
|
|
// ---- Les marques
|
|
$user->marques()->detach();
|
|
$sMarques = $request->marques;
|
|
if ($sMarques != "") {
|
|
$marques = explode(",", $sMarques);
|
|
foreach ($marques as $marqueId) {
|
|
$user->marques()->attach($marqueId);
|
|
}
|
|
}
|
|
|
|
// ---- Les Sujets
|
|
$user->sujets()->detach();
|
|
$sSujets = $request->sujets;
|
|
if ($sSujets != "") {
|
|
$sujets = explode(",", $sSujets);
|
|
foreach ($sujets as $sujetId) {
|
|
$user->sujets()->attach($sujetId);
|
|
}
|
|
} else {
|
|
session()->flash('error', "Vous devez ajouter au moins un sujet.");
|
|
return redirect()->route('user.edit', ['user' => $user]);
|
|
}
|
|
|
|
session()->flash('success', "L'utilisateur a été mis à jour");
|
|
return redirect()->route('user.edit', ['user' => $user]);
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*
|
|
* @param \App\Http\Requests\DestroyUserRequest $request
|
|
* @param \App\Models\User $user
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function destroy(DestroyUserRequest $request, User $user)
|
|
{
|
|
/** @var \App\Models\User $localUser */
|
|
$localUser = auth()->user();
|
|
$localUser->authorizeRoles(config('roles.const.ADMIN'));
|
|
|
|
/** @var \App\Models\User */
|
|
$userPourRemplacer = User::whereId($request->created_by)->firstOrFail();
|
|
|
|
try {
|
|
return DB::transaction(function () use ($user, $userPourRemplacer) {
|
|
Media::whereCreatedBy($user->id)->get()
|
|
->map(function (Media $media) use ($userPourRemplacer) {
|
|
$media->owner()->associate($userPourRemplacer);
|
|
$media->saveOrFail();
|
|
});
|
|
if ($user->deleteOrFail()) {
|
|
session()->flash('success', trans('L\'utilisateur à été supprimé'));
|
|
return redirect(route('user.index'));
|
|
}
|
|
session()->flash('error', 'Erreur lors de la suppression');
|
|
return redirect()->back();
|
|
});
|
|
} catch (\Exception $e) {
|
|
report($e);
|
|
session()->flash('error', 'Erreur lors de la suppression');
|
|
return redirect()->back();
|
|
}//end try
|
|
}
|
|
|
|
/**
|
|
* Ajouter un dossier en favoris
|
|
*
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function favorisFolder(Request $request)
|
|
{
|
|
/** @var \App\Models\User $localUser */
|
|
$localUser = auth()->user();
|
|
|
|
$dossier_id = $request->input('dossier_id');
|
|
$favoris = $request->input('favoris');
|
|
|
|
$dossierFav = $localUser->dossiers()->where('id', $dossier_id)->first();
|
|
|
|
if ($favoris === false && $dossierFav) {
|
|
$localUser->dossiers()->detach($dossier_id);
|
|
} elseif ($favoris === true && !$dossierFav) {
|
|
$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();
|
|
}
|
|
}
|