split admin users and random users to customers - issue #10
This commit is contained in:
parent
e1d1238919
commit
afa735f0b8
50 changed files with 1566 additions and 1183 deletions
|
|
@ -16,6 +16,9 @@ php artisan create:admin
|
|||
php artisan users:deletenc à mettre 1 fois par jour
|
||||
```
|
||||
|
||||
## THEME
|
||||
Choisir un thème dans le dépôt des thèmes `gen-game-web`, puis copier les fichiers et les coller/remplacer directement dans le projet.
|
||||
|
||||
## TODO
|
||||
```
|
||||
- SH - Soucis de connexion / déconnexion quand le jeu est terminé et que l'adresse du jeu redirige vers une autre adresse : si on se déconnecte et qu'on revient sur le bo, on est toujours connecté
|
||||
|
|
|
|||
|
|
@ -1,57 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class CreateAdmin extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'create:admin';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Command description';
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$firstname = $this->ask('What is the firstname?', 'Equipe');
|
||||
$lastname = $this->ask('What is the lastname?', 'Web');
|
||||
$email = $this->ask('What is the email?', 'equipe.web@ldc.fr');
|
||||
$pwd = $this->secret('What is the password?');
|
||||
$role = $this->ask('Role ?', '1');
|
||||
|
||||
$user = new User();
|
||||
$user->firstname = $firstname;
|
||||
$user->lastname = $lastname;
|
||||
$user->birth_date = now();
|
||||
$user->email = $email;
|
||||
$user->password = Hash::make($pwd);
|
||||
$user->address = "-";
|
||||
$user->town = "Le Mans";
|
||||
$user->postal_code = "72000";
|
||||
$user->country = "France";
|
||||
$user->email_verify_token = "-";
|
||||
$user->email_verified = 1;
|
||||
$user->role = $role;
|
||||
$user->save();
|
||||
|
||||
$this->info('User created.');
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Models\Customer;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
|
|
@ -25,15 +25,13 @@ class DeleteNotConfirmedUser extends Command
|
|||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return integer
|
||||
* @return void
|
||||
*/
|
||||
public function handle()
|
||||
public function handle(): void
|
||||
{
|
||||
$users = User::where([['email_verified', 0], ['created_at', '<', Carbon::now()->subDay()]])->get();
|
||||
$users = Customer::where([['email_verified', 0], ['created_at', '<', Carbon::now()->subDay()]])->get();
|
||||
foreach ($users as $user) {
|
||||
$user->delete();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
228
app/Console/Commands/UserCreate.php
Normal file
228
app/Console/Commands/UserCreate.php
Normal file
|
|
@ -0,0 +1,228 @@
|
|||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Enums\Users\RoleEnum;
|
||||
use App\Models\User;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class UserCreate extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'user:create';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Create a backend admin user';
|
||||
|
||||
/**
|
||||
* The firstname of the new user.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $firstname;
|
||||
|
||||
/**
|
||||
* The lastname of the new user.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $lastname;
|
||||
|
||||
/**
|
||||
* The email of the new user.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $email;
|
||||
|
||||
/**
|
||||
* The password of the new user.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $password;
|
||||
|
||||
/**
|
||||
* The role of the new user.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $role;
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function handle(): int
|
||||
{
|
||||
$this->firstname = null;
|
||||
$this->addFirstname();
|
||||
|
||||
$this->lastname = null;
|
||||
$this->addLastname();
|
||||
|
||||
$this->email = null;
|
||||
$this->addEmail();
|
||||
|
||||
$this->password = null;
|
||||
$this->addPassword();
|
||||
|
||||
$this->role = null;
|
||||
$this->addRole();
|
||||
|
||||
$user = new User([
|
||||
'firstname' => $this->firstname,
|
||||
'lastname' => $this->lastname,
|
||||
'email' => $this->email,
|
||||
'password' => $this->password,
|
||||
'role' => $this->role,
|
||||
'published' => true,
|
||||
'published_at' => Carbon::now(),
|
||||
]);
|
||||
$user->saveOrFail();
|
||||
|
||||
$this->info('User created 👌');
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a firstname to the user.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function addFirstname(): void
|
||||
{
|
||||
while (is_null($this->firstname)) {
|
||||
try {
|
||||
$tmp = $this->ask('Type the wanted user firstname', 'Admin');
|
||||
$validator = Validator::make(['firstname' => $tmp], [
|
||||
'firstname' => 'required|min:3|max:255'
|
||||
]);
|
||||
$validator->validate();
|
||||
$this->firstname = $tmp;
|
||||
} catch (ValidationException $e) {
|
||||
$this->error(sprintf(
|
||||
'Please provide a valid firstname %s',
|
||||
\implode(',', collect($e->errors())->flatten()->all())
|
||||
));
|
||||
continue;
|
||||
} //end try
|
||||
}; //end while
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a lastname to the user.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function addLastname(): void
|
||||
{
|
||||
while (is_null($this->lastname)) {
|
||||
try {
|
||||
$tmp = $this->ask('Type the wanted user lastname', 'Saïtama');
|
||||
$validator = Validator::make(['lastname' => $tmp], [
|
||||
'lastname' => 'required|min:3|max:255'
|
||||
]);
|
||||
$validator->validate();
|
||||
$this->lastname = $tmp;
|
||||
} catch (ValidationException $e) {
|
||||
$this->error(sprintf(
|
||||
'Please provide a valid lastname %s',
|
||||
\implode(',', collect($e->errors())->flatten()->all())
|
||||
));
|
||||
continue;
|
||||
} //end try
|
||||
}; //end while
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an email to the user.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function addEmail(): void
|
||||
{
|
||||
while (is_null($this->email)) {
|
||||
try {
|
||||
$tmp = $this->ask('Type the wanted user email', 'equipe.web@ldc.fr');
|
||||
$validator = Validator::make(['email' => $tmp], [
|
||||
'email' => 'required|unique:users,email|email:rfc,dns'
|
||||
]);
|
||||
$validator->validate();
|
||||
$this->email = $tmp;
|
||||
} catch (ValidationException $e) {
|
||||
$this->error(sprintf(
|
||||
'Please provide a valid email %s',
|
||||
\implode(',', collect($e->errors())->flatten()->all())
|
||||
));
|
||||
continue;
|
||||
} //end try
|
||||
}; //end while
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a password to the user.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function addPassword(): void
|
||||
{
|
||||
while (
|
||||
($this->password = $this->secret(
|
||||
(!\is_null($this->password) ? 'Failed to confirm, ' : '') . 'Type the wanted user password'
|
||||
)) !== $this->secret('Confirm the password')
|
||||
) {
|
||||
continue;
|
||||
}; //end while
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a role to the user.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function addRole(): void
|
||||
{
|
||||
while (is_null($this->role)) {
|
||||
try {
|
||||
$tmp = $this->choice(
|
||||
'Select his role',
|
||||
[RoleEnum::conceptor()->label, RoleEnum::admin()->label],
|
||||
RoleEnum::admin()->label,
|
||||
$maxAttempts = null,
|
||||
$allowMultipleSelections = false
|
||||
);
|
||||
if ($tmp === RoleEnum::conceptor()->label) {
|
||||
$tmp = RoleEnum::conceptor();
|
||||
}
|
||||
if ($tmp === RoleEnum::admin()->label) {
|
||||
$tmp = RoleEnum::admin();
|
||||
}
|
||||
$validator = Validator::make(['role' => $tmp], [
|
||||
'role' => 'required'
|
||||
]);
|
||||
$validator->validate();
|
||||
$this->role = $tmp;
|
||||
} catch (ValidationException $e) {
|
||||
$this->error(sprintf(
|
||||
'Please choose from the selection',
|
||||
\implode(',', collect($e->errors())->flatten()->all())
|
||||
));
|
||||
continue;
|
||||
} //end try
|
||||
}; //end while
|
||||
}
|
||||
}
|
||||
34
app/Enums/Users/RoleEnum.php
Normal file
34
app/Enums/Users/RoleEnum.php
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
namespace App\Enums\Users;
|
||||
|
||||
use Kwaadpepper\Enum\BaseEnumRoutable;
|
||||
|
||||
/**
|
||||
* @method static self conceptor()
|
||||
* @method static self admin()
|
||||
*/
|
||||
class RoleEnum extends BaseEnumRoutable
|
||||
{
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected static function values(): array
|
||||
{
|
||||
return [
|
||||
'conceptor' => 1,
|
||||
'admin' => 2,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected static function labels(): array
|
||||
{
|
||||
return [
|
||||
'conceptor' => trans('Concepteur'),
|
||||
'admin' => trans('Administrator'),
|
||||
];
|
||||
}
|
||||
}
|
||||
54
app/Http/Controllers/Bo/Auth/LoginController.php
Normal file
54
app/Http/Controllers/Bo/Auth/LoginController.php
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Bo\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Contracts\Auth\StatefulGuard;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Foundation\Auth\AuthenticatesUsers;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class LoginController extends Controller
|
||||
{
|
||||
use AuthenticatesUsers;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest:backend')->except('logout');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the guard to be used during authentication.
|
||||
*
|
||||
* @return \Illuminate\Contracts\Auth\StatefulGuard
|
||||
*/
|
||||
protected function guard(): StatefulGuard
|
||||
{
|
||||
return Auth::guard('backend');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the application's login form.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View
|
||||
*/
|
||||
public function showLoginForm(): View
|
||||
{
|
||||
return view('bo.auth.login');
|
||||
}
|
||||
|
||||
/**
|
||||
* Where to redirect users after login.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function redirectTo(): string
|
||||
{
|
||||
return response()->redirectToIntended()->getTargetUrl();
|
||||
}
|
||||
}
|
||||
|
|
@ -4,18 +4,24 @@ namespace App\Http\Controllers;
|
|||
|
||||
use App\Mail\PasswordReset;
|
||||
use App\Mail\VerifyEmail;
|
||||
use App\Models\Customer;
|
||||
use App\Models\Settings;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Str;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
|
||||
class LoginController extends Controller
|
||||
{
|
||||
/** @var \LDCCRM\ApiV1 $apiCrm */
|
||||
private $apiCrm;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest')->except('logout');
|
||||
|
|
@ -23,7 +29,8 @@ class LoginController extends Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* index
|
||||
* Get the view of the index.
|
||||
*
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function index()
|
||||
|
|
@ -31,6 +38,12 @@ class LoginController extends Controller
|
|||
return view('front.basic.login');
|
||||
}
|
||||
|
||||
/**
|
||||
* Authenticate the user.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function authenticate(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
|
|
@ -40,44 +53,45 @@ class LoginController extends Controller
|
|||
|
||||
$email = filter_var($request->email, FILTER_SANITIZE_EMAIL);
|
||||
$password = $request->password;
|
||||
$remember = $request->remember !== null ? true : false;
|
||||
|
||||
$userLocal = User::where('email', $email)->first();
|
||||
|
||||
/** @var \App\Models\Customer $userLocal */
|
||||
$userLocal = Customer::where('email', $email)->first();
|
||||
if ($userLocal) {
|
||||
if ($userLocal->email_verified === 1) {
|
||||
if ($userLocal->role > 2) {
|
||||
$connect = $this->apiCrm->loginCustomer($email, $password);
|
||||
$connect = $this->apiCrm->loginCustomer($email, $password);
|
||||
|
||||
if ($connect->status === 'KO') {
|
||||
if ($connect->code === 500) {
|
||||
return back()->withInput($request->except("password"))
|
||||
->withErrors("La connexion est impossible pour le moment, veuillez réessayer plus tard.");
|
||||
} else {
|
||||
return back()->withInput($request->except("password"))
|
||||
->withErrors("Email ou mot de passe incorrect.");
|
||||
}
|
||||
if ($connect->status === 'KO') {
|
||||
if ($connect->code === 500) {
|
||||
return redirect()->back()
|
||||
->withInput($request->except("password"))
|
||||
->withErrors("La connexion est impossible pour le moment, veuillez réessayer plus tard.");
|
||||
} else {
|
||||
return redirect()->back()
|
||||
->withInput($request->except("password"))
|
||||
->withErrors("Email ou mot de passe incorrect.");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$userLocal->email_verify_token = Str::uuid();
|
||||
$userLocal->save();
|
||||
Mail::to($email)->send(new VerifyEmail($userLocal));
|
||||
return back()->withInput($request->except("password"))
|
||||
->withErrors("Votre compte existe mais votre email n'est pas confirmé, merci de vérifier vos emails.");
|
||||
return redirect()->back()
|
||||
->withInput($request->except("password"))
|
||||
->withErrors("Votre compte existe mais votre email n'est pas confirmé,
|
||||
merci de vérifier vos emails.");
|
||||
}//end if
|
||||
} else {
|
||||
$connect = $this->apiCrm->loginCustomer($email, $password);
|
||||
|
||||
if ($connect->status === 'OK') {
|
||||
$userLocal = User::create([
|
||||
/** @var \App\Models\Customer $userLocal */
|
||||
$userLocal = Customer::create([
|
||||
'crm_id' => $connect->user->crm_id,
|
||||
'firstname' => $connect->user->firstname,
|
||||
'lastname' => $connect->user->lastname,
|
||||
'birth_date' => $connect->user->birth_date,
|
||||
'email' => $email,
|
||||
// TODO : MOTDEPASSE ???.
|
||||
'password' => Hash::make("MOTDEPASSE"),
|
||||
'password' => Hash::make($password),
|
||||
'address' => $connect->user->address,
|
||||
'address2' => $connect->user->address2,
|
||||
'town' => $connect->user->city,
|
||||
|
|
@ -88,14 +102,14 @@ class LoginController extends Controller
|
|||
} else {
|
||||
// Compte existant mais non activé.
|
||||
if ($connect->code === 116) {
|
||||
$userLocal = User::create([
|
||||
/** @var \App\Models\Customer $userLocal */
|
||||
$userLocal = Customer::create([
|
||||
'crm_id' => $connect->user->crm_id,
|
||||
'firstname' => $connect->user->firstname,
|
||||
'lastname' => $connect->user->lastname,
|
||||
'birth_date' => $connect->user->birth_date,
|
||||
'email' => $email,
|
||||
// TODO : MOTDEPASSE ???.
|
||||
'password' => Hash::make("MOTDEPASSE"),
|
||||
'password' => Hash::make($password),
|
||||
'address' => $connect->user->address,
|
||||
'address2' => $connect->user->address2,
|
||||
'town' => $connect->user->city,
|
||||
|
|
@ -106,37 +120,29 @@ class LoginController extends Controller
|
|||
$userLocal->email_verify_token = Str::uuid();
|
||||
$userLocal->save();
|
||||
Mail::to($email)->send(new VerifyEmail($userLocal));
|
||||
return back()->withInput($request->except("password"))
|
||||
->withErrors("Votre compte existe mais votre email n'est pas confirmé, merci de vérifier vos emails.");
|
||||
return redirect()->back()
|
||||
->withInput($request->except("password"))
|
||||
->withErrors("Votre compte existe mais votre email n'est pas confirmé,
|
||||
merci de vérifier vos emails.");
|
||||
} elseif ($connect->code === 500) {
|
||||
return back()->withInput($request->except("password"))
|
||||
return redirect()->back()
|
||||
->withInput($request->except("password"))
|
||||
->withErrors("La connexion est impossible pour le moment, veuillez réessayer plus tard.");
|
||||
} else {
|
||||
return back()->withInput($request->except("password"))
|
||||
->withErrors("Email ou mot de passe incorrect.");
|
||||
return redirect()->back()
|
||||
->withInput($request->except("password"))
|
||||
->withErrors("Email ou mot de passe incorrect.");
|
||||
} //end if
|
||||
} //end if
|
||||
}//end if
|
||||
} //end if
|
||||
|
||||
// phpcs:ignore
|
||||
// TODO : Modifier avec separation guard.
|
||||
$tmpPwd = "MOTDEPASSE";
|
||||
if ($userLocal->role <= 2) {
|
||||
$tmpPwd = $password;
|
||||
}
|
||||
|
||||
if (Auth::attempt(["email" => $email, "password" => $tmpPwd], $remember)) {
|
||||
if ($userLocal->role <= 2) {
|
||||
return redirect()->route('bo.dashboard');
|
||||
}
|
||||
return redirect()->route('saisir-code');
|
||||
} else {
|
||||
return back()->withInput($request->except('password'))->withErrors('Les identifiants entrés sont incorrects.');
|
||||
}
|
||||
Auth::login($userLocal);
|
||||
return redirect()->route('saisir-code');
|
||||
}
|
||||
|
||||
/**
|
||||
* logout
|
||||
* Logout.
|
||||
*
|
||||
* @return Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function logout()
|
||||
|
|
@ -144,15 +150,17 @@ class LoginController extends Controller
|
|||
Auth::logout();
|
||||
return redirect()->route('home');
|
||||
}
|
||||
|
||||
/**
|
||||
* confirm email
|
||||
* Confirm email.
|
||||
*
|
||||
* @param string $verifyToken
|
||||
* @return \Illuminate\View\View|Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function confirmEmail(string $verifyToken)
|
||||
{
|
||||
$result = false;
|
||||
$user = User::where('email_verify_token', $verifyToken)->first();
|
||||
$user = Customer::where('email_verify_token', $verifyToken)->first();
|
||||
if (!$user) {
|
||||
return view('front.basic.confirm-email', compact('result'));
|
||||
}
|
||||
|
|
@ -194,7 +202,7 @@ class LoginController extends Controller
|
|||
->withErrors("Le lien de changement de votre mot de passe n'est plus valide, veuillez réessayer.");
|
||||
}
|
||||
$tokenValid = false;
|
||||
$user = User::where('password_token', $token)->first();
|
||||
$user = Customer::where('password_token', $token)->first();
|
||||
if (!$user) {
|
||||
return redirect()->route('forgot-password', compact('tokenValid'))
|
||||
->withErrors('Le lien de changement du mot de passe est incorrect.');
|
||||
|
|
@ -206,12 +214,12 @@ class LoginController extends Controller
|
|||
public function mailPassword(Request $request)
|
||||
{
|
||||
$email = filter_var($request->email, FILTER_SANITIZE_STRING);
|
||||
$user = User::where('email', $email)->first();
|
||||
$user = Customer::where('email', $email)->first();
|
||||
|
||||
if (!$user) {
|
||||
$userCrm = $this->apiCrm->getCustomerByEmail($email);
|
||||
if ($userCrm->status === 'OK') {
|
||||
$user = User::create([
|
||||
$user = Customer::create([
|
||||
'crm_id' => $userCrm->user->crm_id,
|
||||
'firstname' => $userCrm->user->firstname,
|
||||
'lastname' => $userCrm->user->lastname,
|
||||
|
|
@ -233,14 +241,17 @@ class LoginController extends Controller
|
|||
$user->save();
|
||||
Mail::to($email)->send(new VerifyEmail($user));
|
||||
return back()->withInput($request->except("password"))
|
||||
->withErrors("Votre compte existe mais votre email n'est pas confirmé, merci de vérifier vos emails.");
|
||||
->withErrors("Votre compte existe mais votre email n'est pas confirmé,
|
||||
merci de vérifier vos emails.");
|
||||
}
|
||||
} else {
|
||||
if ($userCrm->code === 101) {
|
||||
return back()->withInput($request->only('email'))
|
||||
return redirect()->back()
|
||||
->withInput($request->only('email'))
|
||||
->withErrors("Le mail que vous avez entré n'est pas enregistré dans nos services.");
|
||||
} else {
|
||||
return back()->withErrors("Une erreur est survenue, veuillez réessayer plus tard.");
|
||||
return redirect()->back()
|
||||
->withErrors("Une erreur est survenue, veuillez réessayer plus tard.");
|
||||
}
|
||||
} //end if
|
||||
}//end if
|
||||
|
|
@ -251,7 +262,7 @@ class LoginController extends Controller
|
|||
$settings = app(Settings::class);
|
||||
Mail::to($email)->send(new PasswordReset($user, $settings));
|
||||
return redirect()->route('login')
|
||||
->with('success', 'Un mail de réinitialisation de votre mot de passe vous a été envoyé(e).');
|
||||
->with('success', 'Un mail de réinitialisation de votre mot de passe vous a été envoyé(e).');
|
||||
}
|
||||
|
||||
public function changePassword(Request $request)
|
||||
|
|
@ -260,9 +271,10 @@ class LoginController extends Controller
|
|||
'password' => 'required|min:8|confirmed',
|
||||
]);
|
||||
|
||||
$user = User::where('password_token', filter_var($request->token, FILTER_SANITIZE_STRING))->first();
|
||||
$user = Customer::where('password_token', filter_var($request->token, FILTER_SANITIZE_STRING))->first();
|
||||
if (!$user) {
|
||||
return back()->withErrors('Le lien de changement de votre mot de passe est incorrect, veuillez réessayer.');
|
||||
return redirect()->back()
|
||||
->withErrors('Le lien de changement de votre mot de passe est incorrect, veuillez réessayer.');
|
||||
}
|
||||
|
||||
// TODO : Ajouter controle du contenu du mot de passe.
|
||||
|
|
@ -274,13 +286,15 @@ class LoginController extends Controller
|
|||
$user->password_token = null;
|
||||
$user->save();
|
||||
return redirect()->route('login')
|
||||
->with('success', 'Vous pouvez désormais vous connecter avec votre nouveau mot de passe.');
|
||||
->with('success', 'Vous pouvez désormais vous connecter avec votre nouveau mot de passe.');
|
||||
} else {
|
||||
if ($update->code === 123) {
|
||||
return back()
|
||||
->withErrors("Il semblerait que vous ayez déjà utilisé ce mot de passe pour votre compte. Veuillez réessayer en changeant de mot de passe.");
|
||||
return redirect()->back()
|
||||
->withErrors("Il semblerait que vous ayez déjà utilisé ce mot de passe pour votre compte.
|
||||
Veuillez réessayer en changeant de mot de passe.");
|
||||
} else {
|
||||
return back()->withErrors("Une erreur est survenue, veuillez réessayer plus tard.");
|
||||
return redirect()->back()
|
||||
->withErrors("Une erreur est survenue, veuillez réessayer plus tard.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@
|
|||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Mail\VerifyEmail;
|
||||
use App\Models\Customer;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use App\Models\User;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Foundation\Auth\RegistersUsers;
|
||||
use Illuminate\Http\Request;
|
||||
|
|
@ -89,14 +89,14 @@ class RegisterController extends Controller
|
|||
$crmUser = $this->apiCrm->createCustomer($email, $password, $firstname, $lastname, $optin, $birthdate, null, $address, $address2, $town, $postcode, ucfirst($country));
|
||||
|
||||
if ($crmUser->status === 'OK') {
|
||||
$user = User::create([
|
||||
$user = Customer::create([
|
||||
'crm_id' => $crmUser->user->crm_id,
|
||||
'firstname' => $firstname,
|
||||
'lastname' => $lastname,
|
||||
'birth_date' => $birthdate,
|
||||
'email' => $email,
|
||||
'password' => Hash::make("MOTDEPASSE"),
|
||||
// TODO : ???
|
||||
// TODO : ???
|
||||
'address' => $address,
|
||||
'address2' => $address2,
|
||||
'town' => $town,
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@ namespace App\Http\Controllers;
|
|||
|
||||
use App\Mail\NotifAdmin;
|
||||
use App\Mail\WinningProof;
|
||||
use App\Models\Customer;
|
||||
use App\Models\Participation;
|
||||
use App\Models\Settings;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
|
@ -61,7 +61,7 @@ class WinningProofController extends Controller
|
|||
$barcode = $request->barcode;
|
||||
|
||||
// Mise à jour de l'utilisateur en local.
|
||||
$user = User::find(Auth::user()->id);
|
||||
$user = Customer::find(Auth::user()->id);
|
||||
$user->lastname = $lastname;
|
||||
$user->firstname = $firstname;
|
||||
$user->address = $address;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Auth\Middleware\Authenticate as Middleware;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
|
||||
class Authenticate extends Middleware
|
||||
{
|
||||
|
|
@ -12,10 +13,27 @@ class Authenticate extends Middleware
|
|||
* @param \Illuminate\Http\Request $request
|
||||
* @return string|null
|
||||
*/
|
||||
protected function redirectTo($request)
|
||||
protected function redirectTo($request): ?string
|
||||
{
|
||||
if (! $request->expectsJson()) {
|
||||
$logins = [
|
||||
'backend' => route('bo.login')
|
||||
];
|
||||
if (!$request->expectsJson()) {
|
||||
// * Notify must login
|
||||
Session::flash('warning', trans('Veuillez vous connecter pour continuer'));
|
||||
|
||||
foreach ($request->route()->gatherMiddleware() as $middleware) {
|
||||
if (\is_string($middleware) and strpos($middleware, 'auth:') !== false) {
|
||||
$route = $logins[str_replace('auth:', '', $middleware)] ?? null;
|
||||
if ($route) {
|
||||
return $route;
|
||||
}
|
||||
}
|
||||
}
|
||||
return route('login');
|
||||
}
|
||||
abort(401);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace App\Mail;
|
||||
|
||||
use App\Models\Customer;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Mail\Mailable;
|
||||
|
|
@ -12,14 +13,16 @@ class VerifyEmail extends Mailable implements ShouldQueue
|
|||
use Queueable;
|
||||
use SerializesModels;
|
||||
|
||||
/** @var \App\Models\Customer $user */
|
||||
protected $user;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*
|
||||
* @param \App\Models\Customer $user
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($user)
|
||||
public function __construct(Customer $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
}
|
||||
|
|
|
|||
91
app/Models/Customer.php
Normal file
91
app/Models/Customer.php
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class Customer extends Authenticatable
|
||||
{
|
||||
use Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'crm_id',
|
||||
'civility',
|
||||
'firstname',
|
||||
'lastname',
|
||||
'birth_date',
|
||||
'email',
|
||||
'password',
|
||||
'address',
|
||||
'address2',
|
||||
'town',
|
||||
'postal_code',
|
||||
'country',
|
||||
'email_verify_token',
|
||||
'email_verified'
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for arrays.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $hidden = [
|
||||
'password',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast to native types.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts = [
|
||||
'email_verified_at' => 'datetime',
|
||||
];
|
||||
|
||||
/**
|
||||
* Perform any actions required after the model boots.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected static function booted()
|
||||
{
|
||||
// * EVENT CLOSURES.
|
||||
static::creating(function (self $model) {
|
||||
static::updatePassword($model);
|
||||
});
|
||||
static::updating(function (self $model) {
|
||||
static::updatePassword($model);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Update password.
|
||||
*
|
||||
* @param self $model
|
||||
* @return void
|
||||
*/
|
||||
private static function updatePassword(self $model): void
|
||||
{
|
||||
if (Hash::needsRehash($model->password)) {
|
||||
$model->password = Hash::make($model->password);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Has Many Participation relation
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
*/
|
||||
public function participations()
|
||||
{
|
||||
return $this->hasMany(Participation::class, 'user_id');
|
||||
}
|
||||
}
|
||||
|
|
@ -13,7 +13,7 @@ class Participation extends Model
|
|||
*/
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
return $this->belongsTo(Customer::class);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -2,11 +2,15 @@
|
|||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Enums\Users\RoleEnum;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class User extends Authenticatable
|
||||
{
|
||||
use HasFactory;
|
||||
use Notifiable;
|
||||
|
||||
/**
|
||||
|
|
@ -15,47 +19,76 @@ class User extends Authenticatable
|
|||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'crm_id',
|
||||
'civility',
|
||||
'firstname',
|
||||
'lastname',
|
||||
'birth_date',
|
||||
'email',
|
||||
'password',
|
||||
'address',
|
||||
'address2',
|
||||
'town',
|
||||
'postal_code',
|
||||
'country',
|
||||
'email_verify_token',
|
||||
'email_verified'
|
||||
'role',
|
||||
'published',
|
||||
'published_at',
|
||||
'order',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for arrays.
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $hidden = [
|
||||
'password', 'remember_token',
|
||||
'password',
|
||||
'remember_token',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast to native types.
|
||||
* Cast the property to an enum.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts = [
|
||||
protected $enumCasts = [
|
||||
'role' => RoleEnum::class,
|
||||
'email_verified_at' => 'datetime',
|
||||
];
|
||||
|
||||
/**
|
||||
* Has Many Participation relation
|
||||
* Perform any actions required after the model boots.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
* @return void
|
||||
*/
|
||||
public function participations()
|
||||
protected static function booted()
|
||||
{
|
||||
return $this->hasMany(Participation::class, 'user_id');
|
||||
// * EVENT CLOSURES.
|
||||
static::creating(function (self $model) {
|
||||
static::updatePassword($model);
|
||||
static::setOrder($model);
|
||||
});
|
||||
static::updating(function (self $model) {
|
||||
static::updatePassword($model);
|
||||
});
|
||||
}
|
||||
|
||||
// * METHODS
|
||||
|
||||
/**
|
||||
* Set order after the last element of the list.
|
||||
*
|
||||
* @param self $model
|
||||
* @return void
|
||||
*/
|
||||
private static function setOrder(self $model): void
|
||||
{
|
||||
$model->order = \intval(self::query()->max('order')) + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update password.
|
||||
*
|
||||
* @param self $model
|
||||
* @return void
|
||||
*/
|
||||
private static function updatePassword(self $model): void
|
||||
{
|
||||
if (Hash::needsRehash($model->password)) {
|
||||
$model->password = Hash::make($model->password);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,17 +31,16 @@ class RouteServiceProvider extends ServiceProvider
|
|||
public function boot()
|
||||
{
|
||||
$this->routes(function () {
|
||||
Route::middleware('web')
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/web.php'));
|
||||
|
||||
Route::middleware('web')
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/web.php'));
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/web-bo.php'));
|
||||
|
||||
Route::middleware('web')
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/web-bo.php'));
|
||||
|
||||
Route::middleware('web')
|
||||
->namespace($this->namespace)
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/web-re7.php'));
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
"fideloper/proxy": "^4.2",
|
||||
"fruitcake/laravel-cors": "^2.0",
|
||||
"guzzlehttp/guzzle": "^7.0.1",
|
||||
"kwaadpepper/enum": "^2.1",
|
||||
"kwaadpepper/exception-handler": "^0.0.6",
|
||||
"kwaadpepper/serial-int-caster": "^1.0",
|
||||
"laravel/framework": "^8.0",
|
||||
|
|
|
|||
1314
composer.lock
generated
1314
composer.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -14,7 +14,7 @@ return [
|
|||
*/
|
||||
|
||||
'defaults' => [
|
||||
'guard' => 'web',
|
||||
'guard' => 'frontend',
|
||||
'passwords' => 'users',
|
||||
],
|
||||
|
||||
|
|
@ -36,15 +36,14 @@ return [
|
|||
*/
|
||||
|
||||
'guards' => [
|
||||
'web' => [
|
||||
'backend' => [
|
||||
'driver' => 'session',
|
||||
'provider' => 'users',
|
||||
],
|
||||
|
||||
'api' => [
|
||||
'driver' => 'token',
|
||||
'provider' => 'users',
|
||||
'hash' => false,
|
||||
'frontend' => [
|
||||
'driver' => 'session',
|
||||
'provider' => 'customers',
|
||||
],
|
||||
],
|
||||
|
||||
|
|
@ -70,6 +69,10 @@ return [
|
|||
'driver' => 'eloquent',
|
||||
'model' => App\Models\User::class,
|
||||
],
|
||||
'customers' => [
|
||||
'driver' => 'eloquent',
|
||||
'model' => App\Models\Customer::class,
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|
|
@ -90,7 +93,13 @@ return [
|
|||
'passwords' => [
|
||||
'users' => [
|
||||
'provider' => 'users',
|
||||
'table' => 'password_resets',
|
||||
'table' => 'password',
|
||||
'expire' => 60,
|
||||
'throttle' => 60,
|
||||
],
|
||||
'customers' => [
|
||||
'provider' => 'customers',
|
||||
'table' => 'password',
|
||||
'expire' => 60,
|
||||
'throttle' => 60,
|
||||
],
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration;
|
|||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateUsersTable extends Migration
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
|
|
@ -15,23 +15,16 @@ class CreateUsersTable extends Migration
|
|||
{
|
||||
Schema::create('users', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->integer('crm_id')->nullable();
|
||||
$table->string('firstname');
|
||||
$table->string('lastname');
|
||||
$table->date('birth_date')->nullable();
|
||||
$table->string('email')->unique();
|
||||
$table->string('password');
|
||||
$table->string('address')->nullable();
|
||||
$table->string('address2')->nullable();
|
||||
$table->string('town')->nullable();
|
||||
$table->string('postal_code')->nullable();
|
||||
$table->string('country')->nullable();
|
||||
$table->string('phone')->nullable();
|
||||
$table->string('email_verify_token')->nullable();
|
||||
$table->boolean('email_verified')->default(0);
|
||||
$table->string('password_token')->nullable();
|
||||
$table->integer('role')->default(3);
|
||||
$table->string('firstname')->comment('Firstname of the user.');
|
||||
$table->string('lastname')->comment('Lastname of the user.');
|
||||
$table->string('email')->unique()->comment('Email of the user.');
|
||||
$table->timestamp('email_verified_at')->nullable();
|
||||
$table->string('password')->comment('Password of the user account.');
|
||||
$table->rememberToken();
|
||||
$table->boolean('role')->comment('Role of the user who defines the rights/access.');
|
||||
$table->boolean('published')->comment('The user is published or not.');
|
||||
$table->timestamp('published_at')->nullable()->comment('The date on which the user was published.');
|
||||
$table->integer('order')->comment('Order of this user.');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
|
@ -45,4 +38,4 @@ class CreateUsersTable extends Migration
|
|||
{
|
||||
Schema::dropIfExists('users');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateCustomersTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('customers', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->integer('crm_id')->nullable();
|
||||
$table->string('firstname');
|
||||
$table->string('lastname');
|
||||
$table->date('birth_date')->nullable();
|
||||
$table->string('email')->unique();
|
||||
$table->string('password');
|
||||
$table->string('address')->nullable();
|
||||
$table->string('address2')->nullable();
|
||||
$table->string('town')->nullable();
|
||||
$table->string('postal_code')->nullable();
|
||||
$table->string('country')->nullable();
|
||||
$table->string('phone')->nullable();
|
||||
$table->string('email_verify_token')->nullable();
|
||||
$table->boolean('email_verified')->default(0);
|
||||
$table->string('password_token')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('customers');
|
||||
}
|
||||
}
|
||||
67
resources/views/bo/auth/login.blade.php
Normal file
67
resources/views/bo/auth/login.blade.php
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
@extends('bo.layout')
|
||||
@section('title', __('Authentification'))
|
||||
@section('description', __('Formulaire d\'authentification au back-office.'))
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8 p-0">
|
||||
<div class="card">
|
||||
<div class="card-header">{{ __('Connexion') }}</div>
|
||||
<div class="card-body">
|
||||
<form method="POST" action="{{ route('bo.login') }}">
|
||||
@csrf
|
||||
<div class="row mb-3">
|
||||
<label for="email" class="col-md-4 col-form-label text-md-end">{{ __('Adresse Email') }}</label>
|
||||
<div class="col-md-6">
|
||||
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email"
|
||||
value="{{ old('email') }}" autocomplete="email" autofocus required>
|
||||
@error('email')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<label for="password" class="col-md-4 col-form-label text-md-end">{{ __('Mot de passe') }}</label>
|
||||
<div class="col-md-6">
|
||||
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror"
|
||||
name="password" autocomplete="current-password" required>
|
||||
@error('password')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-6 offset-md-4">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
|
||||
<label class="form-check-label user-select-none" for="remember">
|
||||
{{ __('Se souvenir de moi') }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-0">
|
||||
<div class="col-md-8 offset-md-4">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<span>{{ __('Connexion') }}</span>
|
||||
<i class="fa-solid fa-arrow-right-from-bracket"></i>
|
||||
</button>
|
||||
@if (Route::has('bo.password.request'))
|
||||
<a class="btn btn-link" href="{{ route('bo.password.request') }}">
|
||||
{{ __('Mot de passe oublié ?') }}
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<banned-ip dbdatas='@json($ips)'/>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<codes-ean dbdatas='@json($ean)'/>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<h2>Tableau de bord</h2>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<faq-questions dbdatas='@json($questions)' dbthemes='@json($themes)'/>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<faq-themes dbdatas='@json($themes)'/>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<gain-views name="gain_views" dbdatas='@json($gv)'/>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<instant-win :cangenerate="{{$can_generate}}" instantwin='@json($instant_win)'/>
|
||||
|
|
|
|||
59
resources/views/bo/layout.blade.php
Normal file
59
resources/views/bo/layout.blade.php
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
<!doctype html>
|
||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||
<head>
|
||||
@include('bo.layouts.head')
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
<nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
|
||||
<div class="container">
|
||||
<a class="navbar-brand rounded px-2 py-1" href="{{ url('/') }}">
|
||||
{{ config('app.name', 'Laravel') }}
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent"
|
||||
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<!-- Right Side Of Navbar -->
|
||||
<ul class="navbar-nav justify-content-end w-100 ms-auto">
|
||||
<!-- Authentication Links -->
|
||||
@auth
|
||||
<li class="nav-item dropdown">
|
||||
<a id="navbarDropdown" class="nav-link dropdown-toggle" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
|
||||
{{ __('Bonjour :firstname', ['firstname' => Auth::user()->firstname]) }}
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-right p-0 m-0" aria-labelledby="navbarDropdown">
|
||||
<form class="text-center" action="{{ route('bo.logout') }}" method="POST">
|
||||
@csrf
|
||||
<button class="btn btn-link text-decoration-none text-muted w-100 h-100 p-2" type="submit">{{ __('Déconnexion') }}</button>
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
@endguest
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="py-4">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
@auth
|
||||
<div class="col-md-2">
|
||||
@include('bo.layouts.nav-menu')
|
||||
</div>
|
||||
@endguest
|
||||
<div class="col-md-10">
|
||||
@include('modules.flash-messages')
|
||||
@yield('content')
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
<script src="{{ asset('js/app.js') }}"></script>
|
||||
@stack('scripts')
|
||||
</body>
|
||||
</html>
|
||||
21
resources/views/bo/layouts/head.blade.php
Normal file
21
resources/views/bo/layouts/head.blade.php
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- CSRF Token -->
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
<title>{{ config('app.name', 'Laravel') }}</title>
|
||||
|
||||
<!-- Scripts -->
|
||||
{{-- TODO : Ajouter jQuery dans app.js --}}
|
||||
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
|
||||
{{-- TODO : Voir l'inclusion de Font Awesome, pour le moment c'est fait avec mon compte FA --}}
|
||||
<script src="https://kit.fontawesome.com/2327d60f96.js" crossorigin="anonymous"></script>
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="dns-prefetch" href="//fonts.gstatic.com">
|
||||
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
|
||||
|
||||
<!-- Styles -->
|
||||
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
|
||||
@yield('styles')
|
||||
39
resources/views/bo/layouts/nav-menu.blade.php
Normal file
39
resources/views/bo/layouts/nav-menu.blade.php
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<nav class="nav flex-column sticky-top">
|
||||
<a class="btn bg-transparent text-left" href="{{route('bo.dashboard')}}">{{ __('Tableau de bord') }}</a>
|
||||
@superadmin
|
||||
<a class="btn bg-transparent text-left" href="{{route('bo.settings')}}">{{ __('Réglages') }}</a>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="btn bg-transparent text-left dropdown-toggle" data-toggle="dropdown" href="#" role="button">{{ __('Lots') }}</a>
|
||||
<div class="dropdown-menu">
|
||||
<a class="dropdown-item" href="{{route('bo.prizes')}}">{{ __('Gérer les lots') }}</a>
|
||||
<a class="dropdown-item" href="{{route('bo.gain-views')}}">{{ __('Gérer les vues des lots') }}</a>
|
||||
</div>
|
||||
</li>
|
||||
<a class="btn bg-transparent text-left" href="{{route('bo.instant-win')}}">{{ __('Instant gagnants') }}</a>
|
||||
@endsuperadmin
|
||||
<a class="btn bg-transparent text-left" href="{{route('bo.codes-ean')}}">{{ __('Code EAN') }}</a>
|
||||
<a class="btn bg-transparent text-left" href="{{route('bo.ranges.index')}}">{{ __('Gammes') }}</a>
|
||||
<a class="btn bg-transparent text-left" href="{{route('bo.products.index')}}">{{ __('Produits porteurs') }}</a>
|
||||
@superadmin
|
||||
<a class="btn bg-transparent text-left" href="#_">{{ __('Social share') }}</a>
|
||||
<a class="btn bg-transparent text-left" href="{{route('bo.winners-list')}}">{{ __('Liste des gagnants') }}</a>
|
||||
<a class="btn bg-transparent text-left" href="{{route('bo.banned-ip')}}">{{ __('IP Bannies') }}</a>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="btn bg-transparent text-left dropdown-toggle" data-toggle="dropdown" href="#" role="button">{{ __('Contenus') }}</a>
|
||||
<div class="dropdown-menu">
|
||||
<a class="dropdown-item" href="{{route('bo.content', 1)}}">{{ __('Mentions légales') }}</a>
|
||||
<a class="dropdown-item" href="{{route('bo.content', 2)}}">{{ __('Charte') }}</a>
|
||||
<a class="dropdown-item" href="{{route('bo.content', 3)}}">{{ __('Règlement') }}</a>
|
||||
</div>
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="btn bg-transparent text-left dropdown-toggle" data-toggle="dropdown" href="#" role="button">{{ __('FAQ') }}</a>
|
||||
<div class="dropdown-menu">
|
||||
<a class="dropdown-item" href="{{route('bo.faq-themes')}}">{{ __('Thèmes') }}</a>
|
||||
<a class="dropdown-item" href="{{route('bo.faq-questions')}}">{{ __('Questions') }}</a>
|
||||
</div>
|
||||
</li>
|
||||
<a class="btn bg-transparent text-left" href="{{route('bo.codes')}}">{{ __('Codes uniques') }}</a>
|
||||
@endsuperadmin
|
||||
<a class="btn bg-transparent text-left" href="{{route('home')}}" target="_blank">{{ __('Aller sur le jeu') }}</a>
|
||||
</nav>
|
||||
|
|
@ -7,11 +7,11 @@
|
|||
<title></title>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
<p>
|
||||
Job : {{ $job }} <br><br>
|
||||
Exception : {{ $exception['message'] }} <br><br>
|
||||
Exception : {{ $exception['message'] }} <br><br>
|
||||
Trace : <br>
|
||||
{{ $exception['trace'] }}
|
||||
</p>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<prizes name="prizes" dbdatas='@json($prizes)' dbgainviews='@json($gainViews)'/>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@extends('layouts.bo')
|
||||
@extends('bo.layout')
|
||||
|
||||
@section('content')
|
||||
<div class="card">
|
||||
|
|
|
|||
|
|
@ -1,80 +0,0 @@
|
|||
<!doctype html>
|
||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- CSRF Token -->
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
<title>{{ config('app.name', 'Laravel') }}</title>
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="{{ asset('js/app.js') }}" defer></script>
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="dns-prefetch" href="//fonts.gstatic.com">
|
||||
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
|
||||
|
||||
<!-- Styles -->
|
||||
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
<nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="{{ url('/') }}">
|
||||
{{ config('app.name', 'Laravel') }}
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<!-- Left Side Of Navbar -->
|
||||
<ul class="navbar-nav mr-auto">
|
||||
|
||||
</ul>
|
||||
|
||||
<!-- Right Side Of Navbar -->
|
||||
<ul class="navbar-nav ml-auto">
|
||||
<!-- Authentication Links -->
|
||||
@guest
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
|
||||
</li>
|
||||
@if (Route::has('register'))
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
|
||||
</li>
|
||||
@endif
|
||||
@else
|
||||
<li class="nav-item dropdown">
|
||||
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
|
||||
{{ Auth::user()->name }}
|
||||
</a>
|
||||
|
||||
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
|
||||
<a class="dropdown-item" href="{{ route('logout') }}"
|
||||
onclick="event.preventDefault();
|
||||
document.getElementById('logout-form').submit();">
|
||||
{{ __('Logout') }}
|
||||
</a>
|
||||
|
||||
<form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
|
||||
@csrf
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
@endguest
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="py-4">
|
||||
@yield('content')
|
||||
</main>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,125 +0,0 @@
|
|||
<!doctype html>
|
||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- CSRF Token -->
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
<title>{{ config('app.name', 'Laravel') }}</title>
|
||||
|
||||
<!-- Scripts -->
|
||||
{{-- TODO : Ajouter jQuery dans app.js --}}
|
||||
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
|
||||
{{-- TODO : Voir l'inclusion de Font Awesome, pour le moment c'est fait avec mon compte FA --}}
|
||||
<script src="https://kit.fontawesome.com/2327d60f96.js" crossorigin="anonymous"></script>
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="dns-prefetch" href="//fonts.gstatic.com">
|
||||
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
|
||||
|
||||
<!-- Styles -->
|
||||
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
|
||||
@yield('styles')
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
<nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="{{ url('/') }}">
|
||||
{{ config('app.name', 'Laravel') }}
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<!-- Left Side Of Navbar -->
|
||||
<ul class="navbar-nav mr-auto">
|
||||
|
||||
</ul>
|
||||
|
||||
<!-- Right Side Of Navbar -->
|
||||
<ul class="navbar-nav ml-auto">
|
||||
<!-- Authentication Links -->
|
||||
@auth
|
||||
<li class="nav-item dropdown">
|
||||
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
|
||||
Bonjour {{ Auth::user()->firstname }} <span class="caret"></span>
|
||||
</a>
|
||||
|
||||
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
|
||||
<a class="dropdown-item" href="#"
|
||||
onclick="event.preventDefault();
|
||||
document.getElementById('logout-form').submit();">
|
||||
Déconnexion
|
||||
</a>
|
||||
|
||||
<form id="logout-form" action="{{route('logout')}}" method="POST" style="display: none;">
|
||||
@csrf
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
@endguest
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="py-4">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-2">
|
||||
<nav class="nav flex-column sticky-top">
|
||||
<a class="nav-link" href="{{route('bo.dashboard')}}">Tableau de bord</a>
|
||||
@superadmin
|
||||
<a class="nav-link" href="{{route('bo.settings')}}">Réglages</a>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button">Lots</a>
|
||||
<div class="dropdown-menu">
|
||||
<a class="dropdown-item" href="{{route('bo.prizes')}}">Gérer les lots</a>
|
||||
<a class="dropdown-item" href="{{route('bo.gain-views')}}">Gérer les vues des lots</a>
|
||||
</div>
|
||||
</li>
|
||||
<a class="nav-link" href="{{route('bo.instant-win')}}">Instant gagnants</a>
|
||||
@endsuperadmin
|
||||
<a class="nav-link" href="{{route('bo.codes-ean')}}">Code EAN</a>
|
||||
<a class="nav-link" href="{{route('bo.ranges.index')}}">Gammes</a>
|
||||
<a class="nav-link" href="{{route('bo.products.index')}}">Produits porteurs</a>
|
||||
@superadmin
|
||||
<a class="nav-link" href="#_">Social share</a>
|
||||
<a class="nav-link" href="{{route('bo.winners-list')}}">Liste des gagnants</a>
|
||||
<a class="nav-link" href="{{route('bo.banned-ip')}}">IP Bannies</a>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button">Contenus</a>
|
||||
<div class="dropdown-menu">
|
||||
<a class="dropdown-item" href="{{route('bo.content', 1)}}">Mentions légales</a>
|
||||
<a class="dropdown-item" href="{{route('bo.content', 2)}}">Charte</a>
|
||||
<a class="dropdown-item" href="{{route('bo.content', 3)}}">Règlement</a>
|
||||
</div>
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button">FAQ</a>
|
||||
<div class="dropdown-menu">
|
||||
<a class="dropdown-item" href="{{route('bo.faq-themes')}}">Thèmes</a>
|
||||
<a class="dropdown-item" href="{{route('bo.faq-questions')}}">Questions</a>
|
||||
</div>
|
||||
</li>
|
||||
<a class="nav-link" href="{{route('bo.codes')}}">Codes uniques</a>
|
||||
@endsuperadmin
|
||||
<a class="nav-link" href="{{route('home')}}" target="_blank">Aller sur le jeu</a>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
@include('modules.flashMessage')
|
||||
@yield('content')
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
<script src="{{ asset('js/app.js') }}"></script>
|
||||
@stack('scripts')
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -14,66 +14,82 @@ use App\Http\Controllers\Bo\ProductsController;
|
|||
use App\Http\Controllers\Bo\RangeController;
|
||||
use App\Http\Controllers\Bo\SettingsController;
|
||||
use App\Http\Controllers\Bo\WinnersListController;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
// * BO
|
||||
Route::prefix('bo')
|
||||
->name('bo.')
|
||||
->middleware(['auth', 'is-admin', 'is-super-admin'])
|
||||
->group(function () {
|
||||
Route::get('/', [DashboardController::class, 'index'])
|
||||
->name('dashboard')->withoutMiddleware('is-super-admin');
|
||||
// Réglages.
|
||||
Route::match(['get', 'put'], '/settings', [SettingsController::class, 'manage'])
|
||||
->name('settings');
|
||||
// Contenu.
|
||||
Route::match(['get', 'put'], '/content/{id}', [ContentController::class, 'manage'])
|
||||
->name('content');
|
||||
// Pages liées au gains.
|
||||
Route::get('/gain-views', [GainViewController::class, 'index'])
|
||||
->name('gain-views');
|
||||
Route::post('/ajax/delete-gain-views', [GainViewController::class, 'destroy']);
|
||||
Route::post('/ajax/save-gain-views', [GainViewController::class, 'saveDatas']);
|
||||
// Lots.
|
||||
Route::get('/prizes', [PrizesController::class, 'index'])->name('prizes');
|
||||
Route::post('/ajax/delete-prize', [PrizesController::class, 'destroy']);
|
||||
Route::post('/ajax/save-prizes', [PrizesController::class, 'saveDatas']);
|
||||
// Instants gagnants.
|
||||
Route::get('/instant-win', [InstantWinController::class, 'index'])->name('instant-win');
|
||||
Route::get('/ajax/instant-win-generate', [InstantWinController::class, 'instantWinGenerate']);
|
||||
// Codes EAN.
|
||||
Route::get('/codes-ean', [CodesEANController::class, 'index'])
|
||||
->name('codes-ean')->withoutMiddleware('is-super-admin');
|
||||
Route::post('/ajax/delete-codes-ean', [CodesEANController::class, 'destroy'])
|
||||
->withoutMiddleware('is-super-admin');
|
||||
Route::post('/ajax/save-codes-ean', [CodesEANController::class, 'saveDatas'])
|
||||
->withoutMiddleware('is-super-admin');
|
||||
// IP Bannies.
|
||||
Route::get('/banned-ip', [BannedIpController::class, 'index'])->name('banned-ip');
|
||||
Route::post('/ajax/delete-banned-ip', [BannedIpController::class, 'destroy']);
|
||||
Route::post('/ajax/save-banned-ip', [BannedIpController::class, 'saveDatas']);
|
||||
// FAQ - Thèmes.
|
||||
Route::get('/faq-themes', [FaqThemesController::class, 'index'])->name('faq-themes');
|
||||
Route::post('/ajax/delete-faq-theme', [FaqThemesController::class, 'destroy']);
|
||||
Route::post('/ajax/save-faq-theme', [FaqThemesController::class, 'saveDatas']);
|
||||
// FAQ - Questions.
|
||||
Route::get('/faq-questions', [FaqQuestionsController::class, 'index'])->name('faq-questions');
|
||||
Route::post('/ajax/delete-faq-question', [FaqQuestionsController::class, 'destroy']);
|
||||
Route::post('/ajax/save-faq-question', [FaqQuestionsController::class, 'saveDatas']);
|
||||
// Codes uniques.
|
||||
Route::get('/codes', [CodesController::class, 'index'])->name('codes');
|
||||
Route::post('/codes', [CodesController::class, 'generate'])->name('generate-codes');
|
||||
Route::get('/codes/search', [CodesController::class, 'search'])->name('codes.search');
|
||||
Route::post('/codes/export', [CodesController::class, 'export'])->name('export-codes');
|
||||
// Liste des gagnants.
|
||||
Route::get('/winners-list', [WinnersListController::class, 'index'])->name('winners-list');
|
||||
Route::get('/winners-list/arcadia/{id}', [WinnersListController::class, 'courrierArcadia'])
|
||||
->name('winners-arcadia');
|
||||
Route::post('/winners-list/arcadia/{id}/send', [WinnersListController::class, 'createCourrierArcadia'])
|
||||
->name('courrier-arcadia');
|
||||
// Produits porteurs.
|
||||
Route::resource('products', ProductsController::class)
|
||||
->withoutMiddleware('is-super-admin');
|
||||
Route::resource('ranges', RangeController::class)
|
||||
->withoutMiddleware('is-super-admin');
|
||||
});
|
||||
->name('bo.')
|
||||
->group(function () {
|
||||
Route::namespace('\App\Http\Controllers\Bo')
|
||||
->group(function () {
|
||||
Auth::routes(
|
||||
[
|
||||
'confirm' => false,
|
||||
'login' => true,
|
||||
'logout' => true,
|
||||
'register' => false,
|
||||
'reset' => false,
|
||||
'verify' => false,
|
||||
]
|
||||
);
|
||||
});
|
||||
Route::middleware(['auth:backend', 'is-admin', 'is-super-admin'])
|
||||
->group(function () {
|
||||
Route::get('/', [DashboardController::class, 'index'])
|
||||
->name('dashboard')->withoutMiddleware('is-super-admin');
|
||||
// Réglages.
|
||||
Route::match(['get', 'put'], '/settings', [SettingsController::class, 'manage'])
|
||||
->name('settings');
|
||||
// Contenu.
|
||||
Route::match(['get', 'put'], '/content/{id}', [ContentController::class, 'manage'])
|
||||
->name('content');
|
||||
// Pages liées au gains.
|
||||
Route::get('/gain-views', [GainViewController::class, 'index'])
|
||||
->name('gain-views');
|
||||
Route::post('/ajax/delete-gain-views', [GainViewController::class, 'destroy']);
|
||||
Route::post('/ajax/save-gain-views', [GainViewController::class, 'saveDatas']);
|
||||
// Lots.
|
||||
Route::get('/prizes', [PrizesController::class, 'index'])->name('prizes');
|
||||
Route::post('/ajax/delete-prize', [PrizesController::class, 'destroy']);
|
||||
Route::post('/ajax/save-prizes', [PrizesController::class, 'saveDatas']);
|
||||
// Instants gagnants.
|
||||
Route::get('/instant-win', [InstantWinController::class, 'index'])->name('instant-win');
|
||||
Route::get('/ajax/instant-win-generate', [InstantWinController::class, 'instantWinGenerate']);
|
||||
// Codes EAN.
|
||||
Route::get('/codes-ean', [CodesEANController::class, 'index'])
|
||||
->name('codes-ean')->withoutMiddleware('is-super-admin');
|
||||
Route::post('/ajax/delete-codes-ean', [CodesEANController::class, 'destroy'])
|
||||
->withoutMiddleware('is-super-admin');
|
||||
Route::post('/ajax/save-codes-ean', [CodesEANController::class, 'saveDatas'])
|
||||
->withoutMiddleware('is-super-admin');
|
||||
// IP Bannies.
|
||||
Route::get('/banned-ip', [BannedIpController::class, 'index'])->name('banned-ip');
|
||||
Route::post('/ajax/delete-banned-ip', [BannedIpController::class, 'destroy']);
|
||||
Route::post('/ajax/save-banned-ip', [BannedIpController::class, 'saveDatas']);
|
||||
// FAQ - Thèmes.
|
||||
Route::get('/faq-themes', [FaqThemesController::class, 'index'])->name('faq-themes');
|
||||
Route::post('/ajax/delete-faq-theme', [FaqThemesController::class, 'destroy']);
|
||||
Route::post('/ajax/save-faq-theme', [FaqThemesController::class, 'saveDatas']);
|
||||
// FAQ - Questions.
|
||||
Route::get('/faq-questions', [FaqQuestionsController::class, 'index'])->name('faq-questions');
|
||||
Route::post('/ajax/delete-faq-question', [FaqQuestionsController::class, 'destroy']);
|
||||
Route::post('/ajax/save-faq-question', [FaqQuestionsController::class, 'saveDatas']);
|
||||
// Codes uniques.
|
||||
Route::get('/codes', [CodesController::class, 'index'])->name('codes');
|
||||
Route::post('/codes', [CodesController::class, 'generate'])->name('generate-codes');
|
||||
Route::get('/codes/search', [CodesController::class, 'search'])->name('codes.search');
|
||||
Route::post('/codes/export', [CodesController::class, 'export'])->name('export-codes');
|
||||
// Liste des gagnants.
|
||||
Route::get('/winners-list', [WinnersListController::class, 'index'])->name('winners-list');
|
||||
Route::get('/winners-list/arcadia/{id}', [WinnersListController::class, 'courrierArcadia'])
|
||||
->name('winners-arcadia');
|
||||
Route::post('/winners-list/arcadia/{id}/send', [WinnersListController::class, 'createCourrierArcadia'])
|
||||
->name('courrier-arcadia');
|
||||
// Produits porteurs.
|
||||
Route::resource('products', ProductsController::class)
|
||||
->withoutMiddleware('is-super-admin');
|
||||
Route::resource('ranges', RangeController::class)
|
||||
->withoutMiddleware('is-super-admin');
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -14,8 +14,18 @@ use App\Http\Controllers\ViewContentController;
|
|||
use App\Http\Controllers\WinningProofController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::group(['middleware' => ['game-date']], function () {
|
||||
// Front.
|
||||
Route::middleware('game-date')->group(function () {
|
||||
// Routes nécessitant d'être connecté.
|
||||
Route::middleware('auth:frontend')->group(function () {
|
||||
Route::post('/logout', [LoginController::class, 'logout'])->name('logout');
|
||||
Route::get('/saisir-code', [EnterCodeController::class, 'index'])->name('saisir-code');
|
||||
Route::post('/saisir-code', [EnterCodeController::class, 'participate'])
|
||||
->name('participate');
|
||||
Route::put('/saisir-code', [EnterCodeController::class, 'formWinningProof'])
|
||||
->name('winning-proof');
|
||||
Route::put('/rejouer', [WinningProofController::class, 'sendWinningProof'])
|
||||
->name('send-winning-proof');
|
||||
});
|
||||
Route::get('/', [HomeController::class, 'home'])->name('home');
|
||||
Route::get('/reglement', [ViewContentController::class, 'reglement'])->name('reglement');
|
||||
Route::get('/charte', [ViewContentController::class, 'charte'])->name('charte');
|
||||
|
|
@ -24,29 +34,18 @@ Route::group(['middleware' => ['game-date']], function () {
|
|||
Route::get('/comment-jouer', [HowToPlayController::class, 'index'])->name('comment-jouer');
|
||||
Route::get('/les-gains', [GainsController::class, 'index'])->name('les-gains');
|
||||
Route::get('/produits-porteurs', [ProduitsController::class, 'index'])->name('produits-porteurs');
|
||||
|
||||
// Authentification.
|
||||
Route::get('/inscription', [RegisterController::class, 'index'])->name('inscription');
|
||||
Route::post('/inscription', [RegisterController::class, 'register'])->name('register');
|
||||
Route::get('/confirmation-email/{verifyToken}', [LoginController::class, 'confirmEmail'])->name('confirm-email');
|
||||
Route::get('/mot-de-passe-oublie', [LoginController::class, 'forgotPassword'])->name('forgot-password');
|
||||
Route::get('/mot-de-passe-oublie/reset/{token}', [LoginController::class, 'forgotPasswordReset'])
|
||||
->name('forgot-password-reset');
|
||||
Route::put('/mail-mot-de-passe', [LoginController::class, 'mailPassword'])->name('mail-password');
|
||||
Route::put('/change-mot-de-passe', [LoginController::class, 'changePassword'])->name('change-password');
|
||||
|
||||
// Front nécessitant d'être connecté.
|
||||
Route::get('/saisir-code', [EnterCodeController::class, 'index'])->name('saisir-code')->middleware('auth');
|
||||
Route::post('/saisir-code', [EnterCodeController::class, 'participate'])
|
||||
->name('participate')->middleware('auth');
|
||||
Route::put('/saisir-code', [EnterCodeController::class, 'formWinningProof'])
|
||||
->name('winning-proof')->middleware('auth');
|
||||
Route::put('/rejouer', [WinningProofController::class, 'sendWinningProof'])
|
||||
->name('send-winning-proof')->middleware('auth');
|
||||
|
||||
// Authentification.
|
||||
Route::post('/logout', [LoginController::class, 'logout'])->name('logout')->middleware('auth');
|
||||
Route::get('/inscription', [RegisterController::class, 'index'])->name('inscription');
|
||||
Route::post('/inscription', [RegisterController::class, 'register'])->name('register');
|
||||
});
|
||||
|
||||
// Login sans middleware pour la connexion admin, teaser et end pour ne pas redirigé en boucle.
|
||||
Route::get('/login', [LoginController::class, 'index'])->name('login');
|
||||
Route::post('/login', [LoginController::class, 'authenticate'])->name('authenticate');
|
||||
Route::get('/teaser', [TeaserController::class, 'index'])->name('teaser');
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue