diff --git a/.env.example b/.env.example index f13c8402..0937081a 100644 --- a/.env.example +++ b/.env.example @@ -68,3 +68,8 @@ SAML2_SP_CERT_x509= SAML2_SP_CERT_PRIVATEKEY= SAML2_CONTACT_TECHNICAL_EMAIL= SAML2_CONTACT_SUPPORT_EMAIL= + +# RECAPTCHA +GOOGLE_RECAPTCHA_PUBLIC= +GOOGLE_RECAPTCHA_PRIVATE= +GOOGLE_RECAPTCHA_VERSION= diff --git a/app/Enums/ContactFormCivility.php b/app/Enums/ContactFormCivility.php new file mode 100644 index 00000000..e9da6c00 --- /dev/null +++ b/app/Enums/ContactFormCivility.php @@ -0,0 +1,23 @@ +name => 'M', + self::mme->name => 'Mme', + ]; +} diff --git a/app/Enums/ContactFormType.php b/app/Enums/ContactFormType.php new file mode 100644 index 00000000..2c7022ce --- /dev/null +++ b/app/Enums/ContactFormType.php @@ -0,0 +1,90 @@ +name => 'Aucun', + self::complain->name => 'Une réclamation', + self::club->name => 'Le Club des Gaulois', + self::games->name => 'Jeux Concours', + self::others->name => 'Autres', + self::nl->name => 'Formulaire en NL', + ]; + + /** + * Get the description. + * + * @return string + */ + public function description(): string + { + return match ($this) { + self::none => 'Aucun objet', + self::complain => 'Je souhaite obtenir de l\'aide car je désire envoyer une réclamation sur un produit', + self::club => 'Je rencontre des problèmes au sujet des magnets départ\'aimants ou des bons de + réductions Le Gaulois.', + self::games => 'Je souhaite faire une réclamation sur un jeu Le Gaulois ou je rencontre un problème + sur le site.', + self::others => 'Je souhaite faire une réclamation sur un jeu Le Gaulois ou je rencontre un problème + sur le site.', + }; + } + + /** + * Get the picto src/alt. + * + * @return string + */ + public function picto(): array + { + return match ($this) { + self::complain => [ + 'src' => 'resources/assets/images/contact/exclamation.svg', + 'alt' => 'Point d\'exclamation' + ], + self::club, + self::games, + self::others => [ + 'src' => 'resources/assets/images/contact/question-mark.svg', + 'alt' => 'Point d\'interrogation' + ], + default => [ + 'src' => '', + 'alt' => '', + ], + }; + } + + /** + * Get all contact types except 'none'. + * + * @return array + */ + public static function getContactTypes(): array + { + return [ + self::complain, + self::club, + self::games, + self::others, + ]; + } +} diff --git a/app/Exceptions/AbortContactMailer.php b/app/Exceptions/AbortContactMailer.php new file mode 100644 index 00000000..e667a41e --- /dev/null +++ b/app/Exceptions/AbortContactMailer.php @@ -0,0 +1,7 @@ + $staticPageModel]); + } + + /** + * Send contact form data. + * + * @param \App\Http\Requests\Fo\ContactFormRequest $request + * @return \Illuminate\Http\RedirectResponse + */ + public function contactSubmit(ContactFormRequest $request): \Illuminate\Http\RedirectResponse + { + return DB::transaction(function () use ($request) { + try { + $data = new MailContactData($request->safe()->except(['g-recaptcha-response', 'joinFile'])); + + // Send to Passerelle if it is a compalin about a product. + if ($request->type == ContactFormType::complain->value) { + $joinFilePath = null; + $joinFile = ''; + $uniqIdDirectory = \uniqid(); + if ($request->file('joinFile')) { + $joinFile = Storage::disk('local')->put( + sprintf('public/tmp/%s', $uniqIdDirectory), + $request->file('joinFile') + ); + $joinFilePath = storage_path('app/' . $joinFile); + } + + \dispatch(new SendPasserelleMail($data, $joinFilePath)); + } else { + \dispatch(new SendArcadiaMail($data)); + } + + return back()->with('success', __('Votre message a été envoyé avec succès')); + } catch (AbortContactMailer $e) { + Log::error('Fail to build mail from complain page ', ['exception' => $e]); + } + return back()->withInput()->with('error', 'Une erreur est survenue durant l\'envoi de votre message. Veuillez réessayer ultèrieurement.'); + }); + } +} diff --git a/app/Http/Controllers/Fo/ProductController.php b/app/Http/Controllers/Fo/ProductController.php index f70c21d7..c579828e 100644 --- a/app/Http/Controllers/Fo/ProductController.php +++ b/app/Http/Controllers/Fo/ProductController.php @@ -98,15 +98,18 @@ class ProductController extends Controller /** @var \App\Models\Video $videoModel */ $videoModel = $productModel->videos->sortByDesc('created_at')->first(); + $nutritionnalValueModel = $productModel->getNutritionnalValue(); + return view('fo.pages.products.show', [ - 'productModel' => $productModel, - 'prevProductModel' => $productModelSibling[0], - 'nextProductModel' => $productModelSibling[1], - 'productModels' => $this->getProductsFiltered($productModel), - 'recipeModels' => $this->getRecipesFiltered($productModel), - 'recipeModel' => $recipeModel, - 'videoModel' => $videoModel, - 'staticPageModel' => $staticPageModel, + 'productModel' => $productModel, + 'nutritionnalValueModel' => $nutritionnalValueModel, + 'prevProductModel' => $productModelSibling[0], + 'nextProductModel' => $productModelSibling[1], + 'productModels' => $this->getProductsFiltered($productModel), + 'recipeModels' => $this->getRecipesFiltered($productModel), + 'recipeModel' => $recipeModel, + 'videoModel' => $videoModel, + 'staticPageModel' => $staticPageModel, ]); } diff --git a/app/Http/Controllers/Fo/StaticPageController.php b/app/Http/Controllers/Fo/StaticPageController.php index 83689531..9c955b9f 100644 --- a/app/Http/Controllers/Fo/StaticPageController.php +++ b/app/Http/Controllers/Fo/StaticPageController.php @@ -20,18 +20,6 @@ use Detection\MobileDetect; class StaticPageController extends Controller { - /** - * Contact page. - * - * @param \App\Models\StaticPage $staticPageModel - * @return \Illuminate\Contracts\View\View - */ - public function contact(StaticPage $staticPageModel): \Illuminate\Contracts\View\View - { - $staticPageModel = StaticPage::getCachedStaticPage(StaticPageType::contact); - return view('fo.pages.legals', ['staticPageModel' => $staticPageModel]); - } - /** * Legals page. * @@ -94,7 +82,7 @@ class StaticPageController extends Controller config('services.digital_recruiter.url'), fn() => Offer::query()->where('published', true)->orderBy('publish_at', 'DESC')->take(6)->get() ); - $professionModels = Profession::get5Published(); + $professionModels = Profession::getRandomPublished(); $brandAdvantageModels = BrandAdvantage::getPublishedOrdered(); $newsCorporateModels = NewsCorporate::get9PublishedOrderedByUpdatedAt(); if ($detect->isMobile()) { diff --git a/app/Http/Requests/Bo/NewsBreedings/StoreNewsBreedingRequest.php b/app/Http/Requests/Bo/NewsBreedings/StoreNewsBreedingRequest.php index aced001a..ac3213ac 100644 --- a/app/Http/Requests/Bo/NewsBreedings/StoreNewsBreedingRequest.php +++ b/app/Http/Requests/Bo/NewsBreedings/StoreNewsBreedingRequest.php @@ -49,7 +49,7 @@ class StoreNewsBreedingRequest extends FormRequest 'seo_description' => 'required|string|between:50,160', 'title' => 'required|string|between:3,255', 'subtitle' => 'required|string|between:3,255', - 'content' => ['required', 'string', new WysiwygLength(15, 5000)], + 'content' => ['required', 'string', new WysiwygLength(15, 15000)], 'associated_page' => [ 'required', Rule::enum(StaticPageType::class)->only(StaticPageType::getBreedingPages()) diff --git a/app/Http/Requests/Bo/NewsCategories/StoreNewsCategoryRequest.php b/app/Http/Requests/Bo/NewsCategories/StoreNewsCategoryRequest.php index a06f0e2a..4eae96ae 100644 --- a/app/Http/Requests/Bo/NewsCategories/StoreNewsCategoryRequest.php +++ b/app/Http/Requests/Bo/NewsCategories/StoreNewsCategoryRequest.php @@ -3,6 +3,7 @@ namespace App\Http\Requests\Bo\NewsCategories; use App\Models\NewsCategory; +use App\Rules\Hex; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Gate; @@ -41,6 +42,7 @@ class StoreNewsCategoryRequest extends FormRequest 'seo_title' => 'required|string|between:45,70', 'seo_description' => 'required|string|between:50,160', 'title' => 'required|string|between:3,255', + 'color' => ['required', new Hex()], 'published' => 'required|boolean', ]; } @@ -56,6 +58,7 @@ class StoreNewsCategoryRequest extends FormRequest 'seo_title' => trans('validation.attributes.title'), 'seo_description' => trans('validation.attributes.title'), 'title' => trans('validation.attributes.title'), + 'color' => trans('validation.custom.color'), 'published' => trans('validation.attributes.published'), ]; } diff --git a/app/Http/Requests/Fo/ContactFormRequest.php b/app/Http/Requests/Fo/ContactFormRequest.php new file mode 100644 index 00000000..fd20145b --- /dev/null +++ b/app/Http/Requests/Fo/ContactFormRequest.php @@ -0,0 +1,103 @@ + [ + 'required', + Rule::enum(ContactFormType::class)->only(ContactFormType::getContactTypes()) + ], + 'civility' => [ + 'required', + Rule::enum(ContactFormCivility::class) + ], + // * 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|postal_code:FR', + // * max arcadia 10 chars + 'town' => 'required|min:3|max:90', + 'phone' => 'required|phone:FR', + // 'onepagesubject' => 'sometimes|min:10|max:250', + 'message' => 'required|min:20|max:1900' + ]; + + if (ContactFormType::make($this->input('type')) === ContactFormType::complain) { + $rules = array_merge( + $rules, + [ + 'productName' => 'required|min:2|max:100', + 'productCode' => 'required|digits_between:8,13|min:1|max:9999999999999', + 'buyPlace' => 'required|min:2|max:100', + 'lotNumberName' => 'required|min:2|max:50', + 'limitDateDay' => 'required|numeric|min:1|max:31', + 'limitDateMonth' => 'required|numeric|min:1|max:31', + 'limitDateYear' => 'required|numeric|min:2010|max:2050', + 'consumptionDateDay' => 'required|numeric|min:1|max:31', + 'consumptionDateMonth' => 'required|numeric|min:1|max:31', + 'consumptionDateYear' => 'required|numeric|min:2010|max:2050', + 'joinFile' => 'nullable|mimes:jpg,jpeg,png,pdf|max:2048' + ], + ); + } + + return $rules; + } + + /** + * Get custom attributes for validator errors. + * + * @return array + */ + public function attributes(): array + { + return [ + 'lastname' => trans('validation.attributes.last_name'), + 'firstname' => trans('validation.attributes.first_name'), + 'town' => trans('validation.custom.town'), + 'productName' => trans('validation.custom.product_name'), + 'productCode' => trans('validation.custom.barcode'), + 'buyPlace' => trans('validation.custom.place_of_purchase'), + 'lotNumberName' => trans('validation.custom.batch_number'), + 'limitDateDay' => sprintf('%s - %s', trans('validation.custom.use_by_date'), trans('day')), + 'limitDateMonth' => sprintf('%s - %s', trans('validation.custom.use_by_date'), trans('month')), + 'limitDateYear' => sprintf('%s - %s', trans('validation.custom.use_by_date'), trans('year')), + 'consumptionDateDay' => sprintf('%s - %s', trans('validation.custom.consumption_date'), trans('day')), + 'consumptionDateMonth' => sprintf('%s - %s', trans('validation.custom.consumption_date'), trans('month')), + 'consumptionDateYear' => sprintf('%s - %s', trans('validation.custom.consumption_date'), trans('year')), + 'joinFile' => trans('validation.custom.attachment') + ]; + } +} diff --git a/app/Jobs/Mails/SendArcadiaMail.php b/app/Jobs/Mails/SendArcadiaMail.php new file mode 100644 index 00000000..1038cc4f --- /dev/null +++ b/app/Jobs/Mails/SendArcadiaMail.php @@ -0,0 +1,46 @@ +data = $data; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + Mail::to(config('mail.contactsList.contact'))->send(new ContactMail($this->data)); + Log::debug(sprintf('Sent %s to %s', ContactMail::class, implode(',', config('mail.contactsList.contact')))); + } +} diff --git a/app/Jobs/Mails/SendPasserelleMail.php b/app/Jobs/Mails/SendPasserelleMail.php new file mode 100644 index 00000000..319c542a --- /dev/null +++ b/app/Jobs/Mails/SendPasserelleMail.php @@ -0,0 +1,54 @@ +data = $data; + $this->file = $file; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + Mail::to(config('mail.contactsList.passerelle'))->send(new ContactComplainMail($this->data, $this->file)); + if (file_exists($this->file)) { + File::deleteDirectory(File::dirname($this->file)); + } + Log::debug(sprintf('Sent %s to %s', ContactComplainMail::class, config('mail.contactsList.passerelle'))); + } +} diff --git a/app/Mail/ContactComplainMail.php b/app/Mail/ContactComplainMail.php new file mode 100644 index 00000000..d11142e8 --- /dev/null +++ b/app/Mail/ContactComplainMail.php @@ -0,0 +1,82 @@ +data = $data; + $this->file = $file; + } + + /** + * Build the message. + * + * @return $this + */ + public function build() + { + if ($this->file) { + $this->joinedFileName = sprintf( + 'LEGAULOIS_PASS_MESSAGE-PJ-%s.%s', + date("YmdHis"), + File::extension($this->file) + ); + } + + return $this->view('emails.contact') + ->subject(sprintf('Nouveau message consommateur Le Gaulois (%s)', $this->data->type->label())) + ->text('emails.contact-plain') + ->with('data', $this->data) + ->attachData( + view('emails.passerelle-xml', ['data' => $this->data->exportToPasserelleDataArray()])->render(), + sprintf('LEGAULOIS_PASS_MESSAGE_%d.xml', date("YmdHis")), + ['mime' => 'application/xml'] + ); + } + + /** + * Get the attachments for the message. + * + * @return array + */ + public function attachments(): array + { + if (!$this->file) { + return []; + } + return [ + Attachment::fromPath($this->file)->as(sprintf( + 'LEGAULOIS_PASS_MESSAGE-PJ-%s.%s', + date("YmdHis"), + File::extension($this->file) + )), + ]; + } +} diff --git a/app/Mail/ContactMail.php b/app/Mail/ContactMail.php new file mode 100644 index 00000000..b287d9fe --- /dev/null +++ b/app/Mail/ContactMail.php @@ -0,0 +1,96 @@ +data = $data; + } + + /** + * Build the message. + * + * @return $this + */ + public function build() + { + return $this + ->subject(sprintf('Nouveau message consommateur Le Gaulois (%s)', $this->data->type->label())) + ->view('emails.contact') + ->text('emails.contact-plain') + ->with('data', $this->data) + ->attachData( + $this->makeCsvFile(), + sprintf('contact_le_gaulois_%d.csv', time()), + ['mime' => 'text/csv'] + ); + } + + /** + * @return string + */ + protected function makeCsvFile(): string + { + // we create the CSV into memory + // FILENAME + $csv = Writer::createFromFileObject(new SplTempFileObject()); + $csv->setDelimiter(';'); + $csv->setEnclosure('"'); + $csv->setOutputBOM(Bom::Utf8); + + // we insert the CSV header + $csv->insertOne([ + 'EMETTEUR_DATE', + 'EMETTEUR_HEURE', + 'EMETTEUR_CIVILITE', + 'EMETTEUR_NOM', + 'EMETTEUR_PRENOM', + 'EMETTEUR_ADRESSE', + 'EMETTEUR_CP', + 'EMETTEUR_VILLE', + 'EMETTEUR_EMAIL', + 'EMETTEUR_OBJETDEMANDE', + 'EMETTEUR_MESSAGE', + 'EMETTEUR_CATEGORIE', + 'EMETTEUR_ACTIVITE', + 'REPONSE_ETAT', + 'TYPE_REPONSE' + ]); + + $csv->insertOne($this->data->exportToArcadiaDataArray()); + + return $csv->toString(); + } +} diff --git a/app/Models/MailContactData.php b/app/Models/MailContactData.php new file mode 100644 index 00000000..25b673f3 --- /dev/null +++ b/app/Models/MailContactData.php @@ -0,0 +1,174 @@ + + */ + protected $casts = [ + 'type' => ContactFormType::class, + 'civility' => ContactFormCivility::class + ]; + + + /** + * The model's attributes. + * + * @var array + */ + protected $attributes = [ + 'productName' => '', + 'productCode' => '', + 'buyPlace' => '', + 'lotNumberName' => 0, + 'limitDateDay' => '00', + 'limitDateMonth' => '00', + 'limitDateYear' => '0000', + 'consumptionDateDay' => '00', + 'consumptionDateMonth' => '00', + 'consumptionDateYear' => '0000', + ]; + + /** + * Export the model data to a Formatted Arcadia Data array + * + * @return array + */ + public function exportToArcadiaDataArray(): array + { + return [ + date("Ymd"), + date("Gis"), + $this->civility->value, + $this->lastname, + $this->firstname, + $this->address, + $this->postal, + $this->town, + $this->email, + $this->type->equals(ContactFormType::nl) ? $this->onepagesubject : $this->type->value, + $this->message, + '0', + '0', + '0', + '0' + ]; + } + + /** + * Export the model data to a Formatted Passerelle Data array + * + * * 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 + return [ + // * Marque le Gaulois (Obligatoire) + 'EMETTEUR_MARQUE' => 1, + // * Obligatoire + 'EMETTEUR_DATE' => date("Y-m-d"), + // * Obligatoire + 'EMETTEUR_HEURE' => date("h:i:s"), + 'EMETTEUR_CIVILITE' => $this->civility->value, + // * 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 + 'EMETTEUR_VILLE' => $this->town, + 'EMETTEUR_EMAIL' => $this->email, + 'EMETTEUR_TELEPHONE' => $this->phone, + 'EMETTEUR_PAYS' => 'France', + 'EMETTEUR_NOM_PRODUIT' => $this->productName, + // * Obligatoire + 'EMETTEUR_EAN13' => $this->productCode, + 'EMETTEUR_DATE_LIMITE_CONSO' => sprintf( + '%s/%s/%s', + $this->limitDateDay ?? '00', + $this->limitDateMonth ?? '00', + $this->limitDateYear ?? '0000' + ), + 'EMETTEUR_NUM_LOT' => $this->lotNumberName, + 'EMETTEUR_MESSAGE' => $this->type->equals(ContactFormType::nl) ? + sprintf('%s \n %s', $this->onepagesubject, $this->message) : + $this->message, + 'EMETTEUR_PJ' => $this->joinFile, + 'DATE_CONSO' => sprintf( + '%s/%s/%s', + $this->consumptionDateDay ?? '00', + $this->consumptionDateMonth ?? '00', + $this->consumptionDateYear ?? '0000' + ), + 'LIEU_ACHAT' => $this->buyPlace, + + // * FUCK passerelle et leur DTD qui n'existe pas cf: resources/documents + // * Recla conso ? + 'EMETTEUR_OBJETDEMANDE' => 3, + // * doit être vide ? + 'EMETTEUR_OPT_IN' => '', + // * c'est quoi ça ? + 'REPONSE_ETAT' => 0, + // * ok + 'TYPE_REPONSE' => 'mail' + ]; + } +} diff --git a/app/Models/NewsCategory.php b/app/Models/NewsCategory.php index 827d7991..8802345c 100644 --- a/app/Models/NewsCategory.php +++ b/app/Models/NewsCategory.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Casts\HtmlColor; use App\Traits\Models\ActivityLog; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -13,6 +14,7 @@ use Illuminate\Support\Facades\Cache; * @property string $title The title of the news. * @property string $seo_title Seo title about 70 chars as recommended. * @property string $seo_description Seo description about 160 chars as recommended. + * @property int $color Range color. * @property string $slug The slug url of the category. * @property boolean $published Category publish status. * @property-read \Illuminate\Support\Carbon $created_at Created date. @@ -32,6 +34,7 @@ class NewsCategory extends Model 'title', 'seo_title', 'seo_description', + 'color', 'slug', 'published', ]; @@ -42,6 +45,7 @@ class NewsCategory extends Model * @var array */ protected $casts = [ + 'color' => HtmlColor::class, 'published' => 'boolean' ]; diff --git a/app/Models/Profession.php b/app/Models/Profession.php index f3aa81d8..d89c3583 100644 --- a/app/Models/Profession.php +++ b/app/Models/Profession.php @@ -85,7 +85,7 @@ class Profession extends Model private static function resetCache() { Cache::forget('5publishedProfessions'); - self::get5Published(); + self::getRandomPublished(); } /** @@ -93,10 +93,10 @@ class Profession extends Model * * @return \Illuminate\Database\Eloquent\Collection */ - public static function get5Published(): \Illuminate\Database\Eloquent\Collection + public static function getRandomPublished(): \Illuminate\Database\Eloquent\Collection { return Cache::rememberForever('5publishedProfessions', function () { - return self::query()->where('published', true)->take(5)->get(); + return self::query()->where('published', true)->inRandomOrder()->get(); }); } } diff --git a/composer.json b/composer.json index e2b2063a..5a8b7394 100644 --- a/composer.json +++ b/composer.json @@ -24,6 +24,7 @@ "laravel/tinker": "^2.8", "laravel/ui": "^4.2", "ldc/ldccrmv4client": "^4.0", + "league/csv": "^9.16", "mews/purifier": "^3.4", "mobiledetect/mobiledetectlib": "^4.8", "moneyphp/money": "^4.5", diff --git a/composer.lock b/composer.lock index 3f8b9777..14bb289a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "122cf1a7ea883a0637e886e742abf817", + "content-hash": "f7f8ad46520cbcad06c3bc357b29e8be", "packages": [ { "name": "24slides/laravel-saml2", @@ -1057,16 +1057,16 @@ }, { "name": "giggsey/libphonenumber-for-php-lite", - "version": "8.13.45", + "version": "8.13.46", "source": { "type": "git", "url": "https://github.com/giggsey/libphonenumber-for-php-lite.git", - "reference": "4fe78c7d51e6ea49a7f286bfcc2f6aa6130088d1" + "reference": "d24dcb40b2d370a128fb3eee472c33752f7d6e66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/4fe78c7d51e6ea49a7f286bfcc2f6aa6130088d1", - "reference": "4fe78c7d51e6ea49a7f286bfcc2f6aa6130088d1", + "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/d24dcb40b2d370a128fb3eee472c33752f7d6e66", + "reference": "d24dcb40b2d370a128fb3eee472c33752f7d6e66", "shasum": "" }, "require": { @@ -1136,7 +1136,7 @@ "issues": "https://github.com/giggsey/libphonenumber-for-php-lite/issues", "source": "https://github.com/giggsey/libphonenumber-for-php-lite" }, - "time": "2024-09-06T11:22:39+00:00" + "time": "2024-09-25T08:51:25+00:00" }, { "name": "graham-campbell/result-type", @@ -1757,16 +1757,16 @@ }, { "name": "laravel/framework", - "version": "v11.23.5", + "version": "v11.26.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "16b31ab0e1dad5cb2ed6dcc1818c02f02fc48453" + "reference": "b8cb8998701d5b3cfe68539d3c3da1fc59ddd82b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/16b31ab0e1dad5cb2ed6dcc1818c02f02fc48453", - "reference": "16b31ab0e1dad5cb2ed6dcc1818c02f02fc48453", + "url": "https://api.github.com/repos/laravel/framework/zipball/b8cb8998701d5b3cfe68539d3c3da1fc59ddd82b", + "reference": "b8cb8998701d5b3cfe68539d3c3da1fc59ddd82b", "shasum": "" }, "require": { @@ -1785,7 +1785,7 @@ "fruitcake/php-cors": "^1.3", "guzzlehttp/guzzle": "^7.8", "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.18", + "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", "laravel/serializable-closure": "^1.3", "league/commonmark": "^2.2.1", "league/flysystem": "^3.8.0", @@ -1871,7 +1871,7 @@ "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.6", "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^9.4.0", + "orchestra/testbench-core": "^9.5", "pda/pheanstalk": "^5.0", "phpstan/phpstan": "^1.11.5", "phpunit/phpunit": "^10.5|^11.0", @@ -1930,6 +1930,7 @@ "src/Illuminate/Filesystem/functions.php", "src/Illuminate/Foundation/helpers.php", "src/Illuminate/Log/functions.php", + "src/Illuminate/Support/functions.php", "src/Illuminate/Support/helpers.php" ], "psr-4": { @@ -1961,26 +1962,26 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-09-13T13:36:30+00:00" + "time": "2024-10-01T14:29:34+00:00" }, { "name": "laravel/octane", - "version": "v2.5.5", + "version": "v2.5.8", "source": { "type": "git", "url": "https://github.com/laravel/octane.git", - "reference": "a6cb30a609a997386533201344196f01bcd90e2b" + "reference": "ce37959546cf5e04df02aa41960f3ee816670b9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/octane/zipball/a6cb30a609a997386533201344196f01bcd90e2b", - "reference": "a6cb30a609a997386533201344196f01bcd90e2b", + "url": "https://api.github.com/repos/laravel/octane/zipball/ce37959546cf5e04df02aa41960f3ee816670b9b", + "reference": "ce37959546cf5e04df02aa41960f3ee816670b9b", "shasum": "" }, "require": { "laminas/laminas-diactoros": "^3.0", "laravel/framework": "^10.10.1|^11.0", - "laravel/prompts": "^0.1.24", + "laravel/prompts": "^0.1.24|^0.2.0|^0.3.0", "laravel/serializable-closure": "^1.3.0", "nesbot/carbon": "^2.66.0|^3.0", "php": "^8.1.0", @@ -2051,25 +2052,25 @@ "issues": "https://github.com/laravel/octane/issues", "source": "https://github.com/laravel/octane" }, - "time": "2024-09-11T20:54:55+00:00" + "time": "2024-10-01T21:03:50+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.25", + "version": "v0.3.0", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95" + "reference": "ea57a2261093986721d4a5f4f9524d76f21f9fa0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95", + "url": "https://api.github.com/repos/laravel/prompts/zipball/ea57a2261093986721d4a5f4f9524d76f21f9fa0", + "reference": "ea57a2261093986721d4a5f4f9524d76f21f9fa0", "shasum": "" }, "require": { + "composer-runtime-api": "^2.2", "ext-mbstring": "*", - "illuminate/collections": "^10.0|^11.0", "php": "^8.1", "symfony/console": "^6.2|^7.0" }, @@ -2078,6 +2079,7 @@ "laravel/framework": ">=10.17.0 <10.25.0" }, "require-dev": { + "illuminate/collections": "^10.0|^11.0", "mockery/mockery": "^1.5", "pestphp/pest": "^2.3", "phpstan/phpstan": "^1.11", @@ -2089,7 +2091,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "0.1.x-dev" + "dev-main": "0.3.x-dev" } }, "autoload": { @@ -2107,22 +2109,22 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.25" + "source": "https://github.com/laravel/prompts/tree/v0.3.0" }, - "time": "2024-08-12T22:06:33+00:00" + "time": "2024-09-30T14:27:51+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.3.4", + "version": "v1.3.5", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81" + "reference": "1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/61b87392d986dc49ad5ef64e75b1ff5fee24ef81", - "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c", + "reference": "1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c", "shasum": "" }, "require": { @@ -2170,20 +2172,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-08-02T07:48:17+00:00" + "time": "2024-09-23T13:33:08+00:00" }, { "name": "laravel/tinker", - "version": "v2.9.0", + "version": "v2.10.0", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe" + "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/502e0fe3f0415d06d5db1f83a472f0f3b754bafe", - "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe", + "url": "https://api.github.com/repos/laravel/tinker/zipball/ba4d51eb56de7711b3a37d63aa0643e99a339ae5", + "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5", "shasum": "" }, "require": { @@ -2234,9 +2236,9 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.9.0" + "source": "https://github.com/laravel/tinker/tree/v2.10.0" }, - "time": "2024-01-04T16:10:04+00:00" + "time": "2024-09-23T13:32:56+00:00" }, { "name": "laravel/ui", @@ -2546,17 +2548,105 @@ "time": "2022-12-11T20:36:23+00:00" }, { - "name": "league/flysystem", - "version": "3.28.0", + "name": "league/csv", + "version": "9.16.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c" + "url": "https://github.com/thephpleague/csv.git", + "reference": "998280c6c34bd67d8125fdc8b45bae28d761b440" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", - "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/998280c6c34bd67d8125fdc8b45bae28d761b440", + "reference": "998280c6c34bd67d8125fdc8b45bae28d761b440", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1.2" + }, + "require-dev": { + "doctrine/collections": "^2.2.2", + "ext-dom": "*", + "ext-xdebug": "*", + "friendsofphp/php-cs-fixer": "^3.57.1", + "phpbench/phpbench": "^1.2.15", + "phpstan/phpstan": "^1.11.1", + "phpstan/phpstan-deprecation-rules": "^1.2.0", + "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-strict-rules": "^1.6.0", + "phpunit/phpunit": "^10.5.16 || ^11.1.3", + "symfony/var-dumper": "^6.4.6 || ^7.0.7" + }, + "suggest": { + "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes", + "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters", + "ext-mbstring": "Needed to ease transcoding CSV using mb stream filters" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "League\\Csv\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://github.com/nyamsprod/", + "role": "Developer" + } + ], + "description": "CSV data manipulation made easy in PHP", + "homepage": "https://csv.thephpleague.com", + "keywords": [ + "convert", + "csv", + "export", + "filter", + "import", + "read", + "transform", + "write" + ], + "support": { + "docs": "https://csv.thephpleague.com", + "issues": "https://github.com/thephpleague/csv/issues", + "rss": "https://github.com/thephpleague/csv/releases.atom", + "source": "https://github.com/thephpleague/csv" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-05-24T11:04:54+00:00" + }, + { + "name": "league/flysystem", + "version": "3.29.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "0adc0d9a51852e170e0028a60bd271726626d3f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/0adc0d9a51852e170e0028a60bd271726626d3f0", + "reference": "0adc0d9a51852e170e0028a60bd271726626d3f0", "shasum": "" }, "require": { @@ -2624,22 +2714,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.28.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.29.0" }, - "time": "2024-05-22T10:09:12+00:00" + "time": "2024-09-29T11:59:11+00:00" }, { "name": "league/flysystem-local", - "version": "3.28.0", + "version": "3.29.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40" + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/13f22ea8be526ea58c2ddff9e158ef7c296e4f40", - "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27", "shasum": "" }, "require": { @@ -2673,22 +2763,22 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.28.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0" }, - "time": "2024-05-06T20:05:52+00:00" + "time": "2024-08-09T21:24:39+00:00" }, { "name": "league/mime-type-detection", - "version": "1.15.0", + "version": "1.16.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301" + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", - "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", "shasum": "" }, "require": { @@ -2719,7 +2809,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" }, "funding": [ { @@ -2731,7 +2821,7 @@ "type": "tidelift" } ], - "time": "2024-01-28T23:22:08+00:00" + "time": "2024-09-21T08:32:55+00:00" }, { "name": "mews/purifier", @@ -2877,16 +2967,16 @@ }, { "name": "moneyphp/money", - "version": "v4.5.0", + "version": "v4.5.1", "source": { "type": "git", "url": "https://github.com/moneyphp/money.git", - "reference": "a1daa7daf159b4044e3d0c34c41fe2be5860e850" + "reference": "142107bec4870ac2586057dc2fe917d25c92a91e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/moneyphp/money/zipball/a1daa7daf159b4044e3d0c34c41fe2be5860e850", - "reference": "a1daa7daf159b4044e3d0c34c41fe2be5860e850", + "url": "https://api.github.com/repos/moneyphp/money/zipball/142107bec4870ac2586057dc2fe917d25c92a91e", + "reference": "142107bec4870ac2586057dc2fe917d25c92a91e", "shasum": "" }, "require": { @@ -2959,9 +3049,9 @@ ], "support": { "issues": "https://github.com/moneyphp/money/issues", - "source": "https://github.com/moneyphp/money/tree/v4.5.0" + "source": "https://github.com/moneyphp/money/tree/v4.5.1" }, - "time": "2024-02-15T19:47:21+00:00" + "time": "2024-09-27T12:04:27+00:00" }, { "name": "monolog/monolog", @@ -3405,24 +3495,24 @@ }, { "name": "nette/schema", - "version": "v1.3.0", + "version": "v1.3.2", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188" + "reference": "da801d52f0354f70a638673c4a0f04e16529431d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", - "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", + "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d", "shasum": "" }, "require": { "nette/utils": "^4.0", - "php": "8.1 - 8.3" + "php": "8.1 - 8.4" }, "require-dev": { - "nette/tester": "^2.4", + "nette/tester": "^2.5.2", "phpstan/phpstan-nette": "^1.0", "tracy/tracy": "^2.8" }, @@ -3461,9 +3551,9 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.0" + "source": "https://github.com/nette/schema/tree/v1.3.2" }, - "time": "2023-12-11T11:54:22+00:00" + "time": "2024-10-06T23:10:23+00:00" }, { "name": "nette/utils", @@ -3553,16 +3643,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.1.0", + "version": "v5.3.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" + "reference": "3abf7425cd284141dc5d8d14a9ee444de3345d1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", - "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3abf7425cd284141dc5d8d14a9ee444de3345d1a", + "reference": "3abf7425cd284141dc5d8d14a9ee444de3345d1a", "shasum": "" }, "require": { @@ -3605,9 +3695,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.0" }, - "time": "2024-07-01T20:03:41+00:00" + "time": "2024-09-29T13:56:26+00:00" }, { "name": "nunomaduro/termwind", @@ -5117,16 +5207,16 @@ }, { "name": "sentry/sentry-laravel", - "version": "4.8.0", + "version": "4.9.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "2bbcb7e81097993cf64d5b296eaa6d396cddd5a7" + "reference": "73078e1f26d57f7a10e3bee2a2f543a02f6493c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/2bbcb7e81097993cf64d5b296eaa6d396cddd5a7", - "reference": "2bbcb7e81097993cf64d5b296eaa6d396cddd5a7", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/73078e1f26d57f7a10e3bee2a2f543a02f6493c3", + "reference": "73078e1f26d57f7a10e3bee2a2f543a02f6493c3", "shasum": "" }, "require": { @@ -5190,7 +5280,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-laravel/issues", - "source": "https://github.com/getsentry/sentry-laravel/tree/4.8.0" + "source": "https://github.com/getsentry/sentry-laravel/tree/4.9.0" }, "funding": [ { @@ -5202,7 +5292,7 @@ "type": "custom" } ], - "time": "2024-08-15T19:03:01+00:00" + "time": "2024-09-19T12:58:53+00:00" }, { "name": "setasign/fpdi", @@ -5404,16 +5494,16 @@ }, { "name": "symfony/console", - "version": "v7.1.4", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111" + "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/1eed7af6961d763e7832e874d7f9b21c3ea9c111", - "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111", + "url": "https://api.github.com/repos/symfony/console/zipball/0fa539d12b3ccf068a722bbbffa07ca7079af9ee", + "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee", "shasum": "" }, "require": { @@ -5477,7 +5567,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.4" + "source": "https://github.com/symfony/console/tree/v7.1.5" }, "funding": [ { @@ -5493,7 +5583,7 @@ "type": "tidelift" } ], - "time": "2024-08-15T22:48:53+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/css-selector", @@ -5924,16 +6014,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a" + "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", - "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e30ef73b1e44eea7eb37ba69600a354e553f694b", + "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b", "shasum": "" }, "require": { @@ -5981,7 +6071,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.3" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.5" }, "funding": [ { @@ -5997,20 +6087,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.4", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6efcbd1b3f444f631c386504fc83eeca25963747" + "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6efcbd1b3f444f631c386504fc83eeca25963747", - "reference": "6efcbd1b3f444f631c386504fc83eeca25963747", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/44204d96150a9df1fc57601ec933d23fefc2d65b", + "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b", "shasum": "" }, "require": { @@ -6095,7 +6185,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.4" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.5" }, "funding": [ { @@ -6111,20 +6201,20 @@ "type": "tidelift" } ], - "time": "2024-08-30T17:02:28+00:00" + "time": "2024-09-21T06:09:21+00:00" }, { "name": "symfony/mailer", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee" + "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/8fcff0af9043c8f8a8e229437cea363e282f9aee", - "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee", + "url": "https://api.github.com/repos/symfony/mailer/zipball/bbf21460c56f29810da3df3e206e38dfbb01e80b", + "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b", "shasum": "" }, "require": { @@ -6175,7 +6265,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.1.2" + "source": "https://github.com/symfony/mailer/tree/v7.1.5" }, "funding": [ { @@ -6191,20 +6281,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-09-08T12:32:26+00:00" }, { "name": "symfony/mime", - "version": "v7.1.4", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "ccaa6c2503db867f472a587291e764d6a1e58758" + "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ccaa6c2503db867f472a587291e764d6a1e58758", - "reference": "ccaa6c2503db867f472a587291e764d6a1e58758", + "url": "https://api.github.com/repos/symfony/mime/zipball/711d2e167e8ce65b05aea6b258c449671cdd38ff", + "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff", "shasum": "" }, "require": { @@ -6259,7 +6349,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.1.4" + "source": "https://github.com/symfony/mime/tree/v7.1.5" }, "funding": [ { @@ -6275,7 +6365,7 @@ "type": "tidelift" } ], - "time": "2024-08-13T14:28:19+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/options-resolver", @@ -6982,16 +7072,16 @@ }, { "name": "symfony/process", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca" + "reference": "5c03ee6369281177f07f7c68252a280beccba847" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca", - "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca", + "url": "https://api.github.com/repos/symfony/process/zipball/5c03ee6369281177f07f7c68252a280beccba847", + "reference": "5c03ee6369281177f07f7c68252a280beccba847", "shasum": "" }, "require": { @@ -7023,7 +7113,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.3" + "source": "https://github.com/symfony/process/tree/v7.1.5" }, "funding": [ { @@ -7039,7 +7129,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:44:47+00:00" + "time": "2024-09-19T21:48:23+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -7290,16 +7380,16 @@ }, { "name": "symfony/string", - "version": "v7.1.4", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b" + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/6cd670a6d968eaeb1c77c2e76091c45c56bc367b", - "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b", + "url": "https://api.github.com/repos/symfony/string/zipball/d66f9c343fa894ec2037cc928381df90a7ad4306", + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306", "shasum": "" }, "require": { @@ -7357,7 +7447,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.4" + "source": "https://github.com/symfony/string/tree/v7.1.5" }, "funding": [ { @@ -7373,20 +7463,20 @@ "type": "tidelift" } ], - "time": "2024-08-12T09:59:40+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/translation", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1" + "reference": "235535e3f84f3dfbdbde0208ede6ca75c3a489ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/8d5e50c813ba2859a6dfc99a0765c550507934a1", - "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1", + "url": "https://api.github.com/repos/symfony/translation/zipball/235535e3f84f3dfbdbde0208ede6ca75c3a489ea", + "reference": "235535e3f84f3dfbdbde0208ede6ca75c3a489ea", "shasum": "" }, "require": { @@ -7451,7 +7541,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.3" + "source": "https://github.com/symfony/translation/tree/v7.1.5" }, "funding": [ { @@ -7467,7 +7557,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-09-16T06:30:38+00:00" }, { "name": "symfony/translation-contracts", @@ -7549,16 +7639,16 @@ }, { "name": "symfony/uid", - "version": "v7.1.4", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "82177535395109075cdb45a70533aa3d7a521cdf" + "reference": "8c7bb8acb933964055215d89f9a9871df0239317" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/82177535395109075cdb45a70533aa3d7a521cdf", - "reference": "82177535395109075cdb45a70533aa3d7a521cdf", + "url": "https://api.github.com/repos/symfony/uid/zipball/8c7bb8acb933964055215d89f9a9871df0239317", + "reference": "8c7bb8acb933964055215d89f9a9871df0239317", "shasum": "" }, "require": { @@ -7603,7 +7693,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.1.4" + "source": "https://github.com/symfony/uid/tree/v7.1.5" }, "funding": [ { @@ -7619,20 +7709,20 @@ "type": "tidelift" } ], - "time": "2024-08-12T09:59:40+00:00" + "time": "2024-09-17T09:16:35+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.4", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa" + "reference": "e20e03889539fd4e4211e14d2179226c513c010d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a5fa7481b199090964d6fd5dab6294d5a870c7aa", - "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e20e03889539fd4e4211e14d2179226c513c010d", + "reference": "e20e03889539fd4e4211e14d2179226c513c010d", "shasum": "" }, "require": { @@ -7686,7 +7776,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.4" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.5" }, "funding": [ { @@ -7702,7 +7792,7 @@ "type": "tidelift" } ], - "time": "2024-08-30T16:12:47+00:00" + "time": "2024-09-16T10:07:02+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -8323,24 +8413,24 @@ }, { "name": "composer/semver", - "version": "3.4.2", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -8384,7 +8474,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.2" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -8400,7 +8490,7 @@ "type": "tidelift" } ], - "time": "2024-07-12T11:35:52+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "dealerdirect/phpcodesniffer-composer-installer", @@ -8789,26 +8879,26 @@ }, { "name": "filp/whoops", - "version": "2.15.4", + "version": "2.16.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" + "reference": "befcdc0e5dce67252aa6322d82424be928214fa2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", - "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", + "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2", + "reference": "befcdc0e5dce67252aa6322d82424be928214fa2", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0 || ^8.0", + "php": "^7.1 || ^8.0", "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" }, "suggest": { "symfony/var-dumper": "Pretty print complex values better with var-dumper available", @@ -8848,7 +8938,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.15.4" + "source": "https://github.com/filp/whoops/tree/2.16.0" }, "funding": [ { @@ -8856,7 +8946,7 @@ "type": "github" } ], - "time": "2023-11-03T12:00:00+00:00" + "time": "2024-09-25T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -9090,16 +9180,16 @@ }, { "name": "laravel-lang/attributes", - "version": "2.10.8", + "version": "2.11.1", "source": { "type": "git", "url": "https://github.com/Laravel-Lang/attributes.git", - "reference": "cf53eb18a47692045ac135e5be1e3fa979232504" + "reference": "b60817d0361ec2fe29f100f76cc9bd0c13a36ec9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/attributes/zipball/cf53eb18a47692045ac135e5be1e3fa979232504", - "reference": "cf53eb18a47692045ac135e5be1e3fa979232504", + "url": "https://api.github.com/repos/Laravel-Lang/attributes/zipball/b60817d0361ec2fe29f100f76cc9bd0c13a36ec9", + "reference": "b60817d0361ec2fe29f100f76cc9bd0c13a36ec9", "shasum": "" }, "require": { @@ -9153,9 +9243,9 @@ ], "support": { "issues": "https://github.com/Laravel-Lang/attributes/issues", - "source": "https://github.com/Laravel-Lang/attributes/tree/2.10.8" + "source": "https://github.com/Laravel-Lang/attributes/tree/2.11.1" }, - "time": "2024-08-30T09:34:14+00:00" + "time": "2024-10-02T14:07:29+00:00" }, { "name": "laravel-lang/common", @@ -9474,16 +9564,16 @@ }, { "name": "laravel/pint", - "version": "v1.17.3", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "9d77be916e145864f10788bb94531d03e1f7b482" + "reference": "35c00c05ec43e6b46d295efc0f4386ceb30d50d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/9d77be916e145864f10788bb94531d03e1f7b482", - "reference": "9d77be916e145864f10788bb94531d03e1f7b482", + "url": "https://api.github.com/repos/laravel/pint/zipball/35c00c05ec43e6b46d295efc0f4386ceb30d50d9", + "reference": "35c00c05ec43e6b46d295efc0f4386ceb30d50d9", "shasum": "" }, "require": { @@ -9536,20 +9626,20 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-09-03T15:00:28+00:00" + "time": "2024-09-24T17:22:50+00:00" }, { "name": "laravel/sail", - "version": "v1.32.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "4a7e41d280861ca7e35710cea011a07669b4003b" + "reference": "511e9c95b0f3ee778dc9e11e242bcd2af8e002cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/4a7e41d280861ca7e35710cea011a07669b4003b", - "reference": "4a7e41d280861ca7e35710cea011a07669b4003b", + "url": "https://api.github.com/repos/laravel/sail/zipball/511e9c95b0f3ee778dc9e11e242bcd2af8e002cd", + "reference": "511e9c95b0f3ee778dc9e11e242bcd2af8e002cd", "shasum": "" }, "require": { @@ -9599,7 +9689,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2024-09-11T20:14:29+00:00" + "time": "2024-09-27T14:58:09+00:00" }, { "name": "mockery/mockery", @@ -9988,16 +10078,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.30.1", + "version": "1.32.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "51b95ec8670af41009e2b2b56873bad96682413e" + "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/51b95ec8670af41009e2b2b56873bad96682413e", - "reference": "51b95ec8670af41009e2b2b56873bad96682413e", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6ca22b154efdd9e3c68c56f5d94670920a1c19a4", + "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4", "shasum": "" }, "require": { @@ -10029,22 +10119,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.1" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.32.0" }, - "time": "2024-09-07T20:13:05+00:00" + "time": "2024-09-26T07:23:32+00:00" }, { "name": "phpstan/phpstan", - "version": "1.12.3", + "version": "1.12.6", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009" + "reference": "dc4d2f145a88ea7141ae698effd64d9df46527ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0fcbf194ab63d8159bb70d9aa3e1350051632009", - "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dc4d2f145a88ea7141ae698effd64d9df46527ae", + "reference": "dc4d2f145a88ea7141ae698effd64d9df46527ae", "shasum": "" }, "require": { @@ -10089,7 +10179,7 @@ "type": "github" } ], - "time": "2024-09-09T08:10:35+00:00" + "time": "2024-10-06T15:03:59+00:00" }, { "name": "phpunit/php-code-coverage", @@ -10414,16 +10504,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.34", + "version": "10.5.35", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "3c69d315bdf79080c8e115b69d1961c6905b0e18" + "reference": "7ac8b4e63f456046dcb4c9787da9382831a1874b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3c69d315bdf79080c8e115b69d1961c6905b0e18", - "reference": "3c69d315bdf79080c8e115b69d1961c6905b0e18", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7ac8b4e63f456046dcb4c9787da9382831a1874b", + "reference": "7ac8b4e63f456046dcb4c9787da9382831a1874b", "shasum": "" }, "require": { @@ -10495,7 +10585,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.34" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.35" }, "funding": [ { @@ -10511,7 +10601,7 @@ "type": "tidelift" } ], - "time": "2024-09-13T05:19:38+00:00" + "time": "2024-09-19T10:52:21+00:00" }, { "name": "sebastian/cli-parser", @@ -11876,16 +11966,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.10.2", + "version": "3.10.3", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017" + "reference": "62d32998e820bddc40f99f8251958aed187a5c9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017", - "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/62d32998e820bddc40f99f8251958aed187a5c9c", + "reference": "62d32998e820bddc40f99f8251958aed187a5c9c", "shasum": "" }, "require": { @@ -11952,7 +12042,7 @@ "type": "open_collective" } ], - "time": "2024-07-21T23:26:44+00:00" + "time": "2024-09-18T10:38:58+00:00" }, { "name": "symfony/polyfill-php81", @@ -12032,16 +12122,16 @@ }, { "name": "symfony/yaml", - "version": "v7.1.4", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "92e080b851c1c655c786a2da77f188f2dccd0f4b" + "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/92e080b851c1c655c786a2da77f188f2dccd0f4b", - "reference": "92e080b851c1c655c786a2da77f188f2dccd0f4b", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4e561c316e135e053bd758bf3b3eb291d9919de4", + "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4", "shasum": "" }, "require": { @@ -12083,7 +12173,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.1.4" + "source": "https://github.com/symfony/yaml/tree/v7.1.5" }, "funding": [ { @@ -12099,7 +12189,7 @@ "type": "tidelift" } ], - "time": "2024-08-12T09:59:40+00:00" + "time": "2024-09-17T12:49:58+00:00" }, { "name": "thedoctor0/laravel-factory-generator", diff --git a/config/mail.php b/config/mail.php index f3ed01a7..e72a96f7 100644 --- a/config/mail.php +++ b/config/mail.php @@ -92,8 +92,14 @@ return [ */ 'from' => [ - 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), - 'name' => env('MAIL_FROM_NAME', 'Example'), + 'address' => env('MAIL_FROM_ADDRESS', env('MAIL_LIST_CONTACT', 'contact@legaulois.fr')), + 'name' => env('MAIL_FROM_NAME', 'Contact Le Gaulois (legaulois.fr)') + ], + + // Contacts List. + 'contactsList' => [ + 'contact' => [env('MAIL_LIST_CONTACT', 'contact.legaulois@ldc.fr')], + 'passerelle' => env('MAIL_LIST_PASSERELLE', 'passerelle.ldc@ldc.fr'), ], /* diff --git a/config/services.php b/config/services.php index c4b8046e..4ab82a99 100644 --- a/config/services.php +++ b/config/services.php @@ -34,4 +34,12 @@ return [ 'digital_recruiter' => [ 'url' => env('DIGITAL_RECRUITER_URL') ], + + 'google' => [ + 'recaptcha' => [ + 'public' => env('GOOGLE_RECAPTCHA_PUBLIC'), + 'private' => env('GOOGLE_RECAPTCHA_PRIVATE'), + 'version' => env('GOOGLE_RECAPTCHA_VERSION', "3") === "3" ? true : false + ] + ], ]; diff --git a/database/migrations/2024_10_04_100723_add_color_to_news_categories_table.php b/database/migrations/2024_10_04_100723_add_color_to_news_categories_table.php new file mode 100644 index 00000000..bcbc37b89 --- /dev/null +++ b/database/migrations/2024_10_04_100723_add_color_to_news_categories_table.php @@ -0,0 +1,34 @@ +unsignedBigInteger('color')->after('slug')->comment('News associated color.'); + }); + NewsCategory::query()->get()->map(function (NewsCategory $category) { + $category->color = fake()->unique()->safeHexColor(); + $category->saveQuietly(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('news_categories', function (Blueprint $table) { + $table->dropColumn('color'); + }); + } +}; diff --git a/manifest.yaml b/manifest.yaml index cc4757e4..6e6fafe2 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -36,6 +36,9 @@ data: SAML2_CONTACT_TECHNICAL_EMAIL: "${APP_SAML2_CONTACT_TECHNICAL_EMAIL}" SAML2_CONTACT_SUPPORT_EMAIL: "${APP_SAML2_CONTACT_SUPPORT_EMAIL}" SAML2_DEFAULT_TENANT_UUID: "${APP_SAML2_DEFAULT_TENANT_UUID}" + GOOGLE_RECAPTCHA_PRIVATE: "${APP_GOOGLE_RECAPTCHA_PRIVATE}" + GOOGLE_RECAPTCHA_PUBLIC: "${APP_GOOGLE_RECAPTCHA_PUBLIC}" + GOOGLE_RECAPTCHA_VERSION: "${APP_GOOGLE_RECAPTCHA_VERSION}" --- apiVersion: v1 diff --git a/resources/assets/images/contact/exclamation.svg b/resources/assets/images/contact/exclamation.svg new file mode 100644 index 00000000..93cd87af --- /dev/null +++ b/resources/assets/images/contact/exclamation.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/resources/assets/images/contact/info.svg b/resources/assets/images/contact/info.svg new file mode 100644 index 00000000..a51ca908 --- /dev/null +++ b/resources/assets/images/contact/info.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/assets/images/contact/question-mark.svg b/resources/assets/images/contact/question-mark.svg new file mode 100644 index 00000000..494be79e --- /dev/null +++ b/resources/assets/images/contact/question-mark.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/assets/images/contact/radio-triangle.svg b/resources/assets/images/contact/radio-triangle.svg new file mode 100644 index 00000000..e69de29b diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php index 306f5656..2f1888f2 100644 --- a/resources/lang/fr/validation.php +++ b/resources/lang/fr/validation.php @@ -222,6 +222,8 @@ return [ 'vimeo_id' => ':attribute doit être un ID de vidéo Vimeo valide', 'list_items' => 'doit décrire la valeur :field (minimum :min caractères, :lineMin à :lineMax lignes).', 'highlight_boolean' => 'cocher pour mettre en avant cette recette et décocher l\'ancienne.', + 'postal_code' => 'Le code postal doit être un code postal valide', + 'phone' => 'Le numéro de téléphone doit être un numéro de téléphone valide', // Custom attributes. 'custom' => [ 'of_the' => [ @@ -232,6 +234,7 @@ return [ ], 'activated' => 'activé', 'advice' => 'conseil', + 'associated_page' => 'page associée|pages associées', 'attribute_alt' => 'attribut alt', 'attribute_title' => 'attribut titre', 'background' => 'image de fond', @@ -247,9 +250,10 @@ return [ 'button' => 'bouton', 'catchline' => 'phrase d\'accroche|phrases d\'accroche', 'category' => 'catégorie', - 'claim' => 'allégation', 'claim_title' => 'titre des allégations', + 'claim' => 'allégation', 'class' => 'classe', + 'code' => 'code', 'color_block' => 'couleur du block', 'color' => 'couleur', 'contract' => 'contrat', @@ -298,26 +302,43 @@ return [ 'sustitle' => 'sous-titre', 'target' => 'cible', 'testimonial_identity' => 'identité', - 'tips' => 'astuce', 'thumbnail' => 'vignette', + 'tips' => 'astuce', 'type' => 'type', 'unit' => 'unité', 'unpublish_at' => 'date de fin de publication', 'unpublished' => 'non publié', 'url' => 'lien', + 'used' => 'utilisé', 'value' => 'valeur', 'video_id' => 'ID de la vidéo', 'vimeo_video_id' => 'ID de la vidéo viméo', 'youtube_video_id' => 'ID de la vidéo youtube', - 'testimonial_identity' => 'identité', - 'catchline' => 'phrase d\'accroche|phrases d\'accroche', - 'button_visibility' => 'visibilité du bouton|visibilité des boutons', - 'associated_page' => 'page associée|pages associées', + 'product_name' => 'nom du produit', + 'place_of_purchase' => 'lieu d\'achat', + 'barcode' => 'code barre du produit', + 'batch_number' => 'numéro de lot', + 'use_by_date' => 'date limite de consommation', + 'consumption_date' => 'date de consommation', + 'message' => 'message', + 'attachment' => 'pièce jointe', + 'town' => 'ville', + 'civility' => 'civilité', + + 'breeder_map_component' => [ 'main_text' => 'texte principal', 'picto_text' => 'texte du pictogramme', ], - 'code' => 'code', - 'used' => 'utilisé', + 'nutritionnal_values' => [ + 'energy' => 'énergie', + 'proteins' => 'protéines', + 'carbohydrates' => 'glucides', + 'sugar' => 'dont sucres', + 'fat' => 'matières grasses', + 'saturated_fatty_acids' => 'dont Acides Gras Saturés', + 'dietary_fiber' => 'fibres alimentaires', + 'salt' => 'sel', + ] ], ]; diff --git a/resources/sass/fo/fo.scss b/resources/sass/fo/fo.scss index 1941a4c0..53b30341 100644 --- a/resources/sass/fo/fo.scss +++ b/resources/sass/fo/fo.scss @@ -33,6 +33,7 @@ @import "./pages/page-des-40-ans"; @import "./pages/export-40-ans"; @import "./pages/news"; +@import "./pages/contact"; // * PARTIALS @import "./partials/breeder-card"; diff --git a/resources/sass/fo/pages/contact.scss b/resources/sass/fo/pages/contact.scss new file mode 100644 index 00000000..8dc4d881 --- /dev/null +++ b/resources/sass/fo/pages/contact.scss @@ -0,0 +1,40 @@ +#contact-page { + .radio-subject { + box-shadow: 0 3px 10px -2px hsl(150deg 5% 65% / 50%); + + input { + display: none; + cursor: pointer; + } + + label { + position: relative; + display: block; + overflow: hidden; + height: 100%; + padding: 1rem 2rem 1rem 1rem; + border: 4px solid; + border-color: $color-tertiary; + border-radius: 10px; + background: $color-tertiary; + } + + input:checked+label { + border: 4px solid #fff; + background: $color-secondary; + box-shadow: 0 0 10px 0 #0000004d; + color: #fff; + + &::after { + position: absolute; + top: 50%; + right: 0; + width: 35px; + height: 35px; + background: #fff; + content: ""; + transform: translate(50%, -50%) rotate(45deg); + } + } + } +} diff --git a/resources/sass/fo/pages/home.scss b/resources/sass/fo/pages/home.scss index c7108aa7..e921890e 100644 --- a/resources/sass/fo/pages/home.scss +++ b/resources/sass/fo/pages/home.scss @@ -6,11 +6,11 @@ border: 0; border-radius: 100%; margin: 0 0.5rem; - background-color: #fff; + background-color: $color-tertiary; transition: .3s; &-active { - background-color: $color-success !important; + background-color: $color-secondary !important; transform: scale(1.1); } } @@ -178,7 +178,19 @@ left: 1rem; @include media-breakpoint-up(md) { - left: 8rem; + left: 2rem; + } + + @include media-breakpoint-up(lg) { + left: 3rem; + } + + @include media-breakpoint-up(xl) { + left: 4rem; + } + + @include media-breakpoint-up(xxl) { + left: 6rem; } } @@ -186,7 +198,19 @@ right: 1rem; @include media-breakpoint-up(md) { - right: 80rem; + left: 41rem; + } + + @include media-breakpoint-up(lg) { + left: 43rem; + } + + @include media-breakpoint-up(xl) { + left: 46rem; + } + + @include media-breakpoint-up(xxl) { + left: 49rem; } } } @@ -310,6 +334,27 @@ } } + #swiper-recipes{ + .swiper-pagination-bullet { + width: 1rem; + height: 1rem; + border: 0; + border-radius: 100%; + margin: 0 0.5rem; + background-color: $color-white; + transition: .3s; + + &-active { + background-color: $color-secondary !important; + transform: scale(1.1); + } + + &:hover { + cursor: pointer; + } + } + } + #news { .news-wrapper { @include media-breakpoint-up(xl) { @@ -348,9 +393,6 @@ } } - - - .swiper-videos { .swiper-slide { transition: all .2s ease; diff --git a/resources/sass/fo/pages/product.scss b/resources/sass/fo/pages/product.scss index 0b74df5c..8bb97ae4 100644 --- a/resources/sass/fo/pages/product.scss +++ b/resources/sass/fo/pages/product.scss @@ -78,7 +78,7 @@ right: 30%; width: 20rem; transform: rotate(-2deg); - transition: top .5s,bottom .5s,transform .5s; + transition: top .5s, bottom .5s, transform .5s; @include media-breakpoint-up(xxl) { width: 24rem; @@ -159,6 +159,30 @@ left: 9rem; } } + + .nut-val-left-col { + border-right: 1rem solid #fff; + } + + .nut-val-row { + border-bottom: 0.4rem solid #fff; + + &-odd { + --bs-table-bg: var(--bs-light) !important; + + background-color: $color-light !important; + } + + &-even { + --bs-table-bg: var(--bs-tertiary) !important; + + background-color: $color-tertiary !important; + } + } + + .nut-val-header { + --bs-table-bg: #fff !important; + } } &-commitments { diff --git a/resources/ts/fo/base/common.ts b/resources/ts/fo/base/common.ts index b37f8a0b..6434de3e 100644 --- a/resources/ts/fo/base/common.ts +++ b/resources/ts/fo/base/common.ts @@ -203,8 +203,9 @@ document.addEventListener("DOMContentLoaded", function () { }, 992: { slidesPerView: 3, - initialSlide: 1, - slidesPerGroup: 3 + initialSlide: 2, + slidesPerGroup: 3, + centeredSlides: false, }, }, }, @@ -470,10 +471,12 @@ document.addEventListener("DOMContentLoaded", function () { spaceBetween: 40, slidesPerView: 2, centeredSlides: false, + slidesPerGroup: 2, }, 992: { slidesPerView: 3, centeredSlides: false, + slidesPerGroup: 3, }, }, diff --git a/resources/ts/fo/fo.ts b/resources/ts/fo/fo.ts index 99f70a2d..c17e23bd 100644 --- a/resources/ts/fo/fo.ts +++ b/resources/ts/fo/fo.ts @@ -14,6 +14,7 @@ import "./partials/layout"; // CUSTOM import "./base/common"; +import "./pages/contact"; import "./pages/home"; // COOKIES diff --git a/resources/ts/fo/pages/contact.ts b/resources/ts/fo/pages/contact.ts new file mode 100644 index 00000000..1466c46d --- /dev/null +++ b/resources/ts/fo/pages/contact.ts @@ -0,0 +1,54 @@ + +document.addEventListener("DOMContentLoaded", function () { + const checkedSubject = document.querySelector("input[name=\"type\"]:checked") as HTMLInputElement; + const typeRadioInputs = document.querySelectorAll("input[name=\"type\"]") as NodeListOf; + if (!document.querySelector("#contact-page") || !checkedSubject || !typeRadioInputs) { + return; + } + + checkRadioChecked(checkedSubject.value); + + for (const typeRadioInput of typeRadioInputs) { + typeRadioInput.addEventListener("change", (e: Event) => { + if (e.currentTarget instanceof HTMLInputElement) { + checkRadioChecked(e.currentTarget.value); + } + }); + } +}); + +function checkRadioChecked(value: String) { + // Check if the current checked radio is equal to ContactFormType::complain. + displayComplainForm(value === "2"); +} + +function displayComplainForm(shouldDisplay: boolean) { + const complainForm = document.querySelector("#complain-part"); + if (!complainForm) { + return; + } + const fileInputContainer = document.querySelector("#file-input") as HTMLInputElement; + if (!fileInputContainer) { + return; + } + const complainFormInputs = complainForm.querySelectorAll(".required-field") as NodeListOf; + const fileInputs = fileInputContainer.querySelectorAll(".required-field") as NodeListOf; + if (shouldDisplay) { + complainForm.classList.remove("d-none"); + for (const complainFormInput of complainFormInputs) { + complainFormInput.required = true; + } + fileInputContainer.classList.remove("d-none"); + } else { + complainForm.classList.add("d-none"); + for (const complainFormInput of complainFormInputs) { + complainFormInput.required = false; + complainFormInput.value = ""; + } + fileInputContainer.classList.add("d-none"); + for (const fileInput of fileInputs) { + fileInput.value = ""; + } + + } +} diff --git a/resources/views/bo/pages/news_categories/form.blade.php b/resources/views/bo/pages/news_categories/form.blade.php index af9bf2c0..0f3ca300 100644 --- a/resources/views/bo/pages/news_categories/form.blade.php +++ b/resources/views/bo/pages/news_categories/form.blade.php @@ -112,6 +112,32 @@ + {{-- COLOR --}} +
+
+ {{ str(__('validation.custom.color'))->ucFirst() }} +
+
+ @include('bo.partials.inputs.int-color', [ + 'id' => 'newsCategoryColor', + 'label' => str( + __(':field :inter:model', [ + 'field' => __('validation.custom.color'), + 'inter' => __('validation.custom.of_the.female'), + 'model' => __('models.classes.news_category'), + ]))->ucfirst(), + 'name' => 'color', + 'value' => "#268DC6", + 'presetColors' => ["#268DC6", "#EE7C28", "#C6725C", "#0F437E", "#AC283D", "#FDC331", "#FFDB9A", "#063"], + 'model' => $newsCategoryModel ?? null, + 'required' => true, + 'disabled' => false, + 'helper' => __('crud.minicrud.text_warning'), + ]) +
+
+
+
{{-- PUBLICATION --}}
diff --git a/resources/views/bo/pages/news_categories/index-list.blade.php b/resources/views/bo/pages/news_categories/index-list.blade.php index c10a8ac9..d6c4d7c1 100644 --- a/resources/views/bo/pages/news_categories/index-list.blade.php +++ b/resources/views/bo/pages/news_categories/index-list.blade.php @@ -6,6 +6,7 @@ 'title' => str(__('validation.attributes.title'))->ucfirst(), 'slug' => str(__('validation.custom.slug'))->ucfirst(), 'published' => str(__('validation.custom.publication'))->ucfirst(), + 'color' => str(__('validation.custom.color'))->ucfirst(), 'updated_at' => str(__('validation.attributes.updated_at'))->ucfirst(), ], ]) @@ -19,6 +20,9 @@ 'routeName' => 'news_categories', 'model' => $newsCategoryModel, ]) + + + {{ $newsCategoryModel->updated_at->isoFormat('LLLL') }} diff --git a/resources/views/bo/partials/inputs/int-color.blade.php b/resources/views/bo/partials/inputs/int-color.blade.php index d3a8d5ec..4b5008a0 100644 --- a/resources/views/bo/partials/inputs/int-color.blade.php +++ b/resources/views/bo/partials/inputs/int-color.blade.php @@ -10,7 +10,7 @@ $data = [ 'id' => $id, 'name' => $name, - 'value' => $value ?? old($name, $model->{$name} ?? ''), + 'value' => old($name, $model->{$name} ?? '') ?? $value, 'nullable' => !$required, 'disabled' => $disabled ?? false, 'presetColors' => $presetColors ?? ["#0f437e", "#4e3238", "#f3ebe4", "#1175b7", "#c7d400", "#fab7d8", "#063", "#e30513", "#ce6118", "#212425", "#fbf8f5"], diff --git a/resources/views/components/fo/breeding/section/header-section.blade.php b/resources/views/components/fo/breeding/section/header-section.blade.php index 67c40fee..1bf38f74 100644 --- a/resources/views/components/fo/breeding/section/header-section.blade.php +++ b/resources/views/components/fo/breeding/section/header-section.blade.php @@ -17,7 +17,7 @@ {{ $badge->label }}
@endif -
+
@if (isset($badge) && !empty($picto)) {{ $picto_alt }} diff --git a/resources/views/components/fo/breeding/section/sortant-a-l-exterieur/cahier-des-charges-section.blade.php b/resources/views/components/fo/breeding/section/sortant-a-l-exterieur/cahier-des-charges-section.blade.php index fc9e99bd..7190080f 100644 --- a/resources/views/components/fo/breeding/section/sortant-a-l-exterieur/cahier-des-charges-section.blade.php +++ b/resources/views/components/fo/breeding/section/sortant-a-l-exterieur/cahier-des-charges-section.blade.php @@ -124,7 +124,7 @@
+ + + + Nouveau Contact Le Gaulois + + + + +

Cette personne à utilisé le formulaire de contact du site legaulois.fr +

+

Personne : 

+

+ {{ $data->civility->label() }} + {{ $data->lastname }} {{ $data->firstname }} +

+

Adresse : 

+

{{ $data->address }}

+

{{ $data->town }} {{ $data->postal }}

+

Contact : 

+

{{ $data->phone }}

+

{{ $data->email }}

+

Sujet : 

+

{{ $data->type->equals(\App\Enums\ContactFormType::nl) ? $data->onepagesubject : $data->type->label() }}

+

Message : 

+

{!! nl2br(e($data->message)) !!}

+ + + diff --git a/resources/views/emails/passerelle-xml.blade.php b/resources/views/emails/passerelle-xml.blade.php new file mode 100644 index 00000000..285039f3 --- /dev/null +++ b/resources/views/emails/passerelle-xml.blade.php @@ -0,0 +1,31 @@ + + + + {{ $data ['EMETTEUR_MARQUE'] }} + {{ $data ['EMETTEUR_DATE'] }} + {{ $data ['EMETTEUR_HEURE'] }} + {{ $data ['EMETTEUR_CIVILITE'] }} + + + + + + + {{ $data ['EMETTEUR_PAYS'] }} + {{ $data ['EMETTEUR_EMAIL'] }} + + {{ $data ['EMETTEUR_OBJETDEMANDE'] }} + + + {{ $data ['EMETTEUR_DATE_LIMITE_CONSO'] }} + + {{ $data ['EMETTEUR_OPT_IN'] }} + + + {{ $data ['REPONSE_ETAT'] }} + {{ $data ['TYPE_REPONSE'] }} + {{ $data ['DATE_CONSO'] }} + + + + diff --git a/resources/views/fo/layout.blade.php b/resources/views/fo/layout.blade.php index 76720ff4..fa37de4c 100644 --- a/resources/views/fo/layout.blade.php +++ b/resources/views/fo/layout.blade.php @@ -11,11 +11,6 @@ @include('fo.layouts.header')
yieldContent('bg-color'), 'no-offset' => $__env->yieldContent('bg-offset')])> -
-
- @include('modules.flash-messages') -
-
@yield('content')
diff --git a/resources/views/fo/layouts/header-banner.blade.php b/resources/views/fo/layouts/header-banner.blade.php index da50e36f..812cb10f 100644 --- a/resources/views/fo/layouts/header-banner.blade.php +++ b/resources/views/fo/layouts/header-banner.blade.php @@ -13,7 +13,7 @@ {{ $badge->label }}
@endif -
+
@if (isset($badge) && !empty($picto)) {{ $picto_alt }} diff --git a/resources/views/fo/pages/commitments/life.blade.php b/resources/views/fo/pages/commitments/life.blade.php index 84eead52..fee8f5cc 100644 --- a/resources/views/fo/pages/commitments/life.blade.php +++ b/resources/views/fo/pages/commitments/life.blade.php @@ -146,7 +146,6 @@
@include('fo.partials.commitments.paragraph-with-visual', [ 'title' => __('2021, nos collaborateurs ont du cœur'), - 'isVideoModal' => true, 'text' => nl2br( __( 'Depuis 2021, Le Gaulois soutient l’:strongStartassociation Mécénat Chirurgie Cardiaque:strongEnd pour sauver des enfants en finançant des opérations d’enfants atteint de malformation cardiaque. :strongStartCourse à pied, vélo, marche, randonnée,:strongEnd les kilomètres parcourus sont compilés par une application sportive tout au long de l’année pour récolter un maximum de fonds pour l’association.', diff --git a/resources/views/fo/pages/contact.blade.php b/resources/views/fo/pages/contact.blade.php new file mode 100644 index 00000000..7a804f07 --- /dev/null +++ b/resources/views/fo/pages/contact.blade.php @@ -0,0 +1,466 @@ +@extends('fo.layout', ['brParam' => $staticPageModel]) + +@section('title', $staticPageModel->seo_title) +@section('description', $staticPageModel->seo_description) +@section('breadcrumb', request()->route()->getName()) +@section('bg-offset', true) + +@section('content') + {{-- HEADER --}} + @include('fo.layouts.header-banner') +
+
+
+ {!! clean($staticPageModel->content) !!} +
+
+ + + {{-- CONTACT FORM --}} +
+ @csrf +
+
+
+
+

{{ __('Objet de votre demande') }} *

+
+ {{-- SUBJECT --}} + @foreach (\App\Enums\ContactFormType::getContactTypes() as $contactType) +
+
+ first || $contactType->value === intval(old('type'))) /> + +
+
+ @endforeach +
+

+ {{ __('Les informations qui vous concernent sont destinées à un usage interne et ne seront en aucun cas transmises à des tiers. Vous disposez d\'un droit d\'accès, de modification, de rectification et de suppression des données qui vous concernent (art. 34 de la loi "Informatique et Libertés").') }} +

+
+
+
+
+
+
+

{{ __('Je souhaite rédiger une réclamation') }}

+ + {{-- FLASH MESSAGES --}} +
+
+ @include('modules.flash-messages') +
+
+ +

{{ __('Mes coordonnées') }}

+

*{{ __('Champs obligatoires') }}

+
+ +
+

{{ __('validation.custom.civility') }}

+ @foreach (\App\Enums\ContactFormCivility::toArray() as $contactCivility) +
+ first || $contactCivility->value === intval(old('civility'))) /> + +
+ @endforeach +
+ {{-- LAST NAME --}} +
+ + $errors->has('lastname')]) placeholder="{{ __('ex : Dupont') }}" required> + @include('modules.input-error', [ + 'inputName' => 'lastname', + 'helperId' => 'lastnameHelp', + ]) +
+ {{-- FIRST NAME --}} +
+ + $errors->has('firstname')]) placeholder="{{ __('ex : Martin') }}" required> + @include('modules.input-error', [ + 'inputName' => 'firstname', + 'helperId' => 'firstnameHelp', + ]) +
+ {{-- ADDRESS --}} +
+ + $errors->has('address')]) placeholder="{{ __('ex : 1 rue du poulet') }}" required> + @include('modules.input-error', [ + 'inputName' => 'address', + 'helperId' => 'addressHelp', + ]) +
+ {{-- POSTCODE --}} +
+ + $errors->has('postal')]) placeholder="{{ __('ex : 44 100') }}" required> + @include('modules.input-error', [ + 'inputName' => 'postal', + 'helperId' => 'postalHelp', + ]) +
+ {{-- CITY --}} +
+ + $errors->has('town')]) placeholder="{{ __('ex : Nantes') }}" required> + @include('modules.input-error', [ + 'inputName' => 'town', + 'helperId' => 'townHelp', + ]) +
+ {{-- EMAIL --}} +
+ + $errors->has('email')]) placeholder="{{ __('ex : monadresse@mail.com') }}" + required> + @include('modules.input-error', [ + 'inputName' => 'email', + 'helperId' => 'emailHelp', + ]) +
+ {{-- PHONE --}} +
+ + $errors->has('phone')]) placeholder="{{ __('ex : 06 00 00 00 00') }}" + required> + @include('modules.input-error', [ + 'inputName' => 'phone', + 'helperId' => 'phoneHelp', + ]) +
+
+ + {{-- PRODUCT COMPLAIN (displayed only if subject 'complain' is checked) --}} +
+
+

