SYNC 11 Start Re7 Teaser Page ok

This commit is contained in:
Jérémy Munsch 2023-12-01 11:45:12 +01:00
parent da31943f11
commit f1b90801da
No known key found for this signature in database
GPG key ID: 18361AF3BFEC0FEC
17 changed files with 274 additions and 243 deletions

View file

@ -5,7 +5,7 @@
``` Bash
cp .env.example .env
php artisan key:generate /!\ bien sauvegarder la key
php artisan migrate:fresh --step --seed
php artisan migrate:fresh --step
# Seulement pour developper un theme par exemple
php artisan db:seed --class DevelopmentSeeder
php artisan uwil:user:create

View file

@ -1,33 +1,27 @@
<?php
namespace App\Http\Controllers\Fo;
namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use App\Models\Settings;
use App\Models\Reduction;
use Illuminate\Contracts\View\View;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
class Re7Controller extends Controller
{
/**
* index
* Re7Controller
*
* @return \Illuminate\View\View
* @return void
*/
public function index()
public function __construct()
{
return view('re7');
}
/**
* teaser
*
* @return \Illuminate\View\View
*/
public function teaser()
{
$settings = app(Settings::class)
->select('start_date', 'end_date', 'activated_teaser', 'teaser_end_activity')->first();
return view('theme::teaser', compact('settings'));
$this->middleware(function (Request $request, \Closure $next) {
$this->authorize('fo.showRe7');
return $next($request);
});
}
/**

View file

@ -64,7 +64,6 @@ class Kernel extends HttpKernel
'game-date' => \App\Http\Middleware\GameCheckDate::class,
'is-admin' => \App\Http\Middleware\IsAdmin::class,
'is-super-admin' => \App\Http\Middleware\IsSuperAdmin::class,
're7' => \App\Http\Middleware\Re7Middleware::class,
'signed' => \App\Http\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,

View file

@ -1,24 +0,0 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class Re7Middleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if (config('app.env') === 'production') {
return redirect()->route('fo.homepage');
}
return $next($request);
}
}

View file

@ -31,6 +31,13 @@ class AuthServiceProvider extends ServiceProvider
return $user->role === RoleEnum::conceptor;
});
Gate::define(
'fo.showRe7',
// phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
fn (User $user) => !app()->environment(['production']) and
$user->role->value() <= RoleEnum::marketing->value()
);
Gate::define(
'fo.showProducts',
// phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass

View file

@ -21,6 +21,7 @@ class ViewServiceProvider extends ServiceProvider
*/
public function boot()
{
if (!app()->runningInConsole()) {
// * View shares
// ! Add view file pathes (also needed for console xml job).
View::addNamespace('back', resource_path('views'));
@ -35,7 +36,6 @@ class ViewServiceProvider extends ServiceProvider
View::share('cpsr_version', $appInfos->version);
}
if (!app()->runningInConsole()) {
// * FORCE BOOTSTRAP PAGINATOR (or custom if in front)
// Early boot, request wont be filled as expected.
if (collect(explode('/', \request()->getPathInfo()))->get(1) === 'bo') {

View file

@ -22,6 +22,7 @@ class CreateCustomersTable extends Migration
$table->string('email_verify_token')->nullable()
->comment('Token pour vérification de mail');
$table->timestamp('email_verified_at')->nullable()->comment('Le mail de ce client est vérifié ?');
$table->timestamp('last_connection')->nullable()->comment('Date de dernière connexion');
$table->rememberToken();
$table->timestamps();

View file

@ -1,9 +1,7 @@
<?php
use Database\Seeders\Mandatory\StaticPageSeeder;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
@ -30,9 +28,6 @@ return new class extends Migration
$table->timestamps();
});
Artisan::call('db:seed', [
'class' => StaticPageSeeder::class
]);
}
/**

View file

@ -0,0 +1,30 @@
<?php
use Database\Seeders\MandatorySeeder;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Artisan;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
Artisan::call('db:seed', [
'class' => MandatorySeeder::class
]);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void
{
// Do nothing.
}
};

View file

@ -2,8 +2,6 @@
namespace Database\Seeders;
use Database\Seeders\Mandatory\SettingsSeeder;
use Database\Seeders\Mandatory\StaticPageSeeder;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
@ -17,8 +15,9 @@ class DatabaseSeeder extends Seeder
{
// * Mandatory Seeders
$this->call([
SettingsSeeder::class,
StaticPageSeeder::class
MandatorySeeder::class,
DevelopmentSeeder::class,
UserSeeder::class
]);
}
}

View file

@ -0,0 +1,24 @@
<?php
namespace Database\Seeders;
use Database\Seeders\Mandatory\SettingsSeeder;
use Database\Seeders\Mandatory\StaticPageSeeder;
use Illuminate\Database\Seeder;
class MandatorySeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
// * Mandatory Seeders
$this->call([
SettingsSeeder::class,
StaticPageSeeder::class
]);
}
}

View file

@ -38,6 +38,7 @@
@import "bootstrap/scss/card";
@import "bootstrap/scss/breadcrumb";
@import "bootstrap/scss/badge";
@import "bootstrap/scss/offcanvas";
// 6. Optionally include utilities API last to generate classes based on the Sass map in `_utilities.scss`
@import "bootstrap/scss/utilities/api";

View file

@ -5,15 +5,22 @@
{{ config('app.name', 'Laravel') }}
</a>
@auth('backend')
<button class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" type="button"
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
<button class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbar-supported-content" type="button"
aria-controls="navbar-supported-content" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
<span class="navbar-toggler-icon"></span>
</button>
@endauth
<div class="navbar-collapse collapse" id="navbarSupportedContent">
<div class="navbar-collapse collapse" id="navbar-supported-content">
<!-- Left Side Of Navbar -->
@auth('backend')
@include('back::layouts.nav-list')
@endauth
@can('fo.showRe7')
<button class="btn btn-warning mx-auto" data-bs-toggle="offcanvas" data-bs-target="#offcanvas-re7"
aria-controls="offcanvas-re7">{{ __('Recettage') }}</button>
@endcan
<!-- Right Side Of Navbar -->
<ul class="navbar-nav ms-auto">
@ -81,3 +88,7 @@
</div>
</div>
</nav>
@can('fo.showRe7')
@include('back::layouts.re7-offcanvas')
@endcan

View file

@ -1,5 +1,4 @@
@auth('backend')
<ul class="navbar-nav me-auto">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link @if (request()->routeIs('bo.dashboard')) active @endif" data-bs-toggle="tooltip" href="{{ route('bo.dashboard') }}"
title="{{ __('Revenir à l\'accueil') }}">
@ -12,11 +11,11 @@
<a class="nav-link @if (request()->routeIs('bo.instant-win') ||
request()->routeIs('bo.winners-list') ||
request()->routeIs('bo.banned_ips.*') ||
request()->routeIs('bo.codes')) active @endif dropdown-toggle" id="navbarDropdownGame" data-bs-toggle="dropdown"
request()->routeIs('bo.codes')) active @endif dropdown-toggle" id="navbar-dropdown-game" data-bs-toggle="dropdown"
href="#" role="button" aria-haspopup="true" aria-expanded="false">
{{ __('Gestion du jeu') }} <span class="caret"></span>
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdownGame">
<ul class="dropdown-menu" aria-labelledby="navbar-dropdown-game">
<li>
<a class="dropdown-item @if (request()->routeIs('bo.instant-win')) active @endif"
href="{{ route('bo.instant-win') }}">{{ __('Instant gagnants') }}</a>
@ -137,5 +136,4 @@
</a>
</li>
@endcan
</ul>
@endauth
</ul>

View file

@ -0,0 +1,28 @@
<div class="offcanvas offcanvas-start" id="offcanvas-re7" data-bs-scroll="true" aria-labelledby="offcanvas-re7-label" tabindex="-1">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvas-re7-label">{{ __('Menu de recettage') }}</h5>
<button class="btn-close" data-bs-dismiss="offcanvas" type="button" aria-label="{{ __('Fermer le menu de recettage') }}"></button>
</div>
<div class="offcanvas-body">
<strong class="d-block mb-5">{{ __('Liste de liens pour visualiser les pages du jeu.') }}</strong>
<div class="list-group">
<a class="list-group-item list-group-item-action" href="{{ route('re7.teaser') }}"
title="{{ __('Afficher la page de teaser dans un nouvel onglet') }}" target="_blank">{{ __('Teaser') }}</a>
<a class="list-group-item list-group-item-action" href="{{ route('re7.br') }}"
title="{{ __('Afficher un bon de réduction dans un nouvel onglet') }}" target="_blank">{{ __('Bon de réduction') }}</a>
<div class="list-group-item">
<div class="list-group">
@foreach (\App\Models\Prize::getCached() as $prize)
<a class="list-group-item list-group-item-action" href="{{ route('re7.prize', ['prize' => $prize]) }}"
title="{{ __('Afficher la page de gain du lot :name dans un nouvel onglet', [
'name' => __('Lot :name', ['name' => $prize->label_one]),
]) }}"
target="_blank">
{{ __('Lot :name', ['name' => $prize->label_one]) }}
</a>
@endforeach
</div>
</div>
</div>
</div>
</div>

View file

@ -1,28 +0,0 @@
@extends('back::layout')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Dashboard') }} - RE7</div>
<div class="card-body">
<a href="/re7/teaser" target="_blank">Teaser</a>
<br>
<a href="/re7/mail-gain" target="_blank">Mail gain lot</a>
<br>
<a href="/re7/mail-reduction" target="_blank">Mail gain BR</a>
<br>
<a href="/re7/br" target="_blank">Page gain BR</a>
<br>
<a href="/re7/gain1" target="_blank">Page gain Lot 1</a>
<br>
<a href="/re7/gain2" target="_blank">Page gain Lot 2</a>
<br>
</div>
</div>
</div>
</div>
</div>
@endsection

View file

@ -1,16 +1,12 @@
<?php
use App\Http\Controllers\Fo\Re7Controller;
use App\Http\Controllers\Bo\Re7Controller;
use Illuminate\Support\Facades\Route;
Route::prefix('re7')->name('re7.')->middleware(['re7'])->group(function () {
Route::get('/', [Re7Controller::class, 'index'])->name('index');
Route::get('/teaser', [Re7Controller::class, 'teaser'])->name('teaser');
Route::get('/mail-gain', [Re7Controller::class, 'prizeMail'])->name('mail-gain');
Route::get('/mail-reduction', [Re7Controller::class, 'reductionMail'])->name('mail-reduction');
Route::get('/br', [Re7Controller::class, 'br'])->name('br');
// phpcs:ignore
// TODO : Rendre dynamique la partie gain par rapport au BO.
Route::get('/gain1', [Re7Controller::class, 'gain1'])->name('gain1');
Route::get('/gain2', [Re7Controller::class, 'gain2'])->name('gain2');
Route::prefix('re7')->name('re7.')->middleware(['auth:backend'])->group(function () {
Route::view('teaser', 'theme::pages.teaser')->name('teaser');
// Route::get('mail-gain', [Re7Controller::class, 'prizeMail'])->name('mail-gain');
// Route::get('mail-reduction', [Re7Controller::class, 'reductionMail'])->name('mail-reduction');
Route::get('br', [Re7Controller::class, 'br'])->name('br');
Route::get('gain/{prize}', [Re7Controller::class, 'prize'])->name('prize');
});