refactor: pint pass

This commit is contained in:
Jeremy Munsch 2026-09-25 16:25:31 +02:00
parent 792797fb88
commit 0ac2c42105
No known key found for this signature in database
GPG key ID: 7A502D8B9839C78C
519 changed files with 5475 additions and 9308 deletions

View file

@ -6,6 +6,8 @@ use App\Models\Customer;
use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Contracts\Auth\UserProvider;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Str;
@ -28,11 +30,8 @@ class CrmUserProvider extends EloquentUserProvider implements UserProvider
/**
* Retrieve a user by the given credentials.
*
* @param array $credentials
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveByCredentials(array $credentials): \Illuminate\Contracts\Auth\Authenticatable|null
public function retrieveByCredentials(array $credentials): ?Authenticatable
{
// * Let laravel find a model
$model = parent::retrieveByCredentials($credentials) ?? self::retrieveTrashed($credentials);
@ -42,10 +41,10 @@ class CrmUserProvider extends EloquentUserProvider implements UserProvider
$crm = app('crmAPI');
// Si pas de compte local.
if (!$model) {
if (! $model) {
$crmCustomer = $crm->getCustomer($credentials['email']);
if (!$crmCustomer) {
if (! $crmCustomer) {
// * Customer is not found on CRM.
return null;
}
@ -62,19 +61,18 @@ class CrmUserProvider extends EloquentUserProvider implements UserProvider
Log::error('Unhandled response ' . $e->getApiError()->label());
} catch (CrmException | \Exception $e) {
report($e);
// Une erreur critique est survenue avec la CRM.
return null;
} //end try
} // end try
Log::error(__CLASS__ . '::retrieveByCredentials reached end of possibilities.');
return null;
}
/**
* Validate a user against the given credentials.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $model
* @param array $credentials
* @return boolean
* @throws \RuntimeException If model provided is not a Customer or connection to server fails.
* @throws \LDC\LDCCRM\Exceptions\CrmException On CRM call error.
* @throws \Exception On CRM call error.
@ -92,8 +90,7 @@ class CrmUserProvider extends EloquentUserProvider implements UserProvider
// * If has trait soft delete and customer trashed, then restore customer.
if (
\in_array(\Illuminate\Database\Eloquent\SoftDeletes::class, \class_uses_recursive($model)) and
// @phpstan-ignore-next-line
\in_array(SoftDeletes::class, \class_uses_recursive($model)) and // @phpstan-ignore-next-line
$model->trashed()
) {
// @phpstan-ignore-next-line
@ -104,8 +101,9 @@ class CrmUserProvider extends EloquentUserProvider implements UserProvider
return $crm->login($credentials['email'], $credentials['password']);
} catch (ApiErrorException $e) {
// @phpstan-ignore-next-line
if (!$model->hashcode or !CrmCustomer::find($model->hashcode)) {
if (! $model->hashcode or ! CrmCustomer::find($model->hashcode)) {
$model->forceDelete();
return false;
}
if ($e->getApiError()->equals(ApiError::authFailed)) {
@ -114,6 +112,7 @@ class CrmUserProvider extends EloquentUserProvider implements UserProvider
// ! Assert Authenticable model must be valided (MustValidate trait).
if ($e->getApiError()->equals(ApiError::customerNotActivated)) {
Session::flash('warning', \trans('Vous devez activer votre compte'));
return true;
}
} catch (CrmException | \Exception $e) {
@ -121,8 +120,9 @@ class CrmUserProvider extends EloquentUserProvider implements UserProvider
if (config('app.debug')) {
throw $e;
}
return false;
} //end try
} // end try
Log::error(__CLASS__ . '::validateCredentials reached end of possibilities.');
@ -132,15 +132,13 @@ class CrmUserProvider extends EloquentUserProvider implements UserProvider
/**
* Create a local customer
*
* @param \LDC\LDCCRM\Models\Customer $crmCustomer
* @return \Illuminate\Database\Eloquent\Model
* @throws \Throwable If saving to DB failed.
*/
private function createLocalCustomer(\LDC\LDCCRM\Models\Customer $crmCustomer): \Illuminate\Database\Eloquent\Model
private function createLocalCustomer(CrmCustomer $crmCustomer): Model
{
/** @var \Illuminate\Database\Eloquent\Model $model */
$model = $this->usedModel::firstOrNew([
'email' => $crmCustomer->email
'email' => $crmCustomer->email,
]);
// @phpstan-ignore-next-line
$model->hashcode = $crmCustomer->hashcode;
@ -154,11 +152,9 @@ class CrmUserProvider extends EloquentUserProvider implements UserProvider
/**
* Retrieve a trashed customer by the given credentials.
*
* @param array $credentials
* @return \Illuminate\Contracts\Auth\Authenticatable|null
* @throws \ErrorException If cannot connect to LDAP.
*/
private function retrieveTrashed(array $credentials): ?\Illuminate\Contracts\Auth\Authenticatable
private function retrieveTrashed(array $credentials): ?Authenticatable
{
// * Make changes
if (empty($credentials)) {
@ -171,7 +167,7 @@ class CrmUserProvider extends EloquentUserProvider implements UserProvider
$query = $this->createModel()->newQuery();
foreach ($credentials as $key => $value) {
if (!Str::contains($key, 'password')) {
if (! Str::contains($key, 'password')) {
$query->where($key, $value);
}
}

View file

@ -3,10 +3,10 @@
namespace App\Auth;
use App\Models\Customer;
use Illuminate\Support\Str;
use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Contracts\Auth\UserProvider;
use Illuminate\Support\Str;
/**
* Overload EloquentUserProvider to handle
@ -17,11 +17,9 @@ class ReactivateCustomerProvider extends EloquentUserProvider implements UserPro
/**
* Retrieve a customer by the given credentials.
*
* @param array $credentials
* @return \Illuminate\Contracts\Auth\Authenticatable|null
* @throws \ErrorException If cannot connect to LDAP.
*/
public function retrieveByCredentials(array $credentials): ?\Illuminate\Contracts\Auth\Authenticatable
public function retrieveByCredentials(array $credentials): ?Authenticatable
{
// * Make changes
if (empty($credentials)) {
@ -34,7 +32,7 @@ class ReactivateCustomerProvider extends EloquentUserProvider implements UserPro
$query = $this->createModel()->newQuery();
foreach ($credentials as $key => $value) {
if (!Str::contains($key, 'password')) {
if (! Str::contains($key, 'password')) {
$query->where($key, $value);
}
}
@ -46,9 +44,6 @@ class ReactivateCustomerProvider extends EloquentUserProvider implements UserPro
/**
* Validate a customer against the given credentials.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $customer
* @param array $credentials
* @return boolean
* @throws \ErrorException If model provided is not a Customer or connection to server fails.
*/
public function validateCredentials(Authenticatable $customer, array $credentials): bool

View file

@ -8,32 +8,20 @@ use Illuminate\Database\Eloquent\Model;
/**
* Custom cast Html Color
*/
//phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceAfterLastUsed
//phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed
// phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceAfterLastUsed
// phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed
class HtmlColor implements CastsAttributes
{
/**
* Cast the given value.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return string
*/
public function get(Model $model, string $key, mixed $value, array $attributes): string
{
return "#" . $this->zeropad(dechex($value), 6);
return '#' . $this->zeropad(dechex($value), 6);
}
/**
* Prepare the given value for storage.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return integer
*/
public function set(Model $model, string $key, mixed $value, array $attributes): int
{
@ -42,13 +30,9 @@ class HtmlColor implements CastsAttributes
/**
* Pad with zeros a numeric string
*
* @param string $num
* @param integer $lim
* @return string
*/
protected function zeropad(string $num, int $lim): string
{
return (strlen($num) >= $lim) ? $num : $this->zeropad("0" . $num, $lim);
return (strlen($num) >= $lim) ? $num : $this->zeropad('0' . $num, $lim);
}
}

View file

@ -11,18 +11,15 @@ class NiceDate implements CastsAttributes
/**
* Cast the given value.
*
* @param \Illuminate\Database\Eloquent\Model|null $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return string
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceAfterLastUsed
*
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed
*/
public function get(Model|null $model, string $key, mixed $value, array $attributes): string
public function get(?Model $model, string $key, mixed $value, array $attributes): string
{
// phpcs:enable
$value = Carbon::parse($value);
return $value->isToday() ?
trans('Aujourd\'hui à :time', ['time' => $value->format('H:i')]) : $value->format('Y/m/d à H:i');
}
@ -30,12 +27,8 @@ class NiceDate implements CastsAttributes
/**
* Prepare the given value for storage.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return string
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceAfterLastUsed
*
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed
*/
public function set(Model $model, string $key, mixed $value, array $attributes): string

View file

@ -23,8 +23,6 @@ class FetchDigitalRecruiterOffersCommand extends Command
/**
* Execute the console command.
*
* @return void
*/
public function handle(): void
{

View file

@ -23,8 +23,6 @@ class FetchMesBrCommand extends Command
/**
* Execute the console command.
*
* @return void
*/
public function handle(): void
{

View file

@ -7,8 +7,8 @@ use App\Models\User;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;
class UserCreate extends Command
{
@ -56,8 +56,6 @@ class UserCreate extends Command
/**
* Execute the console command.
*
* @return void
*/
public function handle(): void
{
@ -74,11 +72,11 @@ class UserCreate extends Command
$this->addRole();
$user = new User([
'first_name' => $this->first_name,
'last_name' => $this->last_name,
'email' => $this->email,
'role' => $this->role,
'published' => true,
'first_name' => $this->first_name,
'last_name' => $this->last_name,
'email' => $this->email,
'role' => $this->role,
'published' => true,
'published_at' => Carbon::now(),
]);
$user->saveOrFail();
@ -88,8 +86,6 @@ class UserCreate extends Command
/**
* Add a first name to the user.
*
* @return void
*/
private function addFirstName(): void
{
@ -97,7 +93,7 @@ class UserCreate extends Command
try {
$tmp = $this->ask('Type the wanted user first name', 'Admin');
$validator = Validator::make(['first_name' => $tmp], [
'first_name' => 'required|min:3|max:255'
'first_name' => 'required|min:3|max:255',
]);
$validator->validate();
$this->first_name = $tmp;
@ -106,15 +102,14 @@ class UserCreate extends Command
'Please provide a valid first name %s',
\implode(',', collect($e->errors())->flatten()->all())
));
continue;
} //end try
}; //end while
} // end try
} // end while
}
/**
* Add a last name to the user.
*
* @return void
*/
private function addLastName(): void
{
@ -122,7 +117,7 @@ class UserCreate extends Command
try {
$tmp = $this->ask('Type the wanted user last name', 'Saïtama');
$validator = Validator::make(['last_name' => $tmp], [
'last_name' => 'required|min:3|max:255'
'last_name' => 'required|min:3|max:255',
]);
$validator->validate();
$this->last_name = $tmp;
@ -131,15 +126,14 @@ class UserCreate extends Command
'Please provide a valid last_name %s',
\implode(',', collect($e->errors())->flatten()->all())
));
continue;
} //end try
}; //end while
} // end try
} // end while
}
/**
* Add an email to the user.
*
* @return void
*/
private function addEmail(): void
{
@ -147,7 +141,7 @@ class UserCreate extends Command
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'
'email' => 'required|unique:users,email|email:rfc,dns',
]);
$validator->validate();
$this->email = $tmp;
@ -156,15 +150,14 @@ class UserCreate extends Command
'Please provide a valid email %s',
\implode(',', collect($e->errors())->flatten()->all())
));
continue;
} //end try
}; //end while
} // end try
} // end while
}
/**
* Add a role to the user.
*
* @return void
*/
private function addRole(): void
{
@ -175,7 +168,7 @@ class UserCreate extends Command
[
Str::ucFirst(RoleEnum::conceptor->label()),
Str::ucFirst(RoleEnum::admin->label()),
Str::ucFirst(RoleEnum::visitor->label())
Str::ucFirst(RoleEnum::visitor->label()),
],
Str::ucFirst(RoleEnum::visitor->label()),
);
@ -189,7 +182,7 @@ class UserCreate extends Command
$tmp = RoleEnum::visitor;
}
$validator = Validator::make(['role' => $tmp], [
'role' => 'required'
'role' => 'required',
]);
$validator->validate();
$this->role = $tmp;
@ -198,8 +191,9 @@ class UserCreate extends Command
'Please choose from the selection %s',
\implode(',', collect($e->errors())->flatten()->all())
));
continue;
} //end try
}; //end while
} // end try
} // end while
}
}

View file

@ -12,9 +12,6 @@ class Kernel extends ConsoleKernel
{
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule): void
{
@ -25,8 +22,6 @@ class Kernel extends ConsoleKernel
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands(): void
{

View file

@ -37,8 +37,6 @@ enum ActivityLogsEventEnum: int
/**
* Get Class
*
* @return string
*/
public function bootstrapClass(): string
{

View file

@ -12,7 +12,7 @@ enum BlockPositionEnum: string
case Centre = 'centre';
case Droite = 'droite';
const LABELS = [
public const LABELS = [
'Gauche' => 'Gauche',
'Centre' => 'Centre',
'Droite' => 'Droite',

View file

@ -4,6 +4,7 @@ namespace App\Enums;
use App\Enums\Block\BlockContentTypeEnum;
use App\Enums\Block\BlockPositionEnum;
use App\Models\News;
use App\Traits\Enums\BaseEnum;
enum BlockTypeEnum: int
@ -14,7 +15,6 @@ enum BlockTypeEnum: int
case picto = 2;
case bienfait = 3;
/**
* Optionnal labels definition.
*
@ -67,18 +67,18 @@ enum BlockTypeEnum: int
'article_id' => [
'label' => 'Article associé',
'inputType' => InputType::searchBelongsTo->value,
'source' => \App\Models\News::class,
'source' => News::class,
'required' => true,
'value' => null,
'validate' => ['integer', 'exists:news,id'],
'showWhen' => ['block_type' => [BlockContentTypeEnum::Actu->value, BlockContentTypeEnum::Both->value]],
],
"visibility" => [
"label" => "Afficher le bloc",
"inputType" => InputType::boolean->value,
"value" => false,
"validate" => "required|boolean",
'required' => true
'visibility' => [
'label' => 'Afficher le bloc',
'inputType' => InputType::boolean->value,
'value' => false,
'validate' => 'required|boolean',
'required' => true,
],
],
],
@ -100,27 +100,26 @@ enum BlockTypeEnum: int
'required' => true,
],
'description' => [
'label' => 'Section 2 : Description',
'label' => 'Section 2 : Description',
'inputType' => InputType::text->value,
'value' => '',
'validate' => 'required|string|min:15',
'required' => true
'value' => '',
'validate' => 'required|string|min:15',
'required' => true,
],
'picture' => [
'label' => 'Picto ',
'inputType' => InputType::image->value,
'label' => 'Picto ',
'inputType' => InputType::image->value,
'dimensions' => [
'width' => 70,
'height' => 60
'width' => 70,
'height' => 60,
],
'alt' => '',
'title' => '',
'value' => '',
'alt' => '',
'title' => '',
'value' => '',
'validate' => 'required',
'required' => true
'required' => true,
],
],
]
};

View file

@ -29,8 +29,6 @@ enum ContactFormType: int
/**
* Get the description.
*
* @return string
*/
public function description(): string
{
@ -39,27 +37,25 @@ enum ContactFormType: int
self::complain => trans('enums.contact-form-type.complain.description'),
self::club => trans('enums.contact-form-type.club.description'),
self::games => trans('enums.contact-form-type.games.description'),
default => '',
default => '',
};
}
/**
* Get the picto src/alt.
*
* @return array
*/
public function picto(): array
{
return match ($this) {
self::complain => [
'src' => 'resources/assets/images/contact/exclamation.svg',
'alt' => 'enums.contact-form-type.misc.picto-exclamation-alt'
'alt' => 'enums.contact-form-type.misc.picto-exclamation-alt',
],
self::club,
self::games,
self::none => [
'src' => 'resources/assets/images/contact/question-mark.svg',
'alt' => 'enums.contact-form-type.misc.picto-question-mark-alt'
'alt' => 'enums.contact-form-type.misc.picto-question-mark-alt',
],
default => [
'src' => '',
@ -70,8 +66,6 @@ enum ContactFormType: int
/**
* Get all contact types except 'none'.
*
* @return array
*/
public static function getContactTypes(): array
{
@ -92,8 +86,6 @@ enum ContactFormType: int
/**
* Get all 'locales' contact types.
*
* @return array
*/
public static function getLocalesContactType(): array
{
@ -104,8 +96,6 @@ enum ContactFormType: int
/**
* Check if the current subject has a file input.
*
* @return boolean
*/
public function hasFileInput(): bool
{
@ -121,8 +111,6 @@ enum ContactFormType: int
/**
* Get the CRM subject ID for the current enum case.
*
* @return ?string
*/
public function crmId(): ?string
{
@ -138,9 +126,10 @@ enum ContactFormType: int
{
$subjects = self::getCrmSubjects();
$subjectIds = collect(self::cases())
->mapWithKeys(fn($case) => [$case->name => $subjects[$case->name] ?? null])
->mapWithKeys(fn ($case) => [$case->name => $subjects[$case->name] ?? null])
->all();
return array_filter($subjectIds, fn($v) => !is_null($v));
return array_filter($subjectIds, fn ($v) => ! is_null($v));
}
/**

View file

@ -11,6 +11,7 @@ enum Civility: int
case m = 1;
case mme = 2;
/**
* Optionnal labels definition.
*
@ -23,21 +24,17 @@ enum Civility: int
/**
* Get picture
*
* @return string
*/
public function picture(): string
{
return match ($this) {
self::m => Vite::asset("resources/assets/images/club/game-points/chicken.png"),
self::mme => Vite::asset("resources/assets/images/club/game-points/hen.png"),
self::m => Vite::asset('resources/assets/images/club/game-points/chicken.png'),
self::mme => Vite::asset('resources/assets/images/club/game-points/hen.png'),
};
}
/**
* Get autocomplete
*
* @return string
*/
public function autoComplete(): string
{

View file

@ -13,6 +13,7 @@ enum LivingStatus: int
case parent = 3;
case parentAlone = 4;
case elder = 5;
/**
* Optionnal labels definition.
*

View file

@ -202,6 +202,6 @@ enum DepartaimantCurrent: string implements IDepartaimant
self::martinique->name => 'Martinique',
self::guyane->name => 'Guyane',
self::lareunion->name => 'La réunion',
self::mayotte->name => 'Mayotte'
self::mayotte->name => 'Mayotte',
];
}

View file

@ -198,6 +198,6 @@ enum DepartaimantVintage: string implements IDepartaimant
self::essonne->name => 'Essonne',
self::guadeloupeMartinique->name => 'Guadeloupe et Martinique',
self::guyane->name => 'Guyane',
self::lareunion->name => 'La réunion'
self::lareunion->name => 'La réunion',
];
}

View file

@ -6,8 +6,6 @@ interface IDepartaimant
{
/**
* Get enum value.
*
* @return string|integer
*/
public function value(): string|int;
public function value(): string | int;
}

View file

@ -216,6 +216,6 @@ enum Department: string
self::martinique->name => 'Martinique',
self::guyane->name => 'Guyane',
self::lareunion->name => 'La réunion',
self::mayotte->name => 'Mayotte'
self::mayotte->name => 'Mayotte',
];
}

View file

@ -41,8 +41,6 @@ enum GamePointLevel: int
/**
* Get Level
*
* @return integer
*/
public function level(): int
{
@ -51,8 +49,6 @@ enum GamePointLevel: int
/**
* Get picture
*
* @return string
*/
public function picture(): string
{
@ -62,7 +58,7 @@ enum GamePointLevel: int
/**
* Get enum Levels
*
* @return array<integer>
* @return array<int>
*/
public static function toLevels(): array
{
@ -71,9 +67,6 @@ enum GamePointLevel: int
/**
* Get Level from point value
*
* @param integer $points
* @return \App\Enums\Games\GamePointLevel
*/
public static function fromPoints(int $points): self
{
@ -83,19 +76,18 @@ enum GamePointLevel: int
return $level;
}
}
// * This should not happen while egg level is 0
return self::egg;
}
/**
* Next Level
*
* @param integer $points
* @return \App\Enums\Games\GamePointLevel|null
*/
public static function fromPointsNextLevel(int $points): self|null
public static function fromPointsNextLevel(int $points): ?self
{
$currentLevel = self::fromPoints($points);
return collect(self::all())
->filter(fn ($level) => $level->level() > $currentLevel->level())
->first();
@ -103,9 +95,6 @@ enum GamePointLevel: int
/**
* Percent from points
*
* @param integer $points
* @return float
*/
public static function percentFromPoints(int $points): float
{
@ -113,15 +102,14 @@ enum GamePointLevel: int
$level = self::fromPoints($points);
$nextLevel = self::fromPointsNextLevel($points);
if (!$nextLevel) {
if (! $nextLevel) {
return 100;
}
// * Bars between 2 levels
$ratio = 4;
$percentBetween2Levels = 100 / ($levels->count() - 1);
$adjustment = $percentBetween2Levels *
($nextLevel->level() - $points) / ($nextLevel->level() - $level->level());
$percentBetween2Levels = 100 / ($levels->count() - 1);
$adjustment = $percentBetween2Levels * ($nextLevel->level() - $points) / ($nextLevel->level() - $level->level());
return round((($level->value() * 100) / $levels->last()) + $percentBetween2Levels - $adjustment);
}

View file

@ -18,6 +18,6 @@ enum HistoricalMilestonePosition: int
*/
private const LABELS = [
self::topLeft->name => 'Haut gauche',
self::topRight->name => "Haut droit",
self::topRight->name => 'Haut droit',
];
}

View file

@ -8,11 +8,11 @@ enum MailToTest: string
{
use BaseEnum;
case ValidateAccount = 'validate_account';
case ValidateAccount = 'validate_account';
case ForgottenPassword = 'forgotten_password';
case UpdatePassword = 'update_password';
case OrderRecap = 'order_recap';
case DestroyCustomer = 'destroy_customer';
case UpdatePassword = 'update_password';
case OrderRecap = 'order_recap';
case DestroyCustomer = 'destroy_customer';
case DestroyedCustomer = 'destroyed_customer';
/**

View file

@ -23,8 +23,6 @@ enum NewsClubTypeEnum: int
/**
* Get the icon.
*
* @return string
*/
public function icon(): string
{
@ -36,8 +34,6 @@ enum NewsClubTypeEnum: int
/**
* Get the color.
*
* @return string
*/
public function color(): string
{

View file

@ -52,12 +52,10 @@ enum MenuNodeType: int
/**
* Get Class
*
* @return string|null
*/
public function routeName(): ?string
{
return !empty(self::ROUTENAMES[$this->name]) ?
return ! empty(self::ROUTENAMES[$this->name]) ?
self::ROUTENAMES[$this->name] : null;
}
}

View file

@ -31,8 +31,6 @@ enum SellItemsType: int
/**
* Get color.
*
* @return string
*/
public function color(): string
{

View file

@ -8,37 +8,37 @@ enum StaticPageType: int
{
use BaseEnum;
case contact = 1;
case legals = 2;
case confidentiality = 3;
case recruitment = 4;
case story = 5;
case saga = 6;
case recipes = 7;
case recipe = 8;
case products = 9;
case product = 10;
case home = 11;
case selling = 12;
case accessibility = 13;
case news = 14;
case social = 15;
case breedingPoultry = 16;
case breedingJob = 17;
case breedingFood = 18;
case breedingHealth = 19;
case search = 20;
case sitemap = 21;
case rules = 22;
case exitOutside = 23;
case ouiCBon = 24;
case ourFarms = 25;
case tdf = 26;
case respectTheEarth = 27;
case contact = 1;
case legals = 2;
case confidentiality = 3;
case recruitment = 4;
case story = 5;
case saga = 6;
case recipes = 7;
case recipe = 8;
case products = 9;
case product = 10;
case home = 11;
case selling = 12;
case accessibility = 13;
case news = 14;
case social = 15;
case breedingPoultry = 16;
case breedingJob = 17;
case breedingFood = 18;
case breedingHealth = 19;
case search = 20;
case sitemap = 21;
case rules = 22;
case exitOutside = 23;
case ouiCBon = 24;
case ourFarms = 25;
case tdf = 26;
case respectTheEarth = 27;
case forLivingTogether = 28;
case poultryBrand = 29;
case raiseSustainably = 30;
case feedProperly =31;
case poultryBrand = 29;
case raiseSustainably = 30;
case feedProperly = 31;
/**
* Optionnal labels definition.
@ -46,43 +46,41 @@ enum StaticPageType: int
* @phpstan-ignore-next-line
*/
private const LABELS = [
self::contact->name => 'Contact',
self::legals->name => 'Mentions légales et CGU',
self::confidentiality->name => 'Confidentialité',
self::recruitment->name => 'Recrutement',
self::story->name => 'Qui sommes-nous ?',
self::saga->name => 'Saga publicitaire',
self::recipes->name => 'Recettes',
self::recipe->name => 'Recette',
self::products->name => 'Produits',
self::product->name => 'Produit',
self::home->name => 'Accueil',
self::selling->name => 'Conditions générales de vente',
self::accessibility->name => 'Accessibilité',
self::news->name => 'Actualités',
self::social->name => 'Réseaux sociaux',
self::breedingPoultry->name => 'L\'élevage des volailles',
self::breedingJob->name => 'Le métier d\'éleveur de volailles',
self::breedingFood->name => 'L\'alimentation des volailles',
self::breedingHealth->name => 'La santé des volailles',
self::search->name => 'Recherche',
self::sitemap->name => 'Plan du site',
self::rules->name => 'Règlement du jeu',
self::exitOutside->name => 'Sortir à l\'extérieur',
self::ouiCBon->name => 'Oui c\'est bon',
self::ourFarms->name => 'Nos élevages',
self::tdf->name => 'Tour de France',
self::respectTheEarth->name => 'Respecter la terre',
self::contact->name => 'Contact',
self::legals->name => 'Mentions légales et CGU',
self::confidentiality->name => 'Confidentialité',
self::recruitment->name => 'Recrutement',
self::story->name => 'Qui sommes-nous ?',
self::saga->name => 'Saga publicitaire',
self::recipes->name => 'Recettes',
self::recipe->name => 'Recette',
self::products->name => 'Produits',
self::product->name => 'Produit',
self::home->name => 'Accueil',
self::selling->name => 'Conditions générales de vente',
self::accessibility->name => 'Accessibilité',
self::news->name => 'Actualités',
self::social->name => 'Réseaux sociaux',
self::breedingPoultry->name => 'L\'élevage des volailles',
self::breedingJob->name => 'Le métier d\'éleveur de volailles',
self::breedingFood->name => 'L\'alimentation des volailles',
self::breedingHealth->name => 'La santé des volailles',
self::search->name => 'Recherche',
self::sitemap->name => 'Plan du site',
self::rules->name => 'Règlement du jeu',
self::exitOutside->name => 'Sortir à l\'extérieur',
self::ouiCBon->name => 'Oui c\'est bon',
self::ourFarms->name => 'Nos élevages',
self::tdf->name => 'Tour de France',
self::respectTheEarth->name => 'Respecter la terre',
self::forLivingTogether->name => 'Favoriser le mieux vivre ensemble',
self::poultryBrand->name => 'la marque de volaille 100% française',
self::raiseSustainably->name => 'Élever durablement',
self::feedProperly->name => 'Bien nourrir tous les français',
self::raiseSustainably->name => 'Élever durablement',
self::feedProperly->name => 'Bien nourrir tous les français',
];
/**
* Get all breeding pages.
*
* @return array
*/
public static function getBreedingPages(): array
{
@ -91,7 +89,7 @@ enum StaticPageType: int
self::breedingJob,
self::breedingFood,
self::breedingHealth,
self::ourFarms
self::ourFarms,
];
}
@ -103,11 +101,11 @@ enum StaticPageType: int
public static function getBreedingValues(): array
{
return collect(self::getBreedingPages())
->map(fn($page) => $page->value)
->map(fn ($page) => $page->value)
->toArray();
}
/**
/**
* Get all commitment pages type values.
*
* @return array<string>
@ -126,13 +124,13 @@ enum StaticPageType: int
public static function getCommitmmentsPagesValues(): array
{
return collect(self::getCommitmentsPages())
->map(fn(object $page) => $page->value)
->toArray();
->map(fn (object $page) => $page->value)
->toArray();
}
public function routeForCommitments(): string
{
return match($this) {
return match ($this) {
self::poultryBrand => 'fo.commitments.brand',
self::raiseSustainably => 'fo.commitments.raise',
self::forLivingTogether => 'fo.commitments.life',

View file

@ -17,17 +17,12 @@ class NewNotification
/**
* Create a new event instance.
*
* @param \App\Enums\NotificationType $type
* @param string $content
* @param \App\Interfaces\Notifiable $model
* @param \App\Models\Customer|null $customer
*/
public function __construct(
public NotificationType $type,
public string $content,
public Notifiable $model,
public Customer|null $customer = null
public ?Customer $customer = null
) {
}
}

View file

@ -3,6 +3,8 @@
namespace App\Exceptions;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Validation\ValidationException;
use Throwable;
class Handler extends ExceptionHandler
@ -50,20 +52,19 @@ class Handler extends ExceptionHandler
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Throwable $e
* @return \Symfony\Component\HttpFoundation\Response
*/
public function render($request, Throwable $e)
{
if ($request->expectsJson()) {
if ($e instanceof \Illuminate\Http\Exceptions\HttpResponseException) {
if ($e instanceof HttpResponseException) {
return parent::render($request, $e);
}
if ($e instanceof \Illuminate\Validation\ValidationException && $request->ajax()) {
if ($e instanceof ValidationException && $request->ajax()) {
return response()->json([
'message' => $e->getMessage(),
'errors' => $e->errors(),
'errors' => $e->errors(),
], $e->status);
}

View file

@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
use App\Models\ActivityLog;
use App\Traits\Controllers\ChangesModelOrder;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\Request;
class ActivityLogController extends Controller
@ -15,11 +16,8 @@ class ActivityLogController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
$this->authorize('isConceptor');
/** @var \Illuminate\Database\Eloquent\Builder $query */
@ -61,11 +59,8 @@ class ActivityLogController extends Controller
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\ActivityLog $activity_log
* @return \Illuminate\Contracts\View\View
*/
public function show(ActivityLog $activity_log): \Illuminate\Contracts\View\View
public function show(ActivityLog $activity_log): View
{
$this->authorize('isConceptor');
$targetModelClass = $activity_log->model_class;

View file

@ -8,6 +8,9 @@ use App\Http\Requests\Bo\Approaches\StoreApproachRequest;
use App\Http\Requests\Bo\Approaches\UpdateApproachRequest;
use App\Models\Approach;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -26,11 +29,8 @@ class ApproachController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $approachModels */
$approachModels = Approach::query()->where('type', ApproachTypeEnum::make($request->approach_type));
@ -60,33 +60,24 @@ class ApproachController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\Approach $approach
* @return \Illuminate\Contracts\View\View
*/
public function show(Approach $approach): \Illuminate\Contracts\View\View
public function show(Approach $approach): View
{
return view('bo.pages.approaches.show', ['approachModel' => $approach]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\Approach $approach
* @return \Illuminate\Contracts\View\View
*/
public function create(Approach $approach): \Illuminate\Contracts\View\View
public function create(Approach $approach): View
{
return view('bo.pages.approaches.create', ['approachModel' => $approach]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Approaches\StoreApproachRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreApproachRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreApproachRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$approach = new Approach();
@ -99,39 +90,33 @@ class ApproachController extends Controller
trans(ApproachTypeEnum::demarche->equals($approach->type)
? 'validation.custom.demarche'
: 'validation.custom.label')
)
),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(
trans(ApproachTypeEnum::demarche->equals($approach->type)
? 'validation.custom.demarche'
: 'validation.custom.label')
)
),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Approach $approach
* @return \Illuminate\Contracts\View\View
*/
public function edit(Approach $approach): \Illuminate\Contracts\View\View
public function edit(Approach $approach): View
{
return view('bo.pages.approaches.edit', ['approachModel' => $approach]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\Approaches\UpdateApproachRequest $request
* @param \App\Models\Approach $approach
* @return \Illuminate\Http\RedirectResponse
*/
public function update(UpdateApproachRequest $request, Approach $approach): \Illuminate\Http\RedirectResponse
public function update(UpdateApproachRequest $request, Approach $approach): RedirectResponse
{
return DB::transaction(function () use ($request, $approach) {
$approach->fill($request->validated());
@ -143,27 +128,25 @@ class ApproachController extends Controller
trans(ApproachTypeEnum::demarche->equals($approach->type)
? 'validation.custom.demarche'
: 'validation.custom.label')
)
),
]));
}
return redirect()->route('bo.approaches.edit', $approach)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(
trans(ApproachTypeEnum::demarche->equals($approach->type)
? 'validation.custom.demarche'
: 'validation.custom.label')
)
),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Approach $approach
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Approach $approach): \Illuminate\Http\RedirectResponse
public function destroy(Approach $approach): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -177,37 +160,32 @@ class ApproachController extends Controller
trans(ApproachTypeEnum::demarche->equals($approach->type)
? 'validation.custom.demarche'
: 'validation.custom.label')
)
),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(
trans(ApproachTypeEnum::demarche->equals($approach->type)
? 'validation.custom.demarche'
: 'validation.custom.label')
)
),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\Approach $approach
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(Approach $approach): \Illuminate\Contracts\View\View
public function duplicate(Approach $approach): View
{
return $this->create($approach->replicate());
}
/**
* Get a paginate resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function jsonPaginateDemarches(Request $request): \Illuminate\Http\JsonResponse
public function jsonPaginateDemarches(Request $request): JsonResponse
{
/** @var \App\Models\Approach $approachModels */
$approachModels = $request->targetModel::query()
@ -215,6 +193,7 @@ class ApproachController extends Controller
->where('name', 'like', "%{$request->input('search')}%")
->orderBy('name', 'ASC')
->paginate($request->input('paginate') ?? 10);
return \response()->json($approachModels);
}
}

View file

@ -3,6 +3,8 @@
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\Http\Request;
use Illuminate\Support\Facades\Auth;
@ -23,28 +25,22 @@ class LoginController extends Controller
/**
* Get the guard to be used during authentication.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard(): \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(): \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
{
@ -53,15 +49,13 @@ class LoginController extends Controller
/**
* Attempt to log the user into the application.
*
* @param \Illuminate\Http\Request $request
* @return boolean
*/
protected function attemptLogin(Request $request): bool
{
$credentials = $this->credentials($request);
// * Attempt login only using published users.
$credentials['published'] = true;
return $this->guard()->attempt(
$credentials,
$request->boolean('remember')

View file

@ -3,6 +3,7 @@
namespace App\Http\Controllers\Bo\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\Auth\StatefulGuard;
use Illuminate\Foundation\Auth\ResetsPasswords;
use Illuminate\Support\Facades\Auth;
@ -12,18 +13,14 @@ class ResetPasswordController extends Controller
/**
* Get the guard to be used during authentication.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard(): \Illuminate\Contracts\Auth\StatefulGuard
protected function guard(): StatefulGuard
{
return Auth::guard('backend');
}
/**
* Where to redirect users after login.
*
* @return string
*/
protected function redirectTo(): string
{

View file

@ -6,18 +6,19 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\BlockPage\UpdateBlockRequest;
use App\Models\Block;
use App\Services\StaticPage\BlockService;
use Illuminate\Http\JsonResponse;
class BlockController extends Controller
{
public function __construct(
public function __construct(
private readonly BlockService $service
) {}
) {
}
/**
* Update the specified resource in storage.
*/
public function update(UpdateBlockRequest $request, Block $block): \Illuminate\Http\JsonResponse
public function update(UpdateBlockRequest $request, Block $block): JsonResponse
{
$this->service->update($block, $request->validated());
@ -26,5 +27,4 @@ class BlockController extends Controller
'message' => __('Bloc mis à jour avec succès.'),
]);
}
}

View file

@ -8,14 +8,16 @@ use App\Http\Requests\Bo\BrandAdvantages\UpdateBrandAdvantageRequest;
use App\Models\BrandAdvantage;
use App\Traits\Controllers\ChangesModelOrder;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class BrandAdvantageController extends Controller
{
use UpdateModelPublished;
use ChangesModelOrder;
use UpdateModelPublished;
/**
* Create the controller instance.
@ -27,11 +29,8 @@ class BrandAdvantageController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $brandAdvantageModels */
$brandAdvantageModels = BrandAdvantage::query();
@ -65,34 +64,24 @@ class BrandAdvantageController extends Controller
/**
* Show a specific resource.
*
* @param \App\Models\BrandAdvantage $brandAdvantage
* @return \Illuminate\Contracts\View\View
*/
public function show(BrandAdvantage $brandAdvantage): \Illuminate\Contracts\View\View
public function show(BrandAdvantage $brandAdvantage): View
{
return view('bo.pages.brand_advantages.show', ['brandAdvantageModel' => $brandAdvantage]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\BrandAdvantage $brandAdvantage
* @return \Illuminate\Contracts\View\View
*/
public function create(BrandAdvantage $brandAdvantage): \Illuminate\Contracts\View\View
public function create(BrandAdvantage $brandAdvantage): View
{
return view('bo.pages.brand_advantages.create', ['brandAdvantageModel' => $brandAdvantage]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\BrandAdvantages\StoreBrandAdvantageRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreBrandAdvantageRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreBrandAdvantageRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$brandAdvantage = new BrandAdvantage();
@ -101,61 +90,53 @@ class BrandAdvantageController extends Controller
if ($brandAdvantage->saveOrFail()) {
return redirect()->route('bo.brand_advantages.edit', $brandAdvantage)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans_choice('models.classes.brand_advantage', 1))
'model' => Str::ucfirst(trans_choice('models.classes.brand_advantage', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucFirst(trans_choice('models.classes.brand_advantage', 1))
'model' => Str::ucFirst(trans_choice('models.classes.brand_advantage', 1)),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\BrandAdvantage $brandAdvantage
* @return \Illuminate\Contracts\View\View
*/
public function edit(BrandAdvantage $brandAdvantage): \Illuminate\Contracts\View\View
public function edit(BrandAdvantage $brandAdvantage): View
{
return view('bo.pages.brand_advantages.edit', ['brandAdvantageModel' => $brandAdvantage]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\BrandAdvantages\UpdateBrandAdvantageRequest $request
* @param \App\Models\BrandAdvantage $brandAdvantage
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateBrandAdvantageRequest $request,
BrandAdvantage $brandAdvantage
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $brandAdvantage) {
$brandAdvantage->fill($request->validated());
if ($brandAdvantage->saveOrFail()) {
return redirect()->route('bo.brand_advantages.edit', $brandAdvantage)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucFirst(trans_choice('models.classes.brand_advantage', 1))
'model' => Str::ucFirst(trans_choice('models.classes.brand_advantage', 1)),
]));
}
return redirect()->route('bo.brand_advantages.edit', $brandAdvantage)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucFirst(trans_choice('models.classes.brand_advantage', 1))
'model' => Str::ucFirst(trans_choice('models.classes.brand_advantage', 1)),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\BrandAdvantage $brandAdvantage
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(BrandAdvantage $brandAdvantage): \Illuminate\Http\RedirectResponse
public function destroy(BrandAdvantage $brandAdvantage): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -163,22 +144,20 @@ class BrandAdvantageController extends Controller
if ($brandAdvantage->deleteOrFail()) {
return redirect()->route('bo.brand_advantages.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucFirst(trans_choice('models.classes.brand_advantage', 1))
'model' => Str::ucFirst(trans_choice('models.classes.brand_advantage', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucFirst(trans('models.classebrand_advantage'))
'model' => Str::ucFirst(trans('models.classebrand_advantage')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\BrandAdvantage $brandAdvantage
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(BrandAdvantage $brandAdvantage): \Illuminate\Contracts\View\View
public function duplicate(BrandAdvantage $brandAdvantage): View
{
return $this->create($brandAdvantage->replicate());
}

View file

@ -5,6 +5,9 @@ namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\CategoryApproaches\CategoryApproachRequest;
use App\Models\CategoryApproach;
use Illuminate\Contracts\View\View;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -22,16 +25,13 @@ class CategoryApproachesController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
$categories = CategoryApproach::query();
$count = CategoryApproach::count();
/** @var string $search Search field */
$search = $request->search;
/** @var string $search Search field */
$search = $request->search;
if ($search) {
$this->searchQuery(
$categories,
@ -40,9 +40,9 @@ class CategoryApproachesController extends Controller
'name',
);
}
$searchFields = \implode(', ', [
trans('validation.attributes.name'),
]);
$searchFields = \implode(', ', [
trans('validation.attributes.name'),
]);
/** Sort columns with a query */
$this->sortQuery($categories);
@ -54,19 +54,18 @@ class CategoryApproachesController extends Controller
);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\CategoryApproach $categoryApproaches
* @return \Illuminate\Contracts\View\View
*/
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Contracts\View\View
*/
public function create(CategoryApproach $categoryApproaches)
{
$count = CategoryApproach::count();
if ($count >= CategoryApproach::MAX_CATEGORIES) {
return redirect()
->route('bo.categories.approaches.index')
->with('error', "Limite atteinte : vous ne pouvez pas créer plus de " . CategoryApproach::MAX_CATEGORIES . " catégories.");
->with('error', 'Limite atteinte : vous ne pouvez pas créer plus de ' . CategoryApproach::MAX_CATEGORIES . ' catégories.');
}
return view('bo.pages.categories_approaches.create', ['categoryApproachesModel' => $categoryApproaches]);
@ -74,17 +73,15 @@ class CategoryApproachesController extends Controller
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\CategoryApproaches\CategoryApproachRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(CategoryApproachRequest $request): \Illuminate\Http\RedirectResponse
public function store(CategoryApproachRequest $request): RedirectResponse
{
if (CategoryApproach::count() >= CategoryApproach::MAX_CATEGORIES) {
throw ValidationException::withMessages([
'name' => "Limite atteinte : maximum " . CategoryApproach::MAX_CATEGORIES . " catégories."
'name' => 'Limite atteinte : maximum ' . CategoryApproach::MAX_CATEGORIES . ' catégories.',
]);
}
return DB::transaction(function () use ($request) {
$category = new CategoryApproach();
$category->fill($request->validated());
@ -92,48 +89,42 @@ class CategoryApproachesController extends Controller
if ($category->saveOrFail()) {
return redirect()->route('bo.categories.approaches.index')
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans('validation.custom.category'))
'model' => Str::ucfirst(trans('validation.custom.category')),
]));
}
});
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans('validation.custom.category'))
]));
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans('validation.custom.category')),
]));
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\CategoryApproach $categories_approach
* @return \Illuminate\Contracts\View\View
*/
public function edit(CategoryApproach $categories_approach): \Illuminate\Contracts\View\View
public function edit(CategoryApproach $categories_approach): View
{
return view('bo.pages.categories_approaches.edit', [
'categoryApproachesModel' => $categories_approach
'categoryApproachesModel' => $categories_approach,
]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\CategoryApproach $categories_approach
* @return \Illuminate\Contracts\View\View
*/
public function show(CategoryApproach $categories_approach): \Illuminate\Contracts\View\View
/**
* Show the form for editing the specified resource.
*/
public function show(CategoryApproach $categories_approach): View
{
return view('bo.pages.categories_approaches.show', [
'categoryApproachesModel' => $categories_approach
'categoryApproachesModel' => $categories_approach,
]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Request\Bo\CategoryApproaches\CategoryApproachRequest $request
* @param \App\Models\CategoryApproach $categories_approach
* @return \Illuminate\Http\RedirectResponse
* @param \App\Http\Request\Bo\CategoryApproaches\CategoryApproachRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function update(CategoryApproachRequest $request, CategoryApproach $categories_approach)
{
@ -144,25 +135,23 @@ class CategoryApproachesController extends Controller
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.categoryApproach', 1))]));
}
return redirect()->route('bo.categories.approaches.edit', $categories_approach)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.categoryApproach', 1))
'model' => Str::ucfirst(trans_choice('models.classes.categoryApproach', 1)),
]));
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\CategoryApproach $categories_approach
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(CategoryApproach $categories_approach): \Illuminate\Http\RedirectResponse
public function destroy(CategoryApproach $categories_approach): RedirectResponse
{
if (CategoryApproach::count() === CategoryApproach::MIN_CATEGORIES) {
return redirect()
->route('bo.categories.approaches.index')
->with('error', "Limite atteinte : vous ne pouvez pas supprimer toutes les catégories (une catégorie minimum).");
->with('error', 'Limite atteinte : vous ne pouvez pas supprimer toutes les catégories (une catégorie minimum).');
}
if ($categories_approach->delete()) {
return redirect()
@ -170,31 +159,30 @@ class CategoryApproachesController extends Controller
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.categoryApproach', 1))]));
}
return redirect()->back()
->with('success', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.categoryApproach', 1))]));
->with('success', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.categoryApproach', 1))]));
}
/**
* Remove the specified resource from storage.
*
* @param CategoryApproach $section_approach
* @return \Illuminate\Contracts\View\View
*/
/**
* Remove the specified resource from storage.
*
* @param CategoryApproach $section_approach
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(CategoryApproach $categories_approach)
{
return $this->create($categories_approach->replicate());
}
/**
* Get a paginate resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function jsonPaginateCategory(Request $request): \Illuminate\Http\JsonResponse
/**
* Get a paginate resource.
*/
public function jsonPaginateCategory(Request $request): JsonResponse
{
$categoryApproachModel = $request->targetModel::query()->orderBy('name', 'ASC')->paginate();
return \response()->json($categoryApproachModel);
}
}

View file

@ -7,6 +7,8 @@ use App\Http\Requests\Bo\Claims\StoreClaimRequest;
use App\Http\Requests\Bo\Claims\UpdateClaimRequest;
use App\Models\Claim;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -25,11 +27,8 @@ class ClaimController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $claimModels */
$claimModels = Claim::query();
@ -59,33 +58,24 @@ class ClaimController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\Claim $claim
* @return \Illuminate\Contracts\View\View
*/
public function show(Claim $claim): \Illuminate\Contracts\View\View
public function show(Claim $claim): View
{
return view('bo.pages.claims.show', ['claimModel' => $claim]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\Claim $claim
* @return \Illuminate\Contracts\View\View
*/
public function create(Claim $claim): \Illuminate\Contracts\View\View
public function create(Claim $claim): View
{
return view('bo.pages.claims.create', ['claimModel' => $claim]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Claims\StoreClaimRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreClaimRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreClaimRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$claim = new Claim();
@ -94,35 +84,29 @@ class ClaimController extends Controller
if ($claim->saveOrFail()) {
return redirect()->route('bo.claims.edit', $claim)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans('models.classes.claim'))
'model' => Str::ucfirst(trans('models.classes.claim')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans('models.classes.claim'))
'model' => Str::ucfirst(trans('models.classes.claim')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Claim $claim
* @return \Illuminate\Contracts\View\View
*/
public function edit(Claim $claim): \Illuminate\Contracts\View\View
public function edit(Claim $claim): View
{
return view('bo.pages.claims.edit', ['claimModel' => $claim]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\Claims\UpdateClaimRequest $request
* @param \App\Models\Claim $claim
* @return \Illuminate\Http\RedirectResponse
*/
public function update(UpdateClaimRequest $request, Claim $claim): \Illuminate\Http\RedirectResponse
public function update(UpdateClaimRequest $request, Claim $claim): RedirectResponse
{
return DB::transaction(function () use ($request, $claim) {
$claim->fill($request->validated());
@ -130,23 +114,21 @@ class ClaimController extends Controller
if ($claim->saveOrFail()) {
return redirect()->route('bo.claims.edit', $claim)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans('models.classes.claim'))
'model' => Str::ucfirst(trans('models.classes.claim')),
]));
}
return redirect()->route('bo.claims.edit', $claim)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans('models.classes.claim'))
'model' => Str::ucfirst(trans('models.classes.claim')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Claim $claim
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Claim $claim): \Illuminate\Http\RedirectResponse
public function destroy(Claim $claim): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -154,22 +136,20 @@ class ClaimController extends Controller
if ($claim->deleteOrFail()) {
return redirect()->route('bo.claims.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans('models.classes.claim'))
'model' => Str::ucfirst(trans('models.classes.claim')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans('models.classes.claim'))
'model' => Str::ucfirst(trans('models.classes.claim')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\Claim $claim
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(Claim $claim): \Illuminate\Contracts\View\View
public function duplicate(Claim $claim): View
{
return $this->create($claim->replicate());
}

View file

@ -6,6 +6,8 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\ConsumptionMoments\StoreConsumptionMomentRequest;
use App\Http\Requests\Bo\ConsumptionMoments\UpdateConsumptionMomentRequest;
use App\Models\ConsumptionMoment;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -22,11 +24,8 @@ class ConsumptionMomentController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $consumptionMomentModels */
$consumptionMomentModels = ConsumptionMoment::query();
@ -60,33 +59,24 @@ class ConsumptionMomentController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\ConsumptionMoment $consumptionMoment
* @return \Illuminate\Contracts\View\View
*/
public function show(ConsumptionMoment $consumptionMoment): \Illuminate\Contracts\View\View
public function show(ConsumptionMoment $consumptionMoment): View
{
return view('bo.pages.consumption_moments.show', ['consumptionMomentModel' => $consumptionMoment]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\ConsumptionMoment $consumptionMoment
* @return \Illuminate\Contracts\View\View
*/
public function create(ConsumptionMoment $consumptionMoment): \Illuminate\Contracts\View\View
public function create(ConsumptionMoment $consumptionMoment): View
{
return view('bo.pages.consumption_moments.create', ['consumptionMomentModel' => $consumptionMoment]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\ConsumptionMoments\StoreConsumptionMomentRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreConsumptionMomentRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreConsumptionMomentRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$consumptionMoment = new ConsumptionMoment();
@ -95,61 +85,53 @@ class ConsumptionMomentController extends Controller
if ($consumptionMoment->saveOrFail()) {
return redirect()->route('bo.consumption_moments.edit', $consumptionMoment)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans_choice('models.classes.consumption_moment', 1))
'model' => Str::ucfirst(trans_choice('models.classes.consumption_moment', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans_choice('models.classes.consumption_moment', 1))
'model' => Str::ucfirst(trans_choice('models.classes.consumption_moment', 1)),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\ConsumptionMoment $consumptionMoment
* @return \Illuminate\Contracts\View\View
*/
public function edit(ConsumptionMoment $consumptionMoment): \Illuminate\Contracts\View\View
public function edit(ConsumptionMoment $consumptionMoment): View
{
return view('bo.pages.consumption_moments.edit', ['consumptionMomentModel' => $consumptionMoment]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\ConsumptionMoments\UpdateConsumptionMomentRequest $request
* @param \App\Models\ConsumptionMoment $consumptionMoment
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateConsumptionMomentRequest $request,
ConsumptionMoment $consumptionMoment
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $consumptionMoment) {
$consumptionMoment->fill($request->validated());
if ($consumptionMoment->saveOrFail()) {
return redirect()->route('bo.consumption_moments.edit', $consumptionMoment)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.consumption_moment', 1))
'model' => Str::ucfirst(trans_choice('models.classes.consumption_moment', 1)),
]));
}
return redirect()->route('bo.consumption_moments.edit', $consumptionMoment)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.consumption_moment', 1))
'model' => Str::ucfirst(trans_choice('models.classes.consumption_moment', 1)),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\ConsumptionMoment $consumptionMoment
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(ConsumptionMoment $consumptionMoment): \Illuminate\Http\RedirectResponse
public function destroy(ConsumptionMoment $consumptionMoment): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -157,22 +139,20 @@ class ConsumptionMomentController extends Controller
if ($consumptionMoment->deleteOrFail()) {
return redirect()->route('bo.consumption_moments.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.consumption_moment', 1))
'model' => Str::ucfirst(trans_choice('models.classes.consumption_moment', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.consumption_moment', 1))
'model' => Str::ucfirst(trans_choice('models.classes.consumption_moment', 1)),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\ConsumptionMoment $consumptionMoment
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(ConsumptionMoment $consumptionMoment): \Illuminate\Contracts\View\View
public function duplicate(ConsumptionMoment $consumptionMoment): View
{
return $this->create($consumptionMoment->replicate());
}

View file

@ -3,15 +3,14 @@
namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\View\View;
class DashboardController extends Controller
{
/**
* Dashboard Page
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
public function index(): View
{
return view('bo.pages.dashboard');
}

View file

@ -8,6 +8,8 @@ use App\Http\Requests\Bo\DemarcheSlides\UpdateDemarcheSlideRequest;
use App\Models\DemarcheSlide;
use App\Traits\Controllers\ChangesModelOrder;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -27,11 +29,8 @@ class DemarcheSlideController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $demarcheSlideModels */
$demarcheSlideModels = DemarcheSlide::query();
@ -63,33 +62,24 @@ class DemarcheSlideController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\DemarcheSlide $demarcheSlide
* @return \Illuminate\Contracts\View\View
*/
public function show(DemarcheSlide $demarcheSlide): \Illuminate\Contracts\View\View
public function show(DemarcheSlide $demarcheSlide): View
{
return view('bo.pages.demarche_slides.show', ['demarcheSlideModel' => $demarcheSlide]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\DemarcheSlide $demarcheSlide
* @return \Illuminate\Contracts\View\View
*/
public function create(DemarcheSlide $demarcheSlide): \Illuminate\Contracts\View\View
public function create(DemarcheSlide $demarcheSlide): View
{
return view('bo.pages.demarche_slides.create', ['demarcheSlideModel' => $demarcheSlide]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\DemarcheSlides\StoreDemarcheSlideRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreDemarcheSlideRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreDemarcheSlideRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$demarcheSlide = new DemarcheSlide();
@ -98,61 +88,53 @@ class DemarcheSlideController extends Controller
if ($demarcheSlide->saveOrFail()) {
return redirect()->route('bo.demarche_slides.edit', $demarcheSlide)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans('models.classes.demarche_slide'))
'model' => Str::ucfirst(trans('models.classes.demarche_slide')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans('models.classes.demarche_slide'))
'model' => Str::ucfirst(trans('models.classes.demarche_slide')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\DemarcheSlide $demarcheSlide
* @return \Illuminate\Contracts\View\View
*/
public function edit(DemarcheSlide $demarcheSlide): \Illuminate\Contracts\View\View
public function edit(DemarcheSlide $demarcheSlide): View
{
return view('bo.pages.demarche_slides.edit', ['demarcheSlideModel' => $demarcheSlide]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\DemarcheSlides\UpdateDemarcheSlideRequest $request
* @param \App\Models\DemarcheSlide $demarcheSlide
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateDemarcheSlideRequest $request,
DemarcheSlide $demarcheSlide
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $demarcheSlide) {
$demarcheSlide->fill($request->validated());
if ($demarcheSlide->saveOrFail()) {
return redirect()->route('bo.demarche_slides.edit', $demarcheSlide)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans('models.classes.demarche_slide'))
'model' => Str::ucfirst(trans('models.classes.demarche_slide')),
]));
}
return redirect()->route('bo.demarche_slides.edit', $demarcheSlide)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans('models.classes.demarche_slide'))
'model' => Str::ucfirst(trans('models.classes.demarche_slide')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\DemarcheSlide $demarcheSlide
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(DemarcheSlide $demarcheSlide): \Illuminate\Http\RedirectResponse
public function destroy(DemarcheSlide $demarcheSlide): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -160,22 +142,20 @@ class DemarcheSlideController extends Controller
if ($demarcheSlide->deleteOrFail()) {
return redirect()->route('bo.demarche_slides.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans('models.classes.demarche_slide'))
'model' => Str::ucfirst(trans('models.classes.demarche_slide')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans('models.classes.demarche_slide'))
'model' => Str::ucfirst(trans('models.classes.demarche_slide')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\DemarcheSlide $demarcheSlide
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(DemarcheSlide $demarcheSlide): \Illuminate\Contracts\View\View
public function duplicate(DemarcheSlide $demarcheSlide): View
{
return $this->create($demarcheSlide->replicate());
}

View file

@ -5,6 +5,8 @@ namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use App\Models\Discount;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class DiscountController extends Controller
@ -21,11 +23,8 @@ class DiscountController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $query */
$query = Discount::query();
@ -59,23 +58,19 @@ class DiscountController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\Discount $discount
* @return \Illuminate\Contracts\View\View
*/
public function show(Discount $discount): \Illuminate\Contracts\View\View
public function show(Discount $discount): View
{
return view('bo.pages.discounts.show', ['discountModel' => $discount]);
}
/**
* Show the specified resource.
*
* @return \Illuminate\Http\RedirectResponse
*/
public function fetchList(): \Illuminate\Http\RedirectResponse
public function fetchList(): RedirectResponse
{
Discount::updateDiscounts();
return redirect()->route('bo.discounts.index')
->with('success', trans('Mise à jour des réductions réussie !'));
}

View file

@ -7,6 +7,9 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\GeneralSettings\UpdateGeneralSettingRequest;
use App\Lib\Helpers\FileStorageHelper;
use App\Models\GeneralSetting;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -22,64 +25,52 @@ class GeneralSettingController extends Controller
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\GeneralSetting $general_setting
* @return \Illuminate\Contracts\View\View
*/
public function edit(GeneralSetting $general_setting): \Illuminate\Contracts\View\View
public function edit(GeneralSetting $general_setting): View
{
return view('bo.pages.general_settings.edit', [
'generalSettingModel' => $general_setting,
'menuNodes' => $general_setting->value
'menuNodes' => $general_setting->value,
]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\GeneralSettings\UpdateGeneralSettingRequest $request
* @param \App\Models\GeneralSetting $general_setting
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateGeneralSettingRequest $request,
GeneralSetting $general_setting
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $general_setting) {
match ($general_setting->type) {
SettingsType::hotNews => self::updateHotNews($request, $general_setting),
SettingsType::breederMap => self::updateBreederMap($request, $general_setting),
default => $general_setting->fill($request->only('value'))
default => $general_setting->fill($request->only('value'))
};
if ($general_setting->saveOrFail()) {
return redirect()->route('bo.general_settings.edit', $general_setting)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(\trans_choice('models.classes.general_setting', 1))
'model' => Str::ucfirst(\trans_choice('models.classes.general_setting', 1)),
]));
}
return redirect()->route('bo.general_settings.edit', $general_setting)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(\trans_choice('models.classes.general_setting', 1))
'model' => Str::ucfirst(\trans_choice('models.classes.general_setting', 1)),
]));
});
}
/**
* Update content for the General Setting with the type 'Hot News'
*
* @param \App\Http\Requests\Bo\GeneralSettings\UpdateGeneralSettingRequest $request
* @param \App\Models\GeneralSetting $general_setting
*
* @return void
*/
private static function updateHotNews(UpdateGeneralSettingRequest $request, GeneralSetting $general_setting): void
{
collect($request->only(['value->text', 'value->picture', 'value->picture_alt', 'value->picture_title']))
->each(fn(string|\Illuminate\Http\UploadedFile|null $value, string $attribute) =>
$general_setting->setAttribute(
->each(fn (string | \Illuminate\Http\UploadedFile | null $value, string $attribute) => $general_setting->setAttribute(
$attribute,
$value instanceof \Illuminate\Http\UploadedFile ?
$value instanceof UploadedFile ?
FileStorageHelper::storeFile($general_setting, $value, true) :
$value ?? json_decode(collect($general_setting->value))->picture
));
@ -87,21 +78,15 @@ class GeneralSettingController extends Controller
/**
* Update content for the General Setting with the type 'Breeder Map Component'
*
* @param \App\Http\Requests\Bo\GeneralSettings\UpdateGeneralSettingRequest $request
* @param \App\Models\GeneralSetting $general_setting
*
* @return void
*/
private static function updateBreederMap(
UpdateGeneralSettingRequest $request,
GeneralSetting $general_setting
): void {
collect($request->only(['value->title', 'value->main_text', 'value->picto_text']))
->each(fn(string|null $value, string $attribute) =>
$general_setting->setAttribute(
$attribute,
$value ?? json_decode(collect($general_setting->value))->picto
));
->each(fn (?string $value, string $attribute) => $general_setting->setAttribute(
$attribute,
$value ?? json_decode(collect($general_setting->value))->picto
));
}
}

View file

@ -8,6 +8,8 @@ use App\Http\Requests\Bo\HistoricalMilestones\UpdateHistoricalMilestoneRequest;
use App\Models\HistoricalMilestone;
use App\Traits\Controllers\ChangesModelOrder;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -27,11 +29,8 @@ class HistoricalMilestoneController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $historicalMilestoneModels */
$historicalMilestoneModels = HistoricalMilestone::query();
@ -69,33 +68,24 @@ class HistoricalMilestoneController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\HistoricalMilestone $historicalMilestone
* @return \Illuminate\Contracts\View\View
*/
public function show(HistoricalMilestone $historicalMilestone): \Illuminate\Contracts\View\View
public function show(HistoricalMilestone $historicalMilestone): View
{
return view('bo.pages.historical_milestones.show', ['historicalMilestoneModel' => $historicalMilestone]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\HistoricalMilestone $historicalMilestone
* @return \Illuminate\Contracts\View\View
*/
public function create(HistoricalMilestone $historicalMilestone): \Illuminate\Contracts\View\View
public function create(HistoricalMilestone $historicalMilestone): View
{
return view('bo.pages.historical_milestones.create', ['historicalMilestoneModel' => $historicalMilestone]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\HistoricalMilestones\StoreHistoricalMilestoneRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreHistoricalMilestoneRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreHistoricalMilestoneRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$historicalMilestone = new HistoricalMilestone();
@ -104,61 +94,53 @@ class HistoricalMilestoneController extends Controller
if ($historicalMilestone->saveOrFail()) {
return redirect()->route('bo.historical_milestones.edit', $historicalMilestone)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans_choice('models.classes.historical_milestone', 1))
'model' => Str::ucfirst(trans_choice('models.classes.historical_milestone', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans_choice('models.classes.historical_milestone', 1))
'model' => Str::ucfirst(trans_choice('models.classes.historical_milestone', 1)),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\HistoricalMilestone $historicalMilestone
* @return \Illuminate\Contracts\View\View
*/
public function edit(HistoricalMilestone $historicalMilestone): \Illuminate\Contracts\View\View
public function edit(HistoricalMilestone $historicalMilestone): View
{
return view('bo.pages.historical_milestones.edit', ['historicalMilestoneModel' => $historicalMilestone]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\HistoricalMilestones\UpdateHistoricalMilestoneRequest $request
* @param \App\Models\HistoricalMilestone $historicalMilestone
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateHistoricalMilestoneRequest $request,
HistoricalMilestone $historicalMilestone
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $historicalMilestone) {
$historicalMilestone->fill($request->validated());
if ($historicalMilestone->saveOrFail()) {
return redirect()->route('bo.historical_milestones.edit', $historicalMilestone)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.historical_milestone', 1))
'model' => Str::ucfirst(trans_choice('models.classes.historical_milestone', 1)),
]));
}
return redirect()->route('bo.historical_milestones.edit', $historicalMilestone)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.historical_milestone', 1))
'model' => Str::ucfirst(trans_choice('models.classes.historical_milestone', 1)),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\HistoricalMilestone $historicalMilestone
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(HistoricalMilestone $historicalMilestone): \Illuminate\Http\RedirectResponse
public function destroy(HistoricalMilestone $historicalMilestone): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -166,22 +148,20 @@ class HistoricalMilestoneController extends Controller
if ($historicalMilestone->deleteOrFail()) {
return redirect()->route('bo.historical_milestones.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.historical_milestone', 1))
'model' => Str::ucfirst(trans_choice('models.classes.historical_milestone', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.historical_milestone', 1))
'model' => Str::ucfirst(trans_choice('models.classes.historical_milestone', 1)),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\HistoricalMilestone $historicalMilestone
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(HistoricalMilestone $historicalMilestone): \Illuminate\Contracts\View\View
public function duplicate(HistoricalMilestone $historicalMilestone): View
{
return $this->create($historicalMilestone->replicate());
}

View file

@ -6,16 +6,18 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\KeyNumbers\StoreKeyNumberRequest;
use App\Http\Requests\Bo\KeyNumbers\UpdateKeyNumberRequest;
use App\Models\KeyNumber;
use App\Traits\Controllers\UpdateModelPublished;
use App\Traits\Controllers\ChangesModelOrder;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class KeyNumberController extends Controller
{
use UpdateModelPublished;
use ChangesModelOrder;
use UpdateModelPublished;
/**
* Create the controller instance.
@ -27,11 +29,8 @@ class KeyNumberController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $keyNumberModels */
$keyNumberModels = KeyNumber::query();
@ -61,33 +60,24 @@ class KeyNumberController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\KeyNumber $keyNumber
* @return \Illuminate\Contracts\View\View
*/
public function show(KeyNumber $keyNumber): \Illuminate\Contracts\View\View
public function show(KeyNumber $keyNumber): View
{
return view('bo.pages.key_numbers.show', ['keyNumberModel' => $keyNumber]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\KeyNumber $keyNumber
* @return \Illuminate\Contracts\View\View
*/
public function create(KeyNumber $keyNumber): \Illuminate\Contracts\View\View
public function create(KeyNumber $keyNumber): View
{
return view('bo.pages.key_numbers.create', ['keyNumberModel' => $keyNumber]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\KeyNumbers\StoreKeyNumberRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreKeyNumberRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreKeyNumberRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$keyNumber = new KeyNumber();
@ -96,35 +86,29 @@ class KeyNumberController extends Controller
if ($keyNumber->saveOrFail()) {
return redirect()->route('bo.key_numbers.edit', $keyNumber)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans('models.classes.key_number'))
'model' => Str::ucfirst(trans('models.classes.key_number')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans('models.classes.key_number'))
'model' => Str::ucfirst(trans('models.classes.key_number')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\KeyNumber $keyNumber
* @return \Illuminate\Contracts\View\View
*/
public function edit(KeyNumber $keyNumber): \Illuminate\Contracts\View\View
public function edit(KeyNumber $keyNumber): View
{
return view('bo.pages.key_numbers.edit', ['keyNumberModel' => $keyNumber]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\KeyNumbers\UpdateKeyNumberRequest $request
* @param \App\Models\KeyNumber $keyNumber
* @return \Illuminate\Http\RedirectResponse
*/
public function update(UpdateKeyNumberRequest $request, KeyNumber $keyNumber): \Illuminate\Http\RedirectResponse
public function update(UpdateKeyNumberRequest $request, KeyNumber $keyNumber): RedirectResponse
{
return DB::transaction(function () use ($request, $keyNumber) {
$keyNumber->fill($request->validated());
@ -132,23 +116,21 @@ class KeyNumberController extends Controller
if ($keyNumber->saveOrFail()) {
return redirect()->route('bo.key_numbers.edit', $keyNumber)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans('models.classes.key_number'))
'model' => Str::ucfirst(trans('models.classes.key_number')),
]));
}
return redirect()->route('bo.key_numbers.edit', $keyNumber)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans('models.classes.key_number'))
'model' => Str::ucfirst(trans('models.classes.key_number')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\KeyNumber $keyNumber
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(KeyNumber $keyNumber): \Illuminate\Http\RedirectResponse
public function destroy(KeyNumber $keyNumber): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -156,22 +138,20 @@ class KeyNumberController extends Controller
if ($keyNumber->deleteOrFail()) {
return redirect()->route('bo.key_numbers.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans('models.classes.key_number'))
'model' => Str::ucfirst(trans('models.classes.key_number')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans('models.classes.key_number'))
'model' => Str::ucfirst(trans('models.classes.key_number')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\KeyNumber $keyNumber
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(KeyNumber $keyNumber): \Illuminate\Contracts\View\View
public function duplicate(KeyNumber $keyNumber): View
{
return $this->create($keyNumber->replicate());
}

View file

@ -42,6 +42,7 @@ class MailTesterController extends Controller
return back()->with('success', __("Le mail a été envoyé à l'adresse {$recipient->address}"));
} catch (Throwable $e) {
report($e);
return back()->with('error', "Échec lors de l'envoi du mail : {$e->getMessage()}");
}
}

View file

@ -10,6 +10,8 @@ use App\Models\Approach;
use App\Models\MainSlide;
use App\Traits\Controllers\ChangesModelOrder;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -29,11 +31,8 @@ class MainSlideController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $mainSlideModels */
$mainSlideModels = MainSlide::query();
@ -65,38 +64,30 @@ class MainSlideController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\MainSlide $mainSlide
* @return \Illuminate\Contracts\View\View
*/
public function show(MainSlide $mainSlide): \Illuminate\Contracts\View\View
public function show(MainSlide $mainSlide): View
{
return view('bo.pages.main_slides.show', ['mainSlideModel' => $mainSlide]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\MainSlide $mainSlide
* @return \Illuminate\Contracts\View\View
*/
public function create(MainSlide $mainSlide): \Illuminate\Contracts\View\View
public function create(MainSlide $mainSlide): View
{
$demarcheModels = Approach::query()->where('type', ApproachTypeEnum::demarche)
->orderBy('name', 'ASC')->paginate(10);
return view('bo.pages.main_slides.create', [
'mainSlideModel' => $mainSlide,
'demarcheModels' => $demarcheModels
'demarcheModels' => $demarcheModels,
]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\MainSlides\StoreMainSlideRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreMainSlideRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreMainSlideRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$mainSlide = new MainSlide();
@ -105,66 +96,59 @@ class MainSlideController extends Controller
if ($mainSlide->saveOrFail()) {
return redirect()->route('bo.main_slides.edit', $mainSlide)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans('models.classes.main_slide'))
'model' => Str::ucfirst(trans('models.classes.main_slide')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans('models.classes.main_slide'))
'model' => Str::ucfirst(trans('models.classes.main_slide')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\MainSlide $mainSlide
* @return \Illuminate\Contracts\View\View
*/
public function edit(MainSlide $mainSlide): \Illuminate\Contracts\View\View
public function edit(MainSlide $mainSlide): View
{
$demarcheModels = Approach::query()->where('type', ApproachTypeEnum::demarche)
->orderBy('name', 'ASC')->paginate(10);
return view('bo.pages.main_slides.edit', [
'mainSlideModel' => $mainSlide,
'demarcheModels' => $demarcheModels
'demarcheModels' => $demarcheModels,
]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\MainSlides\UpdateMainSlideRequest $request
* @param \App\Models\MainSlide $mainSlide
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateMainSlideRequest $request,
MainSlide $mainSlide
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $mainSlide) {
$mainSlide->fill($request->validated());
if ($mainSlide->saveOrFail()) {
return redirect()->route('bo.main_slides.edit', $mainSlide)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans('models.classes.main_slide'))
'model' => Str::ucfirst(trans('models.classes.main_slide')),
]));
}
return redirect()->route('bo.main_slides.edit', $mainSlide)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans('models.classes.main_slide'))
'model' => Str::ucfirst(trans('models.classes.main_slide')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\MainSlide $mainSlide
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(MainSlide $mainSlide): \Illuminate\Http\RedirectResponse
public function destroy(MainSlide $mainSlide): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -172,22 +156,20 @@ class MainSlideController extends Controller
if ($mainSlide->deleteOrFail()) {
return redirect()->route('bo.main_slides.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans('models.classes.main_slide'))
'model' => Str::ucfirst(trans('models.classes.main_slide')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans('models.classes.main_slide'))
'model' => Str::ucfirst(trans('models.classes.main_slide')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\MainSlide $mainSlide
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(MainSlide $mainSlide): \Illuminate\Contracts\View\View
public function duplicate(MainSlide $mainSlide): View
{
return $this->create($mainSlide->replicate());
}

View file

@ -10,14 +10,16 @@ use App\Models\Meat;
use App\Models\Submeat;
use App\Traits\Controllers\ChangesModelOrder;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class MeatController extends Controller
{
use UpdateModelPublished;
use ChangesModelOrder;
use UpdateModelPublished;
/**
* Create the controller instance.
@ -29,11 +31,8 @@ class MeatController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $meatModels */
$meatModels = Meat::query()->with('submeats:id,meat_id');
@ -67,34 +66,24 @@ class MeatController extends Controller
/**
* Show a specific resource.
*
* @param \App\Models\Meat $meat
* @return \Illuminate\Contracts\View\View
*/
public function show(Meat $meat): \Illuminate\Contracts\View\View
public function show(Meat $meat): View
{
return view('bo.pages.meats.show', ['meatModel' => $meat]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\Meat $meat
* @return \Illuminate\Contracts\View\View
*/
public function create(Meat $meat): \Illuminate\Contracts\View\View
public function create(Meat $meat): View
{
return view('bo.pages.meats.create', ['meatModel' => $meat]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Meats\StoreMeatRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreMeatRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreMeatRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$meat = new Meat();
@ -103,61 +92,53 @@ class MeatController extends Controller
if ($meat->saveOrFail()) {
return redirect()->route('bo.meats.edit', $meat)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucFirst(trans('models.classes.meat'))
'model' => Str::ucFirst(trans('models.classes.meat')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucFirst(trans('models.classes.meat'))
'model' => Str::ucFirst(trans('models.classes.meat')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Meat $meat
* @return \Illuminate\Contracts\View\View
*/
public function edit(Meat $meat): \Illuminate\Contracts\View\View
public function edit(Meat $meat): View
{
return view('bo.pages.meats.edit', ['meatModel' => $meat]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\Meats\UpdateMeatRequest $request
* @param \App\Models\Meat $meat
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateMeatRequest $request,
Meat $meat
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $meat) {
$meat->fill($request->validated());
if ($meat->saveOrFail()) {
return redirect()->route('bo.meats.edit', $meat)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucFirst(trans('models.classes.meat'))
'model' => Str::ucFirst(trans('models.classes.meat')),
]));
}
return redirect()->route('bo.meats.edit', $meat)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucFirst(trans('models.classes.meat'))
'model' => Str::ucFirst(trans('models.classes.meat')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Meat $meat
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Meat $meat): \Illuminate\Http\RedirectResponse
public function destroy(Meat $meat): RedirectResponse
{
// We can't delete a meat with associated submeats.
/** @var \Illuminate\Database\Eloquent\Collection $submeats */
@ -174,34 +155,28 @@ class MeatController extends Controller
if ($meat->deleteOrFail()) {
return redirect()->route('bo.meats.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucFirst(trans('models.classes.meat'))
'model' => Str::ucFirst(trans('models.classes.meat')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucFirst(trans('models.classes.meat'))
'model' => Str::ucFirst(trans('models.classes.meat')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\Meat $meat
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(Meat $meat): \Illuminate\Contracts\View\View
public function duplicate(Meat $meat): View
{
return $this->create($meat->replicate());
}
/**
* Display the form to edit submeats order.
*
* @param \App\Models\Meat $meat
*
* @return \Illuminate\Contracts\View\View
*/
public function editSubmeatsOrder(Meat $meat): \Illuminate\Contracts\View\View
public function editSubmeatsOrder(Meat $meat): View
{
$submeats = $meat->submeats()->orderBy('order')->get(['id', 'label', 'meat_id']);
$meats = Meat::query()->get(['id', 'label']);
@ -210,22 +185,17 @@ class MeatController extends Controller
'modelName' => 'meat',
'model' => $meat,
'models' => $meats,
'submodels' => $submeats
'submodels' => $submeats,
]);
}
/**
* Updated the order of submeats related to a given range.
*
* @param \App\Http\Requests\Bo\Meats\UpdateSubmodelsOrderRequest $request
* @param \App\Models\Meat $meat
*
* @return \Illuminate\Http\RedirectResponse
*/
public function updateSubmeatsOrder(
UpdateSubmodelsOrderRequest $request,
Meat $meat
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
$oldList = $meat->submeats()->orderBy('order')->get();
$newList = (json_decode($request->get('jsonValue'), true));

View file

@ -5,6 +5,7 @@ namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\MenuNodeData\UpdateMenuNodeDataRequest;
use App\Models\MenuNodeData;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
@ -22,31 +23,26 @@ class MenuNodeDataController extends Controller
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\JsonResponse
*/
public function index(): \Illuminate\Http\JsonResponse
public function index(): JsonResponse
{
return response()->json(MenuNodeData::all());
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\MenuNodeData\UpdateMenuNodeDataRequest $request
* @param \App\Models\MenuNodeData $menuNodeData
* @return \Illuminate\Http\JsonResponse
*/
public function update(
UpdateMenuNodeDataRequest $request,
MenuNodeData $menuNodeData
): \Illuminate\Http\JsonResponse {
): JsonResponse {
return DB::transaction(function () use ($request, $menuNodeData) {
$menuNodeData->fill($request->validated());
if ($menuNodeData->saveOrFail()) {
return response()->json();
}
return response()->json([], 500);
});
}

View file

@ -10,7 +10,9 @@ use App\Models\NewsBreeding;
use App\Models\StaticPage;
use App\Traits\Controllers\ChangesModelOrder;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
@ -18,8 +20,8 @@ use Illuminate\Support\Str;
class NewsBreedingController extends Controller
{
use UpdateModelPublished;
use ChangesModelOrder;
use UpdateModelPublished;
/**
* Create the controller instance.
@ -28,13 +30,11 @@ class NewsBreedingController extends Controller
{
$this->authorizeResource(NewsBreeding::class);
}
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $newsBreedingModels */
$newsBreedingModels = NewsBreeding::query()
@ -74,11 +74,8 @@ class NewsBreedingController extends Controller
/**
* Show the form for creating a new resource.
*
* @param \App\Models\NewsBreeding $newsBreeding
* @return \Illuminate\Contracts\View\View
*/
public function create(NewsBreeding $newsBreeding): \Illuminate\Contracts\View\View
public function create(NewsBreeding $newsBreeding): View
{
$breedingPages = StaticPage::query()
->whereIn('type', Arr::pluck(StaticPageType::getBreedingPages(), 'value'))
@ -89,11 +86,8 @@ class NewsBreedingController extends Controller
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\NewsBreedings\StoreNewsBreedingRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreNewsBreedingRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreNewsBreedingRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$newsBreeding = new NewsBreeding();
@ -101,71 +95,60 @@ class NewsBreedingController extends Controller
if ($newsBreeding->saveOrFail()) {
return redirect()->route('bo.news_breedings.edit', $newsBreeding)
->with('success', __('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans_choice('models.classes.news_breeding', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_breeding', 1)),
]));
}
return redirect()->back()
->with('error', __('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans_choice('models.classes.news_breeding', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_breeding', 1)),
]));
});
}
/**
* Display the specified resource.
*
* @param \App\Models\NewsBreeding $newsBreeding
* @return \Illuminate\Contracts\View\View
*/
public function show(NewsBreeding $newsBreeding): \Illuminate\Contracts\View\View
public function show(NewsBreeding $newsBreeding): View
{
return view('bo.pages.news_breedings.show', ['newsBreedingModel' => $newsBreeding]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\NewsBreeding $newsBreeding
* @return \Illuminate\Contracts\View\View
*/
public function edit(NewsBreeding $newsBreeding): \Illuminate\Contracts\View\View
public function edit(NewsBreeding $newsBreeding): View
{
return view('bo.pages.news_breedings.edit', ['newsBreedingModel' => $newsBreeding]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\NewsBreedings\UpdateNewsBreedingRequest $request
* @param \App\Models\NewsBreeding $newsBreeding
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateNewsBreedingRequest $request,
NewsBreeding $newsBreeding
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $newsBreeding) {
$newsBreeding->fill($request->validated());
if ($newsBreeding->saveOrFail()) {
return redirect()->route('bo.news_breedings.edit', $newsBreeding)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.news_breeding', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_breeding', 1)),
]));
}
return redirect()->route('bo.news_breedings.edit', $newsBreeding)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.news_breeding', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_breeding', 1)),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\NewsBreeding $newsBreeding
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(NewsBreeding $newsBreeding): \Illuminate\Http\RedirectResponse
public function destroy(NewsBreeding $newsBreeding): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -173,22 +156,20 @@ class NewsBreedingController extends Controller
if ($newsBreeding->deleteOrFail()) {
return redirect()->route('bo.news_breedings.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.news_breeding', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_breeding', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.news_breeding', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_breeding', 1)),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\NewsBreeding $newsBreeding
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(NewsBreeding $newsBreeding): \Illuminate\Contracts\View\View
public function duplicate(NewsBreeding $newsBreeding): View
{
return $this->create($newsBreeding->replicate());
}

View file

@ -6,16 +6,18 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\NewsCategories\StoreNewsCategoryRequest;
use App\Http\Requests\Bo\NewsCategories\UpdateNewsCategoryRequest;
use App\Models\NewsCategory;
use App\Traits\Controllers\UpdateModelPublished;
use App\Traits\Controllers\ChangesModelOrder;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class NewsCategoryController extends Controller
{
use UpdateModelPublished;
use ChangesModelOrder;
use UpdateModelPublished;
/**
* Create the controller instance.
@ -27,11 +29,8 @@ class NewsCategoryController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $newsCategoryModels */
$newsCategoryModels = NewsCategory::query();
@ -61,22 +60,16 @@ class NewsCategoryController extends Controller
/**
* Show the form for creating a new resource.
*
* @param \App\Models\NewsCategory $newsCategory
* @return \Illuminate\Contracts\View\View
*/
public function create(NewsCategory $newsCategory): \Illuminate\Contracts\View\View
public function create(NewsCategory $newsCategory): View
{
return view('bo.pages.news_categories.create', ['newsCategoryModel' => $newsCategory]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\NewsCategories\StoreNewsCategoryRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreNewsCategoryRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreNewsCategoryRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$newsCategory = new NewsCategory();
@ -85,72 +78,61 @@ class NewsCategoryController extends Controller
if ($newsCategory->saveOrFail()) {
return redirect()->route('bo.news_categories.edit', $newsCategory)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1)),
]));
});
}
/**
* Display the specified resource.
*
* @param \App\Models\NewsCategory $newsCategory
* @return \Illuminate\Contracts\View\View
*/
public function show(NewsCategory $newsCategory): \Illuminate\Contracts\View\View
public function show(NewsCategory $newsCategory): View
{
return view('bo.pages.news_categories.show', ['newsCategoryModel' => $newsCategory]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\NewsCategory $newsCategory
* @return \Illuminate\Contracts\View\View
*/
public function edit(NewsCategory $newsCategory): \Illuminate\Contracts\View\View
public function edit(NewsCategory $newsCategory): View
{
return view('bo.pages.news_categories.edit', ['newsCategoryModel' => $newsCategory]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\NewsCategories\UpdateNewsCategoryRequest $request
* @param \App\Models\NewsCategory $newsCategory
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateNewsCategoryRequest $request,
NewsCategory $newsCategory
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $newsCategory) {
$newsCategory->fill($request->validated());
if ($newsCategory->saveOrFail()) {
return redirect()->route('bo.news_categories.edit', $newsCategory)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1)),
]));
}
return redirect()->route('bo.news_categories.edit', $newsCategory)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1)),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\NewsCategory $newsCategory
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(NewsCategory $newsCategory): \Illuminate\Http\RedirectResponse
public function destroy(NewsCategory $newsCategory): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -158,22 +140,20 @@ class NewsCategoryController extends Controller
if ($newsCategory->deleteOrFail()) {
return redirect()->route('bo.news_categories.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1)),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\NewsCategory $newsCategory
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(NewsCategory $newsCategory): \Illuminate\Contracts\View\View
public function duplicate(NewsCategory $newsCategory): View
{
return $this->create($newsCategory->replicate());
}

View file

@ -7,6 +7,8 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\NewsClubs\StoreNewsClubRequest;
use App\Http\Requests\Bo\NewsClubs\UpdateNewsClubRequest;
use App\Models\NewsClub;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -23,11 +25,8 @@ class NewsClubController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $newsClubModels */
$newsClubModels = NewsClub::query()
@ -59,33 +58,24 @@ class NewsClubController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\NewsClub $newsClub
* @return \Illuminate\Contracts\View\View
*/
public function show(NewsClub $newsClub): \Illuminate\Contracts\View\View
public function show(NewsClub $newsClub): View
{
return view('bo.pages.news_clubs.show', ['newsClubModel' => $newsClub]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\NewsClub $newsClub
* @return \Illuminate\Contracts\View\View
*/
public function create(NewsClub $newsClub): \Illuminate\Contracts\View\View
public function create(NewsClub $newsClub): View
{
return view('bo.pages.news_clubs.create', ['newsClubModel' => $newsClub]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\NewsClubs\StoreNewsClubRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreNewsClubRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreNewsClubRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$newsClub = new NewsClub();
@ -94,35 +84,29 @@ class NewsClubController extends Controller
if ($newsClub->saveOrFail()) {
return redirect()->route('bo.news_clubs.edit', $newsClub)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans('models.classes.news_club'))
'model' => Str::ucfirst(trans('models.classes.news_club')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans('models.classes.news_club'))
'model' => Str::ucfirst(trans('models.classes.news_club')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\NewsClub $newsClub
* @return \Illuminate\Contracts\View\View
*/
public function edit(NewsClub $newsClub): \Illuminate\Contracts\View\View
public function edit(NewsClub $newsClub): View
{
return view('bo.pages.news_clubs.edit', ['newsClubModel' => $newsClub]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\NewsClubs\UpdateNewsClubRequest $request
* @param \App\Models\NewsClub $newsClub
* @return \Illuminate\Http\RedirectResponse
*/
public function update(UpdateNewsClubRequest $request, NewsClub $newsClub): \Illuminate\Http\RedirectResponse
public function update(UpdateNewsClubRequest $request, NewsClub $newsClub): RedirectResponse
{
return DB::transaction(function () use ($request, $newsClub) {
$newsClub->fill($request->validated());
@ -130,23 +114,21 @@ class NewsClubController extends Controller
if ($newsClub->saveOrFail()) {
return redirect()->route('bo.news_clubs.edit', $newsClub)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans('models.classes.news_club'))
'model' => Str::ucfirst(trans('models.classes.news_club')),
]));
}
return redirect()->route('bo.news_clubs.edit', $newsClub)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans('models.classes.news_club'))
'model' => Str::ucfirst(trans('models.classes.news_club')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\NewsClub $newsClub
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(NewsClub $newsClub): \Illuminate\Http\RedirectResponse
public function destroy(NewsClub $newsClub): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -154,22 +136,20 @@ class NewsClubController extends Controller
if ($newsClub->deleteOrFail()) {
return redirect()->route('bo.news_clubs.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans('models.classes.news_club'))
'model' => Str::ucfirst(trans('models.classes.news_club')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans('models.classes.news_club'))
'model' => Str::ucfirst(trans('models.classes.news_club')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\NewsClub $newsClub
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(NewsClub $newsClub): \Illuminate\Contracts\View\View
public function duplicate(NewsClub $newsClub): View
{
return $this->create($newsClub->replicate());
}
@ -177,7 +157,6 @@ class NewsClubController extends Controller
/**
* Change model published.
*
* @param \App\Models\NewsClub $newsClub
* @return \Illuminate\Http\RedirectResponse
*/
public function changePublished(NewsClub $newsClub)
@ -185,22 +164,23 @@ class NewsClubController extends Controller
$newsClubModels = NewsClub::query()->where('published', true)->orderBy('created_at')->get();
if (
$newsClubModels->count() >= 3
&& !$newsClubModels->contains($newsClub)
&& !$newsClub->published
&& ! $newsClubModels->contains($newsClub)
&& ! $newsClub->published
) {
/** @var \App\Models\News $firstNews */
$firstNews = $newsClubModels->first();
$firstNews->published = false;
$firstNews->save();
}
$newsClub->update(['published' => !$newsClub->getOriginal('published')]);
$newsClub->update(['published' => ! $newsClub->getOriginal('published')]);
return redirect()->back()->with(
'success',
trans('crud.messages.publish_status_saved') . (
($newsClubModels->count() >= 3 && $newsClub->getOriginal('published'))
// phpcs:ignore Generic.Files.LineLength.TooLong
? \trans(' Maximum 3 :model doivent être publiées en même temps, la plus ancienne est donc dépubliée.', [
'model' => trans_choice('models.classes.news_club', \INF)
'model' => trans_choice('models.classes.news_club', \INF),
])
: '')
);

View file

@ -7,17 +7,19 @@ use App\Http\Requests\Bo\News\StoreNewsRequest;
use App\Http\Requests\Bo\News\UpdateNewsRequest;
use App\Models\News;
use App\Models\NewsCategory;
use App\Traits\Controllers\UpdateModelPublished;
use App\Traits\Controllers\ChangesModelOrder;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class NewsController extends Controller
{
use UpdateModelPublished;
use ChangesModelOrder;
use UpdateModelPublished;
/**
* Create the controller instance.
@ -26,20 +28,18 @@ class NewsController extends Controller
{
$this->authorizeResource(News::class);
}
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $newsModels */
$newsModels = News::query()->with('newsCategory');
/** @var string $search Search field */
$search = $request->search;
if ($search) {
if ($search) {
$this->searchQuery(
$newsModels,
$search,
@ -69,23 +69,18 @@ class NewsController extends Controller
/**
* Show the form for creating a new resource.
*
* @param \App\Models\News $news
* @return \Illuminate\Contracts\View\View
*/
public function create(News $news): \Illuminate\Contracts\View\View
public function create(News $news): View
{
$newsCategoryModels = NewsCategory::getPublishedOrdered();
return view('bo.pages.news.create', ['newsModel' => $news, 'newsCategoryModels' => $newsCategoryModels]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\News\StoreNewsRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreNewsRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreNewsRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$news = new News();
@ -93,72 +88,62 @@ class NewsController extends Controller
if ($news->saveOrFail()) {
return redirect()->route('bo.news.edit', $news)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans('models.classes.news'))
'model' => Str::ucfirst(trans('models.classes.news')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans('models.classes.news'))
'model' => Str::ucfirst(trans('models.classes.news')),
]));
});
}
/**
* Display the specified resource.
*
* @param \App\Models\News $news
* @return \Illuminate\Contracts\View\View
*/
public function show(News $news): \Illuminate\Contracts\View\View
public function show(News $news): View
{
return view('bo.pages.news.show', ['newsModel' => $news]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\News $news
* @return \Illuminate\Contracts\View\View
*/
public function edit(News $news): \Illuminate\Contracts\View\View
public function edit(News $news): View
{
$newsCategoryModels = NewsCategory::getPublishedOrdered();
return view('bo.pages.news.edit', ['newsModel' => $news, 'newsCategoryModels' => $newsCategoryModels]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\News\UpdateNewsRequest $request
* @param \App\Models\News $news
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateNewsRequest $request,
News $news
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $news) {
$news->fill($request->validated());
if ($news->saveOrFail()) {
return redirect()->route('bo.news.edit', $news)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans('models.classes.news'))
'model' => Str::ucfirst(trans('models.classes.news')),
]));
}
return redirect()->route('bo.news.edit', $news)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans('models.classes.news'))
'model' => Str::ucfirst(trans('models.classes.news')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\News $news
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(News $news): \Illuminate\Http\RedirectResponse
public function destroy(News $news): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -166,22 +151,20 @@ class NewsController extends Controller
if ($news->deleteOrFail()) {
return redirect()->route('bo.news.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans('models.classes.news'))
'model' => Str::ucfirst(trans('models.classes.news')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans('models.classes.news'))
'model' => Str::ucfirst(trans('models.classes.news')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\News $news
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(News $news): \Illuminate\Contracts\View\View
public function duplicate(News $news): View
{
return $this->create($news->replicate());
}

View file

@ -6,16 +6,18 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\NewsCorporates\StoreNewsCorporateRequest;
use App\Http\Requests\Bo\NewsCorporates\UpdateNewsCorporateRequest;
use App\Models\NewsCorporate;
use App\Traits\Controllers\UpdateModelPublished;
use App\Traits\Controllers\ChangesModelOrder;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class NewsCorporateController extends Controller
{
use UpdateModelPublished;
use ChangesModelOrder;
use UpdateModelPublished;
/**
* Create the controller instance.
@ -27,11 +29,8 @@ class NewsCorporateController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $newsCorporateModels */
$newsCorporateModels = NewsCorporate::query();
@ -62,22 +61,16 @@ class NewsCorporateController extends Controller
/**
* Show the form for creating a new resource.
*
* @param \App\Models\NewsCorporate $newsCorporate
* @return \Illuminate\Contracts\View\View
*/
public function create(NewsCorporate $newsCorporate): \Illuminate\Contracts\View\View
public function create(NewsCorporate $newsCorporate): View
{
return view('bo.pages.news_corporates.create', ['newsCorporateModel' => $newsCorporate]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\NewsCorporates\StoreNewsCorporateRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreNewsCorporateRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreNewsCorporateRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$newsCorporate = new NewsCorporate();
@ -86,72 +79,61 @@ class NewsCorporateController extends Controller
if ($newsCorporate->saveOrFail()) {
return redirect()->route('bo.news_corporates.edit', $newsCorporate)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans_choice('models.classes.news_corporate', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_corporate', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans_choice('models.classes.news_corporate', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_corporate', 1)),
]));
});
}
/**
* Display the specified resource.
*
* @param \App\Models\NewsCorporate $newsCorporate
* @return \Illuminate\Contracts\View\View
*/
public function show(NewsCorporate $newsCorporate): \Illuminate\Contracts\View\View
public function show(NewsCorporate $newsCorporate): View
{
return view('bo.pages.news_corporates.show', ['newsCorporateModel' => $newsCorporate]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\NewsCorporate $newsCorporate
* @return \Illuminate\Contracts\View\View
*/
public function edit(NewsCorporate $newsCorporate): \Illuminate\Contracts\View\View
public function edit(NewsCorporate $newsCorporate): View
{
return view('bo.pages.news_corporates.edit', ['newsCorporateModel' => $newsCorporate]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\NewsCorporates\UpdateNewsCorporateRequest $request
* @param \App\Models\NewsCorporate $newsCorporate
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateNewsCorporateRequest $request,
NewsCorporate $newsCorporate
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $newsCorporate) {
$newsCorporate->fill($request->validated());
if ($newsCorporate->saveOrFail()) {
return redirect()->route('bo.news_corporates.edit', $newsCorporate)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.news_corporate', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_corporate', 1)),
]));
}
return redirect()->route('bo.news_corporates.edit', $newsCorporate)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.news_corporate', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_corporate', 1)),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\NewsCorporate $newsCorporate
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(NewsCorporate $newsCorporate): \Illuminate\Http\RedirectResponse
public function destroy(NewsCorporate $newsCorporate): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -159,22 +141,20 @@ class NewsCorporateController extends Controller
if ($newsCorporate->deleteOrFail()) {
return redirect()->route('bo.news_corporates.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.news_corporate', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_corporate', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.news_corporate', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_corporate', 1)),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\NewsCorporate $newsCorporate
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(NewsCorporate $newsCorporate): \Illuminate\Contracts\View\View
public function duplicate(NewsCorporate $newsCorporate): View
{
return $this->create($newsCorporate->replicate());
}

View file

@ -7,6 +7,8 @@ use App\Http\Requests\Bo\Offers\StoreOfferRequest;
use App\Http\Requests\Bo\Offers\UpdateOfferRequest;
use App\Models\Offer;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -25,11 +27,8 @@ class OfferController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $offerModels */
$offerModels = Offer::query();
@ -59,33 +58,24 @@ class OfferController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\Offer $offer
* @return \Illuminate\Contracts\View\View
*/
public function show(Offer $offer): \Illuminate\Contracts\View\View
public function show(Offer $offer): View
{
return view('bo.pages.offers.show', ['offerModel' => $offer]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\Offer $offer
* @return \Illuminate\Contracts\View\View
*/
public function create(Offer $offer): \Illuminate\Contracts\View\View
public function create(Offer $offer): View
{
return view('bo.pages.offers.create', ['offerModel' => $offer]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Offers\StoreOfferRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreOfferRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreOfferRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$offer = new Offer();
@ -94,35 +84,29 @@ class OfferController extends Controller
if ($offer->saveOrFail()) {
return redirect()->route('bo.offers.edit', $offer)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans('models.classes.offer'))
'model' => Str::ucfirst(trans('models.classes.offer')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans('models.classes.offer'))
'model' => Str::ucfirst(trans('models.classes.offer')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Offer $offer
* @return \Illuminate\Contracts\View\View
*/
public function edit(Offer $offer): \Illuminate\Contracts\View\View
public function edit(Offer $offer): View
{
return view('bo.pages.offers.edit', ['offerModel' => $offer]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\Offers\UpdateOfferRequest $request
* @param \App\Models\Offer $offer
* @return \Illuminate\Http\RedirectResponse
*/
public function update(UpdateOfferRequest $request, Offer $offer): \Illuminate\Http\RedirectResponse
public function update(UpdateOfferRequest $request, Offer $offer): RedirectResponse
{
return DB::transaction(function () use ($request, $offer) {
$offer->fill($request->validated());
@ -130,23 +114,21 @@ class OfferController extends Controller
if ($offer->saveOrFail()) {
return redirect()->route('bo.offers.edit', $offer)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans('models.classes.offer'))
'model' => Str::ucfirst(trans('models.classes.offer')),
]));
}
return redirect()->route('bo.offers.edit', $offer)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans('models.classes.offer'))
'model' => Str::ucfirst(trans('models.classes.offer')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Offer $offer
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Offer $offer): \Illuminate\Http\RedirectResponse
public function destroy(Offer $offer): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -154,22 +136,20 @@ class OfferController extends Controller
if ($offer->deleteOrFail()) {
return redirect()->route('bo.offers.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans('models.classes.offer'))
'model' => Str::ucfirst(trans('models.classes.offer')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans('models.classes.offer'))
'model' => Str::ucfirst(trans('models.classes.offer')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\Offer $offer
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(Offer $offer): \Illuminate\Contracts\View\View
public function duplicate(Offer $offer): View
{
return $this->create($offer->replicate());
}

View file

@ -12,9 +12,8 @@ use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Laravel\Octane\Exceptions\DdException;
use Illuminate\Support\Str;
use Laravel\Octane\Exceptions\DdException;
class PictoController extends Controller
{
@ -39,12 +38,12 @@ class PictoController extends Controller
$query->orderBy($sortCol, $sortWay);
$pictos = $query->get();
return view('bo.pages.pictos.index-list', compact('pictos'));
}
abort(404);
}
public function create(Picto $picto)
{
return view('bo.pages.pictos.create', [
@ -55,9 +54,10 @@ class PictoController extends Controller
/**
* Store Picto.
*
* @param StorePictoRequest $request Request
* @param PictoService $pictoService Service for Picto.
* @param StorePictoRequest $request Request
* @param PictoService $pictoService Service for Picto.
* @return RedirectResponse
*
* @throws DdException
*/
public function store(StorePictoRequest $request, PictoService $pictoService)
@ -83,8 +83,6 @@ class PictoController extends Controller
/**
* Show the form for editing the specified picto (AJAX returns a partial view).
*
* @param \App\Models\Picto $picto
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function edit(Picto $picto, Request $request)
@ -95,14 +93,13 @@ class PictoController extends Controller
'section' => $picto->section,
]);
}
return view('bo.pages.pictos.edit', ['pictoModel' => $picto, 'section' => $picto->section]);
}
/**
* Update the specified picto in storage.
*
* @param \App\Http\Requests\Bo\Pictos\StorePictoRequest $request
* @param \App\Models\Picto $picto
* @return \Illuminate\Http\JsonResponse
*/
public function update(StorePictoRequest $request, Picto $picto)
@ -126,12 +123,8 @@ class PictoController extends Controller
]);
}
/**
* Save the picture width and height for a picto.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function savePictureSize(Request $request): JsonResponse
{
@ -151,11 +144,9 @@ class PictoController extends Controller
return response()->json(['success' => true]);
}
/**
* Remove the specified picto and return the refreshed picto list.
*
* @param \App\Models\Picto $picto
* @return \Illuminate\Http\JsonResponse
*/
public function destroy(Picto $picto)
@ -171,7 +162,7 @@ class PictoController extends Controller
]);
}
public function changeOrder(UpdateChangeOrderRequest $request, Picto $picto): \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
public function changeOrder(UpdateChangeOrderRequest $request, Picto $picto): JsonResponse | RedirectResponse
{
$tmp = Picto::query()
->where('section_id', $picto->section_id)
@ -179,7 +170,7 @@ class PictoController extends Controller
->orderBy('order', $request->direction ? 'DESC' : 'ASC')
->first();
if (!$tmp) {
if (! $tmp) {
return $request->ajax()
? response()->json(['message' => trans('crud.messages.order_not_changed')], 422)
: back()->with('error', trans('crud.messages.order_not_changed'));
@ -192,6 +183,7 @@ class PictoController extends Controller
});
$msg = trans('crud.messages.order_changed');
return $request->ajax()
? response()->json(['message' => $msg])
: back()->with('success', $msg);

View file

@ -15,18 +15,21 @@ use App\Models\ProductType;
use App\Models\Range;
use App\Models\Submeat;
use App\Models\Subrange;
use Illuminate\Http\Request;
use App\Traits\Controllers\UpdateModelPublished;
use App\Traits\Controllers\ChangesModelOrder;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class ProductController extends Controller
{
use UpdateModelPublished;
use ChangesModelOrder;
use UpdateModelPublished;
/**
* Create the controller instance.
@ -38,11 +41,8 @@ class ProductController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $productModels */
$productModels = Product::query()->with('ratings')->withAvg('ratings', 'rate');
@ -58,7 +58,7 @@ class ProductController extends Controller
);
}
$searchFields = \implode(', ', [
trans('validation.custom.label')
trans('validation.custom.label'),
]);
/** Sort columns with a query */
@ -72,22 +72,16 @@ class ProductController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\Product $product
* @return \Illuminate\Contracts\View\View
*/
public function show(Product $product): \Illuminate\Contracts\View\View
public function show(Product $product): View
{
return view('bo.pages.products.show', ['productModel' => $product]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\Product $product
* @return \Illuminate\Contracts\View\View
*/
public function create(Product $product): \Illuminate\Contracts\View\View
public function create(Product $product): View
{
return view('bo.pages.products.create', [
'productModel' => $product,
@ -110,11 +104,8 @@ class ProductController extends Controller
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Products\StoreProductRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreProductRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreProductRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$product = new Product();
@ -123,7 +114,6 @@ class ProductController extends Controller
['labels', 'productTypes', 'claims', 'nutritionnal_values']
));
if ($product->saveOrFail()) {
$product->labels()->sync(collect($request->validated()['labels'] ?? [])->pluck('id'));
$product->productTypes()->sync(collect($request->validated()['productTypes'] ?? [])->pluck('id'));
@ -136,24 +126,22 @@ class ProductController extends Controller
if ($nutritionnalValueModel->saveOrFail()) {
return redirect()->route('bo.products.edit', $product)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans('models.classes.product'))
'model' => Str::ucfirst(trans('models.classes.product')),
]));
}
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans('models.classes.product'))
'model' => Str::ucfirst(trans('models.classes.product')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Product $product
* @return \Illuminate\Contracts\View\View
*/
public function edit(Product $product): \Illuminate\Contracts\View\View
public function edit(Product $product): View
{
return view('bo.pages.products.edit', [
'productModel' => $product,
@ -177,12 +165,8 @@ class ProductController extends Controller
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\Products\UpdateProductRequest $request
* @param \App\Models\Product $product
* @return \Illuminate\Http\RedirectResponse
*/
public function update(UpdateProductRequest $request, Product $product): \Illuminate\Http\RedirectResponse
public function update(UpdateProductRequest $request, Product $product): RedirectResponse
{
return DB::transaction(function () use ($request, $product) {
$product->fill(Arr::except(
@ -203,23 +187,21 @@ class ProductController extends Controller
if ($product->saveOrFail() && $nutritionnalValueModel->saveOrFail()) {
return redirect()->route('bo.products.edit', $product)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans('models.classes.product'))
'model' => Str::ucfirst(trans('models.classes.product')),
]));
}
return redirect()->route('bo.products.edit', $product)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans('models.classes.product'))
'model' => Str::ucfirst(trans('models.classes.product')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Product $product
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Product $product): \Illuminate\Http\RedirectResponse
public function destroy(Product $product): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -227,37 +209,31 @@ class ProductController extends Controller
if ($product->deleteOrFail()) {
return redirect()->route('bo.products.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans('models.classes.product'))
'model' => Str::ucfirst(trans('models.classes.product')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans('models.classes.product'))
'model' => Str::ucfirst(trans('models.classes.product')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\Product $product
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(Product $product): \Illuminate\Contracts\View\View
public function duplicate(Product $product): View
{
return $this->create($product->replicate());
}
/**
* Undocumented function
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param string $fieldName
* @return \Illuminate\Pagination\LengthAwarePaginator
*/
private function getModelsPaginate(
Builder $query,
string $fieldName = "label"
): \Illuminate\Pagination\LengthAwarePaginator {
string $fieldName = 'label'
): LengthAwarePaginator {
return $query->where('published', true)
->orderBy($fieldName, 'ASC')
->paginate(10);

View file

@ -7,6 +7,8 @@ use App\Http\Requests\Bo\ProductTypes\StoreProductTypeRequest;
use App\Http\Requests\Bo\ProductTypes\UpdateProductTypeRequest;
use App\Models\ProductType;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -25,11 +27,8 @@ class ProductTypeController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $productTypeModels */
$productTypeModels = ProductType::query();
@ -61,33 +60,24 @@ class ProductTypeController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\ProductType $productType
* @return \Illuminate\Contracts\View\View
*/
public function show(ProductType $productType): \Illuminate\Contracts\View\View
public function show(ProductType $productType): View
{
return view('bo.pages.product_types.show', ['productTypeModel' => $productType]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\ProductType $productType
* @return \Illuminate\Contracts\View\View
*/
public function create(ProductType $productType): \Illuminate\Contracts\View\View
public function create(ProductType $productType): View
{
return view('bo.pages.product_types.create', ['productTypeModel' => $productType]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\ProductTypes\StoreProductTypeRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreProductTypeRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreProductTypeRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$productTypeModel = new ProductType();
@ -95,60 +85,52 @@ class ProductTypeController extends Controller
if ($productTypeModel->saveOrFail()) {
return redirect()->route('bo.product_types.edit', $productTypeModel)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans_choice('models.classes.product_type', 1))
'model' => Str::ucfirst(trans_choice('models.classes.product_type', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans_choice('models.classes.product_type', 1))
'model' => Str::ucfirst(trans_choice('models.classes.product_type', 1)),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\ProductType $productType
* @return \Illuminate\Contracts\View\View
*/
public function edit(ProductType $productType): \Illuminate\Contracts\View\View
public function edit(ProductType $productType): View
{
return view('bo.pages.product_types.edit', ['productTypeModel' => $productType]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\ProductTypes\UpdateProductTypeRequest $request
* @param \App\Models\ProductType $productType
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateProductTypeRequest $request,
ProductType $productType
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $productType) {
$productType->fill($request->validated());
if ($productType->saveOrFail()) {
return redirect()->route('bo.product_types.edit', $productType)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.product_type', 1))
'model' => Str::ucfirst(trans_choice('models.classes.product_type', 1)),
]));
}
return redirect()->route('bo.product_types.edit', $productType)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.product_type', 1))
'model' => Str::ucfirst(trans_choice('models.classes.product_type', 1)),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\ProductType $productType
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(ProductType $productType): \Illuminate\Http\RedirectResponse
public function destroy(ProductType $productType): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -156,22 +138,20 @@ class ProductTypeController extends Controller
if ($productType->deleteOrFail()) {
return redirect()->route('bo.product_types.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.product_type', 1))
'model' => Str::ucfirst(trans_choice('models.classes.product_type', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.product_type', 1))
'model' => Str::ucfirst(trans_choice('models.classes.product_type', 1)),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\ProductType $productType
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(ProductType $productType): \Illuminate\Contracts\View\View
public function duplicate(ProductType $productType): View
{
return $this->create($productType->replicate());
}
@ -179,12 +159,12 @@ class ProductTypeController extends Controller
/**
* Change model button status.
*
* @param \App\Models\ProductType $productType
* @return \Illuminate\Http\RedirectResponse
*/
public function changeButtonStatus(ProductType $productType)
{
$productType->update(['button_status' => !$productType->getOriginal('button_status')]);
$productType->update(['button_status' => ! $productType->getOriginal('button_status')]);
return redirect()->back()->with('success', trans('crud.messages.publish_status_saved'));
}
}

View file

@ -7,6 +7,8 @@ use App\Http\Requests\Bo\Professions\StoreProfessionRequest;
use App\Http\Requests\Bo\Professions\UpdateProfessionRequest;
use App\Models\Profession;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -25,11 +27,8 @@ class ProfessionController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $professionModels */
$professionModels = Profession::query();
@ -65,33 +64,24 @@ class ProfessionController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\Profession $profession
* @return \Illuminate\Contracts\View\View
*/
public function show(Profession $profession): \Illuminate\Contracts\View\View
public function show(Profession $profession): View
{
return view('bo.pages.professions.show', ['professionModel' => $profession]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\Profession $profession
* @return \Illuminate\Contracts\View\View
*/
public function create(Profession $profession): \Illuminate\Contracts\View\View
public function create(Profession $profession): View
{
return view('bo.pages.professions.create', ['professionModel' => $profession]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Professions\StoreProfessionRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreProfessionRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreProfessionRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$profession = new Profession();
@ -100,35 +90,29 @@ class ProfessionController extends Controller
if ($profession->saveOrFail()) {
return redirect()->route('bo.professions.edit', $profession)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans('models.classes.profession'))
'model' => Str::ucfirst(trans('models.classes.profession')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans('models.classes.profession'))
'model' => Str::ucfirst(trans('models.classes.profession')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Profession $profession
* @return \Illuminate\Contracts\View\View
*/
public function edit(Profession $profession): \Illuminate\Contracts\View\View
public function edit(Profession $profession): View
{
return view('bo.pages.professions.edit', ['professionModel' => $profession]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\Professions\UpdateProfessionRequest $request
* @param \App\Models\Profession $profession
* @return \Illuminate\Http\RedirectResponse
*/
public function update(UpdateProfessionRequest $request, Profession $profession): \Illuminate\Http\RedirectResponse
public function update(UpdateProfessionRequest $request, Profession $profession): RedirectResponse
{
return DB::transaction(function () use ($request, $profession) {
$profession->fill($request->validated());
@ -136,23 +120,21 @@ class ProfessionController extends Controller
if ($profession->saveOrFail()) {
return redirect()->route('bo.professions.edit', $profession)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans('models.classes.profession'))
'model' => Str::ucfirst(trans('models.classes.profession')),
]));
}
return redirect()->route('bo.professions.edit', $profession)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans('models.classes.profession'))
'model' => Str::ucfirst(trans('models.classes.profession')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Profession $profession
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Profession $profession): \Illuminate\Http\RedirectResponse
public function destroy(Profession $profession): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -160,22 +142,20 @@ class ProfessionController extends Controller
if ($profession->deleteOrFail()) {
return redirect()->route('bo.professions.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans('models.classes.profession'))
'model' => Str::ucfirst(trans('models.classes.profession')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans('models.classes.profession'))
'model' => Str::ucfirst(trans('models.classes.profession')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\Profession $profession
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(Profession $profession): \Illuminate\Contracts\View\View
public function duplicate(Profession $profession): View
{
return $this->create($profession->replicate());
}

View file

@ -10,14 +10,16 @@ use App\Models\Range;
use App\Models\Subrange;
use App\Traits\Controllers\ChangesModelOrder;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class RangeController extends Controller
{
use UpdateModelPublished;
use ChangesModelOrder;
use UpdateModelPublished;
/**
* Create the controller instance.
@ -29,11 +31,8 @@ class RangeController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $rangeModels */
$rangeModels = Range::query()->with('subranges:id,range_id');
@ -67,34 +66,24 @@ class RangeController extends Controller
/**
* Show a specific resource.
*
* @param \App\Models\Range $range
* @return \Illuminate\Contracts\View\View
*/
public function show(Range $range): \Illuminate\Contracts\View\View
public function show(Range $range): View
{
return view('bo.pages.ranges.show', ['rangeModel' => $range]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\Range $range
* @return \Illuminate\Contracts\View\View
*/
public function create(Range $range): \Illuminate\Contracts\View\View
public function create(Range $range): View
{
return view('bo.pages.ranges.create', ['rangeModel' => $range]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Ranges\StoreRangeRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreRangeRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreRangeRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$range = new Range();
@ -103,61 +92,53 @@ class RangeController extends Controller
if ($range->saveOrFail()) {
return redirect()->route('bo.ranges.edit', $range)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucFirst(trans('models.classes.range'))
'model' => Str::ucFirst(trans('models.classes.range')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucFirst(trans('models.classes.range'))
'model' => Str::ucFirst(trans('models.classes.range')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Range $range
* @return \Illuminate\Contracts\View\View
*/
public function edit(Range $range): \Illuminate\Contracts\View\View
public function edit(Range $range): View
{
return view('bo.pages.ranges.edit', ['rangeModel' => $range]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\Ranges\UpdateRangeRequest $request
* @param \App\Models\Range $range
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateRangeRequest $request,
Range $range
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $range) {
$range->fill($request->validated());
if ($range->saveOrFail()) {
return redirect()->route('bo.ranges.edit', $range)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucFirst(trans('models.classes.range'))
'model' => Str::ucFirst(trans('models.classes.range')),
]));
}
return redirect()->route('bo.ranges.edit', $range)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucFirst(trans('models.classes.range'))
'model' => Str::ucFirst(trans('models.classes.range')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Range $range
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Range $range): \Illuminate\Http\RedirectResponse
public function destroy(Range $range): RedirectResponse
{
// We can't delete a range with associated subranges.
/** @var \Illuminate\Database\Eloquent\Collection $subranges */
@ -174,57 +155,47 @@ class RangeController extends Controller
if ($range->deleteOrFail()) {
return redirect()->route('bo.ranges.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucFirst(trans('models.classes.range'))
'model' => Str::ucFirst(trans('models.classes.range')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucFirst(trans('models.classes.range'))
'model' => Str::ucFirst(trans('models.classes.range')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\Range $range
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(Range $range): \Illuminate\Contracts\View\View
public function duplicate(Range $range): View
{
return $this->create($range->replicate());
}
/**
* Show the form to edit subranges order.
*
* @param \App\Models\Range $range
*
* @return \Illuminate\Contracts\View\View
*/
public function editSubrangesOrder(Range $range): \Illuminate\Contracts\View\View
public function editSubrangesOrder(Range $range): View
{
$subranges = $range->subranges()->orderBy('order')->get();
$ranges = Range::query()->get(['id', 'label']);
return view('bo.pages.submodels_order.edit', [
'modelName' => 'range',
'model' => $range,
'models' => $ranges,
'submodels' => $subranges
'submodels' => $subranges,
]);
}
/**
* Updated the order of subranges related to a given range.
*
* @param \App\Http\Requests\Bo\Ranges\UpdateSubmodelsOrderRequest $request
* @param \App\Models\Range $range
*
* @return \Illuminate\Http\RedirectResponse
*/
public function updateSubrangesOrder(
UpdateSubmodelsOrderRequest $request,
Range $range
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
$oldList = $range->subranges()->orderBy('order')->get();
$newList = (json_decode($request->get('jsonValue'), true));

View file

@ -10,6 +10,8 @@ use App\Models\Product;
use App\Models\Recipe;
use App\Models\Video;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
@ -29,11 +31,8 @@ class RecipeController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $recipeModels */
$recipeModels = Recipe::query()->with('ratings')->withAvg('ratings', 'rate');
@ -69,30 +68,26 @@ class RecipeController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\Recipe $recipe
* @return \Illuminate\Contracts\View\View
*/
public function show(Recipe $recipe): \Illuminate\Contracts\View\View
public function show(Recipe $recipe): View
{
$productModels = Product::query()->where('published', true)->get();
return view('bo.pages.recipes.show', [
'recipeModel' => $recipe,
'recipeModel' => $recipe,
'productModels' => $productModels,
]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\Recipe $recipe
* @return \Illuminate\Contracts\View\View
*/
public function create(Recipe $recipe): \Illuminate\Contracts\View\View
public function create(Recipe $recipe): View
{
$productModels = Product::query()->where('published', true)->orderBy('label', 'ASC')->paginate(12);
$videoModels = Video::query()->where('published', true)->orderBy('order', 'ASC')->paginate(10);
$consumptionMomentModels = ConsumptionMoment::query()->orderBy('title', 'ASC')->paginate(10);
return view('bo.pages.recipes.create', [
'recipeModel' => $recipe,
'productModels' => $productModels,
@ -103,11 +98,8 @@ class RecipeController extends Controller
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Recipes\StoreRecipeRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreRecipeRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreRecipeRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$recipe = new Recipe();
@ -115,29 +107,29 @@ class RecipeController extends Controller
if ($recipe->saveOrFail()) {
$recipe->products()->sync($request->products);
return redirect()->route('bo.recipes.edit', $recipe)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans('models.classes.recipe'))
'model' => Str::ucfirst(trans('models.classes.recipe')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans('models.classes.recipe'))
'model' => Str::ucfirst(trans('models.classes.recipe')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Recipe $recipe
* @return \Illuminate\Contracts\View\View
*/
public function edit(Recipe $recipe): \Illuminate\Contracts\View\View
public function edit(Recipe $recipe): View
{
$productModels = Product::query()->where('published', true)->orderBy('label', 'ASC')->paginate(12);
$videoModels = Video::query()->where('published', true)->orderBy('title', 'ASC')->paginate(10);
$consumptionMomentModels = ConsumptionMoment::query()->orderBy('title', 'ASC')->paginate(10);
return view('bo.pages.recipes.edit', [
'recipeModel' => $recipe,
'productModels' => $productModels,
@ -148,12 +140,8 @@ class RecipeController extends Controller
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\Recipes\UpdateRecipeRequest $request
* @param \App\Models\Recipe $recipe
* @return \Illuminate\Http\RedirectResponse
*/
public function update(UpdateRecipeRequest $request, Recipe $recipe): \Illuminate\Http\RedirectResponse
public function update(UpdateRecipeRequest $request, Recipe $recipe): RedirectResponse
{
return DB::transaction(function () use ($request, $recipe) {
$recipe->fill(Arr::except($request->validated(), ['products']));
@ -163,23 +151,21 @@ class RecipeController extends Controller
if ($recipe->saveOrFail()) {
return redirect()->route('bo.recipes.edit', $recipe)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans('models.classes.recipe'))
'model' => Str::ucfirst(trans('models.classes.recipe')),
]));
}
return redirect()->route('bo.recipes.edit', $recipe)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans('models.classes.recipe'))
'model' => Str::ucfirst(trans('models.classes.recipe')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Recipe $recipe
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Recipe $recipe): \Illuminate\Http\RedirectResponse
public function destroy(Recipe $recipe): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -187,22 +173,20 @@ class RecipeController extends Controller
if ($recipe->deleteOrFail()) {
return redirect()->route('bo.recipes.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans('models.classes.recipe'))
'model' => Str::ucfirst(trans('models.classes.recipe')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans('models.classes.recipe'))
'model' => Str::ucfirst(trans('models.classes.recipe')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\Recipe $recipe
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(Recipe $recipe): \Illuminate\Contracts\View\View
public function duplicate(Recipe $recipe): View
{
return $this->create($recipe->replicate());
}
@ -210,7 +194,6 @@ class RecipeController extends Controller
/**
* Change recipe highlight.
*
* @param \App\Models\Recipe $recipe
* @return \Illuminate\Http\RedirectResponse
*/
public function changeHighlight(Recipe $recipe)
@ -223,6 +206,7 @@ class RecipeController extends Controller
}
$recipe->highlight = true;
$recipe->saveQuietly();
return redirect()->back()->with('success', trans('crud.messages.highlight_status_saved'));
}
}

View file

@ -7,6 +7,9 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\SectionApproaches\SectionApproachRequest;
use App\Models\SectionApproach;
use App\Services\SectionApproach\SectionApproachService;
use Illuminate\Contracts\View\View;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -24,11 +27,8 @@ class SectionApproachController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
$sections = SectionApproach::with(['category', 'page']);
$formData = $this->sectionApproachService->getFormData();
@ -57,11 +57,8 @@ class SectionApproachController extends Controller
/**
* Show the form for creating a new resource.
*
* @param \App\Models\SectionApproach $section_approach
* @return \Illuminate\Contracts\View\View
*/
public function create(SectionApproach $section_approach): \Illuminate\Contracts\View\View
public function create(SectionApproach $section_approach): View
{
$formData = $this->sectionApproachService->getFormData();
@ -74,11 +71,8 @@ class SectionApproachController extends Controller
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\SectionApproaches\SectionApproachRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(SectionApproachRequest $request): \Illuminate\Http\RedirectResponse
public function store(SectionApproachRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
try {
@ -95,13 +89,10 @@ class SectionApproachController extends Controller
});
}
/**
* Show the specified resource.
*
* @param \App\Models\SectionApproach $section_approach
* @return \Illuminate\Contracts\View\View
*/
public function show(SectionApproach $section_approach): \Illuminate\Contracts\View\View
/**
* Show the specified resource.
*/
public function show(SectionApproach $section_approach): View
{
return view(
'bo.pages.sections_approaches.show',
@ -111,13 +102,11 @@ class SectionApproachController extends Controller
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\SectionApproach $section_approach
* @return \Illuminate\Contracts\View\View
*/
public function edit(SectionApproach $section_approach): \Illuminate\Contracts\View\View
public function edit(SectionApproach $section_approach): View
{
$formData = $this->sectionApproachService->getFormData();
return view(
'bo.pages.sections_approaches.edit',
['sectionApproachModel' => $section_approach]
@ -126,12 +115,8 @@ class SectionApproachController extends Controller
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\SectionApproaches\SectionApproachRequest $request
* @param \App\Models\SectionApproach $section_approach
* @return \Illuminate\Http\RedirectResponse
*/
public function update(SectionApproachRequest $request, SectionApproach $section_approach): \Illuminate\Http\RedirectResponse
public function update(SectionApproachRequest $request, SectionApproach $section_approach): RedirectResponse
{
return DB::transaction(function () use ($request, $section_approach) {
try {
@ -148,13 +133,10 @@ class SectionApproachController extends Controller
});
}
/**
* Remove the specified resource from storage.
*
* @param SectionApproach $section_approach
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(SectionApproach $section_approach): \Illuminate\Http\RedirectResponse
/**
* Remove the specified resource from storage.
*/
public function destroy(SectionApproach $section_approach): RedirectResponse
{
return DB::transaction(function () use ($section_approach) {
try {
@ -173,23 +155,16 @@ class SectionApproachController extends Controller
/**
* Duplicate the specified section approach by pre-filling the create form.
*
* @param SectionApproach $section_approach
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(SectionApproach $section_approach): \Illuminate\Contracts\View\View
public function duplicate(SectionApproach $section_approach): View
{
return $this->create($section_approach->replicate());
}
/**
* Get a paginate resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function jsonPaginatePage(Request $request): \Illuminate\Http\JsonResponse
/**
* Get a paginate resource.
*/
public function jsonPaginatePage(Request $request): JsonResponse
{
$staticPageModel = $request->targetModel::whereIn('type', [
StaticPageType::ouiCBon,

View file

@ -13,13 +13,11 @@ class SectionPageController extends Controller
{
public function __construct(
private readonly SectionPageService $service
) {}
) {
}
/**
* Return all sections for a given static page.
*
* @param StaticPage $page
* @return JsonResponse
*/
public function index(StaticPage $page): JsonResponse
{
@ -30,9 +28,6 @@ class SectionPageController extends Controller
/**
* Return a single section.
*
* @param SectionPage $section
* @return JsonResponse
*/
public function show(SectionPage $section): JsonResponse
{
@ -44,10 +39,6 @@ class SectionPageController extends Controller
/**
* Update an existing section.
* Merges uploaded files into the validated data before updating.
*
* @param UpdateSectionPageRequest $request
* @param SectionPage $sectionPage
* @return JsonResponse
*/
public function update(UpdateSectionPageRequest $request, SectionPage $sectionPage): JsonResponse
{
@ -67,15 +58,12 @@ class SectionPageController extends Controller
return response()->json([
'message' => 'Section mise à jour',
'data' => $sectionPage,
'data' => $sectionPage,
]);
}
/**
* Toggle the visibility of a section.
*
* @param SectionPage $section
* @return JsonResponse
*/
public function toggleVisibility(SectionPage $section): JsonResponse
{

View file

@ -7,6 +7,8 @@ use App\Http\Requests\Bo\SellItems\StoreSellItemRequest;
use App\Http\Requests\Bo\SellItems\UpdateSellItemRequest;
use App\Models\SellItem;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -25,11 +27,8 @@ class SellItemController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $query */
$query = SellItem::query();
@ -59,33 +58,24 @@ class SellItemController extends Controller
/**
* Show the specified resource.
*
* @param \App\Models\SellItem $sellItem
* @return \Illuminate\Contracts\View\View
*/
public function show(SellItem $sellItem): \Illuminate\Contracts\View\View
public function show(SellItem $sellItem): View
{
return view('bo.pages.sell_items.show', ['sellItemModel' => $sellItem]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\SellItem $sellItem
* @return \Illuminate\Contracts\View\View
*/
public function create(SellItem $sellItem): \Illuminate\Contracts\View\View
public function create(SellItem $sellItem): View
{
return view('bo.pages.sell_items.create', ['sellItemModel' => $sellItem]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\SellItems\StoreSellItemRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreSellItemRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreSellItemRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$sellItemModel = new SellItem();
@ -94,35 +84,29 @@ class SellItemController extends Controller
if ($sellItemModel->saveOrFail()) {
return redirect()->route('bo.sell_items.edit', $sellItemModel)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1))
'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1))
'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1)),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\SellItem $sellItem
* @return \Illuminate\Contracts\View\View
*/
public function edit(SellItem $sellItem): \Illuminate\Contracts\View\View
public function edit(SellItem $sellItem): View
{
return view('bo.pages.sell_items.edit', ['sellItemModel' => $sellItem]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\SellItems\UpdateSellItemRequest $request
* @param \App\Models\SellItem $sellItem
* @return \Illuminate\Http\RedirectResponse
*/
public function update(UpdateSellItemRequest $request, SellItem $sellItem): \Illuminate\Http\RedirectResponse
public function update(UpdateSellItemRequest $request, SellItem $sellItem): RedirectResponse
{
return DB::transaction(function () use ($request, $sellItem) {
$sellItem->fill($request->validated());
@ -130,23 +114,21 @@ class SellItemController extends Controller
if ($sellItem->saveOrFail()) {
return redirect()->route('bo.sell_items.edit', $sellItem)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1))
'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1)),
]));
}
return redirect()->route('bo.sell_items.edit', $sellItem)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1))
'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1)),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\SellItem $sellItem
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(SellItem $sellItem): \Illuminate\Http\RedirectResponse
public function destroy(SellItem $sellItem): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -154,22 +136,20 @@ class SellItemController extends Controller
if ($sellItem->deleteOrFail()) {
return redirect()->route('bo.sell_items.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1))
'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1))
'model' => Str::ucfirst(trans_choice('models.classes.sell_item', 1)),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\SellItem $sellItem
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(SellItem $sellItem): \Illuminate\Contracts\View\View
public function duplicate(SellItem $sellItem): View
{
return $this->create($sellItem->replicate());
}

View file

@ -7,6 +7,7 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\StaticPages\UpdateCommonSectionRequest;
use App\Http\Requests\Bo\StaticPages\UpdateStaticPageRequest;
use App\Models\StaticPage;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -24,11 +25,8 @@ class StaticPageController extends Controller
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\StaticPage $static_page
* @return \Illuminate\Contracts\View\View
*/
public function edit(StaticPage $static_page): \Illuminate\Contracts\View\View
public function edit(StaticPage $static_page): View
{
$hasSections = in_array(
$static_page->type,
@ -45,15 +43,10 @@ class StaticPageController extends Controller
]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\StaticPages\UpdateStaticPageRequest $request
* @param \App\Models\StaticPage $static_page
* @return \Illuminate\Http\RedirectResponse
*/
public function update(UpdateStaticPageRequest $request, StaticPage $static_page): \Illuminate\Http\RedirectResponse
public function update(UpdateStaticPageRequest $request, StaticPage $static_page): RedirectResponse
{
return DB::transaction(function () use ($request, $static_page) {
$validated = $request->validated();
@ -74,27 +67,25 @@ class StaticPageController extends Controller
if ($static_page->saveOrFail()) {
return redirect()->route('bo.static_pages.edit', $static_page)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(\trans_choice('models.classes.static_page', 1))
'model' => Str::ucfirst(\trans_choice('models.classes.static_page', 1)),
]));
}
return redirect()->route('bo.static_pages.edit', $static_page)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(\trans_choice('models.classes.static_page', 1))
'model' => Str::ucfirst(\trans_choice('models.classes.static_page', 1)),
]));
});
}
/**
* Display the common section edit form for all breeding static pages.
*
* @return \Illuminate\Contracts\View\View
*/
public function getCommonSection(): \Illuminate\Contracts\View\View
public function getCommonSection(): View
{
$commonSection = StaticPage::whereIn('type', StaticPageType::getBreedingValues())
->get()
->map(fn($page) => $page->data['common_section'] ?? null)
->map(fn ($page) => $page->data['common_section'] ?? null)
->filter()
->first();
@ -105,9 +96,6 @@ class StaticPageController extends Controller
/**
* Update the common section for all breeding static pages.
*
* @param \App\Http\Requests\Bo\StaticPages\UpdateCommonSectionRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function updateCommonSection(UpdateCommonSectionRequest $request): RedirectResponse
{
@ -133,12 +121,12 @@ class StaticPageController extends Controller
->withInput()
->with('error', __('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(__('validation.custom.common_section_part'))]));
}//end try
}// end try
return redirect()
->route('bo.static_page.sections.edit')
->with('success', __('crud.messages.has_been_updated', [
'model' => Str::ucfirst(__('validation.custom.common_section_part'))
'model' => Str::ucfirst(__('validation.custom.common_section_part')),
]));
}
@ -165,27 +153,25 @@ class StaticPageController extends Controller
->back()
->withInput()
->with('error', __('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(__('validation.custom.common_section_part'))
'model' => Str::ucfirst(__('validation.custom.common_section_part')),
]));
} //end try
} // end try
return redirect()
->route('bo.static_page.commitmments.sections.edit')
->with('success', __('crud.messages.has_been_updated', [
'model' => Str::ucfirst(__('validation.custom.common_section_part'))
'model' => Str::ucfirst(__('validation.custom.common_section_part')),
]));
}
/**
* Display the common section edit form for all breeding static pages.
*
* @return \Illuminate\Contracts\View\View
*/
public function getCommitmentsCommonSection(): \Illuminate\Contracts\View\View
public function getCommitmentsCommonSection(): View
{
$commonSection = StaticPage::whereIn('type', StaticPageType::getCommitmentsPages())
->get()
->map(fn($page) => $page->data['common_section'] ?? null)
->map(fn ($page) => $page->data['common_section'] ?? null)
->filter()
->first();

View file

@ -8,6 +8,8 @@ use App\Http\Requests\Bo\Submeats\UpdateSubmeatRequest;
use App\Models\Meat;
use App\Models\Submeat;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -26,11 +28,8 @@ class SubmeatController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $submeatModels */
$submeatModels = Submeat::query()->with('meat');
@ -64,39 +63,29 @@ class SubmeatController extends Controller
/**
* Show a specific resource.
*
* @param \App\Models\Submeat $submeat
* @return \Illuminate\Contracts\View\View
*/
public function show(Submeat $submeat): \Illuminate\Contracts\View\View
public function show(Submeat $submeat): View
{
return view('bo.pages.submeats.show', ['submeatModel' => $submeat]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\Submeat $submeat
* @return \Illuminate\Contracts\View\View
*/
public function create(Submeat $submeat): \Illuminate\Contracts\View\View
public function create(Submeat $submeat): View
{
$meatModels = Meat::query()->orderBy('order')->get();
return view('bo.pages.submeats.create', [
'submeatModel' => $submeat,
'meatModels' => $meatModels,
'meatModels' => $meatModels,
]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Submeats\StoreSubmeatRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreSubmeatRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreSubmeatRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$submeat = new Submeat();
@ -105,66 +94,58 @@ class SubmeatController extends Controller
if ($submeat->saveOrFail()) {
return redirect()->route('bo.submeats.edit', $submeat)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucFirst(trans('models.classes.submeat'))
'model' => Str::ucFirst(trans('models.classes.submeat')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucFirst(trans('models.classes.submeat'))
'model' => Str::ucFirst(trans('models.classes.submeat')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Submeat $submeat
* @return \Illuminate\Contracts\View\View
*/
public function edit(Submeat $submeat): \Illuminate\Contracts\View\View
public function edit(Submeat $submeat): View
{
$meatModels = Meat::query()->orderBy('order')->get();
return view('bo.pages.submeats.edit', [
'submeatModel' => $submeat,
'meatModels' => $meatModels,
'meatModels' => $meatModels,
]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\Submeats\UpdateSubmeatRequest $request
* @param \App\Models\Submeat $submeat
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateSubmeatRequest $request,
Submeat $submeat
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $submeat) {
$submeat->fill($request->validated());
if ($submeat->saveOrFail()) {
return redirect()->route('bo.submeats.edit', $submeat)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucFirst(trans('models.classes.submeat'))
'model' => Str::ucFirst(trans('models.classes.submeat')),
]));
}
return redirect()->route('bo.submeats.edit', $submeat)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucFirst(trans('models.classes.submeat'))
'model' => Str::ucFirst(trans('models.classes.submeat')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Submeat $submeat
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Submeat $submeat): \Illuminate\Http\RedirectResponse
public function destroy(Submeat $submeat): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -172,22 +153,20 @@ class SubmeatController extends Controller
if ($submeat->deleteOrFail()) {
return redirect()->route('bo.submeats.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucFirst(trans('models.classes.submeat'))
'model' => Str::ucFirst(trans('models.classes.submeat')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucFirst(trans('models.classes.submeat'))
'model' => Str::ucFirst(trans('models.classes.submeat')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\Submeat $submeat
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(Submeat $submeat): \Illuminate\Contracts\View\View
public function duplicate(Submeat $submeat): View
{
return $this->create($submeat->replicate());
}

View file

@ -8,6 +8,8 @@ use App\Http\Requests\Bo\Subranges\UpdateSubrangeRequest;
use App\Models\Range;
use App\Models\Subrange;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -26,11 +28,8 @@ class SubrangeController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $subrangeModels */
$subrangeModels = Subrange::query()->with('range');
@ -64,23 +63,16 @@ class SubrangeController extends Controller
/**
* Show a specific resource.
*
* @param \App\Models\Subrange $subrange
* @return \Illuminate\Contracts\View\View
*/
public function show(Subrange $subrange): \Illuminate\Contracts\View\View
public function show(Subrange $subrange): View
{
return view('bo.pages.subranges.show', ['subrangeModel' => $subrange]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\Subrange $subrange
* @return \Illuminate\Contracts\View\View
*/
public function create(Subrange $subrange): \Illuminate\Contracts\View\View
public function create(Subrange $subrange): View
{
$rangeModels = Range::query()->orderBy('order')->get();
@ -92,11 +84,8 @@ class SubrangeController extends Controller
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Subranges\StoreSubrangeRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreSubrangeRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreSubrangeRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$subrange = new Subrange();
@ -105,23 +94,21 @@ class SubrangeController extends Controller
if ($subrange->saveOrFail()) {
return redirect()->route('bo.subranges.edit', $subrange)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucFirst(trans('models.classes.subrange'))
'model' => Str::ucFirst(trans('models.classes.subrange')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucFirst(trans('models.classes.subrange'))
'model' => Str::ucFirst(trans('models.classes.subrange')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Subrange $subrange
* @return \Illuminate\Contracts\View\View
*/
public function edit(Subrange $subrange): \Illuminate\Contracts\View\View
public function edit(Subrange $subrange): View
{
$rangeModels = Range::query()->orderBy('order')->get();
@ -133,38 +120,32 @@ class SubrangeController extends Controller
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\Subranges\UpdateSubrangeRequest $request
* @param \App\Models\Subrange $subrange
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateSubrangeRequest $request,
Subrange $subrange
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $subrange) {
$subrange->fill($request->validated());
if ($subrange->saveOrFail()) {
return redirect()->route('bo.subranges.edit', $subrange)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucFirst(trans('models.classes.subrange'))
'model' => Str::ucFirst(trans('models.classes.subrange')),
]));
}
return redirect()->route('bo.subranges.edit', $subrange)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucFirst(trans('models.classes.subrange'))
'model' => Str::ucFirst(trans('models.classes.subrange')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Subrange $subrange
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Subrange $subrange): \Illuminate\Http\RedirectResponse
public function destroy(Subrange $subrange): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -172,22 +153,20 @@ class SubrangeController extends Controller
if ($subrange->deleteOrFail()) {
return redirect()->route('bo.subranges.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucFirst(trans('models.classes.subrange'))
'model' => Str::ucFirst(trans('models.classes.subrange')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucFirst(trans('models.classes.subrange'))
'model' => Str::ucFirst(trans('models.classes.subrange')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\Subrange $subrange
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(Subrange $subrange): \Illuminate\Contracts\View\View
public function duplicate(Subrange $subrange): View
{
return $this->create($subrange->replicate());
}

View file

@ -10,7 +10,9 @@ use App\Http\Requests\Bo\UpdateChangeOrderRequest;
use App\Models\NewsClub;
use App\Models\SurveysAnswer;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
@ -30,11 +32,8 @@ class SurveysAnswerController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $query */
$query = SurveysAnswer::query()->with('newsClub');
@ -75,29 +74,24 @@ class SurveysAnswerController extends Controller
/**
* Show the form for creating a new resource.
*
* @param \App\Models\SurveysAnswer $surveysAnswer
* @return \Illuminate\Contracts\View\View
*/
public function create(SurveysAnswer $surveysAnswer): \Illuminate\Contracts\View\View
public function create(SurveysAnswer $surveysAnswer): View
{
$newsClubModels = NewsClub::query()
->where('published', true)
->where('type', NewsClubTypeEnum::survey)
->paginate(10);
return view('bo.pages.surveys_answers.create', [
'surveysAnswerModel' => $surveysAnswer,
'newsClubModels' => $newsClubModels
'newsClubModels' => $newsClubModels,
]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\SurveysAnswers\StoreSurveysAnswerRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreSurveysAnswerRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreSurveysAnswerRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$surveysAnswer = new SurveysAnswer();
@ -106,79 +100,69 @@ class SurveysAnswerController extends Controller
if ($surveysAnswer->saveOrFail()) {
return redirect()->route('bo.surveys_answers.edit', $surveysAnswer)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1)),
]));
});
}
/**
* Display the specified resource.
*
* @param \App\Models\SurveysAnswer $surveysAnswer
* @return \Illuminate\Contracts\View\View
*/
public function show(SurveysAnswer $surveysAnswer): \Illuminate\Contracts\View\View
public function show(SurveysAnswer $surveysAnswer): View
{
return view('bo.pages.surveys_answers.show', ['surveysAnswerModel' => $surveysAnswer]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\SurveysAnswer $surveysAnswer
* @return \Illuminate\Contracts\View\View
*/
public function edit(SurveysAnswer $surveysAnswer): \Illuminate\Contracts\View\View
public function edit(SurveysAnswer $surveysAnswer): View
{
$newsClubModels = NewsClub::query()
->where('published', true)
->where('type', NewsClubTypeEnum::survey)
->paginate(10);
return view('bo.pages.surveys_answers.edit', [
'surveysAnswerModel' => $surveysAnswer,
'newsClubModels' => $newsClubModels
'newsClubModels' => $newsClubModels,
]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\SurveysAnswers\UpdateSurveysAnswerRequest $request
* @param \App\Models\SurveysAnswer $surveysAnswer
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateSurveysAnswerRequest $request,
SurveysAnswer $surveysAnswer
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $surveysAnswer) {
$surveysAnswer->fill($request->validated());
if ($surveysAnswer->saveOrFail()) {
return redirect()->route('bo.surveys_answers.edit', $surveysAnswer)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1)),
]));
}
return redirect()->route('bo.surveys_answers.edit', $surveysAnswer)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1)),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\SurveysAnswer $surveysAnswer
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(SurveysAnswer $surveysAnswer): \Illuminate\Http\RedirectResponse
public function destroy(SurveysAnswer $surveysAnswer): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -186,22 +170,20 @@ class SurveysAnswerController extends Controller
if ($surveysAnswer->deleteOrFail()) {
return redirect()->route('bo.surveys_answers.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1)),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1))
'model' => Str::ucfirst(trans_choice('models.classes.news_category', 1)),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\SurveysAnswer $surveysAnswer
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(SurveysAnswer $surveysAnswer): \Illuminate\Contracts\View\View
public function duplicate(SurveysAnswer $surveysAnswer): View
{
return $this->create($surveysAnswer->replicate());
}
@ -209,23 +191,20 @@ class SurveysAnswerController extends Controller
/**
* Change order.
*
* @param \App\Http\Requests\Bo\UpdateChangeOrderRequest $request
* @param mixed ...$params
* @return \Illuminate\Http\RedirectResponse
* @throws \RuntimeException Si le nom du parametre de la route ne correspond pas au params utilisé.
*/
public function changeOrder(UpdateChangeOrderRequest $request, mixed ...$params): \Illuminate\Http\RedirectResponse
public function changeOrder(UpdateChangeOrderRequest $request, mixed ...$params): RedirectResponse
{
$paramNames = collect(request()->route()->parameterNames);
$className = Str::of($paramNames->get($paramNames->count() - 3))->lower()->studly();
$className = "\\App\\Models\\{$className}";
$model = Arr::get($params, $paramNames->count() - 3);
if (!class_exists($className)) {
if (! class_exists($className)) {
throw new \RuntimeException("The {$className} class doesn't exist.");
}
if (!\is_object($model)) {
if (! \is_object($model)) {
throw new \RuntimeException("The second last param isn't an object.");
}
@ -238,9 +217,10 @@ class SurveysAnswerController extends Controller
->where($model->getRouteKeyName(), $model->getRouteKey())
->first();
if (!$model) {
if (! $model) {
return back()->with('error', trans('crud.messages.order_not_changed'));
}
return DB::transaction(function () use ($request, $className, $model) {
/** @var \App\Models\NewsClub $newsClubModel */
$newsClubModel = request()->route()->parameter('news_club');
@ -253,7 +233,7 @@ class SurveysAnswerController extends Controller
->orderBy('order', $request->direction ? 'DESC' : 'ASC')
->first();
if (!$tmp) {
if (! $tmp) {
return back()->with('error', trans('crud.messages.order_not_changed'));
}

View file

@ -8,6 +8,8 @@ use App\Http\Requests\Bo\Testimonials\UpdateTestimonialRequest;
use App\Models\Meat;
use App\Models\Testimonial;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -26,11 +28,8 @@ class TestimonialController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $testimonialModels */
$testimonialModels = Testimonial::query();
@ -66,23 +65,16 @@ class TestimonialController extends Controller
/**
* Show a specific resource.
*
* @param \App\Models\Testimonial $testimonial
* @return \Illuminate\Contracts\View\View
*/
public function show(Testimonial $testimonial): \Illuminate\Contracts\View\View
public function show(Testimonial $testimonial): View
{
return view('bo.pages.testimonials.show', ['testimonialModel' => $testimonial]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\Testimonial $testimonial
* @return \Illuminate\Contracts\View\View
*/
public function create(Testimonial $testimonial): \Illuminate\Contracts\View\View
public function create(Testimonial $testimonial): View
{
$meatModels = Meat::query()->orderBy('order')->get();
@ -94,11 +86,8 @@ class TestimonialController extends Controller
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Testimonials\StoreTestimonialRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreTestimonialRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreTestimonialRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$testimonial = new Testimonial();
@ -107,23 +96,21 @@ class TestimonialController extends Controller
if ($testimonial->saveOrFail()) {
return redirect()->route('bo.testimonials.edit', $testimonial)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucFirst(trans('models.classes.testimonial'))
'model' => Str::ucFirst(trans('models.classes.testimonial')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucFirst(trans('models.classes.testimonial'))
'model' => Str::ucFirst(trans('models.classes.testimonial')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Testimonial $testimonial
* @return \Illuminate\Contracts\View\View
*/
public function edit(Testimonial $testimonial): \Illuminate\Contracts\View\View
public function edit(Testimonial $testimonial): View
{
$meatModels = Meat::query()->orderBy('order')->get();
@ -135,38 +122,32 @@ class TestimonialController extends Controller
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\Testimonials\UpdateTestimonialRequest $request
* @param \App\Models\Testimonial $testimonial
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateTestimonialRequest $request,
Testimonial $testimonial
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $testimonial) {
$testimonial->fill($request->validated());
if ($testimonial->saveOrFail()) {
return redirect()->route('bo.testimonials.edit', $testimonial)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucFirst(trans('models.classes.testimonial'))
'model' => Str::ucFirst(trans('models.classes.testimonial')),
]));
}
return redirect()->route('bo.testimonials.edit', $testimonial)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucFirst(trans('models.classes.testimonial'))
'model' => Str::ucFirst(trans('models.classes.testimonial')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Testimonial $testimonial
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Testimonial $testimonial): \Illuminate\Http\RedirectResponse
public function destroy(Testimonial $testimonial): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -174,22 +155,20 @@ class TestimonialController extends Controller
if ($testimonial->deleteOrFail()) {
return redirect()->route('bo.testimonials.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucFirst(trans('models.classes.testimonial'))
'model' => Str::ucFirst(trans('models.classes.testimonial')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucFirst(trans('models.classes.testimonial'))
'model' => Str::ucFirst(trans('models.classes.testimonial')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\Testimonial $testimonial
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(Testimonial $testimonial): \Illuminate\Contracts\View\View
public function duplicate(Testimonial $testimonial): View
{
return $this->create($testimonial->replicate());
}

View file

@ -12,13 +12,12 @@ class UploadController extends Controller
* Upload a file sent in a request.
* Used for picture upload in CKEditor.
*
* @param \App\Http\Requests\Bo\UploadFileRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function uploadFile(UploadFileRequest $request)
{
$modelClass = "App\\Models\\$request->folder";
if (!class_exists($modelClass)) {
if (! class_exists($modelClass)) {
return response()->json(['error' => 'Invalid model class'], 404);
}
$model = new $modelClass();

View file

@ -7,6 +7,8 @@ use App\Http\Requests\Bo\Users\StoreUserRequest;
use App\Http\Requests\Bo\Users\UpdateUserRequest;
use App\Models\User;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -25,11 +27,8 @@ class UserController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $userModels */
$userModels = User::query();
@ -65,33 +64,24 @@ class UserController extends Controller
/**
* Show the form for creating a new resource.
*
* @param \App\Models\User $user
* @return \Illuminate\Contracts\View\View
*/
public function create(User $user): \Illuminate\Contracts\View\View
public function create(User $user): View
{
return view('bo.pages.users.create', ['userModel' => $user]);
}
/**
* Show a specific resource.
*
* @param \App\Models\User $user
* @return \Illuminate\Contracts\View\View
*/
public function show(User $user): \Illuminate\Contracts\View\View
public function show(User $user): View
{
return view('bo.pages.users.show', ['userModel' => $user]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Users\StoreUserRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreUserRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreUserRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$user = new User();
@ -100,35 +90,29 @@ class UserController extends Controller
if ($user->saveOrFail()) {
return redirect()->route('bo.users.edit', $user)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucfirst(trans('models.classes.user'))
'model' => Str::ucfirst(trans('models.classes.user')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucfirst(trans('models.classes.user'))
'model' => Str::ucfirst(trans('models.classes.user')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\User $user
* @return \Illuminate\Contracts\View\View
*/
public function edit(User $user): \Illuminate\Contracts\View\View
public function edit(User $user): View
{
return view('bo.pages.users.edit', ['userModel' => $user]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\Users\UpdateUserRequest $request
* @param \App\Models\User $user
* @return \Illuminate\Http\RedirectResponse
*/
public function update(UpdateUserRequest $request, User $user): \Illuminate\Http\RedirectResponse
public function update(UpdateUserRequest $request, User $user): RedirectResponse
{
return DB::transaction(function () use ($request, $user) {
$user->fill($request->validated());
@ -136,23 +120,21 @@ class UserController extends Controller
if ($user->saveOrFail()) {
return redirect()->route('bo.users.edit', $user)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans('models.classes.user'))
'model' => Str::ucfirst(trans('models.classes.user')),
]));
}
return redirect()->route('bo.users.edit', $user)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans('models.classes.user'))
'model' => Str::ucfirst(trans('models.classes.user')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\User $user
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(User $user): \Illuminate\Http\RedirectResponse
public function destroy(User $user): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -160,22 +142,20 @@ class UserController extends Controller
if ($user->deleteOrFail()) {
return redirect()->route('bo.users.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucfirst(trans('models.classes.user'))
'model' => Str::ucfirst(trans('models.classes.user')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucfirst(trans('models.classes.user'))
'model' => Str::ucfirst(trans('models.classes.user')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\User $user
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(User $user): \Illuminate\Contracts\View\View
public function duplicate(User $user): View
{
return $this->create($user->replicate());
}

View file

@ -9,14 +9,16 @@ use App\Models\Product;
use App\Models\Video;
use App\Traits\Controllers\ChangesModelOrder;
use App\Traits\Controllers\UpdateModelPublished;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class VideoController extends Controller
{
use UpdateModelPublished;
use ChangesModelOrder;
use UpdateModelPublished;
/**
* Create the controller instance.
@ -28,11 +30,8 @@ class VideoController extends Controller
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request): \Illuminate\Contracts\View\View
public function index(Request $request): View
{
/** @var \Illuminate\Database\Eloquent\Builder $videoModels */
$videoModels = Video::query();
@ -62,23 +61,16 @@ class VideoController extends Controller
/**
* Show a specific resource.
*
* @param \App\Models\Video $video
* @return \Illuminate\Contracts\View\View
*/
public function show(Video $video): \Illuminate\Contracts\View\View
public function show(Video $video): View
{
return view('bo.pages.videos.show', ['videoModel' => $video]);
}
/**
* Show the form for creating a new resource.
*
* @param \App\Models\Video $video
* @return \Illuminate\Contracts\View\View
*/
public function create(Video $video): \Illuminate\Contracts\View\View
public function create(Video $video): View
{
$productModels = Product::query()->orderBy('label', 'ASC')->paginate(10);
@ -87,11 +79,8 @@ class VideoController extends Controller
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Bo\Videos\StoreVideoRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreVideoRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreVideoRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
$video = new Video();
@ -100,23 +89,21 @@ class VideoController extends Controller
if ($video->saveOrFail()) {
return redirect()->route('bo.videos.edit', $video)
->with('success', trans('crud.messages.has_been_created', [
'model' => Str::ucFirst(trans('models.classes.video'))
'model' => Str::ucFirst(trans('models.classes.video')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_created', [
'model' => Str::ucFirst(trans('models.classes.video'))
'model' => Str::ucFirst(trans('models.classes.video')),
]));
});
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Video $video
* @return \Illuminate\Contracts\View\View
*/
public function edit(Video $video): \Illuminate\Contracts\View\View
public function edit(Video $video): View
{
$productModels = Product::query()->orderBy('label', 'ASC')->paginate(10);
@ -125,38 +112,32 @@ class VideoController extends Controller
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Bo\Videos\UpdateVideoRequest $request
* @param \App\Models\Video $video
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateVideoRequest $request,
Video $video
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request, $video) {
$video->fill($request->validated());
if ($video->saveOrFail()) {
return redirect()->route('bo.videos.edit', $video)
->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucFirst(trans('models.classes.video'))
'model' => Str::ucFirst(trans('models.classes.video')),
]));
}
return redirect()->route('bo.videos.edit', $video)
->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucFirst(trans('models.classes.video'))
'model' => Str::ucFirst(trans('models.classes.video')),
]));
});
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Video $video
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Video $video): \Illuminate\Http\RedirectResponse
public function destroy(Video $video): RedirectResponse
{
/** @var array<string,string> */
$previousQueries = [];
@ -164,35 +145,31 @@ class VideoController extends Controller
if ($video->deleteOrFail()) {
return redirect()->route('bo.videos.index', $previousQueries)
->with('success', trans('crud.messages.has_been_deleted', [
'model' => Str::ucFirst(trans('models.classes.video'))
'model' => Str::ucFirst(trans('models.classes.video')),
]));
}
return redirect()->back()
->with('error', trans('crud.messages.cannot_be_deleted', [
'model' => Str::ucFirst(trans('models.classes.video'))
'model' => Str::ucFirst(trans('models.classes.video')),
]));
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\Video $video
* @return \Illuminate\Contracts\View\View
*/
public function duplicate(Video $video): \Illuminate\Contracts\View\View
public function duplicate(Video $video): View
{
return $this->create($video->replicate());
}
/**
* Duplicate the specified resource.
*
* @param \App\Models\Video $video
* @return \Illuminate\Http\RedirectResponse
*/
public function changeHomepage(Video $video): \Illuminate\Http\RedirectResponse
public function changeHomepage(Video $video): RedirectResponse
{
$video->update(['is_on_homepage' => !$video->getOriginal('is_on_homepage')]);
$video->update(['is_on_homepage' => ! $video->getOriginal('is_on_homepage')]);
return redirect()->back()->with('success', trans('crud.messages.publish_status_saved'));
}
}

View file

@ -3,14 +3,15 @@
namespace App\Http\Controllers\Club\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\View\View;
use Illuminate\Foundation\Auth\ConfirmsPasswords;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
class ConfirmPasswordController extends Controller
{
use ConfirmsPasswords;
/**
* Create a new controller instance.
*
@ -23,21 +24,18 @@ class ConfirmPasswordController extends Controller
/**
* Display the password confirmation view.
*
* @return \Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse
*/
public function showConfirmForm(): \Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse
public function showConfirmForm(): View | RedirectResponse
{
if (Auth::guard('club')->check()) {
return \response()->redirectToRoute('home');
}
return view('club.auth.passwords.confirm');
}
/**
* Get the post register / login redirect path.
*
* @return string
*/
public function redirectPath(): string
{

View file

@ -5,9 +5,12 @@ namespace App\Http\Controllers\Club\Auth;
use App\Http\Controllers\Controller;
use App\Lib\Utils;
use App\Models\Customer;
use Illuminate\Contracts\Auth\PasswordBroker;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
use Illuminate\View\View;
class ForgotPasswordController extends Controller
{
@ -17,10 +20,11 @@ class ForgotPasswordController extends Controller
* Message to user
*
* @var string
*
* @phpcs:disable Generic.Files.LineLength.TooLong
*/
private $message = 'Si votre compte existe vous devriez recevoir un message avec un lien pour réinitialiser votre mot de passe';
//phpcs:enable
// phpcs:enable
/**
* Create a new controller instance.
@ -34,20 +38,16 @@ class ForgotPasswordController extends Controller
/**
* Display the form to request a password reset link.
*
* @return \Illuminate\View\View
*/
public function showLinkRequestForm(): \Illuminate\View\View
public function showLinkRequestForm(): View
{
return view('club.auth.passwords.email');
}
/**
* Get the broker to be used during password reset.
*
* @return \Illuminate\Contracts\Auth\PasswordBroker
*/
public function broker(): \Illuminate\Contracts\Auth\PasswordBroker
public function broker(): PasswordBroker
{
return Password::broker('customers');
}
@ -56,34 +56,29 @@ class ForgotPasswordController extends Controller
* Get the response for a successful password reset link.
* ! Dans les deux cas on ne divulgue pas si un user existe.
*
* @param \Illuminate\Http\Request $request
* @param string $response
* @return \Illuminate\Http\RedirectResponse
* @param string $response
*
* @phpcs:disable
*/
protected function sendResetLinkResponse(Request $request, $response): \Illuminate\Http\RedirectResponse
protected function sendResetLinkResponse(Request $request, $response): RedirectResponse
{
//phpcs:enable
// phpcs:enable
return back()->with('info', trans($this->message));
}
/**
* Get the response for a failed password reset link.
* ! Dans les deux cas on ne divulgue pas si un user existe.
*
* @param \Illuminate\Http\Request $request
* @param string $response
* @return \Illuminate\Http\RedirectResponse
*/
protected function sendResetLinkFailedResponse(
Request $request,
string $response
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
// ! Ne pas notifier que l'utilisateur n'existe pas.
if ($response === 'passwords.user') {
return back()->with('info', trans($this->message));
}
// * Renvoyer les autres message d'erreur style throttle.
return back()
->withInput($request->only('email'))
@ -94,7 +89,6 @@ class ForgotPasswordController extends Controller
* Send a reset link to the given user.
* ! Overload this method to re-create customer if he's deleted from local database but active in CRM.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/
public function sendResetLinkEmail(Request $request)
@ -104,9 +98,9 @@ class ForgotPasswordController extends Controller
// Search for a local customer and re-create it if it's not in local database but in CRM.
$email = $request->input('email');
$crm = app('crmAPI');
if (!Customer::query()->where('email', $email)->first() and $crmCustomer = $crm->getCustomer($email)) {
if (! Customer::query()->where('email', $email)->first() and $crmCustomer = $crm->getCustomer($email)) {
$customer = Customer::firstOrNew([
'email' => $crmCustomer->email
'email' => $crmCustomer->email,
]);
$customer->hashcode = $crmCustomer->hashcode;
$customer->username = Utils::getUniquePseudo(

View file

@ -6,6 +6,8 @@ use App\Http\Controllers\Controller;
use App\Lib\Utils;
use App\Models\Customer;
use Exception;
use Illuminate\Contracts\Auth\StatefulGuard;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
@ -31,28 +33,22 @@ class LoginController extends Controller
/**
* Get the guard to be used during authentication.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard(): \Illuminate\Contracts\Auth\StatefulGuard
protected function guard(): StatefulGuard
{
return Auth::guard('club');
}
/**
* Show the application's login form.
*
* @return \Illuminate\Contracts\View\View
*/
public function showLoginForm(): \Illuminate\Contracts\View\View
public function showLoginForm(): View
{
return view('club.auth.login');
}
/**
* Where to redirect users after login.
*
* @return string
*/
protected function redirectTo(): string
{
@ -61,9 +57,6 @@ class LoginController extends Controller
/**
* Attempt to log the user into the application.
*
* @param \Illuminate\Http\Request $request
* @return boolean
*/
protected function attemptLogin(Request $request): bool
{
@ -72,9 +65,9 @@ class LoginController extends Controller
$crmCustomer = CrmCustomer::findWithEmail(Arr::get($credentials, 'email'));
// Check database customer.
if (!$customerModel) {
if (! $customerModel) {
// Check crm customer.
if (!$crmCustomer) {
if (! $crmCustomer) {
return false;
}
@ -86,34 +79,34 @@ class LoginController extends Controller
);
$customerModel->hashcode = $crmCustomer->hashcode;
if (!$customerModel->saveOrFail()) {
if (! $customerModel->saveOrFail()) {
return false;
}
} else {
// Check crm customer.
if (!$crmCustomer) {
if (! $crmCustomer) {
$customerModel->delete();
return false;
}
} //end if
} // end if
try {
CrmCustomer::login(Arr::get($credentials, 'email'), Arr::get($credentials, 'password'));
} catch (Exception $ex) {
Log::error($ex);
return false;
}
$this->guard()->loginUsingId($customerModel->getKey());
return true;
}
/**
* The user has been authenticated.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Database\Eloquent\Model $customerModel
* @return void
* @phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing, Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed
*/
protected function authenticated(Request $request, Model $customerModel): void
@ -127,8 +120,6 @@ class LoginController extends Controller
/**
* The user has logged out of the application.
*
* @param \Illuminate\Http\Request $request
* @return void
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
*/
protected function loggedOut(Request $request): void

View file

@ -61,6 +61,7 @@ class RegisterController extends Controller
{
$request = StoreCustomerRequest::capture();
$request->prepareForValidation();
return Validator::make(
$request->validationData(),
$request->rules(),
@ -72,8 +73,8 @@ class RegisterController extends Controller
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\Models\Customer
*
* @throws IlluminateValidationException If there are validation errors.
* @throws \RuntimeException On unhandled api Error.
*/
@ -102,7 +103,7 @@ class RegisterController extends Controller
// * Enregistrement du Hashcode
/** @var \App\Models\Customer $customer */
$customer = new Customer(
Arr::only($data, (new \ReflectionClass(\App\Models\Customer::class))
Arr::only($data, (new \ReflectionClass(Customer::class))
->getProperty('fillable')->getDefaultValue())
);
$customer->hashcode = $crmCustomer->hashcode;
@ -118,12 +119,12 @@ class RegisterController extends Controller
} catch (ApiErrorException $e) {
if ($e->getApiError()->equals(ApiError::customerExists)) {
throw IlluminateValidationException::withMessages([
'error' => trans('Un compte est déjà associé à cette adresse email.')
'error' => trans('Un compte est déjà associé à cette adresse email.'),
]);
}
if ($e->getApiError()->equals(ApiError::validationFailed)) {
throw IlluminateValidationException::withMessages([
'error' => $e->getMessage()
'error' => $e->getMessage(),
]);
}
report($e);
@ -131,9 +132,9 @@ class RegisterController extends Controller
throw new \RuntimeException(__CLASS__ . '::create reached end of possibilities.');
} catch (CrmValidationException $e) {
throw IlluminateValidationException::withMessages([
'error' => $e->getMessage()
'error' => $e->getMessage(),
]);
} //end try
} // end try
}
/**

View file

@ -5,6 +5,9 @@ namespace App\Http\Controllers\Club\Auth;
use App\Http\Controllers\Controller;
use App\Models\Customer;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Contracts\Auth\PasswordBroker;
use Illuminate\Contracts\Auth\StatefulGuard;
use Illuminate\Contracts\View\View;
use Illuminate\Foundation\Auth\ResetsPasswords;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
@ -31,10 +34,8 @@ class ResetPasswordController extends Controller
/**
* Get the guard to be used during authentication.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard(): \Illuminate\Contracts\Auth\StatefulGuard
protected function guard(): StatefulGuard
{
return Auth::guard('club');
}
@ -43,26 +44,20 @@ class ResetPasswordController extends Controller
* Display the password reset view for the given token.
*
* If no token is present, display the link request form.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function showResetForm(Request $request): \Illuminate\Contracts\View\View
public function showResetForm(Request $request): View
{
$token = $request->route()->parameter('token');
return view('club.auth.passwords.reset')->with([
'token' => $token,
'email' => $request->email
'email' => $request->email,
]);
}
/**
* Reset the given user's password.
*
* @param \App\Models\Customer $customer
* @param string $password
* @return void
* @throws \Illuminate\Validation\ValidationException If something goes wrong.
*/
protected function resetPassword(Customer $customer, string $password): void
@ -71,9 +66,9 @@ class ResetPasswordController extends Controller
$crm = app('crmAPI');
try {
if (!($crmCustomer = $crm->getCustomer($customer->hashcode))) {
if (! ($crmCustomer = $crm->getCustomer($customer->hashcode))) {
throw ValidationException::withMessages([
'error' => trans('Changement impossible, compte inexistant.')
'error' => trans('Changement impossible, compte inexistant.'),
]);
}
$crmCustomer->password = $password;
@ -81,11 +76,11 @@ class ResetPasswordController extends Controller
} catch (\TypeError | CrmException | ApiErrorException $e) {
report($e);
throw ValidationException::withMessages([
'error' => trans('Une erreur est survenue, merci de réessayer ultérieurement.')
'error' => trans('Une erreur est survenue, merci de réessayer ultérieurement.'),
]);
} catch (ExceptionsValidationException $e) {
throw ValidationException::withMessages([
'password' => $e->getMessage()
'password' => $e->getMessage(),
]);
}
@ -99,8 +94,6 @@ class ResetPasswordController extends Controller
/**
* Get the post register / login redirect path.
*
* @return string
*/
public function redirectPath(): string
{
@ -109,10 +102,8 @@ class ResetPasswordController extends Controller
/**
* Get the broker to be used during password reset.
*
* @return \Illuminate\Contracts\Auth\PasswordBroker
*/
public function broker(): \Illuminate\Contracts\Auth\PasswordBroker
public function broker(): PasswordBroker
{
return Password::broker('customers');
}

View file

@ -6,8 +6,10 @@ use App\Http\Controllers\Controller;
use App\Models\Customer;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Auth\Events\Verified;
use Illuminate\Contracts\View\View;
use Illuminate\Foundation\Auth\VerifiesEmails;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use LDC\LDCCRM\Enums\ApiError;
@ -33,11 +35,8 @@ class VerificationController extends Controller
/**
* Show the email verification notice.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Contracts\View\View
*/
public function show(Request $request): \Illuminate\Http\RedirectResponse|\Illuminate\Contracts\View\View
public function show(Request $request): RedirectResponse | View
{
return $request->user('club')->hasVerifiedEmail()
? redirect($this->redirectPath())
@ -49,20 +48,18 @@ class VerificationController extends Controller
*
* ! Overloaded trait
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
* @throws \Illuminate\Auth\Access\AuthorizationException If request is invalid.
*/
public function verify(Request $request): \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
public function verify(Request $request): JsonResponse | RedirectResponse
{
/** @var \App\Models\Customer */
$user = Customer::findOrFail($request->route('id'));
if (!hash_equals((string) $request->route('id'), (string) $user->getKey())) {
if (! hash_equals((string) $request->route('id'), (string) $user->getKey())) {
throw new AuthorizationException();
}
if (!hash_equals((string) $request->route('hash'), sha1($user->getEmailForVerification()))) {
if (! hash_equals((string) $request->route('hash'), sha1($user->getEmailForVerification()))) {
throw new AuthorizationException();
}
@ -91,8 +88,6 @@ class VerificationController extends Controller
/**
* The user has been verified.
*
* @param \Illuminate\Http\Request $request
* @return mixed
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
*/
protected function verified(Request $request): mixed
@ -105,8 +100,6 @@ class VerificationController extends Controller
/**
* Get the post register/login redirect path.
*
* @return string
*/
public function redirectPath(): string
{
@ -116,8 +109,6 @@ class VerificationController extends Controller
/**
* Set crm customer active.
*
* @param \App\Models\Customer $customer
* @return void
* @throws \Illuminate\Http\Exceptions\HttpResponseException In case of failure.
*/
private function setCrmCustomerAsVerified(Customer $customer): void
@ -135,12 +126,12 @@ class VerificationController extends Controller
if ($e->getApiError()->equals(ApiError::customerAlreadyActive)) {
// * Ignore this and continue, as it may be activated via another CRM service.
return;
} else {
report($e);
redirect($this->redirectPath())->with('error', trans(
'Une erreur est survenue'
))->throwResponse();
}
report($e);
redirect($this->redirectPath())->with('error', trans(
'Une erreur est survenue'
))->throwResponse();
}
}
}

View file

@ -9,6 +9,8 @@ use App\Models\Customer;
use App\Models\Product;
use App\Models\Recipe;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@ -22,10 +24,8 @@ class CustomerController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
public function index(): View
{
/** @var \App\Models\Customer $customer */
$customer = Auth::guard('club')->user();
@ -34,7 +34,7 @@ class CustomerController extends Controller
$questions = Customer::cacheCrm(
$customer->hashcode,
'questions',
fn() => collect(Question::all())->filter(function ($question) {
fn () => collect(Question::all())->filter(function ($question) {
return $question->id === intval(config('crm.question'));
})
);
@ -47,18 +47,16 @@ class CustomerController extends Controller
$crmAnswers = $question['customerAnswers'];
}
});
return view('club.pages.customers.index', compact('customer', 'crmCustomer', 'questions', 'crmAnswers'));
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\Club\Customers\UpdateCustomerRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function update(
UpdateCustomerRequest $request,
): \Illuminate\Http\RedirectResponse {
): RedirectResponse {
return DB::transaction(function () use ($request) {
/** @var \App\Models\Customer $customer */
$customer = auth('club')->user();
@ -69,13 +67,13 @@ class CustomerController extends Controller
'password',
'ok_cgv',
'ok_cgu',
'email'
'email',
])->toArray())
) {
if ($customer->saveOrFail()) {
/** @var \LDC\LDCCRM\Models\Customer $crmCustomer */
$crmCustomer = $customer->api_data;
if (!Answer::setQuestionAnswers($crmCustomer->hashcode, $request->question_id, $request->answers)) {
if (! Answer::setQuestionAnswers($crmCustomer->hashcode, $request->question_id, $request->answers)) {
return redirect()->route('club.customers.index')
->with('error', trans('Une erreur est survenue lors de l\'enregistrement de la réponse
à la question, merci de réessayer plus tard'));
@ -84,9 +82,11 @@ class CustomerController extends Controller
return redirect()->route('club.customers.index')
->with('success', trans('Vos informations ont bien été enregistrées.'));
}
return redirect()->back()
->with('error', trans('Une erreur est survenue, merci de réessayer ultérieurement.'));
}
return redirect()->back()
->with('error', trans('Une erreur est survenue, merci de réessayer ultérieurement.'));
});
@ -95,9 +95,8 @@ class CustomerController extends Controller
/**
* Updates user info.
*
* @param \App\Models\Customer $customer
* @param array $data
* @return boolean
* @return bool
*
* @throws \Illuminate\Validation\ValidationException If something failed.
*/
private function updateCrmCustomerInfo(Customer $customer, array $data)
@ -108,58 +107,55 @@ class CustomerController extends Controller
} catch (ApiErrorException $e) {
if ($e->getApiError()->equals(ApiError::validationFailed)) {
throw ValidationException::withMessages([
'error' => $e->getMessage()
'error' => $e->getMessage(),
]);
}
report($e);
return false;
} //end try
} // end try
});
}
/**
* Update customer password.
*
* @param \App\Http\Requests\Club\Customers\UpdatePasswordRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function passwordUpdate(UpdatePasswordRequest $request): \Illuminate\Http\RedirectResponse
public function passwordUpdate(UpdatePasswordRequest $request): RedirectResponse
{
/** @var \App\Models\Customer */
$customer = \auth('club')->user();
if ($this->updateCrmCustomerInfo($customer, ['password' => $request->input('password')])) {
event(new PasswordReset($customer));
return redirect()->back()->with('success', trans('crud.messages.has_been_updated', [
'model' => Str::ucfirst(trans('validation.attributes.password'))
'model' => Str::ucfirst(trans('validation.attributes.password')),
]));
}
return redirect()->back()->with('error', trans('crud.messages.cannot_be_updated', [
'model' => Str::ucfirst(trans('validation.attributes.password'))
'model' => Str::ucfirst(trans('validation.attributes.password')),
]));
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\View\View
*/
public function indexProducts(): \Illuminate\Contracts\View\View
public function indexProducts(): View
{
$models = Product::query()->where('published', true)->take(15)->paginate(9);
return view('club.pages.customers.favorites.products', compact('models'));
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\View\View
*/
public function indexRecipes(): \Illuminate\Contracts\View\View
public function indexRecipes(): View
{
$models = Recipe::query()->with('products', 'consumptionMoment')
->where('published', true)->take(15)->paginate(9);
return view('club.pages.customers.favorites.recipes', compact('models'));
}
}

View file

@ -11,22 +11,22 @@ use App\Http\Requests\Club\Bourse\SearchCustomerCollectionRequest;
use App\Lib\Utils;
use App\Models\BlockList;
use App\Models\DepartaimantsCollection;
use Illuminate\Container\Container;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth;
use Illuminate\Container\Container;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator;
class DepartaimantController extends Controller
{
/**
* Show index page
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
public function index(): View
{
/** @var \App\Models\Customer */
$customer = Auth::guard('club')->user();
@ -40,15 +40,12 @@ class DepartaimantController extends Controller
/**
* Save Customer collection state
*
* @param \App\Http\Requests\Club\Bourse\SaveCustomerCollectionRequest $request
* @param \App\Enums\Departaimants\DepartaimantCollectionType $collectiontype
* @return \Illuminate\Http\JsonResponse
* @throws \RuntimeException If a collection type is missing.
*/
public function bourseSaveState(
SaveCustomerCollectionRequest $request,
DepartaimantCollectionType $collectiontype
): \Illuminate\Http\JsonResponse {
): JsonResponse {
/** @var \App\Models\Customer */
$customer = Auth::guard('club')->user();
/** @var \App\Models\DepartaimantsCollection $departaimantCollection */
@ -58,8 +55,8 @@ class DepartaimantController extends Controller
$depStatus = DepartaimantStatus::make($request->integer('state'));
/** @var string|null */
$depEnumClass = Arr::get($request->maps, $collectiontype->value(), null);
if (!$depEnumClass) {
throw new \RuntimeException("Missing " . $collectiontype->value() . 'from request');
if (! $depEnumClass) {
throw new \RuntimeException('Missing ' . $collectiontype->value() . 'from request');
}
/** @var \App\Enums\Departaimants\IDepartaimant */
$departaimant = forward_static_call(
@ -75,22 +72,20 @@ class DepartaimantController extends Controller
return response()->json([
'status' => 'OK',
'map' => $this->getUserDepartaimantsMaps($depCollections)
'map' => $this->getUserDepartaimantsMaps($depCollections),
]);
}
/**
* Summary of bourseSearch
*
* @param \App\Http\Requests\Club\Bourse\SearchCustomerCollectionRequest $request
* @param \App\Enums\Departaimants\DepartaimantCollectionType $collectiontype
* @return \Illuminate\Http\JsonResponse
* phpcs:disable Generic.Metrics.CyclomaticComplexity
* phpcs:disable Generic.Metrics.CyclomaticComplexity
*/
public function bourseSearch(
SearchCustomerCollectionRequest $request,
DepartaimantCollectionType $collectiontype
): \Illuminate\Http\JsonResponse {
): JsonResponse {
// @phpcs:enable
$itemsPerPage = 15;
$output = collect();
@ -107,15 +102,15 @@ class DepartaimantController extends Controller
} else {
return response()->json([
'status' => 'KO',
'message' => 'Message cannot search with other status than wants or gives'
'message' => 'Message cannot search with other status than wants or gives',
]);
}
/** @var \App\Models\Customer */
$customer = Auth::guard('club')->user();
$ids = collect(BlockList::query()->select('customer_id', 'blocked_id')
->whereHas('customer', fn(Builder $q) => $q->where('id', $customer->getKey()))
->orWhereHas('blocked', fn(Builder $q) => $q->where('id', $customer->getKey()))
->whereHas('customer', fn (Builder $q) => $q->where('id', $customer->getKey()))
->orWhereHas('blocked', fn (Builder $q) => $q->where('id', $customer->getKey()))
->get()->toArray());
$ids = $ids->flatten()->unique();
@ -168,11 +163,11 @@ class DepartaimantController extends Controller
'departaimant' => $dep->departaimant->label(),
'username' => $depCollection->customer->username,
'hashcode' => $depCollection->customer->hashcode,
'date' => (new NiceDate())->get(null, '', $depCollection->updated_at, [])
'date' => (new NiceDate())->get(null, '', $depCollection->updated_at, []),
]);
}
} //end foreach
} //end foreach
} // end foreach
} // end foreach
// Paginate.
$depCollectionPaginate = $this->paginateManually(
@ -190,9 +185,6 @@ class DepartaimantController extends Controller
/**
* Undocumented function
*
* @param \Illuminate\Support\Collection $departaimantsCollection
* @return array
*/
private function getUserDepartaimantsMaps(Collection $departaimantsCollection): array
{
@ -205,6 +197,7 @@ class DepartaimantController extends Controller
'state' => $departaimantItem->status->value(),
];
}
return $datas;
})->toArray();
@ -213,34 +206,21 @@ class DepartaimantController extends Controller
/**
* Paginate a collection.
*
* @param integer $totalCount
* @param \Illuminate\Support\Collection $results
* @param integer $pageSize
* @param integer $page
* @return \Illuminate\Pagination\LengthAwarePaginator
*/
private function paginateManually(
int $totalCount,
Collection $results,
int $pageSize,
int $page = 1
): \Illuminate\Pagination\LengthAwarePaginator {
): LengthAwarePaginator {
return $this->paginator($results, $totalCount, $pageSize, $page, [
'path' => Paginator::resolveCurrentPath(),
'path' => Paginator::resolveCurrentPath(),
'pageName' => 'page',
]);
}
/**
* Create a new length-aware paginator instance.
*
* @param \Illuminate\Support\Collection $items
* @param integer $total
* @param integer $perPage
* @param integer $currentPage
* @param array $options
* @return \Illuminate\Pagination\LengthAwarePaginator
*/
protected function paginator(
Collection $items,
@ -248,13 +228,13 @@ class DepartaimantController extends Controller
int $perPage,
int $currentPage,
array $options
): \Illuminate\Pagination\LengthAwarePaginator {
): LengthAwarePaginator {
return Container::getInstance()->makeWith(LengthAwarePaginator::class, [
'items' => $items,
'total' => $total,
'perPage' => $perPage,
'currentPage' => $currentPage,
'options' => $options
'options' => $options,
]);
}
}

View file

@ -5,16 +5,17 @@ namespace App\Http\Controllers\Club;
use App\Http\Controllers\Controller;
use App\Http\Requests\Club\MesBr\PrintCouponsRequest;
use App\Models\Discount;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Arr;
use LDC\LDCCRM\Models\Customer;
class DiscountController extends Controller
{
/**
* Show customer BR list.
*
* @return \Illuminate\Contracts\View\View
*/
public function showCustomerBrList(): \Illuminate\Contracts\View\View
public function showCustomerBrList(): View
{
/** @var \App\Models\Customer $customer */
$customer = auth('club')->user();
@ -22,16 +23,14 @@ class DiscountController extends Controller
$crmCustomer = $customer->api_data;
$brList = $this->fetchActiveBr($crmCustomer);
return view('club.pages.discounts.index', compact('crmCustomer', 'brList'));
}
/**
* Fetch PDF BR.
*
* @param \App\Http\Requests\Club\MesBr\PrintCouponsRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function fetchBrPdf(PrintCouponsRequest $request): \Illuminate\Http\RedirectResponse
public function fetchBrPdf(PrintCouponsRequest $request): RedirectResponse
{
/** @var \LDC\MESBR\MesBr */
$mesBr = app('mesBrAPI');
@ -66,13 +65,10 @@ class DiscountController extends Controller
* +"mobile_image_available": "https://dev.mesbr.eu/coupons/KE3YodVeDPSG7pVzPQZhPEpVGlxwjTPWCJ8WGN29.png"
* +"mobile_image_unavailable": "https://dev.mesbr.eu/coupons/FOFhdT0d2X1AURQfYm9O7ac2ca9SGUk3IHCTWJiZ.png"
* }
*
* @param \LDC\LDCCRM\Models\Customer $customer
* @return object|null
*/
private function fetchActiveBr(\LDC\LDCCRM\Models\Customer $customer): ?object
private function fetchActiveBr(Customer $customer): ?object
{
if (!$this->createOrUpdateMesBrCustomer($customer)) {
if (! $this->createOrUpdateMesBrCustomer($customer)) {
return null;
}
@ -83,7 +79,7 @@ class DiscountController extends Controller
try {
$res = $mesBr->getMurCustomer($customer->hashcode);
if (!$res) {
if (! $res) {
$message = "ERROR MesBR API : getMurCustomer on api failed {$customer->hashcode}";
} elseif (Arr::get((array) $res, 'status') === 'KO') {
$message = Arr::get(
@ -98,23 +94,23 @@ class DiscountController extends Controller
if (config('app.env') === 'local') {
$res = Discount::replaceCouponsPictureHost($res);
}
return $res;
}
report(new \RuntimeException($message));
return null;
} catch (\Exception $e) {
report($e);
return null;
} //end try
} // end try
}
/**
* Report for sure true if the customer is set in mesBr.
*
* @param \LDC\LDCCRM\Models\Customer $customer
* @return boolean
*/
private function createOrUpdateMesBrCustomer(\LDC\LDCCRM\Models\Customer $customer): bool
private function createOrUpdateMesBrCustomer(Customer $customer): bool
{
// * Ajout du customer sur mes BR
/** @var \LDC\MESBR\MesBr */
@ -129,7 +125,7 @@ class DiscountController extends Controller
try {
// * Create (or update) the customer
$res = $mesBr->createCustomer($customer->hashcode, $customer->email, 'France');
if (!$res) {
if (! $res) {
$message = "ERROR MesBR API : createCustomer on api failed {$customer->hashcode}";
} elseif (Arr::get((array) $res, 'status') === 'KO') {
$message = Arr::get(
@ -143,10 +139,12 @@ class DiscountController extends Controller
return true;
}
report(new \RuntimeException($message));
return false;
} catch (\Exception $e) {
report($e);
return false;
} //end try
} // end try
}
}

View file

@ -4,51 +4,47 @@ namespace App\Http\Controllers\Club;
use App\Http\Controllers\Controller;
use App\Http\Requests\Club\Favorite\UpdateFavoriteRequest;
use App\Models\Customer;
use App\Lib\Helpers\CollectionHelper;
use App\Models\Customer;
use Illuminate\Contracts\View\View;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FavoriteController extends Controller
{
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function indexProducts(Request $request): \Illuminate\Contracts\View\View
public function indexProducts(Request $request): View
{
$models = CollectionHelper::paginateManually(auth('club')->user()->products, 9, $request->page ?? 1);
return view('club.pages.favorites.products', compact('models'));
}
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function indexRecipes(Request $request): \Illuminate\Contracts\View\View
public function indexRecipes(Request $request): View
{
$models = CollectionHelper::paginateManually(auth('club')->user()->recipes, 9, $request->page ?? 1);
return view('club.pages.favorites.recipes', compact('models'));
}
/**
* Update favorites models for a specific club customer.
*
* @param \App\Http\Requests\Club\Favorite\UpdateFavoriteRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function update(UpdateFavoriteRequest $request): \Illuminate\Http\JsonResponse
public function update(UpdateFavoriteRequest $request): JsonResponse
{
$customer = Customer::query()->where('id', $request->validated()['customer'])->first();
$currentFavorites = $customer->{$request->validated()['class']}->pluck('id');
/** @var integer $newFavorites */
/** @var int $newFavorites */
$newFavorites = $request->validated()['model'];
($currentFavorites->contains($newFavorites))
? $customer->{$request->validated()['class']}()->detach($newFavorites)
: $customer->{$request->validated()['class']}()->attach($newFavorites);
return response()->json([
'status' => 'OK',
'data' => $customer->{$request->validated()['class']}()->get()->pluck('id'),

View file

@ -3,15 +3,14 @@
namespace App\Http\Controllers\Club;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\View\View;
class GameController extends Controller
{
/**
* Show index page
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
public function index(): View
{
return view('club.pages.games.index');
}

View file

@ -6,15 +6,15 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\Club\Games\GoldenCrushParticipateRequest;
use App\Lib\Helpers\GamePeriodHelper;
use App\Models\GoldenCrushGame;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
class GoldenCrushController extends Controller
{
/**
* Show game page
*
* @return \Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse
*/
public function index(): \Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse
public function index(): View | RedirectResponse
{
$routeNameForGoldenCrush = GamePeriodHelper::routeName();
@ -23,8 +23,8 @@ class GoldenCrushController extends Controller
$hasAlreadyParticipated = $customerId ? GoldenCrushGame::hasCustomerParticipated($customerId) : false;
return view('club.pages.games.golden-crush.golden-crush', [
'hasAlreadyParticipated' => $hasAlreadyParticipated,
'videos' => GoldenCrushGame::getVideos(),
'hasAlreadyParticipated' => $hasAlreadyParticipated,
'videos' => GoldenCrushGame::getVideos(),
'routeNameForGoldenCrush' => $routeNameForGoldenCrush,
]);
}
@ -32,7 +32,7 @@ class GoldenCrushController extends Controller
/**
* Register participation of costumer
*
* @param GoldenCrushParticipateRequest $request HTTP Request.
* @param GoldenCrushParticipateRequest $request HTTP Request.
* @return RedirectResponse Response.
*/
public function store(GoldenCrushParticipateRequest $request)
@ -49,8 +49,8 @@ class GoldenCrushController extends Controller
if ($request->validated()) {
GoldenCrushGame::create([
'customer_id' => $customerId,
'choice' => $request->integer('choice'),
'ip_address' => app('clientIp'),
'choice' => $request->integer('choice'),
'ip_address' => app('clientIp'),
]);
}
@ -59,35 +59,30 @@ class GoldenCrushController extends Controller
/**
* View to thanks if customer has participated.
*
* @return \Illuminate\Contracts\View\View
*/
public function thanksForParticipation(): \Illuminate\Contracts\View\View
public function thanksForParticipation(): View
{
$customerId = auth('club')->id();
$alreadyParticipated = GoldenCrushGame::hasCustomerParticipated($customerId);
if (!$alreadyParticipated) {
if (! $alreadyParticipated) {
abort(404);
}
return view('club.pages.games.golden-crush.thanks-for-participation');
}
/**
* View for end of participation if customer has participated.
*
* @return \Illuminate\Contracts\View\View
*/
public function endOfParticipation(): \Illuminate\Contracts\View\View
public function endOfParticipation(): View
{
return view('club.pages.games.golden-crush.end-of-participation');
}
/**
* View for end of game.
*
* @return \Illuminate\Contracts\View\View
*/
public function endOfGame(): \Illuminate\Contracts\View\View
public function endOfGame(): View
{
return view('club.pages.games.golden-crush.end-of-game');
}

View file

@ -6,21 +6,21 @@ use App\Http\Controllers\Controller;
use App\Lib\Helpers\GamePeriodHelper;
use App\Models\Discount;
use App\Models\NewsClub;
use Illuminate\Contracts\View\View;
class HomeController extends Controller
{
/**
* Show index page
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
public function index(): View
{
$gamePeriodGoldenCrush = GamePeriodHelper::isGamePeriod();
$routeNameForGoldenCrush = GamePeriodHelper::routeName();
$newsClubModels = NewsClub::getPublishedOrderedByPublishAt();
$discountModels = Discount::getCachedDiscounts();
$discountsTotal = $discountModels->sum('value');
return (auth('club')->check())
? view('club.pages.home.homepage', compact('newsClubModels', 'discountModels', 'discountsTotal', 'gamePeriodGoldenCrush', 'routeNameForGoldenCrush'))
: view('club.pages.home.guest', compact('newsClubModels', 'discountsTotal'));

View file

@ -14,7 +14,9 @@ use App\Models\BlockList;
use App\Models\Customer;
use App\Models\Message;
use App\Models\Notification;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Lottery;
@ -23,20 +25,16 @@ class MessageController extends Controller
{
/**
* Show messagerie.
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
public function index(): View
{
return view('club.pages.messages.index');
}
/**
* Fetch conversations and block list.
*
* @return \Illuminate\Http\JsonResponse
*/
public function conversations(): \Illuminate\Http\JsonResponse
public function conversations(): JsonResponse
{
/** How many message to keey in a conversation */
$messagesToKeepInConversations = 25;
@ -45,8 +43,8 @@ class MessageController extends Controller
$conversations = $customer->conversations();
$ids = collect($conversations)->pluck('to_id');
$block_list = BlockList::query()
->whereHas('customer', fn(Builder $q) => $q->where('id', $customer->getKey()))
->orWhereHas('blocked', fn(Builder $q) => $q->where('id', $customer->getKey()))
->whereHas('customer', fn (Builder $q) => $q->where('id', $customer->getKey()))
->orWhereHas('blocked', fn (Builder $q) => $q->where('id', $customer->getKey()))
->get();
// * Sort In reverse order messages
@ -55,12 +53,13 @@ class MessageController extends Controller
$sortFn = fn (Message $a, Message $b) => $a->created_at->timestamp < $b->created_at->timestamp;
// * Limit messages per conversations
Lottery::odds(1, 20)
->winner(fn() => collect($conversation['messages'])
->winner(fn () => collect($conversation['messages'])
// @phpstan-ignore-next-line
->sort($sortFn)
->splice($messagesToKeepInConversations)
->each(fn(Message $message) => $message->delete()))
->sort($sortFn)
->splice($messagesToKeepInConversations)
->each(fn (Message $message) => $message->delete()))
->choose();
return $conversation;
})->all();
@ -75,11 +74,8 @@ class MessageController extends Controller
/**
* Send a message to a club customer.
*
* @param \App\Http\Requests\Club\Messages\SendMessageRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function send(SendMessageRequest $request): \Illuminate\Http\JsonResponse
public function send(SendMessageRequest $request): JsonResponse
{
/** @var \App\Models\Customer */
$customer = Auth::guard('club')->user();
@ -96,16 +92,14 @@ class MessageController extends Controller
$message,
$toCustomer
));
return response()->json($message->load(['fromCustomer', 'toCustomer']));
}
/**
* Destroy a club customer's message.
*
* @param \App\Http\Requests\Club\Messages\DeleteMessagesRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function delete(DeleteMessagesRequest $request): \Illuminate\Http\JsonResponse
public function delete(DeleteMessagesRequest $request): JsonResponse
{
return DB::transaction(function () use ($request) {
/** @var \App\Models\Customer */
@ -132,18 +126,15 @@ class MessageController extends Controller
}
}
}
return response()->json();
});
}
/**
* Block a customer to prevent him sending messages.
*
* @param \App\Http\Requests\Club\Messages\BlockCustomerRequest $request
* @param boolean $status
* @return \Illuminate\Http\JsonResponse
*/
public function toggleBlock(BlockCustomerRequest $request, bool $status): \Illuminate\Http\JsonResponse
public function toggleBlock(BlockCustomerRequest $request, bool $status): JsonResponse
{
/** @var \App\Models\Customer */
$customer = Auth::guard('club')->user();
@ -154,16 +145,14 @@ class MessageController extends Controller
'blocked_id' => $customerToBlock->getKey(),
]);
($status) ? $blockCustomer->saveOrFail() : $blockCustomer->deleteOrFail();
return response()->json($blockCustomer);
}
/**
* Mark notificaiton as read.
*
* @param \App\Http\Requests\Club\Messages\MarkAsReadRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function notificationsRead(MarkAsReadRequest $request): \Illuminate\Http\JsonResponse
public function notificationsRead(MarkAsReadRequest $request): JsonResponse
{
/** @var \App\Models\Customer */
$customer = Auth::guard('club')->user();
@ -171,7 +160,7 @@ class MessageController extends Controller
$notificationsToRead = Notification::query()
->where('notifiable_type', Message::class)
->whereIn('id', $request->input('messageList'))
->whereHas('customer', fn(Builder $q) => $q->where('id', $customer->getKey()))
->whereHas('customer', fn (Builder $q) => $q->where('id', $customer->getKey()))
->get()
->pluck('id');

View file

@ -5,6 +5,8 @@ namespace App\Http\Controllers\Club;
use App\Http\Controllers\Controller;
use App\Http\Requests\Club\Notifications\DeleteNotificationsRequest;
use App\Models\Notification;
use Illuminate\Contracts\View\View;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\View as FacadesView;
@ -12,53 +14,45 @@ class NotificationController extends Controller
{
/**
* Show index page
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
public function index(): View
{
/** @var \App\Models\Customer $customerModel */
$customerModel = auth('club')->user();
$notificationModels = $customerModel->notifications()
->whereNotIn('id', $customerModel->readNotifications()->pluck('notification_id'))
->orderBy('created_at', 'DESC')
->paginate(10);
->whereNotIn('id', $customerModel->readNotifications()->pluck('notification_id'))
->orderBy('created_at', 'DESC')
->paginate(10);
return view('club.pages.notifications.index', compact('notificationModels'));
}
/**
* Get notifications count
*
* @return \Illuminate\Http\JsonResponse
*/
public function notificationsCount(): \Illuminate\Http\JsonResponse
public function notificationsCount(): JsonResponse
{
return response()->json(FacadesView::shared('notifications_count', 0));
}
/**
* Delete notification from list
*
* @param Notification $notification
* @return \Illuminate\Http\JsonResponse
*/
public function destroy(Notification $notification): \Illuminate\Http\JsonResponse
public function destroy(Notification $notification): JsonResponse
{
/** @var \App\Models\Customer $customer */
$customer = Auth::guard('club')->user();
$customer->readNotifications()->syncWithoutDetaching($notification->id);
session()->flash('success', __('Notification supprimée.'));
return response()->json(['success' => true]);
}
/**
* Delete notification from list
*
* @param \App\Http\Requests\Club\Notifications\DeleteNotificationsRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function destroyMultiple(DeleteNotificationsRequest $request): \Illuminate\Http\JsonResponse
public function destroyMultiple(DeleteNotificationsRequest $request): JsonResponse
{
/** @var \App\Models\Customer $customer */
$customer = Auth::guard('club')->user();
@ -72,6 +66,7 @@ class NotificationController extends Controller
$count,
['count' => $count]
));
return response()->json(['success' => true]);
}
}

View file

@ -3,15 +3,14 @@
namespace App\Http\Controllers\Club;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\View\View;
class QuestController extends Controller
{
/**
* Show index page
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
public function index(): View
{
return view('club.pages.quests.index');
}

View file

@ -18,9 +18,14 @@ use App\Models\Notification;
use App\Models\Order;
use App\Models\SellItem;
use Exception;
use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Database\QueryException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Log;
class ShopController extends Controller
@ -30,25 +35,23 @@ class ShopController extends Controller
) {
return parent::__construct();
}
/**
* Shop index.
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
public function index(): View
{
$sellItemModels = SellItem::all();
return view('club.pages.shop.index', compact('sellItemModels'));
}
/**
* Ajax service to validate transaction details.
*
* @param \App\Http\Requests\Club\Shop\ShopBuyRequest $request
* @return \Illuminate\Http\JsonResponse
* @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh
*/
public function validateBuy(ShopBuyRequest $request): \Illuminate\Http\JsonResponse
public function validateBuy(ShopBuyRequest $request): JsonResponse
{
// phpcs:enable
/** @var \App\Models\Customer */
@ -63,7 +66,7 @@ class ShopController extends Controller
'quantity' => $item['count'],
'unitPrice' => $sellItem->price,
'totalPrice' => $item['count'] * $sellItem->price,
'subject' => $sellItem->arcadia_id
'subject' => $sellItem->arcadia_id,
];
$orderTotalPrice += $item['count'] * $sellItem->price;
}
@ -93,7 +96,7 @@ class ShopController extends Controller
)]);
}
abort(500, sprintf('Order already exists but type is unkown %d', $order->getKey()));
} //end try
} // end try
$order->customer()->associate($customerModel);
@ -113,6 +116,7 @@ class ShopController extends Controller
case OrderType::cb->value():
\session()->put(sprintf('shop.order.%d.time', $order->getKey()), \time());
\session()->save();
return response()->json(['redirect' => route('club.shop.payementCB', compact('order'))]);
case OrderType::check->value():
try {
@ -134,20 +138,17 @@ class ShopController extends Controller
}
default:
abort(422);
} //end switch
} // end switch
}
/**
* Redirection After Ajax validate.
*
* @param \App\Models\Order $order
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Contracts\View\View
*/
public function validatedBuy(Order $order): \Illuminate\Http\RedirectResponse|\Illuminate\Contracts\View\View
public function validatedBuy(Order $order): RedirectResponse | View
{
Notification::getNotifications();
$time = session()->get(sprintf('shop.order.%d.time', $order->getKey()), 0);
if (!($order->status->equals(OrderStatus::payed) || $order->status->equals(OrderStatus::waitingCheck))) {
if (! ($order->status->equals(OrderStatus::payed) || $order->status->equals(OrderStatus::waitingCheck))) {
return response()->redirectToRoute('club.shop.index');
}
// 4 minutes
@ -161,12 +162,11 @@ class ShopController extends Controller
/**
* Pay with CB.
*
* @param \App\Models\Order $order
* @return \Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse
* @throws \App\Exceptions\CBPayementError Error response from Axepta Lib.
*
* @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh
*/
public function payWithCb(Order $order): \Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse
public function payWithCb(Order $order): View | RedirectResponse
{
// phpcs:enable
Notification::getNotifications();
@ -210,12 +210,13 @@ class ShopController extends Controller
route('club.shop.reglement.payementConfirmCB', ['order' => $order, 'cancel' => true]),
route('club.shop.reglement.payementConfirmCBServ', $order)
);
return response()->redirectTo($payment);
} catch (\RuntimeException $e) {
$order->status = OrderStatus::failed;
$order->save();
throw new CBPayementError(sprintf(
"Error response from Axepta Lib : %s",
'Error response from Axepta Lib : %s',
$e->getMessage()
));
}
@ -226,29 +227,28 @@ class ShopController extends Controller
$order->getKey(),
$e->getMessage()
));
return view('club.pages.shop.info')
->with('title', trans('Commande annulée'))
->with('message', trans("Le paiement n'a pu aboutir. Veuillez réessayer"));
} //end try
} // end try
}
/**
* Pas de validate ou custom request sur la réponse de Axepta,
* C'est la Lib Axepta qui fait.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Order $order
* @return \Illuminate\Http\Response|\Illuminate\Contracts\Routing\ResponseFactory
* @throws \App\Exceptions\CBPayementError Data were altered from response.
*
* @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh
*/
public function confirmCbFromAxepta(
Request $request,
Order $order
): \Illuminate\Http\Response|\Illuminate\Contracts\Routing\ResponseFactory {
): Response | ResponseFactory {
// phpcs:enable
try {
if (!$this->aPayment->isValidWebhookAccess($request)) {
if (! $this->aPayment->isValidWebhookAccess($request)) {
$order->status = OrderStatus::failed;
$order->save();
// @phpstan-ignore finally.exitPoint
@ -259,20 +259,19 @@ class ShopController extends Controller
if (is_null($response)) {
if (
!$order->confirmMailSent and
!$order->status->equals(OrderStatus::payed)
! $order->confirmMailSent and ! $order->status->equals(OrderStatus::payed)
) {
$order->status = OrderStatus::failed;
$order->save();
}
return response('', 200);
}
switch (intval($response[0])) {
case PaymentResponse::ok->value:
if (
!$order->confirmMailSent and
!$order->status->equals(OrderStatus::payed)
! $order->confirmMailSent and ! $order->status->equals(OrderStatus::payed)
) {
$order->status = OrderStatus::payed;
$order->save();
@ -286,8 +285,7 @@ class ShopController extends Controller
case PaymentResponse::error->value:
case PaymentResponse::fatalerror->value:
if (
!$order->confirmMailSent and
!$order->status->equals(OrderStatus::payed)
! $order->confirmMailSent and ! $order->status->equals(OrderStatus::payed)
) {
$order->status = OrderStatus::failed;
$order->save();
@ -296,8 +294,7 @@ class ShopController extends Controller
default:
// * ERROR
if (
!$order->confirmMailSent and
!$order->status->equals(OrderStatus::payed)
! $order->confirmMailSent and ! $order->status->equals(OrderStatus::payed)
) {
$order->status = OrderStatus::failed;
$order->save();
@ -308,8 +305,8 @@ class ShopController extends Controller
$response,
$order->ref
));
} //end switch
} catch (ModelNotFoundException | CBPayementError | \Exception $e) {
} // end switch
} catch (ModelNotFoundException | CBPayementError | Exception $e) {
report($e);
Log::critical(sprintf(
'Could not end customer transaction in boutique for order %d, %s',
@ -319,25 +316,20 @@ class ShopController extends Controller
} finally {
// @phpstan-ignore finally.exitPoint
return response('', 200);
} //end try
} // end try
}
/**
* Confirm CB method
*
* @param Request $request
* @param Order $order
* @return \Illuminate\Contracts\View\View
* @throws \App\Exceptions\CBPayementError Data were altered from response.
*/
public function confirmCb(Request $request, Order $order): \Illuminate\Contracts\View\View
public function confirmCb(Request $request, Order $order): View
{
Notification::getNotifications();
if (
!$request->has('PayID') or
$request->has('cancel') or
$order->status->equals(OrderStatus::failed)
! $request->has('PayID') or $request->has('cancel') or $order->status->equals(OrderStatus::failed)
) {
return view('club.pages.shop.info')
->with('title', trans('Commande annulée'))

View file

@ -5,6 +5,8 @@ namespace App\Http\Controllers\Club;
use App\Http\Controllers\Controller;
use App\Http\Requests\Club\Surveys\StoreSurveyAnswerRequest;
use App\Models\NewsClub;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
@ -12,11 +14,8 @@ class SurveyController extends Controller
{
/**
* Display the showing page for an article (whatever the type).
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function show(Request $request): \Illuminate\Contracts\View\View
public function show(Request $request): View
{
/** @var \App\Models\Customer $customerModel */
$customerModel = auth('club')->user();
@ -28,16 +27,14 @@ class SurveyController extends Controller
->filter(function ($surveyAnswer) use ($newsClubModel) {
return $surveyAnswer->newsClub->getKey() === $newsClubModel->getKey();
});
return view('club.pages.surveys.show', compact('newsClubModel', 'customerSurveyAnswers'));
}
/**
* Store answers from a club customer.
*
* @param \App\Http\Requests\Club\Surveys\StoreSurveyAnswerRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(StoreSurveyAnswerRequest $request): \Illuminate\Http\RedirectResponse
public function store(StoreSurveyAnswerRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
/** @var \App\Models\Customer $customerModel */
@ -47,6 +44,7 @@ class SurveyController extends Controller
->where('id', $request->validated()['news_club_id'])
->first();
$customerModel->surveyAnswers()->sync(collect($request->validated()['answers']));
return redirect()->route('club.news.show', $newsClubModel->slug)
->with('success', trans('Votre réponse à bien été enregistrée !'));
});

View file

@ -8,7 +8,9 @@ use App\Models\Notification;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\LengthAwarePaginator as LengthAwarePaginatorCustom;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cache;
@ -42,8 +44,7 @@ class Controller extends BaseController
// @phpstan-ignore-next-line
->whereNotIn('id', $customerModel->readNotifications->pluck('id'))
->filter(function (Notification $notificationModel) {
return $notificationModel->notifiable_type === Message::class and
!is_null($notificationModel->customer_id);
return $notificationModel->notifiable_type === Message::class and ! is_null($notificationModel->customer_id);
})
->count());
$discountCache = Cache::remember(
@ -54,15 +55,14 @@ class Controller extends BaseController
}
);
View::share('discountsCustomerCount', $discountCache);
} //end if
} // end if
return $next($request);
});
}
/**
* Gives the redirection path for FO Auth controllers.
*
* @return string
*/
protected function authLoggedRedirectPath(): string
{
@ -71,36 +71,29 @@ class Controller extends BaseController
/**
* Get a paginate resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function jsonPaginateModels(Request $request): \Illuminate\Http\JsonResponse
public function jsonPaginateModels(Request $request): JsonResponse
{
/** @var \Illuminate\Database\Eloquent\Model $models */
$models = $request->targetModel::query()
->where($request->input('fieldName') ?? 'name', 'like', "%{$request->input('search')}%")
->orderBy($request->input('fieldName') ?? 'name', 'ASC')
->paginate($request->input('paginate') ?? 10);
return \response()->json($models);
}
/**
* Get models titles for search input propositions.
*
* @param Builder $query
* @param string $searchField
* @param string|null $search
* @return \Illuminate\Pagination\LengthAwarePaginator
*/
public function getModelsTitles(
Builder $query,
string $searchField,
string|null $search = null
): \Illuminate\Pagination\LengthAwarePaginator {
?string $search = null
): LengthAwarePaginator {
$modelsTitles = [];
$searchLower = Str::lower($search);
$query->when(!is_null($search), function (Builder $q) use ($searchLower, $searchField) {
$query->when(! is_null($search), function (Builder $q) use ($searchLower, $searchField) {
$q->where($searchField, 'like', "%{$searchLower}%");
})
->where('published', true)
@ -108,22 +101,24 @@ class Controller extends BaseController
->pluck($searchField)
->each(function (string $title) use (&$modelsTitles, $searchLower) {
if (count($modelsTitles) < 5) {
foreach (explode(" ", $title) as $word) {
foreach (explode(' ', $title) as $word) {
$word = Str::lower($word);
if (
strlen($word) > 3
&& !in_array($word, $modelsTitles)
&& ! in_array($word, $modelsTitles)
&& str_contains($word, $searchLower)
) {
$modelsTitles[] = $word;
}
}
return $modelsTitles;
}
})
->toArray();
\sort($modelsTitles);
$titles = array_slice($modelsTitles, 0, 5);
return new LengthAwarePaginatorCustom($titles, count($titles), (count($titles) <= 0) ? 1 : count($titles));
}
}

View file

@ -2,11 +2,13 @@
namespace App\Http\Controllers\Fo;
use App\Enums\Department;
use App\Enums\Settings\SettingsType;
use App\Http\Controllers\Controller;
use App\Models\Breeder;
use App\Models\GeneralSetting;
use App\Models\OcbBreeder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
@ -15,10 +17,8 @@ class BreederController extends Controller
{
/**
* Get an array of total count of breeders per department.
*
* @return \Illuminate\Http\JsonResponse
*/
public function getBreederCountPerDepartment(): \Illuminate\Http\JsonResponse
public function getBreederCountPerDepartment(): JsonResponse
{
// TODO: mettre à jour le cache lors de l'édition/ajout/suppression d'un éleveur.
$breederCountPerDepartment = Cache::remember(
@ -32,16 +32,14 @@ class BreederController extends Controller
->get()->toArray();
}
);
return response()->json($breederCountPerDepartment);
}
/**
* Get all the breeders in a given department.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function getDepartmentBreeders(Request $request): \Illuminate\Http\JsonResponse
public function getDepartmentBreeders(Request $request): JsonResponse
{
// TODO: checker si le departement existe.
// TODO: mettre à jour le cache lors de l'édition/ajout/suppression d'un éleveur.
@ -52,17 +50,17 @@ class BreederController extends Controller
return Breeder::query()
->where('published', true)
->where('is_highlighted', true)
->where('department', \App\Enums\Department::make($request->DEPARTMENT))
->where('department', Department::make($request->DEPARTMENT))
->get()->toArray();
}
);
return response()->json($breeders);
}
/**
* Get all the breeders views in a given department.
*
* @param \Illuminate\Http\Request $request
* @return array<string>
*/
public function getDepartmentBreedersViews(Request $request): array
@ -70,11 +68,11 @@ class BreederController extends Controller
return Breeder::query()
->where('published', true)
->where('is_highlighted', true)
->where('department', \App\Enums\Department::make($request->DEPARTMENT))
->where('department', Department::make($request->DEPARTMENT))
->get()
->map(function ($breederModel) {
return view('fo.partials.breeder-card', [
'model' => $breederModel,
'model' => $breederModel,
'isSlider' => true,
])->render();
})->toArray();
@ -82,8 +80,6 @@ class BreederController extends Controller
/**
* Get all the breeders views in a given department.
*
* @return array
*/
public function getManageableTextComponent(): array
{
@ -92,9 +88,6 @@ class BreederController extends Controller
/**
* Get all the breeders views in a given department.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function searchOcbBreedersCards(Request $request): array
{

View file

@ -10,19 +10,18 @@ use App\Models\NewsBreeding;
use App\Models\OcbBreeder;
use App\Models\SectionApproach;
use App\Models\StaticPage;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Builder;
class BreedingController extends Controller
{
/**
* Display the given breeding page.
*
* @param \App\Models\StaticPage $staticPage
* @return \Illuminate\Contracts\View\View
*/
public function breedingPage(StaticPage $staticPage): \Illuminate\Contracts\View\View
public function breedingPage(StaticPage $staticPage): View
{
$newsBreedingModels = NewsBreeding::getPublishedOrderedForType($staticPage);
return view('fo.pages.breeding.show', [
'staticPageModel' => $staticPage,
'newsBreedingModels' => $newsBreedingModels,
@ -31,10 +30,8 @@ class BreedingController extends Controller
/**
* Display the given breeding page.
*
* @return \Illuminate\Contracts\View\View
*/
public function ocbBreederPage(): \Illuminate\Contracts\View\View
public function ocbBreederPage(): View
{
$ocbBreederModels = OcbBreeder::getOcbBreederCards();
$staticPage = StaticPage::query()->where('type', StaticPageType::ouiCBon)->first();
@ -43,23 +40,20 @@ class BreedingController extends Controller
->with('category')
->where('page_id', $staticPage->id)
->get()
->groupBy(fn($section) => $section->category?->name);
->groupBy(fn ($section) => $section->category?->name);
return view('fo.pages.breeding.oui-c-est-bon', [
'ocbBreederModels' => $ocbBreederModels,
'staticPageModel' => $staticPage,
'ocbBreederModels' => $ocbBreederModels,
'staticPageModel' => $staticPage,
'categoryApproachModels' => $categoryApproachModels,
'sections' => $sections
'sections' => $sections,
]);
}
/**
* Display the given breeding article.
*
* @param \App\Models\StaticPage $staticPage
* @param \App\Models\NewsBreeding $newsBreeding
* @return \Illuminate\Contracts\View\View
*/
public function breedingArticle(StaticPage $staticPage, NewsBreeding $newsBreeding): \Illuminate\Contracts\View\View
public function breedingArticle(StaticPage $staticPage, NewsBreeding $newsBreeding): View
{
$asideNewsModels = NewsBreeding::query()
->whereHas('staticpage', function (Builder $query) use ($staticPage) {
@ -74,16 +68,14 @@ class BreedingController extends Controller
return view('fo.pages.breeding.article', [
'staticPageModel' => $staticPage,
'newsBreedingModel' => $newsBreeding,
'asideNewsModels' => $asideNewsModels
'asideNewsModels' => $asideNewsModels,
]);
}
/**
* Display the given breeding page.
*
* @return \Illuminate\Contracts\View\View
*/
public function exitOutsidePage(): \Illuminate\Contracts\View\View
public function exitOutsidePage(): View
{
$staticPage = StaticPage::query()->where('type', StaticPageType::exitOutside)->first();
$sliderImages = CollectionHelper::mapSlidesToFields($staticPage->data);
@ -92,24 +84,23 @@ class BreedingController extends Controller
->with('category')
->where('page_id', $staticPage->id)
->get()
->groupBy(fn($section) => $section->category?->name);
->groupBy(fn ($section) => $section->category?->name);
return view('fo.pages.breeding.sortant-a-l-exterieur', [
'staticPageModel' => $staticPage,
'sliderImages' => $sliderImages,
'staticPageModel' => $staticPage,
'sliderImages' => $sliderImages,
'categoryApproachModels' => $categoryApproachModels,
'sections' => $sections,
'sections' => $sections,
]);
}
/**
* Display our farms page.
*
* @return \Illuminate\Contracts\View\View
*/
public function ourFarmsPage(): \Illuminate\Contracts\View\View
public function ourFarmsPage(): View
{
$staticPage = StaticPage::query()->where('type', StaticPageType::ourFarms)->first();
return view('fo.pages.breeding.index', ['staticPageModel' => $staticPage]);
}
}

View file

@ -5,37 +5,37 @@ namespace App\Http\Controllers\Fo;
use App\Enums\StaticPageType;
use App\Http\Controllers\Controller;
use App\Models\StaticPage;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Collection;
class CommitmentController extends Controller
{
/**
* Build the list of commitment navigation models from cached static pages.
*
* @return \Illuminate\Support\Collection<int, array{picto: array<string, string>, type: string, link: string}>
*/
private function getCommitmentModels(): \Illuminate\Support\Collection
private function getCommitmentModels(): Collection
{
return StaticPage::getCachedCommitmentsStaticPages()
->map(fn($page) => [
'title' => $page->type->label(),
'picto' => $page->data['picto_navigation'] ?? null,
'activePicto' => $page->data['picto_banner'] ?? null,
'type' => $page->type->value,
'link' => route($page->type->routeForCommitments()),
->map(fn ($page) => [
'title' => $page->type->label(),
'picto' => $page->data['picto_navigation'] ?? null,
'activePicto' => $page->data['picto_banner'] ?? null,
'type' => $page->type->value,
'link' => route($page->type->routeForCommitments()),
])
->filter(fn($item) => !empty($item['picto']['value']))
->filter(fn ($item) => ! empty($item['picto']['value']))
->values();
}
/**
* Render a commitment page view with its static page model and navigation models.
*
* @param StaticPageType $type The commitment page type to load.
* @param string $view The fully qualified Blade view name to render.
* @return \Illuminate\Contracts\View\View
* @param StaticPageType $type The commitment page type to load.
* @param string $view The fully qualified Blade view name to render.
*/
private function renderPage(StaticPageType $type, string $view): \Illuminate\Contracts\View\View
private function renderPage(StaticPageType $type, string $view): View
{
$staticPageModel = StaticPage::getCachedStaticPage($type);
$staticPageModel->load(['sections.blocks', 'sections.pictos']);
@ -48,45 +48,40 @@ class CommitmentController extends Controller
/**
* Display the given commitment page.
* @return \Illuminate\Contracts\View\View
*/
public function getRestpectEarthPage(): \Illuminate\Contracts\View\View
public function getRestpectEarthPage(): View
{
return $this->renderPage(StaticPageType::respectTheEarth, 'fo.pages.commitments.respect');
}
/**
* Display the given commitment page.
* @return \Illuminate\Contracts\View\View
*/
public function getLivingToghether(): \Illuminate\Contracts\View\View
public function getLivingToghether(): View
{
return $this->renderPage(StaticPageType::forLivingTogether, 'fo.pages.commitments.life');
}
/**
* Display the given commitment brand poultry page.
* @return \Illuminate\Contracts\View\View
*/
public function getBrandPoultry(): \Illuminate\Contracts\View\View
public function getBrandPoultry(): View
{
return $this->renderPage(StaticPageType::poultryBrand, 'fo.pages.commitments.brand');
}
/**
* Display the given page.
* @return \Illuminate\Contracts\View\View
*/
public function getRaiseSustainably(): \Illuminate\Contracts\View\View
public function getRaiseSustainably(): View
{
return $this->renderPage(StaticPageType::raiseSustainably, 'fo.pages.commitments.raise');
}
/**
* Display the given page.
* @return \Illuminate\Contracts\View\View
*/
public function getFeedProperly(): \Illuminate\Contracts\View\View
public function getFeedProperly(): View
{
return $this->renderPage(StaticPageType::feedProperly, 'fo.pages.commitments.eat');
}

View file

@ -2,26 +2,27 @@
namespace App\Http\Controllers\Fo;
use App\Models\OptinConsent;
use LDC\LDCCRM\Models\SingleOptin;
use App\Http\Controllers\Controller;
use App\Http\Requests\Fo\ConsentRequest;
use LDC\LDCCRM\Exceptions\CrmException;
use App\Models\OptinConsent;
use Illuminate\Contracts\View\View;
use LDC\LDCCRM\Exceptions\ApiErrorException;
use LDC\LDCCRM\Exceptions\CrmException;
use LDC\LDCCRM\Exceptions\ValidationException;
use LDC\LDCCRM\Models\SingleOptin;
class ConsentController extends Controller
{
/**
* Check if a customer consent to receive newsletters.
*
* @param \App\Http\Requests\Fo\ConsentRequest $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*
* @throws \LDC\LDCCRM\Exceptions\ValidationException ValidationException.
* @throws \LDC\LDCCRM\Exceptions\CrmException CrmException
* @throws \LDC\LDCCRM\Exceptions\ApiErrorException ApiErrorException
*/
public function consent(ConsentRequest $request): \Illuminate\Contracts\View\View
public function consent(ConsentRequest $request): View
{
$isSubscribed = false;

View file

@ -12,6 +12,9 @@ use App\Jobs\Mails\SendNLMail;
use App\Jobs\Mails\SendPasserelleMail;
use App\Models\MailContactData;
use App\Models\StaticPage;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
@ -21,29 +24,25 @@ class ContactController extends Controller
{
/**
* Contact page.
*
* @param \App\Models\StaticPage $staticPageModel
* @return \Illuminate\Contracts\View\View
*/
public function contact(StaticPage $staticPageModel): \Illuminate\Contracts\View\View
public function contact(StaticPage $staticPageModel): View
{
$staticPageModel = StaticPage::getCachedStaticPage(StaticPageType::contact);
return view('fo.pages.contact', ['staticPageModel' => $staticPageModel]);
}
/**
* Send contact form data.
*
* @param \App\Http\Requests\Fo\ContactFormRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function contactSubmit(ContactFormRequest $request): \Illuminate\Http\RedirectResponse
public function contactSubmit(ContactFormRequest $request): RedirectResponse
{
/** @var array<string, mixed> $validatedData */
$validatedData = $request->validated();
return DB::transaction(function () use ($validatedData) {
try {
$joinFilePath = ContactFormType::make($validatedData['type'])->hasFileInput() && !empty($validatedData['joinFile'])
$joinFilePath = ContactFormType::make($validatedData['type'])->hasFileInput() && ! empty($validatedData['joinFile'])
? $this->storeFile($validatedData['joinFile'])
: null;
$data = new MailContactData(
@ -59,7 +58,7 @@ class ContactController extends Controller
app()->setLocale('nl');
\dispatch(new SendNLMail($data, $joinFilePath));
} else {
// Send to the CRM.
// Send to the CRM.
if ($joinFilePath) {
$relativePath = str_replace(storage_path('app/public') . '/', '', $joinFilePath);
$binary = Storage::disk('public')->get($relativePath);
@ -82,24 +81,21 @@ class ContactController extends Controller
// Send mail.
\dispatch(new SendClaimMail($data, $joinFilePath));
}//end if
}// end if
return back()->with('success', trans('contact.message_contact_send'));
} catch (AbortContactMailer $e) {
Log::error('Fail to build mail from complain page ', ['exception' => $e]);
} //end try
} // end try
return back()->withInput()->with('error', trans('contact.message_contact_failed'));
});
}
/**
* Store the file sent in the request if it exists.
*
* @param \Illuminate\Http\UploadedFile|null $file
*
* @return string|null
*/
private function storeFile(\Illuminate\Http\UploadedFile|null $file): string|null
private function storeFile(?UploadedFile $file): ?string
{
$joinFilePath = null;
$joinFile = '';
@ -111,6 +107,7 @@ class ContactController extends Controller
);
$joinFilePath = storage_path('app/' . $joinFile);
}
return $joinFilePath;
}
}

View file

@ -3,17 +3,17 @@
namespace App\Http\Controllers\Fo;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\View\View;
class ExportController extends Controller
{
/**
* Contact page.
*
* @return \Illuminate\Contracts\View\View
*/
public function nl(): \Illuminate\Contracts\View\View
public function nl(): View
{
app()->setLocale('nl');
return view('fo.pages.export');
}
}

View file

@ -5,47 +5,42 @@ namespace App\Http\Controllers\Fo;
use App\Http\Controllers\Controller;
use App\Lib\Helpers\GamePeriodHelper;
use App\Models\GoldenCrushGame;
use Illuminate\Contracts\View\View;
class GoldenCrushController extends Controller
{
/**
* Reuturn landing page.
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
public function index(): View
{
$startVote = GamePeriodHelper::isGamePeriod();
return view('fo.pages.goldenCrush.golden-crush', ['startVote' => $startVote]);
}
/**
* End of participation landing page.
*
* @return \Illuminate\Contracts\View\View
*/
public function endParticipation(): \Illuminate\Contracts\View\View
public function endParticipation(): View
{
return $this->render('fo.pages.goldenCrush.end-of-participation');
}
/**
* End of game landing page.
*
* @return \Illuminate\Contracts\View\View
*/
public function endGame(): \Illuminate\Contracts\View\View
/**
* End of game landing page.
*/
public function endGame(): View
{
return $this->render('fo.pages.goldenCrush.end-game');
}
/**
* Render video in view.
*
* @param string $view for inject videos.
* @return \Illuminate\Contracts\View\View
*/
private function render(string $view): \Illuminate\Contracts\View\View
/**
* Render video in view.
*
* @param string $view for inject videos.
*/
private function render(string $view): View
{
$videos = GoldenCrushGame::getVideos();

View file

@ -9,31 +9,31 @@ use App\Http\Requests\Fo\SingleOptinRequest;
use App\Http\Requests\Fo\UnsubscribeNewsletterRequest;
use App\Models\DemarcheSlide;
use App\Models\Discount;
use App\Models\MainSlide;
use App\Models\Product;
use App\Models\GeneralSetting;
use App\Models\MainSlide;
use App\Models\News;
use App\Models\Product;
use App\Models\Range;
use App\Models\Recipe;
use App\Models\StaticPage;
use App\Models\Video;
use Illuminate\Contracts\View\View;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
use LDC\LDCCRM\Enums\ApiError;
use LDC\LDCCRM\Exceptions\ApiErrorException;
use LDC\LDCCRM\Exceptions\CrmException;
use LDC\LDCCRM\Exceptions\ValidationException;
use LDC\LDCCRM\Models\SingleOptin;
use LDC\LDCCRM\Models\Customer;
use LDC\LDCCRM\Models\SingleOptin;
class HomeController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
public function index(): View
{
$productCacheKey = 'HomeProductsViews' . (auth('club')->user() ? '_' . auth('club')->user()->id : '');
$recipeCacheKey = 'HomeRecipesViews' . (auth('club')->user() ? '_' . auth('club')->user()->id : '');
@ -53,6 +53,7 @@ class HomeController extends Controller
$discountsTotal = Discount::getCachedDiscounts()->sum('value');
$staticPageModel->load(['sections.blocks', 'sections.pictos']);
return view('fo.pages.home', compact(
'staticPageModel',
'mainSlideModels',
@ -70,8 +71,8 @@ class HomeController extends Controller
/**
* Call the CRM to add a single optin
*
* @param \App\Http\Requests\Fo\SingleOptinRequest $request
* @return string|array|null|\Illuminate\Contracts\Translation\Translator
*
* @throws \LDC\LDCCRM\Exceptions\ValidationException ValidationException.
* @throws \Illuminate\Contracts\Container\BindingResolutionException BindingResolutionException.
*/
@ -79,27 +80,27 @@ class HomeController extends Controller
{
try {
SingleOptin::setStatus($request->email, true);
return \response(trans("Votre inscription à la newsletter a été prise en compte"), 200);
return \response(trans('Votre inscription à la newsletter a été prise en compte'), 200);
} catch (ApiErrorException $e) {
// Il y a deja un customerInfo avec optin a true pour ce customer.
if ($e->getApiError()->equals(ApiError::singleOptinCustomerExists)) {
return trans('Vous êtes déjà inscrit avec cette adresse email');
}
\report($e);
return \response(trans('Une erreur est survenue, merci de réessayer ultérieurement'), 404);
} catch (CrmException $e) {
\report($e);
return \response(trans('Une erreur est survenue, merci de réessayer ultérieurement'), 404);
}
}
/**
* unsubscribeNewsletter method
*
* @param \App\Http\Requests\Fo\UnsubscribeNewsletterRequest $request
* @return \Illuminate\Contracts\View\View
*/
public function unsubscribeNewsletter(UnsubscribeNewsletterRequest $request): \Illuminate\Contracts\View\View
public function unsubscribeNewsletter(UnsubscribeNewsletterRequest $request): View
{
$error = null;
$hashcode = $request->hashcode;
@ -132,25 +133,25 @@ class HomeController extends Controller
if (app()->bound('sentry')) {
app('sentry')->captureException($e);
}
} //end try
} // end try
if (!is_null($error)) {
if (! is_null($error)) {
return view('fo.pages.newsletter-unsubscribe')->with(
'error',
trans('Une erreur est survenue, merci de réessayer ultérieurement')
);
}
return view('fo.pages.newsletter-unsubscribe');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\JsonResponse
*/
public function updateHotNewsSatus(): \Illuminate\Http\JsonResponse
public function updateHotNewsSatus(): JsonResponse
{
Cache::put('hotNewsIsDisplayed', true, now()->addHours(24));
return response()->json();
}
}

View file

@ -7,17 +7,17 @@ use App\Http\Controllers\Controller;
use App\Models\News;
use App\Models\NewsCategory;
use App\Models\StaticPage;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class NewsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
public function index(): View
{
$staticPageModel = StaticPage::getCachedStaticPage(StaticPageType::news);
$newsCategories = NewsCategory::getPublishedOrdered();
@ -26,17 +26,14 @@ class NewsController extends Controller
return view('fo.pages.news.index', [
'newsViews' => $newsViews,
'newsCategories' => $newsCategories,
'staticPageModel' => $staticPageModel
'staticPageModel' => $staticPageModel,
]);
}
/**
* Get the view of a specific news.
*
* @param string $slug
* @return \Illuminate\Contracts\View\View
*/
public function show(string $slug): \Illuminate\Contracts\View\View
public function show(string $slug): View
{
/** @var \App\Models\News|null $newsModel Current news model */
$newsModel = News::query()
@ -59,17 +56,14 @@ class NewsController extends Controller
return view('fo.pages.news.show', [
'newsModel' => $newsModel,
'asideNewsModels' => $asideNewsModels
'asideNewsModels' => $asideNewsModels,
]);
}
/**
* Get filtered news.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function jsonGetNewsViewsByCategory(Request $request): \Illuminate\Http\JsonResponse
public function jsonGetNewsViewsByCategory(Request $request): JsonResponse
{
return response()->json(News::getNewsViewsByNewsCategory($request->LEGENDSLUG));
}

View file

@ -13,9 +13,11 @@ use App\Models\Recipe;
use App\Models\StaticPage;
use App\Models\Submeat;
use App\Models\Subrange;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Cache;
@ -25,23 +27,21 @@ class ProductController extends Controller
* Use for pagination,
* number of product models per page.
*
* @var integer
* @var int
*/
private $productModelsPerPage = 8;
/**
* Get products by a specific range into a json response.
*
* @param \Illuminate\Pagination\LengthAwarePaginator|null $productModelsFiltered
* @param \Illuminate\Support\Collection<\App\Models\Subrange>|null $subrangeModelsFiltered
* @param \Illuminate\Support\Collection<\App\Models\Submeat>|null $submeatModelsFiltered
* @return \Illuminate\Contracts\View\View
* @param \Illuminate\Support\Collection<\App\Models\Subrange>|null $subrangeModelsFiltered
* @param \Illuminate\Support\Collection<\App\Models\Submeat>|null $submeatModelsFiltered
*/
public function index(
LengthAwarePaginator|null $productModelsFiltered = null,
Collection|null $subrangeModelsFiltered = null,
Collection|null $submeatModelsFiltered = null,
): \Illuminate\Contracts\View\View {
?LengthAwarePaginator $productModelsFiltered = null,
?Collection $subrangeModelsFiltered = null,
?Collection $submeatModelsFiltered = null,
): View {
/** @var \Illuminate\Pagination\LengthAwarePaginator $productModels */
$productModels = $productModelsFiltered ?? Product::query()
@ -55,6 +55,7 @@ class ProductController extends Controller
$subrangeModels = $subrangeModelsFiltered ?? Subrange::getPublishedOrdered();
$meatModels = Meat::getPublishedOrderedWithSubmeats();
$submeatModels = $submeatModelsFiltered ?? Submeat::getPublishedOrdered();
return view('fo.pages.products.index', [
'viewsPaginate' => CollectionHelper::getViewsFromPaginateModels(
$productModels,
@ -73,11 +74,8 @@ class ProductController extends Controller
/**
* Get the view of a specific product.
*
* @param string $slug
* @return \Illuminate\Contracts\View\View
*/
public function show(string $slug): \Illuminate\Contracts\View\View
public function show(string $slug): View
{
/** @var \App\Models\Product|null $productModel Current product model */
$productModel = Product::query()->where([['slug', $slug], ['published', true]])->first();
@ -123,9 +121,6 @@ class ProductController extends Controller
/**
* Get product models titles for search input propositions.
*
* @param \App\Models\Product $productModel
* @return array
*/
public function getSiblingModels(Product $productModel): array
{
@ -135,10 +130,10 @@ class ProductController extends Controller
/** @var string $slug */
$slug = $filter
? ((is_null($productModel->{$filter})
? $productModel->{"sub" . $this->cleanSubSubFilter($filter)}
->{$this->cleanSubSubFilter($filter)} ?? null
: $productModel->{$filter})->slug ?? "")
: "";
? $productModel->{'sub' . $this->cleanSubSubFilter($filter)}
->{$this->cleanSubSubFilter($filter)} ?? null
: $productModel->{$filter})->slug ?? '')
: '';
// FIXME: the previous element are added on 30/10/24 to avoid error when productFilters was set on "submeat"
// for example and user access to product which not have submeat relation -> "Attempt to read property 'sub***' on null"
@ -171,7 +166,7 @@ class ProductController extends Controller
$collectionIndex = $productModelsList->search(function ($productModelItem, $key) use ($productModel) {
if ($productModelItem->getKey() === $productModel->getKey()) {
return $key;
};
}
});
$productModelSibling[0] = (is_null($productModelsList->get($collectionIndex - 1)))
@ -180,27 +175,22 @@ class ProductController extends Controller
$productModelSibling[1] = (is_null($productModelsList->get($collectionIndex + 1)))
? $productModelsList->first()
: $productModelsList->get($collectionIndex + 1);
return $productModelSibling;
}
/**
* Get product models titles for search input propositions.
*
* @param string|null $search
* @return \Illuminate\Pagination\LengthAwarePaginator
*/
public function getProductModelsTitles(string|null $search = null): \Illuminate\Pagination\LengthAwarePaginator
public function getProductModelsTitles(?string $search = null): LengthAwarePaginator
{
return $this->getModelsTitles(Product::query(), 'label', $search);
}
/**
* Get a list of words for the search input propositions.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function getWordsList(Request $request): \Illuminate\Http\JsonResponse
public function getWordsList(Request $request): JsonResponse
{
return response()->json($this->getProductModelsTitles($request->input('search')));
}
@ -208,11 +198,8 @@ class ProductController extends Controller
/**
* Get products by specific words,
* the response can be a json or a view.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View
*/
public function getProductsByWords(Request $request): \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View
public function getProductsByWords(Request $request): JsonResponse | View
{
/** @var \Illuminate\Database\Eloquent\Builder $productModels */
$productModels = Product::query()
@ -225,7 +212,7 @@ class ProductController extends Controller
if ($search) {
$this->searchQuery(
$productModels,
str_replace(",", " ", $request->input('words')),
str_replace(',', ' ', $request->input('words')),
null,
'label',
);
@ -242,26 +229,24 @@ class ProductController extends Controller
'children' => [],
]);
}
return $this->index($productModels, collect());
}
/**
* Get products by a specific meat,
* the response can be a json or a view.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View
*/
public function getProductsByRange(
Request $request
): \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View {
): JsonResponse | View {
Cache::put('productsFilter', 'range');
$rangeModel = Range::query()
->where('slug', $request->model_slug)
->where('published', true)
->first();
$subrangeModels = Subrange::query()
->when(!is_null($rangeModel), function (Builder $q) use ($rangeModel) {
->when(! is_null($rangeModel), function (Builder $q) use ($rangeModel) {
$q->where('range_id', $rangeModel->getKey());
})
->where('published', true)
@ -270,13 +255,13 @@ class ProductController extends Controller
$productModels = Product::query()
->with(['range', 'subrange', 'meat', 'submeat'])
->when(!is_null($rangeModel), function (Builder $q) use ($rangeModel, $request) {
->when(! is_null($rangeModel), function (Builder $q) use ($rangeModel, $request) {
$q->where(function (Builder $q) use ($rangeModel, $request) {
$q->whereHas('range', function (Builder $q) use ($rangeModel) {
$q->where('published', true)->where('id', $rangeModel->getKey());
})->orWhereHas('subrange', function (Builder $q) use ($rangeModel, $request) {
if ($request->child_slug) {
$q->where('published', true)->where("slug", $request->child_slug);
$q->where('published', true)->where('slug', $request->child_slug);
} else {
$q->where('published', true)->whereIn('id', $rangeModel->subranges->pluck('id')->toArray());
}
@ -305,13 +290,10 @@ class ProductController extends Controller
/**
* Get products by a specific submeat,
* the response can be a json or a view.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View
*/
public function getProductsBySubrange(
Request $request
): \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View {
): JsonResponse | View {
Cache::put('productsFilter', 'subrange');
$rangeModel = Range::query()
->where('slug', $request->model_slug)
@ -319,7 +301,7 @@ class ProductController extends Controller
->first();
$subrangeModel = Subrange::query()
->when(!is_null($rangeModel), function (Builder $q) use ($rangeModel) {
->when(! is_null($rangeModel), function (Builder $q) use ($rangeModel) {
$q->where('range_id', $rangeModel->getKey());
})
->where('slug', $request->child_slug)
@ -327,7 +309,7 @@ class ProductController extends Controller
->first();
$subrangeModels = Subrange::query()
->when(!is_null($rangeModel), function (Builder $q) use ($rangeModel) {
->when(! is_null($rangeModel), function (Builder $q) use ($rangeModel) {
$q->where('range_id', $rangeModel->getKey());
})
->where('published', true)
@ -336,7 +318,7 @@ class ProductController extends Controller
$productModels = Product::query()
->with(['range', 'subrange', 'meat', 'submeat'])
->where('published', true)
->when(!is_null($subrangeModel), function (Builder $q) use ($subrangeModel) {
->when(! is_null($subrangeModel), function (Builder $q) use ($subrangeModel) {
$q->whereHas('subrange', function (Builder $q) use ($subrangeModel) {
$q->where('published', true)->where('id', $subrangeModel->getKey());
});
@ -355,26 +337,24 @@ class ProductController extends Controller
'children' => $subrangeModels,
]);
}
return $this->index($productModels, $subrangeModels);
}
/**
* Get products by a specific meat,
* the response can be a json or a view.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View
*/
public function getProductsByMeat(
Request $request
): \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View {
): JsonResponse | View {
Cache::put('productsFilter', 'meat');
$meatModel = Meat::query()
->where('slug', $request->model_slug)
->where('published', true)
->first();
$submeatModels = Submeat::query()
->when(!is_null($meatModel), function (Builder $q) use ($meatModel) {
->when(! is_null($meatModel), function (Builder $q) use ($meatModel) {
$q->where('meat_id', $meatModel->getKey());
})
->where('published', true)
@ -382,7 +362,7 @@ class ProductController extends Controller
->get();
$productModels = Product::query()
->with(['range', 'subrange', 'meat', 'submeat'])
->when(!is_null($meatModel), function (Builder $q) use ($meatModel) {
->when(! is_null($meatModel), function (Builder $q) use ($meatModel) {
$q->where(function (Builder $q) use ($meatModel) {
$q->whereHas('meat', function (Builder $q) use ($meatModel) {
$q->where('published', true)->where('id', $meatModel->getKey());
@ -404,33 +384,31 @@ class ProductController extends Controller
'children' => $submeatModels,
]);
}
return $this->index($productModels, null, $submeatModels);
}
/**
* Get products by a specific submeat,
* the response can be a json or a view.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View
*/
public function getProductsBySubmeat(
Request $request
): \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View {
): JsonResponse | View {
Cache::put('productsFilter', 'submeat');
$meatModel = Meat::query()
->where('slug', $request->model_slug)
->where('published', true)
->first();
$submeatModel = Submeat::query()
->when(!is_null($meatModel), function (Builder $q) use ($meatModel) {
->when(! is_null($meatModel), function (Builder $q) use ($meatModel) {
$q->where('meat_id', $meatModel->getKey());
})
->where('slug', $request->child_slug)
->where('published', true)
->first();
$submeatModels = Submeat::query()
->when(!is_null($meatModel), function (Builder $q) use ($meatModel) {
->when(! is_null($meatModel), function (Builder $q) use ($meatModel) {
$q->where('meat_id', $meatModel->getKey());
})
->where('published', true)
@ -439,7 +417,7 @@ class ProductController extends Controller
$productModels = Product::query()
->with(['range', 'subrange', 'meat', 'submeat'])
->where('published', true)
->when(!is_null($submeatModel), function (Builder $q) use ($submeatModel) {
->when(! is_null($submeatModel), function (Builder $q) use ($submeatModel) {
$q->whereHas('submeat', function (Builder $q) use ($submeatModel) {
$q->where('published', true)->where('id', $submeatModel->getKey());
});
@ -456,6 +434,7 @@ class ProductController extends Controller
'children' => $submeatModels,
]);
}
return $this->index($productModels, null, $submeatModels);
}
@ -463,11 +442,8 @@ class ProductController extends Controller
* Get products by a selected product model,
* filtered first by product subrange/range,
* and by meats/submeats.
*
* @param \App\Models\Product $productModel
* @return \Illuminate\Support\Collection
*/
public function getProductsFiltered(Product $productModel): \Illuminate\Support\Collection
public function getProductsFiltered(Product $productModel): Collection
{
/** @var int $nbrMaxProducts Maximum number of products required */
$nbrMaxProducts = 9;
@ -476,7 +452,7 @@ class ProductController extends Controller
$productModels = Product::query()
->whereNot('id', $productModel->getKey())
->where('published', true)
->when(!is_null($productModel->range), function (Builder $q) use ($productModel) {
->when(! is_null($productModel->range), function (Builder $q) use ($productModel) {
$q->whereHas('range', function (Builder $q) use ($productModel) {
$q->where('published', true)->where('id', $productModel->range->getKey());
})->orWhereHas('subrange', function (Builder $q) use ($productModel) {
@ -484,7 +460,7 @@ class ProductController extends Controller
$q->where('published', true)->where('id', $productModel->range->getKey());
});
});
})->when(!is_null($productModel->subrange), function (Builder $q) use ($productModel) {
})->when(! is_null($productModel->subrange), function (Builder $q) use ($productModel) {
$q->whereHas('subrange', function (Builder $q) use ($productModel) {
$q->where('published', true)->where('id', $productModel->subrange->getKey());
});
@ -495,7 +471,7 @@ class ProductController extends Controller
$test = Product::query()
->whereNot('id', $productModel->getKey())
->where('published', true)
->when(!is_null($productModel->meat), function (Builder $q) use ($productModel) {
->when(! is_null($productModel->meat), function (Builder $q) use ($productModel) {
$q->whereHas('meat', function (Builder $q) use ($productModel) {
$q->where('published', true)->where('id', $productModel->meat->getKey());
})->orWhereHas('submeat', function (Builder $q) use ($productModel) {
@ -503,13 +479,14 @@ class ProductController extends Controller
$q->where('published', true)->where('id', $productModel->meat->getKey());
});
});
})->when(!is_null($productModel->submeat), function (Builder $q) use ($productModel) {
})->when(! is_null($productModel->submeat), function (Builder $q) use ($productModel) {
$q->whereHas('submeat', function (Builder $q) use ($productModel) {
$q->where('published', true)->where('id', $productModel->submeat->getKey());
});
})
->get();
}
return $productModels->slice(0, $nbrMaxProducts);
}
@ -517,11 +494,8 @@ class ProductController extends Controller
* Get recipes by a selected product model,
* filtered first by products associated,
* by meats/submeats and finally by consumption moment.
*
* @param \App\Models\Product $productModel
* @return \Illuminate\Support\Collection
*/
public function getRecipesFiltered(Product $productModel): \Illuminate\Support\Collection
public function getRecipesFiltered(Product $productModel): Collection
{
/** @var int $nbrMaxRecipes Maximum number of recipes required */
$nbrMaxRecipes = 9;
@ -541,7 +515,7 @@ class ProductController extends Controller
->with(['products', 'products.meat', 'products.submeat', 'consumptionMoment'])
->where('published', true)
->whereHas('products', function (Builder $q) use ($productModel) {
$q->when(!is_null($productModel->range), function (Builder $q) use ($productModel) {
$q->when(! is_null($productModel->range), function (Builder $q) use ($productModel) {
$q->whereHas('range', function (Builder $q) use ($productModel) {
$q->where('published', true)->where('id', $productModel->range->getKey());
})->orWhereHas('subrange', function (Builder $q) use ($productModel) {
@ -549,38 +523,32 @@ class ProductController extends Controller
$q->where('published', true)->where('id', $productModel->range->getKey());
});
});
})->when(!is_null($productModel->subrange), function (Builder $q) use ($productModel) {
})->when(! is_null($productModel->subrange), function (Builder $q) use ($productModel) {
$q->whereHas('subrange', function (Builder $q) use ($productModel) {
$q->where('published', true)->where('id', $productModel->subrange->getKey());
});
});
})
->get());
} //end if
} // end if
return $recipeModels->slice(0, $nbrMaxRecipes);
}
/**
* Get products by a specific range into a json response.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function jsonGetProductsViewsByRange(Request $request): \Illuminate\Http\JsonResponse
public function jsonGetProductsViewsByRange(Request $request): JsonResponse
{
return response()->json(Product::getProductsViewsByRange($request->LEGENDSLUG));
}
/**
* Delete the "sub" start filter to avoid "subsubrange" when user has some filters
* and hard visit a total different product filter
*
* @param string|null $filter
* @return mixed
*/
private function cleanSubSubFilter(string|null $filter = null): mixed
private function cleanSubSubFilter(?string $filter = null): mixed
{
return str_starts_with($filter, "sub") ? preg_replace('/^sub/', '', $filter) : $filter;
return str_starts_with($filter, 'sub') ? preg_replace('/^sub/', '', $filter) : $filter;
}
}

View file

@ -5,17 +5,15 @@ namespace App\Http\Controllers\Fo;
use App\Http\Controllers\Controller;
use App\Http\Requests\Fo\StoreRatingRequest;
use App\Models\Rating;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;
class RatingController extends Controller
{
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\Fo\StoreRatingRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function store(StoreRatingRequest $request): \Illuminate\Http\JsonResponse
public function store(StoreRatingRequest $request): JsonResponse
{
return DB::transaction(function () use ($request) {
$validated = $request->validated();

View file

@ -9,14 +9,18 @@ use App\Lib\Helpers\CollectionHelper;
use App\Models\ConsumptionMoment;
use App\Models\Meat;
use App\Models\Rating;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Recipe;
use App\Models\StaticPage;
use App\Models\Submeat;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
use Mccarlosen\LaravelMpdf\LaravelMpdf;
class RecipeController extends Controller
{
@ -24,21 +28,19 @@ class RecipeController extends Controller
* Use for pagination,
* number of recipe models per page.
*
* @var integer
* @var int
*/
private $recipeModelsPerPage = 8;
/**
* Get recipes by a specific range into a json response.
*
* @param \Illuminate\Pagination\LengthAwarePaginator|null $recipeModelsFiltered
* @param \Illuminate\Support\Collection<\App\Models\Submeat>|null $submeatModelsFiltered
* @return \Illuminate\Contracts\View\View
* @param \Illuminate\Support\Collection<\App\Models\Submeat>|null $submeatModelsFiltered
*/
public function index(
LengthAwarePaginator|null $recipeModelsFiltered = null,
Collection|null $submeatModelsFiltered = null,
): \Illuminate\Contracts\View\View {
?LengthAwarePaginator $recipeModelsFiltered = null,
?Collection $submeatModelsFiltered = null,
): View {
/** @var \Illuminate\Pagination\LengthAwarePaginator $recipeModels */
$recipeModels = $recipeModelsFiltered ?? Recipe::query()
->with(['products', 'products.meat', 'products.submeat', 'consumptionMoment'])
@ -49,8 +51,7 @@ class RecipeController extends Controller
$staticPageModel = StaticPage::getCachedStaticPage(StaticPageType::recipes);
$consumptionMomentModels = ConsumptionMoment::getOrderedBySlug();
$meatModels = Meat::getPublishedOrderedWithSubmeats();
$submeatModels = $submeatModelsFiltered ??
Submeat::getPublishedOrdered();
$submeatModels = $submeatModelsFiltered ?? Submeat::getPublishedOrdered();
return view('fo.pages.recipes.index', [
'viewsPaginate' => CollectionHelper::getViewsFromPaginateModels(
@ -69,17 +70,14 @@ class RecipeController extends Controller
/**
* Get the view of a specific recipe.
*
* @param string $slug
* @return \Illuminate\Contracts\View\View
*/
public function show(string $slug): \Illuminate\Contracts\View\View
public function show(string $slug): View
{
/** @var \App\Models\Recipe|null $recipeModel Current recipe model */
$recipeModel = Recipe::query()->where([['slug', $slug], ['published', true]])->with([
'products.meat',
'products.submeat',
'products.approach'
'products.approach',
])->first();
if (is_null($recipeModel)) {
abort(404);
@ -98,23 +96,18 @@ class RecipeController extends Controller
/**
* Get recipe models titles for search input propositions.
*
* @param string|null $search
* @return \Illuminate\Pagination\LengthAwarePaginator
*/
public function getRecipeModelsTitles(string|null $search = null): \Illuminate\Pagination\LengthAwarePaginator
public function getRecipeModelsTitles(?string $search = null): LengthAwarePaginator
{
$query = Recipe::query()->with(['products', 'products.meat', 'products.submeat', 'consumptionMoment']);
return $this->getModelsTitles($query, 'title', $search);
}
/**
* Get a list of words for the search input propositions.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function getWordsList(Request $request): \Illuminate\Http\JsonResponse
public function getWordsList(Request $request): JsonResponse
{
return response()->json($this->getRecipeModelsTitles($request->input('search')));
}
@ -122,11 +115,8 @@ class RecipeController extends Controller
/**
* Get recipes by specific words,
* the response can be a json or a view.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View
*/
public function getRecipesByWords(Request $request): \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View
public function getRecipesByWords(Request $request): JsonResponse | View
{
/** @var \Illuminate\Database\Eloquent\Builder $recipeModels */
$recipeModels = Recipe::query()
@ -139,7 +129,7 @@ class RecipeController extends Controller
if ($search) {
$this->searchQuery(
$recipeModels,
str_replace(",", " ", $request->input('words')),
str_replace(',', ' ', $request->input('words')),
null,
'title',
);
@ -156,25 +146,23 @@ class RecipeController extends Controller
'children' => [],
]);
}
return $this->index($recipeModels, collect());
}
/**
* Get recipes by a specific consumption_moment,
* the response can be a json or a view.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View
*/
public function getRecipesByConsumptionMoment(
Request $request
): \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View {
): JsonResponse | View {
$consumptionMomentModel = ConsumptionMoment::query()
->where('slug', $request->model_slug)
->first();
$recipeModels = Recipe::query()
->with(['products', 'products.meat', 'products.submeat', 'consumptionMoment'])
->when(!is_null($consumptionMomentModel), function (Builder $q) use ($consumptionMomentModel) {
->when(! is_null($consumptionMomentModel), function (Builder $q) use ($consumptionMomentModel) {
$q->where('consumption_moment_id', $consumptionMomentModel->getKey());
})
->where('published', true)
@ -190,25 +178,23 @@ class RecipeController extends Controller
'children' => [],
]);
}
return $this->index($recipeModels, collect());
}
/**
* Get recipes by a specific meat,
* the response can be a json or a view.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View
*/
public function getRecipesByMeat(
Request $request
): \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View {
): JsonResponse | View {
$meatModel = Meat::query()
->where('slug', $request->model_slug)
->where('published', true)
->first();
$submeatModels = Submeat::query()
->when(!is_null($meatModel), function (Builder $q) use ($meatModel) {
->when(! is_null($meatModel), function (Builder $q) use ($meatModel) {
$q->where('meat_id', $meatModel->getKey());
})
->where('published', true)
@ -217,7 +203,7 @@ class RecipeController extends Controller
$recipeModels = Recipe::query()
->with(['products', 'products.meat', 'products.submeat', 'consumptionMoment'])
->where('published', true)
->when(!is_null($meatModel), function (Builder $q) use ($meatModel) {
->when(! is_null($meatModel), function (Builder $q) use ($meatModel) {
$q->whereHas('products', function (Builder $q) use ($meatModel) {
$q->whereHas('meat', function (Builder $q) use ($meatModel) {
$q->where('published', true)->where('id', $meatModel->getKey());
@ -238,32 +224,30 @@ class RecipeController extends Controller
'children' => $submeatModels,
]);
}
return $this->index($recipeModels, $submeatModels);
}
/**
* Get recipes by a specific submeat,
* the response can be a json or a view.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View
*/
public function getRecipesBySubmeat(
Request $request
): \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View {
): JsonResponse | View {
$meatModel = Meat::query()
->where('slug', $request->model_slug)
->where('published', true)
->first();
$submeatModel = Submeat::query()
->when(!is_null($meatModel), function (Builder $q) use ($meatModel) {
->when(! is_null($meatModel), function (Builder $q) use ($meatModel) {
$q->where('meat_id', $meatModel->getKey());
})
->where('slug', $request->child_slug)
->where('published', true)
->first();
$submeatModels = Submeat::query()
->when(!is_null($meatModel), function (Builder $q) use ($meatModel) {
->when(! is_null($meatModel), function (Builder $q) use ($meatModel) {
$q->where('meat_id', $meatModel->getKey());
})
->where('published', true)
@ -272,7 +256,7 @@ class RecipeController extends Controller
$recipeModels = Recipe::query()
->with(['products', 'products.meat', 'products.submeat', 'consumptionMoment'])
->where('published', true)
->when(!is_null($submeatModel), function (Builder $q) use ($submeatModel) {
->when(! is_null($submeatModel), function (Builder $q) use ($submeatModel) {
$q->whereHas('products', function (Builder $q) use ($submeatModel) {
$q->whereHas('submeat', function (Builder $q) use ($submeatModel) {
$q->where('published', true)->where('id', $submeatModel->getKey());
@ -292,6 +276,7 @@ class RecipeController extends Controller
'children' => [],
]);
}
return $this->index($recipeModels, $submeatModels);
}
@ -299,16 +284,13 @@ class RecipeController extends Controller
* Get recipes by a selected recipe model,
* filtered first by products associated,
* by meats/submeats and finally by consumption moment.
*
* @param \App\Models\Recipe $recipeModel
* @return \Illuminate\Support\Collection
*/
public function getRecipesFiltered(Recipe $recipeModel): \Illuminate\Support\Collection
public function getRecipesFiltered(Recipe $recipeModel): Collection
{
/** @var int $nbrMaxRecipes Maximum number of recipes required */
$nbrMaxRecipes = 9;
/** @var array<integer> $recipeProducts Id of recipe products relation */
/** @var array<int> $recipeProducts Id of recipe products relation */
$recipeProducts = $recipeModel->products->pluck('id')->toArray();
/** @var \Illuminate\Support\Collection<\App\Models\Recipe> $recipeWithProducts Recipe query builder for products relation */
$recipeWithProducts = Recipe::query()
@ -326,7 +308,7 @@ class RecipeController extends Controller
/** @var \Illuminate\Support\Collection<\App\Models\Recipe> $recipeModels All collections of recipes merged */
$recipeModels = collect();
if (count($recipeWithProducts) < $nbrMaxRecipes) {
/** @var array<integer> $recipeProductsSubmeats */
/** @var array<int> $recipeProductsSubmeats */
$recipeProductsSubmeats = [];
$recipeModel->products->map(function ($product) use (&$recipeProductsSubmeats) {
$recipeProductsSubmeats = array_merge(
@ -367,27 +349,24 @@ class RecipeController extends Controller
->get();
$recipeModels = $recipeModels->merge($recipeWithConsumptionMoment);
}
} //end if
} // end if
return $recipeModels->slice(0, $nbrMaxRecipes);
}
/**
* Print product commercial sheet
*
* @param string $slug
* @return \Illuminate\Http\Response
*/
public function printCommericalSheet(string $slug): \Illuminate\Http\Response
public function printCommericalSheet(string $slug): Response
{
$recipeModel = Recipe::query()->where('slug', $slug)->first();
$title = trans('Fiche commerciale de la recette : :title - :appname', [
'label' => $recipeModel->title,
'appname' => \config('app.name', 'Le Gaulois')
'label' => $recipeModel->title,
'appname' => \config('app.name', 'Le Gaulois'),
]);
$filename = trans('fiche-commerciale-:slug-:date', [
'slug' => Str::slug($recipeModel->title),
'date' => \now()->format('Y-m-d')
'date' => \now()->format('Y-m-d'),
]);
/**
@ -412,15 +391,11 @@ class RecipeController extends Controller
/**
* Generate recipe commercial sheet PDF
*
* @param \App\Models\Recipe $recipeModel
* @param string $title
* @return \Mccarlosen\LaravelMpdf\LaravelMpdf
*/
private function generateRecipeCommercialPdf(
Recipe $recipeModel,
string $title
): \Mccarlosen\LaravelMpdf\LaravelMpdf {
): LaravelMpdf {
/** @var \Mccarlosen\LaravelMpdf\LaravelMpdfWrapper */
$mpdf = app('laravel-mpdf');
/** @var \Mccarlosen\LaravelMpdf\LaravelMpdf */
@ -429,33 +404,33 @@ class RecipeController extends Controller
// * Dirty convert to object.
[
'title' => $title,
'recipeModel' => \json_decode(\json_encode(new RecipeCommericalSheetResource($recipeModel)))
'recipeModel' => \json_decode(\json_encode(new RecipeCommericalSheetResource($recipeModel))),
],
[],
[
'mode' => 'utf-8',
'format' => 'A4',
'default_font_size' => '12',
'default_font' => 'sans-serif',
'margin_left' => 0,
'margin_right' => 0,
'mirrorMargins' => true,
'margin_top' => 0,
'margin_bottom' => 0,
'margin_header' => 0,
'margin_footer' => 0,
'orientation' => 'P',
'title' => $title,
'author' => \config('app.name', 'Le Gaulois'),
'watermark' => '',
'show_watermark' => false,
'watermark_font' => 'sans-serif',
'display_mode' => 'fullpage',
'watermark_text_alpha' => 0.1,
'custom_font_dir' => '',
'custom_font_data' => [],
'mode' => 'utf-8',
'format' => 'A4',
'default_font_size' => '12',
'default_font' => 'sans-serif',
'margin_left' => 0,
'margin_right' => 0,
'mirrorMargins' => true,
'margin_top' => 0,
'margin_bottom' => 0,
'margin_header' => 0,
'margin_footer' => 0,
'orientation' => 'P',
'title' => $title,
'author' => \config('app.name', 'Le Gaulois'),
'watermark' => '',
'show_watermark' => false,
'watermark_font' => 'sans-serif',
'display_mode' => 'fullpage',
'watermark_text_alpha' => 0.1,
'custom_font_dir' => '',
'custom_font_data' => [],
'auto_language_detection' => false,
'temp_dir' => rtrim(
'temp_dir' => rtrim(
ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir(),
DIRECTORY_SEPARATOR
),
@ -463,6 +438,7 @@ class RecipeController extends Controller
'pdfaauto' => false,
]
);
return $pdf;
}
}

Some files were not shown because too many files have changed in this diff Show more