{{ __('Réclamation produit') }}

+
+ {{-- PRODUCT NAME --}} +
+ + $errors->has('productName'), + ]) + placeholder="{{ __('ex : Escalope de poulet') }}" required> + @include('modules.input-error', [ + 'inputName' => 'productName', + 'helperId' => 'productNameHelp', + ]) +
+ {{-- PLACE OF PURCHASE --}} +
+ + $errors->has('buyPlace'), + ]) placeholder="{{ __('ex : Nantes') }}" required> + @include('modules.input-error', [ + 'inputName' => 'buyPlace', + 'helperId' => 'buyPlaceHelp', + ]) +
+ {{-- BARCODE --}} +
+ + $errors->has('productCode'), + ]) placeholder="{{ __('ex : 0000000000000') }}" + required> + @include('modules.input-error', [ + 'inputName' => 'productCode', + 'helperId' => 'productCodeHelp', + ]) +
+ {{-- BATCH NUMBER --}} +
+ + $errors->has('lotNumberName'), + ]) + placeholder="{{ __('ex : 0000000000000') }}" required> + @include('modules.input-error', [ + 'inputName' => 'lotNumberName', + 'helperId' => 'lotNumberNameHelp', + ]) +
+
+ {{ __('Pictogramme +

+ {{ __('Vous pouvez également trouver le n° de lot sous la dénomination "n° de traçabilité" ou "n° trac" ou à côté de la date.') }} +

+
+ {{-- USE-BY DATE --}} +
+

{{ __('validation.custom.use_by_date') }} *

+
+ {{-- DAY --}} +
+ + $errors->has('limitDateDay'), + ]) min="1" max="31" + placeholder="{{ __('jj') }}" required> + @include('modules.input-error', [ + 'inputName' => 'limitDateDay', + 'helperId' => 'limitDateDayHelp', + ]) +
+ {{-- MONTH --}} +
+ + $errors->has('limitDateMonth'), + ]) min="1" max="12" + placeholder="{{ __('mm') }}" required> + @include('modules.input-error', [ + 'inputName' => 'limitDateMonth', + 'helperId' => 'limitDateMonthHelp', + ]) +
+ {{-- YEAR --}} +
+ + $errors->has('limitDateYear'), + ]) min="2010" max="2050" + placeholder="{{ __('aaaa') }}" required> + @include('modules.input-error', [ + 'inputName' => 'limitDateYear', + 'helperId' => 'limitDateYearHelp', + ]) +
+
+
+ {{-- CONSUMPTION DATE --}} +
+

{{ __('validation.custom.consumption_date') }} *

+
+ {{-- DAY --}} +
+ + $errors->has('consumptionDateDay'), + ]) min="1" max="31" placeholder="{{ __('jj') }}" + required> + @include('modules.input-error', [ + 'inputName' => 'consumptionDateDay', + 'helperId' => 'consumptionDateDayHelp', + ]) +
+ {{-- MONTH --}} +
+ + $errors->has('consumptionDateMonth'), + ]) min="1" max="12" placeholder="{{ __('mm') }}" + required> + @include('modules.input-error', [ + 'inputName' => 'consumptionDateMonth', + 'helperId' => 'consumptionDateMonthHelp', + ]) +
+ {{-- YEAR --}} +
+ + $errors->has('consumptionDateYear'), + ]) min="2010" max="2050" placeholder="{{ __('aaaa') }}" + required> + @include('modules.input-error', [ + 'inputName' => 'consumptionDateYear', + 'helperId' => 'consumptionDateYearHelp', + ]) +
+
+
+
+
+ {{-- MESSAGE --}} +
+ + + @include('modules.input-error', [ + 'inputName' => 'message', + 'helperId' => 'messageHelp', + ]) +
+ + {{-- FILE --}} +
+ + $errors->has('joinFile'), + ]) + accept=".jpg,.jpeg,.png,.pdf, image/jpg,image/png,application/pdf"> + @include('modules.input-error', [ + 'inputName' => 'joinFile', + 'helperId' => 'joinFileHelp', + 'helper' => clean(__('Formats acceptés : jpg, png, pdf
Taille max : 2 Mo')), + ]) +
+
+
+
+ {{-- RECAPTCHA --}} +
+
+ @if ($errors->has('g-recaptcha-response')) +
+ {{ $errors->first('g-recaptcha-response') }} +
+ @endif +
+ + {{-- SUBMIT BUTTON --}} +
+ +
+

+ {{ __('Pour envoyer votre formulaire, vous devez accepter les') }} + {{ __('cookies.') }}
+ {{ __('Les informations recueillies à partir de ce formulaire sont traitées par le Responsable de Traitement pour donner suite à votre demande de contact. Pour connaître vos droits, vous pouvez consulter la') }} + {{ __('Charte de confidentialité.') }} +

+
+
+
+
+
+ +
+@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/fo/pages/home.blade.php b/resources/views/fo/pages/home.blade.php index e2ae6f80..8993e3f8 100644 --- a/resources/views/fo/pages/home.blade.php +++ b/resources/views/fo/pages/home.blade.php @@ -248,6 +248,7 @@ @include('fo.partials.news-card', ['newsModel' => $newsModels->first()])
+ @if (count($newsModels->slice(1, 3))) {{-- 3 horizontal cards (only for devices with width > md size) --}}
diff --git a/resources/views/fo/pages/products/show.blade.php b/resources/views/fo/pages/products/show.blade.php index a857b809..2ba86b7f 100644 --- a/resources/views/fo/pages/products/show.blade.php +++ b/resources/views/fo/pages/products/show.blade.php @@ -159,7 +159,6 @@
{{-- PRODUCTTYPE/DEMARCHE MOBILE --}} @if (count($productModel->productTypes)) - {{-- CHANGEME: quand la relation product<->productType aura été changé, adapter cette partie --}}
-
+ {{-- Not displaying the button before we know more about it --}} + {{--
{!! clean($productModel->productTypes[0]->description) !!} @if ($productModel->productTypes[0]->button_status) {{ __('En savoir plus') }} @endif -
+
--}}
@elseif ($productModel->approach)
@@ -223,11 +223,12 @@
{!! clean($productModel->productTypes[0]->description) !!}
- @if ($productModel->productTypes[0]->button_status) + {{-- Not displaying the button before we know more about it --}} + {{-- @if ($productModel->productTypes[0]->button_status) {{ __('En savoir plus') }} - @endif + @endif --}}
@@ -244,9 +245,11 @@ {{ $productModel->approach->name }} @if ($productModel->approach->button_url) + @endif @@ -255,7 +258,6 @@ {{-- PRODUCT INGREDIENT MODAL --}} - {{-- FIXME: add nutritionnal values when it's ready --}}