Merge branch 'trunk'
This commit is contained in:
commit
d6b3cb767e
21 changed files with 488 additions and 113 deletions
|
|
@ -14,19 +14,30 @@ use Kwaadpepper\Enum\BaseEnumRoutable;
|
|||
*/
|
||||
final class ContactFormType extends BaseEnumRoutable
|
||||
{
|
||||
/**
|
||||
* Enum values
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected static function values(): array
|
||||
{
|
||||
return [
|
||||
'none' => 0,
|
||||
'abuse' => 1,
|
||||
// * special case passerelle
|
||||
'complain' => 3,
|
||||
// special case passerelle
|
||||
'recipe' => 5,
|
||||
'games' => 9,
|
||||
// * special case page nl
|
||||
'onepage' => 10,
|
||||
// special case page nl
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Enum labels
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected static function labels(): array
|
||||
{
|
||||
return [
|
||||
|
|
@ -39,6 +50,10 @@ final class ContactFormType extends BaseEnumRoutable
|
|||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Output the value as a string
|
||||
* @return string
|
||||
*/
|
||||
public function __toString(): string
|
||||
{
|
||||
return (string)$this->label;
|
||||
|
|
|
|||
|
|
@ -10,17 +10,33 @@ use Illuminate\Support\Facades\File;
|
|||
|
||||
class SubRangeController extends Controller
|
||||
{
|
||||
/**
|
||||
* Viewany subrange
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$subranges = SubRange::paginate();
|
||||
return view('bo.subranges.index', compact('subranges'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create subrange
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('bo.subranges.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store subrange
|
||||
*
|
||||
* @param \App\Http\Requests\StoreSubRange $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function store(StoreSubRange $request)
|
||||
{
|
||||
$subrange = new SubRange($request->validated());
|
||||
|
|
@ -29,11 +45,24 @@ class SubRangeController extends Controller
|
|||
return redirect()->route('bo.subranges.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit subrange
|
||||
*
|
||||
* @param \App\Models\SubRange $subrange
|
||||
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
|
||||
*/
|
||||
public function edit(SubRange $subrange)
|
||||
{
|
||||
return view('bo.subranges.edit', ['subrange' => $subrange]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update subrange
|
||||
*
|
||||
* @param \App\Http\Requests\UpdateSubRange $request
|
||||
* @param \App\Models\SubRange $subrange
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function update(UpdateSubRange $request, SubRange $subrange)
|
||||
{
|
||||
$subrange->fill($request->validated());
|
||||
|
|
@ -43,6 +72,12 @@ class SubRangeController extends Controller
|
|||
->with('success', 'Enregistré !');
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy subrange
|
||||
*
|
||||
* @param \App\Models\SubRange $subrange
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function destroy(SubRange $subrange)
|
||||
{
|
||||
if (File::exists($subrange->picture)) {
|
||||
|
|
@ -57,6 +92,12 @@ class SubRangeController extends Controller
|
|||
->with('warning', 'Le contenu a bien été supprimé');
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove subrange picture
|
||||
*
|
||||
* @param \App\Models\SubRange $subrange
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function removeImage(SubRange $subrange)
|
||||
{
|
||||
if (File::exists($subrange->picture)) {
|
||||
|
|
|
|||
|
|
@ -15,6 +15,13 @@ use Illuminate\Support\Facades\Log;
|
|||
|
||||
class ContactController extends Controller
|
||||
{
|
||||
/**
|
||||
* Show contact Form
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \App\Enums\ContactFormType|null $type
|
||||
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
|
||||
*/
|
||||
public function contact(Request $request, ContactFormType $type = null)
|
||||
{
|
||||
$user = null;
|
||||
|
|
@ -24,6 +31,12 @@ class ContactController extends Controller
|
|||
return view('front.contact.contact', compact('type', 'user', 'status', 'username'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit contact Form
|
||||
*
|
||||
* @param \App\Http\Requests\ContactFormRequest $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function contactSubmit(ContactFormRequest $request)
|
||||
{
|
||||
try {
|
||||
|
|
@ -41,11 +54,23 @@ class ContactController extends Controller
|
|||
return back()->withInput()->with('status', false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show complain form
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
|
||||
*/
|
||||
public function complain(Request $request)
|
||||
{
|
||||
return $this->contact($request, ContactFormType::complain());
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit complain form
|
||||
*
|
||||
* @param \App\Http\Requests\ContactFormRequest $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function complainSubmit(ContactFormRequest $request)
|
||||
{
|
||||
try {
|
||||
|
|
@ -59,11 +84,22 @@ class ContactController extends Controller
|
|||
return back()->withInput()->with('status', false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Report customer from Club magnet exchange
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
|
||||
*/
|
||||
public function reportCustomer(Request $request)
|
||||
{
|
||||
return $this->contact($request, ContactFormType::abuse());
|
||||
}
|
||||
|
||||
/**
|
||||
* Propose meal recipe
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
|
||||
*/
|
||||
public function proposeRecipe(Request $request)
|
||||
{
|
||||
return $this->contact($request, ContactFormType::recipe());
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ use App\Models\Products;
|
|||
use App\Models\Recipes;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\ValidationException as IlluminateValidationException;
|
||||
use LDC\LDCCRM\Enums\ApiError;
|
||||
use LDC\LDCCRM\Exceptions\ApiErrorException;
|
||||
use LDC\LDCCRM\Exceptions\CrmException;
|
||||
|
|
@ -16,30 +18,45 @@ use LDC\LDCCRM\Models\Customer;
|
|||
|
||||
class CustomerController extends Controller
|
||||
{
|
||||
/**
|
||||
* Unsubscribe from newsletter
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
|
||||
*/
|
||||
public function unscribeNewsletter(Request $request)
|
||||
{
|
||||
// TODO: handle single optin avec hashcode.
|
||||
$message = null;
|
||||
|
||||
// TODO: handle single optin avec hashcode
|
||||
// try {
|
||||
// if ($request->hashcode) {
|
||||
// SingleOptin::setStatus($request->email, true);
|
||||
// $message = trans('Votre désinscription à la newsletter a été prise en compte');
|
||||
// }
|
||||
// } catch (ApiErrorException $e) {
|
||||
// if (!$e->getApiError()->equals(ApiError::singleOptinCustomerExists())) {
|
||||
// Utils::sendEmailErrorManually($e);
|
||||
// $message = trans('Une erreur est survenue, merci de réessayer ultérieurement');
|
||||
// }
|
||||
// } catch (CrmException $e) {
|
||||
// Utils::sendEmailErrorManually($e);
|
||||
// $message = trans('Une erreur est survenue, merci de réessayer ultérieurement');
|
||||
// }
|
||||
/*
|
||||
Unsubscribe single optin code.
|
||||
try {
|
||||
if ($request->hashcode) {
|
||||
SingleOptin::setStatus($request->email, true);
|
||||
$message = trans('Votre désinscription à la newsletter a été prise en compte');
|
||||
}
|
||||
} catch (ApiErrorException $e) {
|
||||
if (!$e->getApiError()->equals(ApiError::singleOptinCustomerExists())) {
|
||||
Utils::sendEmailErrorManually($e);
|
||||
$message = trans('Une erreur est survenue, merci de réessayer ultérieurement');
|
||||
}
|
||||
} catch (CrmException $e) {
|
||||
Utils::sendEmailErrorManually($e);
|
||||
$message = trans('Une erreur est survenue, merci de réessayer ultérieurement');
|
||||
}
|
||||
*/
|
||||
|
||||
try {
|
||||
if ($request->hashcode and ($customer = Customer::find($request->hashcode))) {
|
||||
// ? Is hashcode valid ?
|
||||
Validator::validate([
|
||||
'hashcode' => $request->hashcode
|
||||
], [
|
||||
'hashcode' => 'required|uuid'
|
||||
]);
|
||||
if ($customer = Customer::find($request->hashcode)) {
|
||||
$customer->opt_in = false;
|
||||
// TODO remove this temps fix because LG crm data is not consistant
|
||||
// les données sont parsés en retour de la crm et sont inconsitantes
|
||||
// ! Les données peuvent être parsés en retour de la crm et inconsitantes (Héritage vielle crm).
|
||||
try {
|
||||
$customer->save();
|
||||
} catch (ValidationException $e) {
|
||||
|
|
@ -47,6 +64,9 @@ class CustomerController extends Controller
|
|||
}
|
||||
$message = trans('Votre désinscription à la newsletter a été prise en compte');
|
||||
}
|
||||
} catch (IlluminateValidationException $e) {
|
||||
// Les données peuvent être parsés en retour de la crm et sont inconsitantes.
|
||||
$message = null;
|
||||
} catch (ApiErrorException $e) {
|
||||
if (!$e->getApiError()->equals(ApiError::singleOptinCustomerExists())) {
|
||||
Utils::sendEmailErrorManually($e);
|
||||
|
|
|
|||
|
|
@ -78,6 +78,20 @@ class OCBController extends Controller
|
|||
return view('front.ocb.poultry', compact('breeder', 'ocbContents'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show ocb rabbit content
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
|
||||
*/
|
||||
public function rabbit()
|
||||
{
|
||||
$ocbContents = OCBContent::where('type', OCBType::rabbit())
|
||||
->where('status', true)
|
||||
->orderBy('order')
|
||||
->get();
|
||||
return view('front.ocb.rabbit', compact('ocbContents'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show ocb egg content
|
||||
*
|
||||
|
|
|
|||
|
|
@ -38,12 +38,14 @@ class ContactFormRequest extends FormRequest
|
|||
'required',
|
||||
new EnumIsValidRule(ContactFormType::class)
|
||||
],
|
||||
'lastname' => 'required|min:2',
|
||||
'firstname' => 'required|min:2',
|
||||
// * max arcadia 50 chars
|
||||
'lastname' => 'required|min:2|max:50',
|
||||
// * max arcadia 50 chars
|
||||
'firstname' => 'required|min:2|max:50',
|
||||
'address' => 'required|min:4',
|
||||
'email' => 'required|email:rfc,dns,spoof',
|
||||
'postal' => 'required|min:3|max:10',
|
||||
// max arcadia 10 chars
|
||||
// * max arcadia 10 chars
|
||||
'town' => 'required|min:3|max:90',
|
||||
'phone' => 'required|min:8|max:14',
|
||||
'onepagesubject' => 'sometimes|min:10|max:250',
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ class SendNLMail implements ShouldQueue
|
|||
/**
|
||||
* Create a new job instance.
|
||||
*
|
||||
* @param \App\Models\MailContactData $data
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(MailContactData $data)
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ class SendPasserelleMail implements ShouldQueue
|
|||
/**
|
||||
* Create a new job instance.
|
||||
*
|
||||
* @param \App\Models\MailContactData $data
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(MailContactData $data)
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ class ContactComplainMail extends ContactMail
|
|||
/**
|
||||
* Create a new message instance.
|
||||
*
|
||||
* @param \App\Models\MailContactData $data
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(MailContactData $data)
|
||||
|
|
|
|||
|
|
@ -7,10 +7,25 @@ use Illuminate\Database\Eloquent\Model;
|
|||
|
||||
class Contact extends Model
|
||||
{
|
||||
/**
|
||||
* The primary key for the model.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $primaryKey = 'date';
|
||||
|
||||
/**
|
||||
* Indicates if the model should be timestamped.
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
public $timestamps = false;
|
||||
|
||||
/**
|
||||
* Perform any actions required after the model boots.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected static function booted()
|
||||
{
|
||||
static::creating(function ($contact) {
|
||||
|
|
@ -18,8 +33,8 @@ class Contact extends Model
|
|||
return $contact;
|
||||
});
|
||||
static::updating(function ($contact) {
|
||||
// * increment general counter
|
||||
$contact->all++;
|
||||
// increment general counter
|
||||
return $contact;
|
||||
});
|
||||
}
|
||||
|
|
@ -33,34 +48,67 @@ class Contact extends Model
|
|||
public static function incrementStat(ContactFormType $type)
|
||||
{
|
||||
$contact = static::where('date', '=', date('Y-m-d'))->firstOrNew();
|
||||
// Can't do $contact->counter[$type->value]++ => ErrorException
|
||||
// * Can't do $contact->counter[$type->value]++ => ErrorException
|
||||
$d = $contact->values;
|
||||
$d[$type->value]++;
|
||||
$contact->values = $d;
|
||||
$contact->save();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get values attribute
|
||||
*
|
||||
* @param mixed $value
|
||||
* @return array
|
||||
*/
|
||||
public function getValuesAttribute($value): array
|
||||
{
|
||||
return $this->unserialize($value ?? serialize($this->counterSkeleton()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set values attribute
|
||||
*
|
||||
* @param array $value
|
||||
* @return string
|
||||
*/
|
||||
public function setValuesAttribute(array $value): string
|
||||
{
|
||||
$this->attributes['values'] = $this->serialize($value);
|
||||
return $this->attributes['values'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize value
|
||||
*
|
||||
* @param array $value
|
||||
* @return string
|
||||
*/
|
||||
private function serialize(array $value)
|
||||
{
|
||||
return serialize($this->merge($this->counterSkeleton(), $value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Unserialize value
|
||||
*
|
||||
* @param string $value
|
||||
* @return array
|
||||
*/
|
||||
private function unserialize(string $value)
|
||||
{
|
||||
return $this->merge($this->counterSkeleton(), unserialize($value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge thow array
|
||||
*
|
||||
* TODO: Replace this with collection or array merge.
|
||||
*
|
||||
* @param array $a
|
||||
* @param array $b
|
||||
* @return array
|
||||
*/
|
||||
private function merge(array $a, array $b): array
|
||||
{
|
||||
foreach ($a as $i => $v) {
|
||||
|
|
@ -71,9 +119,13 @@ class Contact extends Model
|
|||
return $a;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Counter skeleton
|
||||
* @return array
|
||||
*/
|
||||
private function counterSkeleton(): array
|
||||
{
|
||||
return collect(ContactFormType::toArray())->mapWithKeys(function ($enum) {
|
||||
return collect(ContactFormType::toArray())->mapWithKeys(function (ContactFormType $enum) {
|
||||
if ($enum->equals(ContactFormType::none())) {
|
||||
return [];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ namespace App\Models;
|
|||
use App\Enums\ContactFormCivility;
|
||||
use App\Enums\ContactFormType;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Str;
|
||||
use Kwaadpepper\Enum\Traits\CastsEnums;
|
||||
|
||||
/**
|
||||
|
|
@ -14,6 +15,11 @@ class MailContactData extends Model
|
|||
{
|
||||
use CastsEnums;
|
||||
|
||||
/**
|
||||
* The attributes that should be cast to Enums.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $enumCasts = [
|
||||
'type' => ContactFormType::class,
|
||||
'civility' => ContactFormCivility::class
|
||||
|
|
@ -56,6 +62,11 @@ class MailContactData extends Model
|
|||
'consumptionDateYear'
|
||||
];
|
||||
|
||||
/**
|
||||
* The model's attributes.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $attributes = [
|
||||
'productName' => '',
|
||||
'productCode' => '',
|
||||
|
|
@ -95,40 +106,39 @@ class MailContactData extends Model
|
|||
/**
|
||||
* Export the model data to a Formatted Passerelle Data array
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
/**
|
||||
* Removed
|
||||
* * Removed
|
||||
* 'EMETTEUR_OBJETDEMANDE' => "objet de la reclamation string",
|
||||
* 'EMETTEUR_OPT_IN' => '',
|
||||
* 'REPONSE_ETAT' => 0,
|
||||
* 'TYPE_REPONSE' => 'mail',
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function exportToPasserelleDataArray(): array
|
||||
{
|
||||
// CF PAsserrelle fields .csv
|
||||
// * CF PAsserrelle fields .csv
|
||||
return [
|
||||
// Marque le Gaulois (Obligatoire)
|
||||
// * Marque le Gaulois (Obligatoire)
|
||||
'EMETTEUR_MARQUE' => 1,
|
||||
// Obligatoire
|
||||
// * Obligatoire
|
||||
'EMETTEUR_DATE' => date("Y-m-d"),
|
||||
// Obligatoire
|
||||
// * Obligatoire
|
||||
'EMETTEUR_HEURE' => date("h:i:s"),
|
||||
'EMETTEUR_CIVILITE' => $this->civility->value,
|
||||
// Obligatoire
|
||||
'EMETTEUR_NOM' => $this->lastname,
|
||||
// Obligatoire
|
||||
// * Obligatoire Limité a 50
|
||||
'EMETTEUR_NOM' => Str::limit($this->lastname, 50, ''),
|
||||
// * Obligatoire
|
||||
'EMETTEUR_PRENOM' => $this->firstname,
|
||||
'EMETTEUR_ADRESSE1' => $this->address,
|
||||
'EMETTEUR_ADRESSE2' => '',
|
||||
'EMETTEUR_CP' => $this->postal,
|
||||
// Obligatoire
|
||||
// * Obligatoire
|
||||
'EMETTEUR_VILLE' => $this->town,
|
||||
'EMETTEUR_EMAIL' => $this->email,
|
||||
'EMETTEUR_TELEPHONE' => $this->phone,
|
||||
'EMETTEUR_PAYS' => 'France',
|
||||
'EMETTEUR_NOM_PRODUIT' => $this->productName,
|
||||
// Obligatoire
|
||||
// * Obligatoire
|
||||
'EMETTEUR_EAN13' => $this->productCode,
|
||||
'EMETTEUR_DATE_LIMITE_CONSO' => sprintf(
|
||||
'%s/%s/%s',
|
||||
|
|
@ -149,15 +159,15 @@ class MailContactData extends Model
|
|||
),
|
||||
'LIEU_ACHAT' => $this->buyPlace,
|
||||
|
||||
// FUCK passerelle et leur DTD qui n'existe pas cf: resources/documents
|
||||
// * FUCK passerelle et leur DTD qui n'existe pas cf: resources/documents
|
||||
// * Recla conso ?
|
||||
'EMETTEUR_OBJETDEMANDE' => 3,
|
||||
// Recla conso ?
|
||||
// * doit être vide ?
|
||||
'EMETTEUR_OPT_IN' => '',
|
||||
// doit être vide ?
|
||||
// * c'est quoi ça ?
|
||||
'REPONSE_ETAT' => 0,
|
||||
// c'est quoi ça ?
|
||||
// * ok
|
||||
'TYPE_REPONSE' => 'mail'
|
||||
// ok
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
2
composer.lock
generated
2
composer.lock
generated
|
|
@ -9106,6 +9106,8 @@
|
|||
"require": {
|
||||
"php": "^7.2 || ^8.0"
|
||||
},
|
||||
=======
|
||||
>>>>>>> develop
|
||||
"require-dev": {
|
||||
"php-parallel-lint/php-parallel-lint": "^1.2",
|
||||
"phpstan/extension-installer": "^1.0",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AllowSubrangeDeletion extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('range_sub_range', function (Blueprint $table) {
|
||||
$table->dropForeign('range_sub_range_range_id_foreign');
|
||||
$table->foreign('range_id')
|
||||
->references('id')->on('ranges')
|
||||
->cascadeOnDelete();
|
||||
$table->dropForeign('range_sub_range_sub_range_id_foreign');
|
||||
$table->foreign('sub_range_id')
|
||||
->references('id')->on('sub_ranges')
|
||||
->cascadeOnDelete();
|
||||
});
|
||||
Schema::table('products', function (Blueprint $table) {
|
||||
$table->dropForeign('products_sub_range_id_foreign');
|
||||
$table->foreign('sub_range_id')
|
||||
->references('id')->on('sub_ranges')
|
||||
->nullOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('range_sub_range', function (Blueprint $table) {
|
||||
$table->dropForeign('range_sub_range_range_id_foreign');
|
||||
$table->foreign('range_id')
|
||||
->references('id')->on('ranges');
|
||||
$table->dropForeign('range_sub_range_sub_range_id_foreign');
|
||||
$table->foreign('sub_range_id')
|
||||
->references('id')->on('sub_ranges');
|
||||
});
|
||||
Schema::table('products', function (Blueprint $table) {
|
||||
$table->dropForeign('products_sub_range_id_foreign');
|
||||
$table->foreign('sub_range_id')
|
||||
->references('id')->on('sub_ranges');
|
||||
});
|
||||
}
|
||||
}
|
||||
161
package-lock.json
generated
161
package-lock.json
generated
|
|
@ -4,6 +4,7 @@
|
|||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "legaulois",
|
||||
"dependencies": {
|
||||
"@fancyapps/fancybox": "^3.5.7",
|
||||
"animate.css": "^3.7.2",
|
||||
|
|
@ -1776,6 +1777,64 @@
|
|||
"jquery": ">=1.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/gen-mapping": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
|
||||
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/set-array": "^1.0.1",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10",
|
||||
"@jridgewell/trace-mapping": "^0.3.9"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/resolve-uri": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
|
||||
"integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/set-array": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
|
||||
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/source-map": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
|
||||
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/gen-mapping": "^0.3.0",
|
||||
"@jridgewell/trace-mapping": "^0.3.9"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.4.14",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
|
||||
"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@jridgewell/trace-mapping": {
|
||||
"version": "0.3.15",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
|
||||
"integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/resolve-uri": "^3.0.3",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@nodelib/fs.scandir": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
||||
|
|
@ -5544,9 +5603,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/html-minifier-terser/node_modules/terser": {
|
||||
"version": "4.8.0",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
|
||||
"integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
|
||||
"version": "4.8.1",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
|
||||
"integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"commander": "^2.20.0",
|
||||
|
|
@ -9521,13 +9580,14 @@
|
|||
}
|
||||
},
|
||||
"node_modules/terser": {
|
||||
"version": "5.10.0",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
|
||||
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
|
||||
"version": "5.14.2",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
|
||||
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/source-map": "^0.3.2",
|
||||
"acorn": "^8.5.0",
|
||||
"commander": "^2.20.0",
|
||||
"source-map": "~0.7.2",
|
||||
"source-map-support": "~0.5.20"
|
||||
},
|
||||
"bin": {
|
||||
|
|
@ -9535,14 +9595,6 @@
|
|||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"acorn": "^8.5.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"acorn": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/terser-webpack-plugin": {
|
||||
|
|
@ -9585,15 +9637,6 @@
|
|||
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/terser/node_modules/source-map": {
|
||||
"version": "0.7.3",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
|
||||
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/thunky": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
|
||||
|
|
@ -11904,6 +11947,55 @@
|
|||
"integrity": "sha512-rcEtu8t+WnmqIDV/Wfm1yvy/nDdwc7YV25j9HLxGC2/WOsUhk9rcWg2nB8g1BrjRt9zaoADdjHTU6ILYTJzBBg==",
|
||||
"requires": {}
|
||||
},
|
||||
"@jridgewell/gen-mapping": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
|
||||
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jridgewell/set-array": "^1.0.1",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10",
|
||||
"@jridgewell/trace-mapping": "^0.3.9"
|
||||
}
|
||||
},
|
||||
"@jridgewell/resolve-uri": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
|
||||
"integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
|
||||
"dev": true
|
||||
},
|
||||
"@jridgewell/set-array": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
|
||||
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
|
||||
"dev": true
|
||||
},
|
||||
"@jridgewell/source-map": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
|
||||
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jridgewell/gen-mapping": "^0.3.0",
|
||||
"@jridgewell/trace-mapping": "^0.3.9"
|
||||
}
|
||||
},
|
||||
"@jridgewell/sourcemap-codec": {
|
||||
"version": "1.4.14",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
|
||||
"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
|
||||
"dev": true
|
||||
},
|
||||
"@jridgewell/trace-mapping": {
|
||||
"version": "0.3.15",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
|
||||
"integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jridgewell/resolve-uri": "^3.0.3",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10"
|
||||
}
|
||||
},
|
||||
"@nodelib/fs.scandir": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
||||
|
|
@ -14950,9 +15042,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"terser": {
|
||||
"version": "4.8.0",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
|
||||
"integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
|
||||
"version": "4.8.1",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
|
||||
"integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"commander": "^2.20.0",
|
||||
|
|
@ -17939,13 +18031,14 @@
|
|||
"dev": true
|
||||
},
|
||||
"terser": {
|
||||
"version": "5.10.0",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
|
||||
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
|
||||
"version": "5.14.2",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
|
||||
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@jridgewell/source-map": "^0.3.2",
|
||||
"acorn": "^8.5.0",
|
||||
"commander": "^2.20.0",
|
||||
"source-map": "~0.7.2",
|
||||
"source-map-support": "~0.5.20"
|
||||
},
|
||||
"dependencies": {
|
||||
|
|
@ -17954,12 +18047,6 @@
|
|||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
||||
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
||||
"dev": true
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.7.3",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
|
||||
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
|||
BIN
resources/assets/images/ocb/mockocb.png
Normal file
BIN
resources/assets/images/ocb/mockocb.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 347 KiB |
49
resources/sass/front/pages/ocb/_index.scss
vendored
49
resources/sass/front/pages/ocb/_index.scss
vendored
|
|
@ -14,7 +14,7 @@
|
|||
align-items: center;
|
||||
z-index: 12;
|
||||
|
||||
@media screen and (max-width: $large_screen - 100) {
|
||||
@media screen and (max-width: ($large_screen - 100)) {
|
||||
flex-direction: column;
|
||||
height: auto;
|
||||
padding: 10px 0;
|
||||
|
|
@ -23,62 +23,61 @@
|
|||
& > div {
|
||||
position: relative;
|
||||
|
||||
& img {
|
||||
width: 100%;
|
||||
padding: 15px 15px;
|
||||
filter: brightness(0.8);
|
||||
@media screen and (max-width: ($large_screen - 100)) {
|
||||
transform: inherit !important;
|
||||
}
|
||||
}
|
||||
|
||||
&:hover img {
|
||||
filter: brightness(1);
|
||||
}
|
||||
|
||||
& .left {
|
||||
transform: skew(-2deg, -1deg);
|
||||
filter: brightness(0.8);
|
||||
|
||||
@media screen and (max-width: $large_screen) {
|
||||
width: 100%;
|
||||
padding: 15px 15px;
|
||||
}
|
||||
}
|
||||
|
||||
& .right {
|
||||
transform: skew(1deg, 1deg);
|
||||
filter: brightness(0.8);
|
||||
|
||||
@media screen and (max-width: $large_screen) {
|
||||
width: 100%;
|
||||
padding: 15px 15px;
|
||||
}
|
||||
}
|
||||
|
||||
& > p {
|
||||
z-index: 1;
|
||||
position: absolute;
|
||||
bottom: 55px;
|
||||
left: 15px;
|
||||
bottom: 4.4rem;
|
||||
left: 1.5rem;
|
||||
color: white;
|
||||
font-family: "Catamaran-Black";
|
||||
text-transform: uppercase;
|
||||
font-size: 40px;
|
||||
line-height: 38px;
|
||||
text-shadow: 1px 1px 15px black;
|
||||
@media screen and (max-width: $desktop) {
|
||||
@media screen and (max-width: ($large_screen - 100)) {
|
||||
left: 20%;
|
||||
transform: translateX(-50%);
|
||||
bottom: 6rem;
|
||||
left: 9rem;
|
||||
bottom: 5.5rem;
|
||||
}
|
||||
@media screen and (max-width: $tablet) {
|
||||
font-size: 2rem;
|
||||
line-height: 2rem;
|
||||
left: 30%;
|
||||
left: 20vw;
|
||||
}
|
||||
@media screen and (max-width: $mobile) {
|
||||
font-size: 1.5rem;
|
||||
line-height: 1.5rem;
|
||||
left: 25vw;
|
||||
}
|
||||
}
|
||||
|
||||
& > a {
|
||||
z-index: 1;
|
||||
position: absolute;
|
||||
bottom: 15px;
|
||||
left: 15px;
|
||||
bottom: 1.6rem;
|
||||
left: 1.5rem;
|
||||
background-color: #003b22;
|
||||
color: white;
|
||||
padding: 5px 20px 4px 20px;
|
||||
|
|
@ -94,18 +93,18 @@
|
|||
color: #003b22;
|
||||
}
|
||||
|
||||
@media screen and (max-width: $desktop) {
|
||||
left: 20%;
|
||||
@media screen and (max-width: ($large_screen - 100)) {
|
||||
transform: translateX(-50%);
|
||||
bottom: 3rem;
|
||||
left: 7rem;
|
||||
bottom: 2.5rem;
|
||||
}
|
||||
@media screen and (max-width: $tablet) {
|
||||
font-size: 1rem;
|
||||
left: 30%;
|
||||
left: 20vw;
|
||||
}
|
||||
@media screen and (max-width: $mobile) {
|
||||
font-size: 0.7rem;
|
||||
left: 30%;
|
||||
left: 25vw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,9 +20,9 @@
|
|||
'ocbContents' => $ocbContents
|
||||
])
|
||||
<section class="poultry-infos space">
|
||||
<a href="{{ route('ocb.poultry') }}" class="previous">
|
||||
<a href="{{ route('ocb.rabbit') }}" class="previous">
|
||||
<span></span>
|
||||
<p class="button-text">{{ __('Découvrer la volaille Oui C\'est Bon!') }}</p>
|
||||
<p class="button-text">{{ __('Découvrer le lapin Oui C\'est Bon!') }}</p>
|
||||
</a>
|
||||
</section>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -20,12 +20,17 @@
|
|||
<section class="ocb-bg content content-ocb">
|
||||
<div class="items">
|
||||
<div>
|
||||
<img src="{{ asset('assets/images/ocb/ocb_poule_x2.png') }}" alt="Poulet & Dinde - Le Gaulois" class="left">
|
||||
<img src="{{ asset('assets/images/ocb/mockocb.png') }}" alt="Poulet & Dinde - Le Gaulois" class="left">
|
||||
<p>Poulets<br>& Dindes</p>
|
||||
<a href="{{ route('ocb.poultry') }}">En savoir +</a>
|
||||
</div>
|
||||
<div>
|
||||
<img src="{{ asset('assets/images/ocb/ocb_oeuf_x2.png') }}" alt="Oeuf - Le Gaulois" class="right">
|
||||
<img src="{{ asset('assets/images/ocb/mockocb.png') }}" alt="Lapin - Le Gaulois" class="left">
|
||||
<p>Lapins</p>
|
||||
<a href="{{ route('ocb.rabbit') }}">En savoir +</a>
|
||||
</div>
|
||||
<div>
|
||||
<img src="{{ asset('assets/images/ocb/mockocb.png') }}" alt="Oeuf - Le Gaulois" class="right">
|
||||
<p>Oeufs</p>
|
||||
<a href="{{ route('ocb.egg') }}">En savoir +</a>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -21,9 +21,9 @@
|
|||
'ocbContents' => $ocbContents
|
||||
])
|
||||
<section class="poultry-infos">
|
||||
<a href="{{ route('ocb.egg') }}" class="next">
|
||||
<a href="{{ route('ocb.rabbit') }}" class="next">
|
||||
<span></span>
|
||||
<p class="button-text">{{ __('Découvrez les oeufs Oui C\'est Bon!') }}</p>
|
||||
<p class="button-text">{{ __('Découvrez le lapin Oui C\'est Bon!') }}</p>
|
||||
</a>
|
||||
<div class="breeder-info">
|
||||
@if ($breeder !== null && $breeder->picture !== null)
|
||||
|
|
|
|||
34
resources/views/front/ocb/rabbit.blade.php
Normal file
34
resources/views/front/ocb/rabbit.blade.php
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
@extends('layouts.app')
|
||||
@section('title', __('Tout savoir sur la gamme Oui c\'est Bon! - Lapin'))
|
||||
@section('description', __('Le Gaulois, marque de lapins nés, élevées et préparés en France vous raconte son histoire.'))
|
||||
|
||||
@section('sub_header')
|
||||
<div class="sub_header sub_header_ocb">
|
||||
<div class="content">
|
||||
<div class="text">
|
||||
<h1 class="title">{{ __('Le lapin') }} <img class="img-ocb" src="{{ asset('assets/images/ocb/logo-oui.png') }}" alt="{{ __('Oui c\'est Bon ! - Le Gaulois') }}"></h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="entete-ocb"></div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="ocb-content">
|
||||
@include('front.ocb.ocbContent' , [
|
||||
'ocbContents' => $ocbContents
|
||||
])
|
||||
<section class="poultry-infos space">
|
||||
<a href="{{ route('ocb.poultry') }}" class="previous">
|
||||
<span></span>
|
||||
<p class="button-text">{{ __('Découvrer la volaille Oui C\'est Bon!') }}</p>
|
||||
</a>
|
||||
<a href="{{ route('ocb.egg') }}" class="next">
|
||||
<span></span>
|
||||
<p class="button-text">{{ __('Découvrer les oeufs Oui C\'est Bon!') }}</p>
|
||||
</a>
|
||||
</section>
|
||||
</div>
|
||||
<!-- TODO : Maps -->
|
||||
@endsection
|
||||
|
|
@ -156,7 +156,7 @@ Route::prefix('/oui-cest-bon')
|
|||
Route::get('/eleveurs/{breeder}', [OCBController::class, 'breeder'])->name('breeders');
|
||||
Route::get('/temoignages-eleveurs', [OCBController::class, 'testimonials'])->name('testimonials');
|
||||
Route::get('/volaille', [OCBController::class, 'poultry'])->name('poultry');
|
||||
Route::get('/volaille', [OCBController::class, 'poultry'])->name('poultry');
|
||||
Route::get('/lapin', [OCBController::class, 'rabbit'])->name('rabbit');
|
||||
Route::get('/oeuf', [OCBController::class, 'egg'])->name('egg');
|
||||
Route::view('/', 'front.ocb.index')->name('index');
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue