Merge branch 'develop' into trunk

This commit is contained in:
Noah Lancien 2025-07-10 13:05:54 +02:00
commit c6fcd7cfa6
10 changed files with 183 additions and 55 deletions

View file

@ -2,15 +2,18 @@
namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Bo\Auth\ForgotPasswordController;
use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\Users\StoreUserRequest;
use App\Http\Requests\Bo\Users\UpdateUserRequest;
use App\Models\Site;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use App\Http\Requests\Bo\Users\StoreUserRequest;
use App\Http\Requests\Bo\Users\UpdateUserRequest;
use App\Http\Controllers\Bo\Auth\ForgotPasswordController;
use App\Http\Requests\Bo\Users\FavouriteSiteRequest;
class UserController extends Controller
{
@ -170,9 +173,35 @@ class UserController extends Controller
*
* @return \Illuminate\Contracts\View\View
*/
public function passwordReset(): \Illuminate\Contracts\View\View
public function settings(): \Illuminate\Contracts\View\View
{
return view('bo.pages.users.passwordReset');
return view('bo.pages.users.settings');
}
/**
* Favourite site submit
*
* @param \App\Http\Requests\Bo\Users\FavouriteSiteRequest $request
*
* @return \Illuminate\Http\RedirectResponse
*/
public function favouriteSiteSubmit(FavouriteSiteRequest $request): \Illuminate\Http\RedirectResponse
{
/** @var \App\Models\User */
$user = auth()->user();
try {
$user->favourite_site_id = $request->favourite_site_id;
$user->saveOrFail();
return redirect()->back()->with("success", trans('crud.messages.favourite_site_changed'));
} catch (\Exception $e) {
\report($e);
return redirect()->back()->with('error', trans('crud.messages.favourite_site_not_changed'));
} catch (\Throwable $e) {
\report($e);
return redirect()->back()->with('error', trans('crud.messages.favourite_site_not_changed'));
}
}
/**

View file

@ -0,0 +1,40 @@
<?php
namespace App\Http\Requests\Bo\Users;
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Http\FormRequest;
class FavouriteSiteRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return boolean
*/
public function authorize(): bool
{
return Auth::check();
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules(): array
{
/** @var \App\Models\User|null $user */
$user = Auth::user();
return [
'favourite_site_id' => [
'nullable',
'exists:sites,id',
Rule::in($user->sites->pluck('id')),
],
];
}
}

View file

@ -46,7 +46,8 @@ class User extends Authenticatable
'password',
'role',
'sites',
'gitlab_id'
'gitlab_id',
'favourite_site_id'
];
/**

View file

@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->foreignId('favourite_site_id')->nullable()->after('gitlab_id')->constrained('sites')->onDelete('set null');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropForeign(['favourite_site_id']);;
$table->dropColumn('favourite_site_id');
});
}
};

View file

@ -52,7 +52,8 @@ return [
'order_changed' => 'L\'ordre a été changé !',
'order_not_changed' => 'L\'ordre n\'a pas été changé !',
'publish_status_saved' => 'Changement de l\'état de publication réussit !',
'right' => 'Vous n\'avez pas les droits pour accéder à cette partie !'
'favourite_site_changed' => 'Votre site favori a été mis à jour avec succès.',
'favourite_site_not_changed' => 'Une erreur est survenue lors de la mise à jour de votre site favori.',
],
'minicrud' => [

View file

@ -12,7 +12,7 @@
$userPr->filter(function ($pr) use ($site) {
return $pr->id === $site->id;
})->count())
<option value="{{ $site->id }}" selected>{{ $site->name }}</option>
<option value="{{ $site->id }}" @selected(Auth::user()->favourite_site_id === $site->id)>{{ $site->name }}</option>
@endif
@endforeach
</select>

View file

@ -1,40 +0,0 @@
@extends('layout.app')
@section('title', __('Réinitialisation de mot de passe'))
@section('description', __('Réinitialisation de mot de passe de l\':model :user', ['model' => Str::singular(__('models.classes.users')), 'user' => auth()->user()->name]))
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Réinitialisation de mot de passe') }}</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
@error('email')
<div class="alert alert-warning" role="alert">
{{ $message }}
</div>
@endif
<form method="POST" action="{{ route('bo.users.passwordResetSubmit') }}">
@csrf
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Réinitialiser le mot de passe') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

View file

@ -0,0 +1,66 @@
@extends('layout.app')
@section('title', __('Paramètres'))
@section('description', __('Paramètres de l\':model :user', ['model' => Str::singular(__('models.classes.users')), 'user' => auth()->user()->name]))
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card mb-5">
<div class="card-header">{{ __('Définir un site comme favori') }}</div>
<div class="card-body">
@php
$user = auth()->user();
@endphp
<form method="POST" action="{{ route('bo.users.favouriteSiteSubmit') }}">
@csrf
<div class="form-group row mb-0">
<div class="input-group">
<select class="form-select" name="favourite_site_id">
<option value="" @if (!$user->favourite_site_id) selected @endif>Aucun</option>
@foreach ($user->sites as $site)
<option value="{{ $site->id }}" @selected($user->favourite_site_id === $site->id)>{{ $site->name }}</option>
@endforeach
</select>
<button type="submit" class="btn btn-primary">
{{ __('Définir comme favori') }}
</button>
</div>
</div>
</form>
</div>
</div>
<div class="card">
<div class="card-header">{{ __('Réinitialisation de mot de passe') }}</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
@error('email')
<div class="alert alert-warning" role="alert">
{{ $message }}
</div>
@endif
<form method="POST" action="{{ route('bo.users.passwordResetSubmit') }}">
@csrf
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Réinitialiser le mot de passe') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

View file

@ -104,8 +104,8 @@
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route('bo.users.passwordReset') }}">
{{ __('Identifiants') }}
<a class="dropdown-item" href="{{ route('bo.users.settings') }}">
{{ __('Paramètres') }}
</a>
<form id="logout-form" class="dropdown-item" action="{{route('logout')}}" method="POST">

View file

@ -107,8 +107,10 @@ Route::middleware('admin-secure')
->parameters(['credit_accounts' => 'account', 'credit_logs' => 'credit_log']);
// * USERS
Route::get('/users/change-password', [UserController::class, 'passwordReset'])
->name('users.passwordReset');
Route::get('/users/settings', [UserController::class, 'settings'])
->name('users.settings');
Route::post('/users/favourite-site', [UserController::class, 'favouriteSiteSubmit'])
->name('users.favouriteSiteSubmit');
Route::post('/users/change-password', [UserController::class, 'passwordResetSubmit'])
->name('users.passwordResetSubmit');