From e97d290debe3278fd62532ec6a543f64061561b0 Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Tue, 26 Nov 2024 10:48:49 +0100 Subject: [PATCH 1/6] feat: :sparkles: add meilisearch with laravel scout --- .env.example | 4 + app/Enums/StaticPageType.php | 6 +- .../Controllers/Fo/StaticPageController.php | 26 +- app/Interfaces/Notifiable.php | 4 +- app/Models/News.php | 34 +- app/Models/Product.php | 43 +- app/Models/Recipe.php | 32 +- composer.json | 3 + composer.lock | 2124 ++++++----------- config/scout.php | 115 + ...913_add_search_type_static_pages_table.php | 44 + .../seeders/Mandatory/StaticPageSeeder.php | 1 + resources/sass/fo/base/_layout.scss | 49 - resources/sass/fo/fo.scss | 2 +- resources/sass/fo/pages/search.scss | 43 + resources/ts/fo/base/common.ts | 29 + resources/views/fo/layouts/header.blade.php | 5 +- .../main-menu/offcanvas-search.blade.php | 124 - .../fo/layouts/main-menu/search-btn.blade.php | 6 +- resources/views/fo/pages/home.blade.php | 4 +- .../views/fo/pages/partials-demo.blade.php | 6 +- resources/views/fo/pages/search.blade.php | 106 + .../breeding/paragraph-with-visual.blade.php | 4 +- .../views/fo/partials/cards-slider.blade.php | 14 +- .../paragraph-with-visual.blade.php | 4 +- .../fo/partials/news-card-tiny.blade.php | 16 +- .../views/fo/partials/news-card.blade.php | 14 +- routes/web-fo.php | 2 +- 28 files changed, 1168 insertions(+), 1696 deletions(-) create mode 100644 config/scout.php create mode 100644 database/migrations/2024_21_27_123913_add_search_type_static_pages_table.php create mode 100644 resources/sass/fo/pages/search.scss delete mode 100644 resources/views/fo/layouts/main-menu/offcanvas-search.blade.php create mode 100644 resources/views/fo/pages/search.blade.php diff --git a/.env.example b/.env.example index 4a04664b..4d74824a 100644 --- a/.env.example +++ b/.env.example @@ -88,3 +88,7 @@ TELESCOPE_ENABLED= # MATOMO MATOMO_SITE_ID= + +# MEILISEARCH +MEILISEARCH_HOST= +MEILISEARCH_KEY= diff --git a/app/Enums/StaticPageType.php b/app/Enums/StaticPageType.php index 550bb7b6..efe214d8 100644 --- a/app/Enums/StaticPageType.php +++ b/app/Enums/StaticPageType.php @@ -27,6 +27,7 @@ enum StaticPageType: int case breedingJob = 17; case breedingFood = 18; case breedingHealth = 19; + case search = 20; /** * Optionnal labels definition. @@ -47,12 +48,13 @@ enum StaticPageType: int self::home->name => 'Accueil', self::selling->name => 'Conditions générales de vente', self::accessibility->name => 'Accessibilité', + self::news->name => 'Actualités', + self::social->name => 'Réseaux sociaux', self::breedingPoultry->name => 'L\'élevage des volailles', self::breedingJob->name => 'Le métier d\'éleveur de volailles', self::breedingFood->name => 'L\'alimentation des volailles', self::breedingHealth->name => 'La santé des volailles', - self::news->name => 'Actualités', - self::social->name => 'Réseaux sociaux', + self::search->name => 'Recherche', ]; /** diff --git a/app/Http/Controllers/Fo/StaticPageController.php b/app/Http/Controllers/Fo/StaticPageController.php index 9c955b9f..564cbe4c 100644 --- a/app/Http/Controllers/Fo/StaticPageController.php +++ b/app/Http/Controllers/Fo/StaticPageController.php @@ -9,14 +9,18 @@ use App\Models\BrandAdvantage; use App\Models\GeneralSetting; use App\Models\HistoricalMilestone; use App\Models\KeyNumber; +use App\Models\News; use App\Models\NewsCorporate; use App\Models\Offer; +use App\Models\Product; use App\Models\Profession; +use App\Models\Recipe; use App\Models\StaticPage; use App\Models\Testimonial; use App\Models\Video; -use Illuminate\Support\Facades\Cache; use Detection\MobileDetect; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Cache; class StaticPageController extends Controller { @@ -125,10 +129,28 @@ class StaticPageController extends Controller * @param \App\Models\StaticPage $staticPageModel * @return \Illuminate\Contracts\View\View */ - public function saga(StaticPage $staticPageModel) + public function saga(StaticPage $staticPageModel): \Illuminate\Contracts\View\View { $staticPageModel = StaticPage::getCachedStaticPage(StaticPageType::saga); $videoModels = Video::get6PublishedVideosOrderedWithProducts(); return view('fo.pages.saga', compact('staticPageModel', 'videoModels')); } + + /** + * Search page. + * + * @param \Illuminate\Http\Request $request + * @param \App\Models\StaticPage $staticPageModel + * @return \Illuminate\Contracts\View\View + */ + public function search(Request $request, StaticPage $staticPageModel): \Illuminate\Contracts\View\View + { + $staticPageModel = StaticPage::getCachedStaticPage(StaticPageType::search); + $productModels = Product::search($request->input('search'))->get()->take(6); + $recipeModels = Recipe::search($request->input('search'))->get() + ->load(['products', 'consumptionMoment'])->take(6); + $newsModels = News::search($request->input('search'))->get() + ->load('newsCategory')->take(6); + return view('fo.pages.search', compact('staticPageModel', 'productModels', 'recipeModels', 'newsModels')); + } } diff --git a/app/Interfaces/Notifiable.php b/app/Interfaces/Notifiable.php index db304449..45343ac5 100644 --- a/app/Interfaces/Notifiable.php +++ b/app/Interfaces/Notifiable.php @@ -2,8 +2,6 @@ namespace App\Interfaces; -use Illuminate\Database\Eloquent\Relations\MorphOne; - interface Notifiable { /** @@ -11,5 +9,5 @@ interface Notifiable * * @return \Illuminate\Database\Eloquent\Relations\MorphOne */ - public function notifiable(): MorphOne; + public function notifiable(): \Illuminate\Database\Eloquent\Relations\MorphOne; } diff --git a/app/Models/News.php b/app/Models/News.php index 8db3932d..bbf4a6e9 100644 --- a/app/Models/News.php +++ b/app/Models/News.php @@ -12,11 +12,10 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Session; use Illuminate\Support\Str; +use Laravel\Scout\Searchable; use Spatie\Sitemap\Contracts\Sitemapable; -use Spatie\Sitemap\Tags\Url; use Uwil\SitemapGenerator\Lib\SitemapHelper; - /** * @property string $seo_title The seo title of the news. * @property string $seo_description The seo description of the news. @@ -42,6 +41,7 @@ class News extends Model implements Sitemapable { use ActivityLog; use HasFactory; + use Searchable; /** * The attributes that are mass assignable. @@ -80,6 +80,16 @@ class News extends Model implements Sitemapable 'highlight' => 'boolean', ]; + /** + * Get model's setting to apply on scout search (meilisearch). + * + * @return array + */ + public static $searchSettings = [ + 'filterableAttributes' => ['title', 'content'], + 'sortableAttributes' => ['title', 'content'] + ]; + /** * Perform any actions required after the model boots. * @@ -269,7 +279,7 @@ class News extends Model implements Sitemapable ->orderByDesc('created_at') ->paginate($detect->isMobile() ? 3 : 6) ->through(function ($newsModel) { - return view('fo.partials.news-card', ['newsModel' => $newsModel])->render(); + return view('fo.partials.news-card', ['model' => $newsModel])->render(); }); } @@ -298,16 +308,16 @@ class News extends Model implements Sitemapable ->orderByDesc('created_at') ->paginate($detect->isMobile() ? 4 : 12) ->through(function ($socialModel) { - return view('fo.partials.news-card', ['newsModel' => $socialModel])->render(); + return view('fo.partials.news-card', ['model' => $socialModel])->render(); }); } /** - * toSitemapTag method + * To sitemap tag . * - * @return Url|string|array + * @return \Spatie\Sitemap\Tags\Url|string|array */ - public function toSitemapTag(): Url | string | array + public function toSitemapTag(): \Spatie\Sitemap\Tags\Url|string|array { $model = $this; $route = 'fo.news.show'; @@ -315,6 +325,16 @@ class News extends Model implements Sitemapable return SitemapHelper::generateUrl($route, $params, $model); } + /** + * Determine if the model should be searchable. + * + * @return boolean + */ + public function shouldBeSearchable(): bool + { + return $this->published === true; + } + // * RELATIONS /** diff --git a/app/Models/Product.php b/app/Models/Product.php index 0c413f05..38f41671 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -5,19 +5,18 @@ namespace App\Models; use App\Lib\Helpers\FileStorageHelper; use App\Lib\Helpers\ToolboxHelper; use App\Traits\Models\ActivityLog; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -use Illuminate\Support\Str; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\Cache; -use Uwil\Seo\Laravel\Interfaces\SeoInterface; -use Uwil\Seo\Laravel\Traits\SeoTrait; -use Uwil\Seo\Laravel\Objects\SeoItem; +use Illuminate\Support\Str; +use Laravel\Scout\Searchable; use Spatie\Sitemap\Contracts\Sitemapable; -use Spatie\Sitemap\Tags\Url; +use Uwil\Seo\Laravel\Interfaces\SeoInterface; +use Uwil\Seo\Laravel\Objects\SeoItem; +use Uwil\Seo\Laravel\Traits\SeoTrait; use Uwil\SitemapGenerator\Lib\SitemapHelper; - /** * @property string $seo_title Product seo title. * @property string $seo_description Product seo description. @@ -52,6 +51,7 @@ class Product extends Model implements SeoInterface, Sitemapable use ActivityLog; use HasFactory; use SeoTrait; + use Searchable; /** * The attributes that are mass assignable. @@ -98,6 +98,16 @@ class Product extends Model implements SeoInterface, Sitemapable 'published' => 'boolean', ]; + /** + * Get model's setting to apply on scout search (meilisearch). + * + * @return array + */ + public static $searchSettings = [ + 'filterableAttributes' => ['label', 'description', 'preparation', 'ingredients'], + 'sortableAttributes' => ['label', 'description', 'preparation', 'ingredients'] + ]; + /** * Perform any actions required after the model boots. * @@ -232,14 +242,21 @@ class Product extends Model implements SeoInterface, Sitemapable /** * toSitemapTag method * - * @return Url|string|array + * @return \Spatie\Sitemap\Tags\Url|string|array */ - public function toSitemapTag(): Url | string | array + public function toSitemapTag(): \Spatie\Sitemap\Tags\Url|string|array { - $model = $this; - $route = 'fo.products.show'; - $params = ['slug' => $model->slug]; - return SitemapHelper::generateUrl($route, $params, $model); + return SitemapHelper::generateUrl('fo.products.show', ['slug' => $this->slug], $this); + } + + /** + * Determine if the model should be searchable. + * + * @return boolean + */ + public function shouldBeSearchable(): bool + { + return $this->published === true; } // * RELATIONSHIPS diff --git a/app/Models/Recipe.php b/app/Models/Recipe.php index 9455a494..a2398691 100644 --- a/app/Models/Recipe.php +++ b/app/Models/Recipe.php @@ -10,11 +10,11 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Str; +use Laravel\Scout\Searchable; use Uwil\Seo\Laravel\Interfaces\SeoInterface; use Uwil\Seo\Laravel\Traits\SeoTrait; use Uwil\Seo\Laravel\Objects\SeoItem; use Spatie\Sitemap\Contracts\Sitemapable; -use Spatie\Sitemap\Tags\Url; use Uwil\SitemapGenerator\Lib\SitemapHelper; /** @@ -44,6 +44,7 @@ class Recipe extends Model implements SeoInterface, Sitemapable use ActivityLog; use HasFactory; use SeoTrait; + use Searchable; /** * The attributes that are mass assignable. @@ -85,6 +86,16 @@ class Recipe extends Model implements SeoInterface, Sitemapable 'published' => 'boolean', ]; + /** + * Get model's setting to apply on scout search (meilisearch). + * + * @return array + */ + public static $searchSettings = [ + 'filterableAttributes' => ['title', 'preparation', 'advice'], + 'sortableAttributes' => ['title', 'preparation', 'advice'] + ]; + /** * Perform any actions required after the model boots. * @@ -239,14 +250,21 @@ class Recipe extends Model implements SeoInterface, Sitemapable /** * toSitemapTag method * - * @return Url|string|array + * @return \Spatie\Sitemap\Tags\Url|string|array */ - public function toSitemapTag(): Url | string | array + public function toSitemapTag(): \Spatie\Sitemap\Tags\Url|string|array { - $model = $this; - $route = 'fo.recipes.show'; - $params = ['slug' => $model->slug]; - return SitemapHelper::generateUrl($route, $params, $model); + return SitemapHelper::generateUrl('fo.recipes.show', ['slug' => $this->slug], $this); + } + + /** + * Determine if the model should be searchable. + * + * @return boolean + */ + public function shouldBeSearchable(): bool + { + return $this->published === true; } // * RELATIONSHIPS diff --git a/composer.json b/composer.json index f8541b13..063a70b7 100644 --- a/composer.json +++ b/composer.json @@ -19,12 +19,15 @@ "carlos-meneses/laravel-mpdf": "^2.1", "diglactic/laravel-breadcrumbs": "^9.0", "guzzlehttp/guzzle": "^7.2", + "http-interop/http-factory-guzzle": "^1.2", "laravel/framework": "^11.0", "laravel/octane": "^2.5", + "laravel/scout": "^10.11", "laravel/tinker": "^2.8", "laravel/ui": "^4.2", "ldc/ldccrmv4client": "^4.0", "league/csv": "^9.16", + "meilisearch/meilisearch-php": "^1.11", "mews/purifier": "^3.4", "mobiledetect/mobiledetectlib": "^4.8", "moneyphp/money": "^4.5", diff --git a/composer.lock b/composer.lock index 6e96768b..8cb0ca64 100644 --- a/composer.lock +++ b/composer.lock @@ -40,26 +40,20 @@ "aliases": { "Saml2": "Slides\\Saml2\\Facades\\Auth" }, - "providers": [ - "Slides\\Saml2\\ServiceProvider" - ] + "providers": ["Slides\\Saml2\\ServiceProvider"] }, "branch-aliases": { "dev-master": "2.0.8-dev" } }, "autoload": { - "files": [ - "src/helpers.php" - ], + "files": ["src/helpers.php"], "psr-4": { "Slides\\Saml2\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Artem Brezhnev", @@ -68,13 +62,7 @@ ], "description": "SAML2 Service Provider integration to your Laravel 5.4+ application, based on OneLogin toolkit", "homepage": "https://github.com/24slides/laravel-saml2", - "keywords": [ - "SAML2", - "SSO", - "laravel", - "onelogin", - "saml" - ], + "keywords": ["SAML2", "SSO", "laravel", "onelogin", "saml"], "support": { "issues": "https://github.com/24Slides/laravel-saml2/issues", "source": "https://github.com/24Slides/laravel-saml2/tree/2.4.0" @@ -123,9 +111,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Choraimy Kroonstuiver", @@ -176,9 +162,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "Arbitrary-precision arithmetic library", "keywords": [ "Arbitrary-precision", @@ -239,9 +223,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "KyleKatarn", @@ -249,13 +231,7 @@ } ], "description": "Types to use Carbon in Doctrine", - "keywords": [ - "carbon", - "date", - "datetime", - "doctrine", - "time" - ], + "keywords": ["carbon", "date", "datetime", "doctrine", "time"], "support": { "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" @@ -311,15 +287,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "Laravel Mpdf: Using Mpdf in Laravel to generate Pdfs.", - "keywords": [ - "laravel", - "mpdf", - "pdf" - ], + "keywords": ["laravel", "mpdf", "pdf"], "support": { "issues": "https://github.com/mccarlosen/laravel-mpdf/issues", "source": "https://github.com/mccarlosen/laravel-mpdf/tree/2.1.13" @@ -368,9 +338,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Dragonfly Development Inc.", @@ -395,12 +363,7 @@ ], "description": "Given a deep data structure, access data by dot notation.", "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": [ - "access", - "data", - "dot", - "notation" - ], + "keywords": ["access", "data", "dot", "notation"], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" @@ -438,9 +401,7 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Diglactic\\Breadcrumbs\\ServiceProvider" - ], + "providers": ["Diglactic\\Breadcrumbs\\ServiceProvider"], "aliases": { "Breadcrumbs": "Diglactic\\Breadcrumbs\\Breadcrumbs" } @@ -452,9 +413,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Sheng Slogar", @@ -469,9 +428,7 @@ ], "description": "A simple Laravel-style way to create breadcrumbs.", "homepage": "https://github.com/diglactic/laravel-breadcrumbs", - "keywords": [ - "laravel" - ], + "keywords": ["laravel"], "support": { "issues": "https://github.com/diglactic/laravel-breadcrumbs/issues", "source": "https://github.com/diglactic/laravel-breadcrumbs/tree/v9.0.0" @@ -510,9 +467,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Guilherme Blanco", @@ -600,9 +555,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Guilherme Blanco", @@ -619,13 +572,7 @@ ], "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], + "keywords": ["annotations", "docblock", "lexer", "parser", "php"], "support": { "issues": "https://github.com/doctrine/lexer/issues", "source": "https://github.com/doctrine/lexer/tree/3.0.1" @@ -684,9 +631,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Chris Tankersley", @@ -695,10 +640,7 @@ } ], "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], + "keywords": ["cron", "schedule"], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" @@ -742,9 +684,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "dxw", @@ -789,9 +729,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Mallory Adams", @@ -845,9 +783,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Eduardo Gulias Davis" @@ -903,20 +839,14 @@ }, "type": "library", "autoload": { - "files": [ - "library/HTMLPurifier.composer.php" - ], + "files": ["library/HTMLPurifier.composer.php"], "psr-0": { "HTMLPurifier": "library/" }, - "exclude-from-classmap": [ - "/library/HTMLPurifier/Language/" - ] + "exclude-from-classmap": ["/library/HTMLPurifier/Language/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], + "license": ["LGPL-2.1-or-later"], "authors": [ { "name": "Edward Z. Yang", @@ -926,9 +856,7 @@ ], "description": "Standards compliant HTML filter written in PHP", "homepage": "http://htmlpurifier.org/", - "keywords": [ - "html" - ], + "keywords": ["html"], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" @@ -964,9 +892,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Freek Van der Herten", @@ -977,11 +903,7 @@ ], "description": "Solution contracts for Ignition", "homepage": "https://github.com/facade/ignition-contracts", - "keywords": [ - "contracts", - "flare", - "ignition" - ], + "keywords": ["contracts", "flare", "ignition"], "support": { "issues": "https://github.com/facade/ignition-contracts/issues", "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" @@ -1023,9 +945,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fruitcake", @@ -1038,11 +958,7 @@ ], "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", "homepage": "https://github.com/fruitcake/php-cors", - "keywords": [ - "cors", - "laravel", - "symfony" - ], + "keywords": ["cors", "laravel", "symfony"], "support": { "issues": "https://github.com/fruitcake/php-cors/issues", "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" @@ -1116,9 +1032,7 @@ ] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], + "license": ["Apache-2.0"], "authors": [ { "name": "Joshua Gigg", @@ -1170,9 +1084,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Graham Campbell", @@ -1250,17 +1162,13 @@ } }, "autoload": { - "files": [ - "src/functions_include.php" - ], + "files": ["src/functions_include.php"], "psr-4": { "GuzzleHttp\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Graham Campbell", @@ -1364,9 +1272,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Graham Campbell", @@ -1390,9 +1296,7 @@ } ], "description": "Guzzle promises library", - "keywords": [ - "promise" - ], + "keywords": ["promise"], "support": { "issues": "https://github.com/guzzle/promises/issues", "source": "https://github.com/guzzle/promises/tree/2.0.4" @@ -1458,9 +1362,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Graham Campbell", @@ -1565,9 +1467,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Graham Campbell", @@ -1591,10 +1491,7 @@ } ], "description": "A polyfill class for uri_template of PHP", - "keywords": [ - "guzzlehttp", - "uri-template" - ], + "keywords": ["guzzlehttp", "uri-template"], "support": { "issues": "https://github.com/guzzle/uri-template/issues", "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" @@ -1615,6 +1512,57 @@ ], "time": "2023-12-03T19:50:20+00:00" }, + { + "name": "http-interop/http-factory-guzzle", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/http-interop/http-factory-guzzle.git", + "reference": "8f06e92b95405216b237521cc64c804dd44c4a81" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81", + "reference": "8f06e92b95405216b237521cc64c804dd44c4a81", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^1.7||^2.0", + "php": ">=7.3", + "psr/http-factory": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "^1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^9.5" + }, + "suggest": { + "guzzlehttp/psr7": "Includes an HTTP factory starting in version 2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Factory\\Guzzle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "An HTTP Factory using Guzzle PSR7", + "keywords": ["factory", "http", "psr-17", "psr-7"], + "support": { + "issues": "https://github.com/http-interop/http-factory-guzzle/issues", + "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0" + }, + "time": "2021-07-21T13:50:14+00:00" + }, { "name": "intervention/gif", "version": "4.2.0", @@ -1645,9 +1593,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Oliver Vogel", @@ -1657,12 +1603,7 @@ ], "description": "Native PHP GIF Encoder/Decoder", "homepage": "https://github.com/intervention/gif", - "keywords": [ - "animation", - "gd", - "gif", - "image" - ], + "keywords": ["animation", "gd", "gif", "image"], "support": { "issues": "https://github.com/Intervention/gif/issues", "source": "https://github.com/Intervention/gif/tree/4.2.0" @@ -1719,9 +1660,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Oliver Vogel", @@ -1796,9 +1735,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Alessandro Lai", @@ -1806,12 +1743,7 @@ } ], "description": "A library to get pretty versions strings of installed dependencies", - "keywords": [ - "composer", - "package", - "release", - "versions" - ], + "keywords": ["composer", "package", "release", "versions"], "support": { "issues": "https://github.com/Jean85/pretty-package-versions/issues", "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6" @@ -1857,9 +1789,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Jérémy Munsch", @@ -1869,11 +1799,7 @@ ], "description": "Resize images on the fly and cache them", "homepage": "https://github.com/kwaadpepper/image-resizer", - "keywords": [ - "images", - "laravel", - "resize" - ], + "keywords": ["images", "laravel", "resize"], "support": { "issues": "https://github.com/Kwaadpepper/image-resizer/issues", "source": "https://github.com/Kwaadpepper/image-resizer/tree/3.0.2" @@ -1940,18 +1866,10 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "description": "PSR HTTP Message implementations", "homepage": "https://laminas.dev", - "keywords": [ - "http", - "laminas", - "psr", - "psr-17", - "psr-7" - ], + "keywords": ["http", "laminas", "psr", "psr-17", "psr-7"], "support": { "chat": "https://laminas.dev/chat", "docs": "https://docs.laminas.dev/laminas-diactoros/", @@ -2156,9 +2074,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Taylor Otwell", @@ -2167,10 +2083,7 @@ ], "description": "The Laravel Framework.", "homepage": "https://laravel.com", - "keywords": [ - "framework", - "laravel" - ], + "keywords": ["framework", "laravel"], "support": { "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" @@ -2220,19 +2133,14 @@ "spiral/roadrunner-cli": "^2.6.0", "spiral/roadrunner-http": "^3.3.0" }, - "bin": [ - "bin/roadrunner-worker", - "bin/swoole-server" - ], + "bin": ["bin/roadrunner-worker", "bin/swoole-server"], "type": "library", "extra": { "branch-alias": { "dev-master": "2.x-dev" }, "laravel": { - "providers": [ - "Laravel\\Octane\\OctaneServiceProvider" - ], + "providers": ["Laravel\\Octane\\OctaneServiceProvider"], "aliases": { "Octane": "Laravel\\Octane\\Facades\\Octane" } @@ -2244,9 +2152,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Taylor Otwell", @@ -2308,17 +2214,13 @@ } }, "autoload": { - "files": [ - "src/helpers.php" - ], + "files": ["src/helpers.php"], "psr-4": { "Laravel\\Prompts\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", @@ -2326,6 +2228,79 @@ }, "time": "2024-11-12T14:59:47+00:00" }, + { + "name": "laravel/scout", + "version": "v10.11.7", + "source": { + "type": "git", + "url": "https://github.com/laravel/scout.git", + "reference": "d4c0bbc41f52b4bf315914cfc7046fd485e8d92d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/scout/zipball/d4c0bbc41f52b4bf315914cfc7046fd485e8d92d", + "reference": "d4c0bbc41f52b4bf315914cfc7046fd485e8d92d", + "shasum": "" + }, + "require": { + "illuminate/bus": "^9.0|^10.0|^11.0", + "illuminate/contracts": "^9.0|^10.0|^11.0", + "illuminate/database": "^9.0|^10.0|^11.0", + "illuminate/http": "^9.0|^10.0|^11.0", + "illuminate/pagination": "^9.0|^10.0|^11.0", + "illuminate/queue": "^9.0|^10.0|^11.0", + "illuminate/support": "^9.0|^10.0|^11.0", + "php": "^8.0", + "symfony/console": "^6.0|^7.0" + }, + "conflict": { + "algolia/algoliasearch-client-php": "<3.2.0|>=5.0.0" + }, + "require-dev": { + "algolia/algoliasearch-client-php": "^3.2|^4.0", + "meilisearch/meilisearch-php": "^1.0", + "mockery/mockery": "^1.0", + "orchestra/testbench": "^7.31|^8.11|^9.0", + "php-http/guzzle7-adapter": "^1.0", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.3|^10.4", + "typesense/typesense-php": "^4.9.3" + }, + "suggest": { + "algolia/algoliasearch-client-php": "Required to use the Algolia engine (^3.2).", + "meilisearch/meilisearch-php": "Required to use the Meilisearch engine (^1.0).", + "typesense/typesense-php": "Required to use the Typesense engine (^4.9)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + }, + "laravel": { + "providers": ["Laravel\\Scout\\ScoutServiceProvider"] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Scout\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Scout provides a driver based solution to searching your Eloquent models.", + "keywords": ["algolia", "laravel", "search"], + "support": { + "issues": "https://github.com/laravel/scout/issues", + "source": "https://github.com/laravel/scout" + }, + "time": "2024-11-13T09:41:16+00:00" + }, { "name": "laravel/serializable-closure", "version": "v1.3.6", @@ -2362,9 +2337,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Taylor Otwell", @@ -2376,11 +2349,7 @@ } ], "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", - "keywords": [ - "closure", - "laravel", - "serializable" - ], + "keywords": ["closure", "laravel", "serializable"], "support": { "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" @@ -2420,9 +2389,7 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Laravel\\Tinker\\TinkerServiceProvider" - ] + "providers": ["Laravel\\Tinker\\TinkerServiceProvider"] } }, "autoload": { @@ -2431,9 +2398,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Taylor Otwell", @@ -2441,12 +2406,7 @@ } ], "description": "Powerful REPL for the Laravel framework.", - "keywords": [ - "REPL", - "Tinker", - "laravel", - "psysh" - ], + "keywords": ["REPL", "Tinker", "laravel", "psysh"], "support": { "issues": "https://github.com/laravel/tinker/issues", "source": "https://github.com/laravel/tinker/tree/v2.10.0" @@ -2485,9 +2445,7 @@ "dev-master": "4.x-dev" }, "laravel": { - "providers": [ - "Laravel\\Ui\\UiServiceProvider" - ] + "providers": ["Laravel\\Ui\\UiServiceProvider"] } }, "autoload": { @@ -2497,9 +2455,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Taylor Otwell", @@ -2507,10 +2463,7 @@ } ], "description": "Laravel UI utilities and presets.", - "keywords": [ - "laravel", - "ui" - ], + "keywords": ["laravel", "ui"], "support": { "source": "https://github.com/laravel/ui/tree/v4.5.2" }, @@ -2554,9 +2507,7 @@ "LDC\\LDCCRM\\Tests\\": "tests" } }, - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Jérémy Munsch", @@ -2566,12 +2517,7 @@ ], "description": "LDC CRM Client V4", "homepage": "https://github.com/kwaadpepper", - "keywords": [ - "CRM", - "Client", - "LDC", - "Laravel" - ] + "keywords": ["CRM", "Client", "LDC", "Laravel"] }, { "name": "league/commonmark", @@ -2629,9 +2575,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Colin O'Dell", @@ -2717,9 +2661,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Colin O'Dell", @@ -2803,17 +2745,13 @@ } }, "autoload": { - "files": [ - "src/functions_include.php" - ], + "files": ["src/functions_include.php"], "psr-4": { "League\\Csv\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Ignace Nyamagana Butera", @@ -2902,9 +2840,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Frank de Jonge", @@ -2958,9 +2894,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Frank de Jonge", @@ -2968,13 +2902,7 @@ } ], "description": "Local filesystem adapter for Flysystem.", - "keywords": [ - "Flysystem", - "file", - "files", - "filesystem", - "local" - ], + "keywords": ["Flysystem", "file", "files", "filesystem", "local"], "support": { "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0" }, @@ -3010,9 +2938,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Frank de Jonge", @@ -3069,9 +2995,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Matt Butcher", @@ -3103,6 +3027,71 @@ }, "time": "2024-03-31T07:05:07+00:00" }, + { + "name": "meilisearch/meilisearch-php", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/meilisearch/meilisearch-php.git", + "reference": "4dd127cb87848f7a7b28e83bb355b4b86d329867" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/meilisearch/meilisearch-php/zipball/4dd127cb87848f7a7b28e83bb355b4b86d329867", + "reference": "4dd127cb87848f7a7b28e83bb355b4b86d329867", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4 || ^8.0", + "php-http/discovery": "^1.7", + "psr/http-client": "^1.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.8.1", + "http-interop/http-factory-guzzle": "^1.2.0", + "php-cs-fixer/shim": "^3.59.3", + "phpstan/extension-installer": "^1.4.1", + "phpstan/phpstan": "^1.11.5", + "phpstan/phpstan-deprecation-rules": "^1.2.0", + "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-strict-rules": "^1.6.0", + "phpunit/phpunit": "^9.5 || ^10.5" + }, + "suggest": { + "guzzlehttp/guzzle": "Use Guzzle ^7 as HTTP client", + "http-interop/http-factory-guzzle": "Factory for guzzlehttp/guzzle" + }, + "type": "library", + "autoload": { + "psr-4": { + "MeiliSearch\\": "src/", + "Meilisearch\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "Clementine", + "email": "clementine@meilisearch.com" + } + ], + "description": "PHP wrapper for the Meilisearch API", + "keywords": [ + "api", + "client", + "instant", + "meilisearch", + "php", + "search" + ], + "support": { + "issues": "https://github.com/meilisearch/meilisearch-php/issues", + "source": "https://github.com/meilisearch/meilisearch-php/tree/v1.11.0" + }, + "time": "2024-10-28T14:04:37+00:00" + }, { "name": "mews/purifier", "version": "3.4.2", @@ -3136,26 +3125,20 @@ "type": "package", "extra": { "laravel": { - "providers": [ - "Mews\\Purifier\\PurifierServiceProvider" - ], + "providers": ["Mews\\Purifier\\PurifierServiceProvider"], "aliases": { "Purifier": "Mews\\Purifier\\Facades\\Purifier" } } }, "autoload": { - "files": [ - "src/helpers.php" - ], + "files": ["src/helpers.php"], "psr-4": { "Mews\\Purifier\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Muharrem ERİN", @@ -3213,9 +3196,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Serban Ghita", @@ -3302,9 +3283,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Mathias Verraes", @@ -3322,11 +3301,7 @@ ], "description": "PHP implementation of Fowler's Money pattern", "homepage": "http://moneyphp.org", - "keywords": [ - "Value Object", - "money", - "vo" - ], + "keywords": ["Value Object", "money", "vo"], "support": { "issues": "https://github.com/moneyphp/money/issues", "source": "https://github.com/moneyphp/money/tree/v4.5.1" @@ -3403,9 +3378,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Jordi Boggiano", @@ -3415,11 +3388,7 @@ ], "description": "Sends your logs to files, sockets, inboxes, databases and various web services", "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], + "keywords": ["log", "logging", "psr-3"], "support": { "issues": "https://github.com/Seldaek/monolog/issues", "source": "https://github.com/Seldaek/monolog/tree/3.8.0" @@ -3476,17 +3445,13 @@ }, "type": "library", "autoload": { - "files": [ - "src/functions.php" - ], + "files": ["src/functions.php"], "psr-4": { "Mpdf\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-only" - ], + "license": ["GPL-2.0-only"], "authors": [ { "name": "Matěj Humpál", @@ -3499,11 +3464,7 @@ ], "description": "PHP library generating PDF files from UTF-8 encoded HTML", "homepage": "https://mpdf.github.io", - "keywords": [ - "pdf", - "php", - "utf-8" - ], + "keywords": ["pdf", "php", "utf-8"], "support": { "docs": "http://mpdf.github.io", "issues": "https://github.com/mpdf/mpdf/issues", @@ -3541,9 +3502,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Mark Dorison", @@ -3589,9 +3548,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Mark Dorison", @@ -3638,17 +3595,13 @@ }, "type": "library", "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], + "files": ["src/DeepCopy/deep_copy.php"], "psr-4": { "DeepCopy\\": "src/DeepCopy/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "Create deep copies (clones) of your objects", "keywords": [ "clone", @@ -3707,9 +3660,7 @@ "phpunit/phpunit": "^10.5.20", "squizlabs/php_codesniffer": "^3.9.0" }, - "bin": [ - "bin/carbon" - ], + "bin": ["bin/carbon"], "type": "library", "extra": { "branch-alias": { @@ -3717,14 +3668,10 @@ "dev-2.x": "2.x-dev" }, "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] + "providers": ["Carbon\\Laravel\\ServiceProvider"] }, "phpstan": { - "includes": [ - "extension.neon" - ] + "includes": ["extension.neon"] } }, "autoload": { @@ -3733,9 +3680,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Brian Nesbitt", @@ -3749,11 +3694,7 @@ ], "description": "An API extension for DateTime that supports 281 different languages.", "homepage": "https://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], + "keywords": ["date", "datetime", "time"], "support": { "docs": "https://carbon.nesbot.com/docs", "issues": "https://github.com/briannesbitt/Carbon/issues", @@ -3805,16 +3746,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], + "license": ["BSD-3-Clause", "GPL-2.0-only", "GPL-3.0-only"], "authors": [ { "name": "David Grudl", @@ -3827,10 +3762,7 @@ ], "description": "📐 Nette Schema: validating data structures against a given Schema.", "homepage": "https://nette.org", - "keywords": [ - "config", - "nette" - ], + "keywords": ["config", "nette"], "support": { "issues": "https://github.com/nette/schema/issues", "source": "https://github.com/nette/schema/tree/v1.3.2" @@ -3879,16 +3811,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], + "license": ["BSD-3-Clause", "GPL-2.0-only", "GPL-3.0-only"], "authors": [ { "name": "David Grudl", @@ -3957,9 +3883,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolò Martini", @@ -4001,9 +3925,7 @@ "ircmaxell/php-yacc": "^0.0.7", "phpunit/phpunit": "^9.0" }, - "bin": [ - "bin/php-parse" - ], + "bin": ["bin/php-parse"], "type": "library", "extra": { "branch-alias": { @@ -4016,19 +3938,14 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Nikita Popov" } ], "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], + "keywords": ["parser", "php"], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" @@ -4067,26 +3984,20 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Termwind\\Laravel\\TermwindServiceProvider" - ] + "providers": ["Termwind\\Laravel\\TermwindServiceProvider"] }, "branch-alias": { "dev-2.x": "2.x-dev" } }, "autoload": { - "files": [ - "src/Functions.php" - ], + "files": ["src/Functions.php"], "psr-4": { "Termwind\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nuno Maduro", @@ -4094,14 +4005,7 @@ } ], "description": "Its like Tailwind CSS, but for the console.", - "keywords": [ - "cli", - "console", - "css", - "package", - "php", - "style" - ], + "keywords": ["cli", "console", "css", "package", "php", "style"], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", "source": "https://github.com/nunomaduro/termwind/tree/v2.2.0" @@ -4165,9 +4069,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Tobias Nyholm", @@ -4180,10 +4082,7 @@ ], "description": "A fast PHP7 implementation of PSR-7", "homepage": "https://tnyholm.se", - "keywords": [ - "psr-17", - "psr-7" - ], + "keywords": ["psr-17", "psr-7"], "support": { "issues": "https://github.com/Nyholm/psr7/issues", "source": "https://github.com/Nyholm/psr7/tree/1.8.2" @@ -4239,18 +4138,10 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "PHP SAML Toolkit", "homepage": "https://github.com/SAML-Toolkits/php-saml", - "keywords": [ - "Federation", - "SAML2", - "SSO", - "identity", - "saml" - ], + "keywords": ["Federation", "SAML2", "SSO", "identity", "saml"], "support": { "email": "sixto.martin.garcia@gmail.com", "issues": "https://github.com/onelogin/SAML-Toolkits/issues", @@ -4290,9 +4181,7 @@ }, "type": "library", "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Paragon Initiative Enterprises", @@ -4301,12 +4190,7 @@ } ], "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], + "keywords": ["csprng", "polyfill", "pseudorandom", "random"], "support": { "email": "info@paragonie.com", "issues": "https://github.com/paragonie/random_compat/issues", @@ -4314,6 +4198,81 @@ }, "time": "2020-10-15T08:29:30+00:00" }, + { + "name": "php-http/discovery", + "version": "1.20.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "*", + "psr/http-factory-implementation": "*", + "psr/http-message-implementation": "*" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", + "sebastian/comparator": "^3.0.5 || ^4.0.8", + "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" + }, + "type": "composer-plugin", + "extra": { + "class": "Http\\Discovery\\Composer\\Plugin", + "plugin-optional": true + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + }, + "exclude-from-classmap": ["src/Composer/Plugin.php"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr17", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.20.0" + }, + "time": "2024-10-02T11:20:13+00:00" + }, { "name": "phpoption/phpoption", "version": "1.9.3", @@ -4351,9 +4310,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], + "license": ["Apache-2.0"], "authors": [ { "name": "Johannes M. Schmitt", @@ -4367,12 +4324,7 @@ } ], "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], + "keywords": ["language", "option", "php", "type"], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" @@ -4420,17 +4372,13 @@ }, "type": "library", "autoload": { - "files": [ - "phpseclib/bootstrap.php" - ], + "files": ["phpseclib/bootstrap.php"], "psr-4": { "phpseclib\\": "phpseclib/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Jim Wigginton", @@ -4535,17 +4483,13 @@ } }, "autoload": { - "files": [ - "src/helpers.php" - ], + "files": ["src/helpers.php"], "psr-4": { "Propaganistas\\LaravelPhone\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Propaganistas", @@ -4553,12 +4497,7 @@ } ], "description": "Adds phone number functionality to Laravel based on Google's libphonenumber API.", - "keywords": [ - "laravel", - "libphonenumber", - "phone", - "validation" - ], + "keywords": ["laravel", "libphonenumber", "phone", "validation"], "support": { "issues": "https://github.com/Propaganistas/Laravel-Phone/issues", "source": "https://github.com/Propaganistas/Laravel-Phone/tree/5.3.2" @@ -4595,9 +4534,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -4606,13 +4543,7 @@ ], "description": "Common interface for reading the clock.", "homepage": "https://github.com/php-fig/clock", - "keywords": [ - "clock", - "now", - "psr", - "psr-20", - "time" - ], + "keywords": ["clock", "now", "psr", "psr-20", "time"], "support": { "issues": "https://github.com/php-fig/clock/issues", "source": "https://github.com/php-fig/clock/tree/1.0.0" @@ -4648,9 +4579,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -4701,9 +4630,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -4711,11 +4638,7 @@ } ], "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], + "keywords": ["events", "psr", "psr-14"], "support": { "issues": "https://github.com/php-fig/event-dispatcher/issues", "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" @@ -4752,9 +4675,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -4763,12 +4684,7 @@ ], "description": "Common interface for HTTP clients", "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], + "keywords": ["http", "http-client", "psr", "psr-18"], "support": { "source": "https://github.com/php-fig/http-client" }, @@ -4804,9 +4720,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -4858,9 +4772,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -4911,9 +4823,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -4922,11 +4832,7 @@ ], "description": "Common interface for logging libraries", "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], + "keywords": ["log", "psr", "psr-3"], "support": { "source": "https://github.com/php-fig/log/tree/3.0.2" }, @@ -4961,9 +4867,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "PHP-FIG", @@ -4971,13 +4875,7 @@ } ], "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], + "keywords": ["cache", "caching", "psr", "psr-16", "simple-cache"], "support": { "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" }, @@ -5016,9 +4914,7 @@ "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, - "bin": [ - "bin/psysh" - ], + "bin": ["bin/psysh"], "type": "library", "extra": { "branch-alias": { @@ -5030,17 +4926,13 @@ } }, "autoload": { - "files": [ - "src/functions.php" - ], + "files": ["src/functions.php"], "psr-4": { "Psy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Justin Hileman", @@ -5050,12 +4942,7 @@ ], "description": "An interactive shell for modern PHP.", "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], + "keywords": ["REPL", "console", "interactive", "shell"], "support": { "issues": "https://github.com/bobthecow/psysh/issues", "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" @@ -5085,14 +4972,10 @@ }, "type": "library", "autoload": { - "files": [ - "src/getallheaders.php" - ] + "files": ["src/getallheaders.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Ralph Khattar", @@ -5160,9 +5043,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Ben Ramsey", @@ -5171,14 +5052,7 @@ } ], "description": "A PHP library for representing and manipulating collections.", - "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" - ], + "keywords": ["array", "collection", "hash", "map", "queue", "set"], "support": { "issues": "https://github.com/ramsey/collection/issues", "source": "https://github.com/ramsey/collection/tree/2.0.0" @@ -5254,23 +5128,15 @@ } }, "autoload": { - "files": [ - "src/functions.php" - ], + "files": ["src/functions.php"], "psr-4": { "Ramsey\\Uuid\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "keywords": [ - "guid", - "identifier", - "uuid" - ], + "keywords": ["guid", "identifier", "uuid"], "support": { "issues": "https://github.com/ramsey/uuid/issues", "source": "https://github.com/ramsey/uuid/tree/4.7.6" @@ -5311,17 +5177,13 @@ }, "type": "library", "autoload": { - "files": [ - "src/stringify.php" - ], + "files": ["src/stringify.php"], "psr-4": { "Respect\\Stringifier\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Respect/Stringifier Contributors", @@ -5330,11 +5192,7 @@ ], "description": "Converts any value to a string", "homepage": "http://respect.github.io/Stringifier/", - "keywords": [ - "respect", - "stringifier", - "stringify" - ], + "keywords": ["respect", "stringifier", "stringify"], "support": { "issues": "https://github.com/Respect/Stringifier/issues", "source": "https://github.com/Respect/Stringifier/tree/0.2.0" @@ -5387,9 +5245,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Respect/Validation Contributors", @@ -5398,11 +5254,7 @@ ], "description": "The most awesome validation engine ever created for PHP", "homepage": "http://respect.github.io/Validation/", - "keywords": [ - "respect", - "validation", - "validator" - ], + "keywords": ["respect", "validation", "validator"], "support": { "issues": "https://github.com/Respect/Validation/issues", "source": "https://github.com/Respect/Validation/tree/2.3.7" @@ -5434,17 +5286,10 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "description": "A PHP library for XML Security", "homepage": "https://github.com/robrichards/xmlseclibs", - "keywords": [ - "security", - "signature", - "xml", - "xmldsig" - ], + "keywords": ["security", "signature", "xml", "xmldsig"], "support": { "issues": "https://github.com/robrichards/xmlseclibs/issues", "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.1" @@ -5494,17 +5339,13 @@ }, "type": "library", "autoload": { - "files": [ - "src/functions.php" - ], + "files": ["src/functions.php"], "psr-4": { "Sentry\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Sentry", @@ -5590,9 +5431,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Sentry", @@ -5667,9 +5506,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Jan Slabon", @@ -5684,11 +5521,7 @@ ], "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.", "homepage": "https://www.setasign.com/fpdi", - "keywords": [ - "fpdf", - "fpdi", - "pdf" - ], + "keywords": ["fpdf", "fpdi", "pdf"], "support": { "issues": "https://github.com/Setasign/FPDI/issues", "source": "https://github.com/Setasign/FPDI/tree/v2.6.1" @@ -5728,9 +5561,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "AGPL-3.0" - ], + "license": ["AGPL-3.0"], "authors": [ { "name": "snipe", @@ -5740,13 +5571,7 @@ ], "description": "Library to easily handle profanity filtering in PHP projects.", "homepage": "http://banbuilder.com", - "keywords": [ - "filter", - "language", - "profanity", - "strings", - "swear" - ], + "keywords": ["filter", "language", "profanity", "strings", "swear"], "support": { "issues": "https://github.com/snipe/banbuilder/issues", "source": "https://github.com/snipe/banbuilder/tree/2.3.0" @@ -5787,9 +5612,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Freek Van der Herten", @@ -5856,9 +5679,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Freek Van der Herten", @@ -5867,12 +5688,7 @@ ], "description": "Crawl all internal links found on a website", "homepage": "https://github.com/spatie/crawler", - "keywords": [ - "crawler", - "link", - "spatie", - "website" - ], + "keywords": ["crawler", "link", "spatie", "website"], "support": { "issues": "https://github.com/spatie/crawler/issues", "source": "https://github.com/spatie/crawler/tree/8.2.3" @@ -5921,9 +5737,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Freek Van der Herten", @@ -5933,10 +5747,7 @@ ], "description": "Tools for creating Laravel packages", "homepage": "https://github.com/spatie/laravel-package-tools", - "keywords": [ - "laravel-package-tools", - "spatie" - ], + "keywords": ["laravel-package-tools", "spatie"], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.5" @@ -5983,9 +5794,7 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Spatie\\Sitemap\\SitemapServiceProvider" - ] + "providers": ["Spatie\\Sitemap\\SitemapServiceProvider"] } }, "autoload": { @@ -5994,9 +5803,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Freek Van der Herten", @@ -6007,10 +5814,7 @@ ], "description": "Create and generate sitemaps with ease", "homepage": "https://github.com/spatie/laravel-sitemap", - "keywords": [ - "laravel-sitemap", - "spatie" - ], + "keywords": ["laravel-sitemap", "spatie"], "support": { "source": "https://github.com/spatie/laravel-sitemap/tree/7.2.1" }, @@ -6049,9 +5853,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Brent Roose", @@ -6062,10 +5864,7 @@ ], "description": "Determine if a page may be crawled from robots.txt and robots meta tags", "homepage": "https://github.com/spatie/robots-txt", - "keywords": [ - "robots-txt", - "spatie" - ], + "keywords": ["robots-txt", "spatie"], "support": { "issues": "https://github.com/spatie/robots-txt/issues", "source": "https://github.com/spatie/robots-txt/tree/2.2.3" @@ -6109,9 +5908,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Alex Vanderbist", @@ -6122,11 +5919,7 @@ ], "description": "Easily create, use and destroy temporary directories", "homepage": "https://github.com/spatie/temporary-directory", - "keywords": [ - "php", - "spatie", - "temporary-directory" - ], + "keywords": ["php", "spatie", "temporary-directory"], "support": { "issues": "https://github.com/spatie/temporary-directory/issues", "source": "https://github.com/spatie/temporary-directory/tree/2.2.1" @@ -6167,20 +5960,14 @@ }, "type": "library", "autoload": { - "files": [ - "Resources/now.php" - ], + "files": ["Resources/now.php"], "psr-4": { "Symfony\\Component\\Clock\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -6193,11 +5980,7 @@ ], "description": "Decouples applications from the system clock", "homepage": "https://symfony.com", - "keywords": [ - "clock", - "psr20", - "time" - ], + "keywords": ["clock", "psr20", "time"], "support": { "source": "https://github.com/symfony/clock/tree/v7.1.6" }, @@ -6265,14 +6048,10 @@ "psr-4": { "Symfony\\Component\\Console\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -6285,12 +6064,7 @@ ], "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], + "keywords": ["cli", "command-line", "console", "terminal"], "support": { "source": "https://github.com/symfony/console/tree/v7.1.8" }, @@ -6332,14 +6106,10 @@ "psr-4": { "Symfony\\Component\\CssSelector\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -6403,14 +6173,10 @@ } }, "autoload": { - "files": [ - "function.php" - ] + "files": ["function.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -6470,14 +6236,10 @@ "psr-4": { "Symfony\\Component\\DomCrawler\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -6537,22 +6299,16 @@ "symfony/http-kernel": "^6.4|^7.0", "symfony/serializer": "^6.4|^7.0" }, - "bin": [ - "Resources/bin/patch-type-declarations" - ], + "bin": ["Resources/bin/patch-type-declarations"], "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\ErrorHandler\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -6625,14 +6381,10 @@ "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -6698,9 +6450,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -6765,14 +6515,10 @@ "psr-4": { "Symfony\\Component\\Finder\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -6842,14 +6588,10 @@ "psr-4": { "Symfony\\Component\\HttpFoundation\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -6956,14 +6698,10 @@ "psr-4": { "Symfony\\Component\\HttpKernel\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -7036,14 +6774,10 @@ "psr-4": { "Symfony\\Component\\Mailer\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -7116,14 +6850,10 @@ "psr-4": { "Symfony\\Component\\Mime\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -7136,10 +6866,7 @@ ], "description": "Allows manipulating MIME messages", "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ], + "keywords": ["mime", "mime-type"], "support": { "source": "https://github.com/symfony/mime/tree/v7.1.6" }, @@ -7182,14 +6909,10 @@ "psr-4": { "Symfony\\Component\\OptionsResolver\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -7202,11 +6925,7 @@ ], "description": "Provides an improved replacement for the array_replace PHP function", "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], + "keywords": ["config", "configuration", "options"], "support": { "source": "https://github.com/symfony/options-resolver/tree/v7.1.6" }, @@ -7257,17 +6976,13 @@ } }, "autoload": { - "files": [ - "bootstrap.php" - ], + "files": ["bootstrap.php"], "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Gert de Pagter", @@ -7280,12 +6995,7 @@ ], "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], + "keywords": ["compatibility", "ctype", "polyfill", "portable"], "support": { "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, @@ -7333,17 +7043,13 @@ } }, "autoload": { - "files": [ - "bootstrap.php" - ], + "files": ["bootstrap.php"], "psr-4": { "Symfony\\Polyfill\\Intl\\Grapheme\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -7412,17 +7118,13 @@ } }, "autoload": { - "files": [ - "bootstrap.php" - ], + "files": ["bootstrap.php"], "psr-4": { "Symfony\\Polyfill\\Intl\\Idn\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Laurent Bassin", @@ -7494,20 +7196,14 @@ } }, "autoload": { - "files": [ - "bootstrap.php" - ], + "files": ["bootstrap.php"], "psr-4": { "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, - "classmap": [ - "Resources/stubs" - ] + "classmap": ["Resources/stubs"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -7578,17 +7274,13 @@ } }, "autoload": { - "files": [ - "bootstrap.php" - ], + "files": ["bootstrap.php"], "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -7652,20 +7344,14 @@ } }, "autoload": { - "files": [ - "bootstrap.php" - ], + "files": ["bootstrap.php"], "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, - "classmap": [ - "Resources/stubs" - ] + "classmap": ["Resources/stubs"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Ion Bazan", @@ -7682,12 +7368,7 @@ ], "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "keywords": ["compatibility", "polyfill", "portable", "shim"], "support": { "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, @@ -7732,20 +7413,14 @@ } }, "autoload": { - "files": [ - "bootstrap.php" - ], + "files": ["bootstrap.php"], "psr-4": { "Symfony\\Polyfill\\Php83\\": "" }, - "classmap": [ - "Resources/stubs" - ] + "classmap": ["Resources/stubs"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -7758,12 +7433,7 @@ ], "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "keywords": ["compatibility", "polyfill", "portable", "shim"], "support": { "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" }, @@ -7814,17 +7484,13 @@ } }, "autoload": { - "files": [ - "bootstrap.php" - ], + "files": ["bootstrap.php"], "psr-4": { "Symfony\\Polyfill\\Uuid\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Grégoire Pineau", @@ -7837,12 +7503,7 @@ ], "description": "Symfony polyfill for uuid functions", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "uuid" - ], + "keywords": ["compatibility", "polyfill", "portable", "uuid"], "support": { "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" }, @@ -7884,14 +7545,10 @@ "psr-4": { "Symfony\\Component\\Process\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -7961,14 +7618,10 @@ "psr-4": { "Symfony\\Bridge\\PsrHttpMessage\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -7981,12 +7634,7 @@ ], "description": "PSR HTTP message bridge", "homepage": "https://symfony.com", - "keywords": [ - "http", - "http-message", - "psr-17", - "psr-7" - ], + "keywords": ["http", "http-message", "psr-17", "psr-7"], "support": { "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.6" }, @@ -8042,14 +7690,10 @@ "psr-4": { "Symfony\\Component\\Routing\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -8062,12 +7706,7 @@ ], "description": "Maps an HTTP request to a set of configuration variables", "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], + "keywords": ["router", "routing", "uri", "url"], "support": { "source": "https://github.com/symfony/routing/tree/v7.1.6" }, @@ -8123,14 +7762,10 @@ "psr-4": { "Symfony\\Contracts\\Service\\": "" }, - "exclude-from-classmap": [ - "/Test/" - ] + "exclude-from-classmap": ["/Test/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -8204,20 +7839,14 @@ }, "type": "library", "autoload": { - "files": [ - "Resources/functions.php" - ], + "files": ["Resources/functions.php"], "psr-4": { "Symfony\\Component\\String\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -8306,20 +7935,14 @@ }, "type": "library", "autoload": { - "files": [ - "Resources/functions.php" - ], + "files": ["Resources/functions.php"], "psr-4": { "Symfony\\Component\\Translation\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -8382,14 +8005,10 @@ "psr-4": { "Symfony\\Contracts\\Translation\\": "" }, - "exclude-from-classmap": [ - "/Test/" - ] + "exclude-from-classmap": ["/Test/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -8455,14 +8074,10 @@ "psr-4": { "Symfony\\Component\\Uid\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Grégoire Pineau", @@ -8479,11 +8094,7 @@ ], "description": "Provides an object-oriented API to generate and represent UIDs", "homepage": "https://symfony.com", - "keywords": [ - "UID", - "ulid", - "uuid" - ], + "keywords": ["UID", "ulid", "uuid"], "support": { "source": "https://github.com/symfony/uid/tree/v7.1.6" }, @@ -8532,25 +8143,17 @@ "symfony/uid": "^6.4|^7.0", "twig/twig": "^3.0.4" }, - "bin": [ - "Resources/bin/var-dump-server" - ], + "bin": ["Resources/bin/var-dump-server"], "type": "library", "autoload": { - "files": [ - "Resources/functions/dump.php" - ], + "files": ["Resources/functions/dump.php"], "psr-4": { "Symfony\\Component\\VarDumper\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -8563,10 +8166,7 @@ ], "description": "Provides mechanisms for walking through any arbitrary PHP variable", "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], + "keywords": ["debug", "dump"], "support": { "source": "https://github.com/symfony/var-dumper/tree/v7.1.8" }, @@ -8621,9 +8221,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Tijs Verkoyen", @@ -8687,16 +8285,12 @@ } }, "scripts": { - "test": [ - "vendor/bin/phpunit" - ], + "test": ["vendor/bin/phpunit"], "post-autoload-dump": [ "@php ./vendor/bin/testbench package:discover --ansi" ] }, - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Equipe Web", @@ -8735,9 +8329,7 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Uwil\\K8S\\Laravel\\K8SServiceProvider" - ] + "providers": ["Uwil\\K8S\\Laravel\\K8SServiceProvider"] } }, "autoload": { @@ -8751,16 +8343,12 @@ } }, "scripts": { - "test": [ - "vendor/bin/phpunit" - ], + "test": ["vendor/bin/phpunit"], "post-autoload-dump": [ "@php ./vendor/bin/testbench package:discover --ansi" ] }, - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Vincent BRIDIER", @@ -8807,9 +8395,7 @@ } }, "autoload": { - "files": [ - "src/Helpers/methods.php" - ], + "files": ["src/Helpers/methods.php"], "psr-4": { "Uwil\\Laravel\\Common\\": "src/" } @@ -8820,16 +8406,12 @@ } }, "scripts": { - "test": [ - "vendor/bin/phpunit" - ], + "test": ["vendor/bin/phpunit"], "post-autoload-dump": [ "@php ./vendor/bin/testbench package:discover --ansi" ] }, - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "UWIL Laravel common utils" }, { @@ -8869,15 +8451,9 @@ "Uwil\\Laravel\\Redirections\\": "src/" } }, - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "Redirect broken or old URLs in Laravel project.", - "keywords": [ - "laravel", - "redirect", - "uwil" - ], + "keywords": ["laravel", "redirect", "uwil"], "support": { "email": "equipe.web@ldc.fr", "issues": "https://lab.s-web.fr/ldc-web/projets/unit-tests-laravel/-/issues" @@ -8910,9 +8486,7 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Uwil\\Seo\\Laravel\\SeoServiceProvider" - ] + "providers": ["Uwil\\Seo\\Laravel\\SeoServiceProvider"] } }, "autoload": { @@ -8920,9 +8494,7 @@ "Uwil\\Seo\\Laravel\\": "src/" } }, - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Demangeat", @@ -9010,15 +8582,9 @@ "Uwil\\UnitTestsLaravel\\": "src/" } }, - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "Test CRUDs assertions in Laravel project.", - "keywords": [ - "laravel", - "tests", - "uwil" - ], + "keywords": ["laravel", "tests", "uwil"], "support": { "email": "equipe.web@ldc.fr", "issues": "https://lab.s-web.fr/ldc-web/projets/unit-tests-laravel/-/issues" @@ -9061,9 +8627,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Govert Verschuur", @@ -9071,11 +8635,7 @@ } ], "description": "Set the robots.txt content dynamically based on the Laravel app environment.", - "keywords": [ - "laravel", - "php", - "robots.txt" - ], + "keywords": ["laravel", "php", "robots.txt"], "support": { "issues": "https://github.com/verschuur/laravel-robotstxt/issues", "source": "https://github.com/verschuur/laravel-robotstxt/tree/5.1.0" @@ -9129,9 +8689,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Graham Campbell", @@ -9145,11 +8703,7 @@ } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], + "keywords": ["dotenv", "env", "environment"], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" @@ -9196,9 +8750,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Lars Moelleken", @@ -9207,11 +8759,7 @@ ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], + "keywords": ["ascii", "clean", "php"], "support": { "issues": "https://github.com/voku/portable-ascii/issues", "source": "https://github.com/voku/portable-ascii/tree/2.0.1" @@ -9277,9 +8825,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Bernhard Schussek", @@ -9287,11 +8833,7 @@ } ], "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], + "keywords": ["assert", "check", "validate"], "support": { "issues": "https://github.com/webmozarts/assert/issues", "source": "https://github.com/webmozarts/assert/tree/1.11.0" @@ -9330,9 +8872,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Samuel Štancl", @@ -9379,9 +8919,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nils Adermann", @@ -9400,12 +8938,7 @@ } ], "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], + "keywords": ["semantic", "semver", "validation", "versioning"], "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", @@ -9464,9 +8997,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Franck Nijhof", @@ -9539,9 +9070,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Andrey Helldar", @@ -9550,10 +9079,7 @@ } ], "description": "A set of contracts for any project", - "keywords": [ - "contracts", - "interfaces" - ], + "keywords": ["contracts", "interfaces"], "support": { "source": "https://github.com/TheDragonCode/contracts" }, @@ -9607,9 +9133,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Andrey Helldar", @@ -9705,9 +9229,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Andrey Helldar", @@ -9792,20 +9314,14 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "François Zaninotto" } ], "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], + "keywords": ["data", "faker", "fixtures"], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", "source": "https://github.com/FakerPHP/Faker/tree/v1.24.0" @@ -9851,9 +9367,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Filipe Dobreira", @@ -9916,18 +9430,12 @@ } }, "autoload": { - "classmap": [ - "hamcrest" - ] + "classmap": ["hamcrest"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], + "keywords": ["test"], "support": { "issues": "https://github.com/hamcrest/hamcrest-php/issues", "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" @@ -9977,9 +9485,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Kit Loong", @@ -10057,9 +9563,7 @@ "dev-master": "2.0-dev" }, "phpstan": { - "includes": [ - "extension.neon" - ] + "includes": ["extension.neon"] } }, "autoload": { @@ -10068,9 +9572,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Can Vural", @@ -10143,9 +9645,7 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "LaravelLang\\Attributes\\ServiceProvider" - ] + "providers": ["LaravelLang\\Attributes\\ServiceProvider"] } }, "autoload": { @@ -10154,9 +9654,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Andrey Helldar", @@ -10213,9 +9711,7 @@ }, "type": "library", "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Laravel-Lang Team", @@ -10293,9 +9789,7 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "LaravelLang\\HttpStatuses\\ServiceProvider" - ] + "providers": ["LaravelLang\\HttpStatuses\\ServiceProvider"] } }, "autoload": { @@ -10304,9 +9798,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Andrey Helldar", @@ -10360,9 +9852,7 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "LaravelLang\\Lang\\ServiceProvider" - ] + "providers": ["LaravelLang\\Lang\\ServiceProvider"] } }, "autoload": { @@ -10371,9 +9861,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Laravel-Lang Team", @@ -10381,12 +9869,7 @@ } ], "description": "List of 78 languages for Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark and Laravel UI", - "keywords": [ - "lang", - "languages", - "laravel", - "lpm" - ], + "keywords": ["lang", "languages", "laravel", "lpm"], "support": { "issues": "https://github.com/Laravel-Lang/lang/issues", "source": "https://github.com/Laravel-Lang/lang" @@ -10438,23 +9921,17 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "LaravelLang\\Publisher\\ServiceProvider" - ] + "providers": ["LaravelLang\\Publisher\\ServiceProvider"] } }, "autoload": { - "files": [ - "helper.php" - ], + "files": ["helper.php"], "psr-4": { "LaravelLang\\Publisher\\": "src" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Andrey Helldar", @@ -10530,9 +10007,7 @@ "nunomaduro/termwind": "^1.15.1", "pestphp/pest": "^2.35.1" }, - "bin": [ - "builds/pint" - ], + "bin": ["builds/pint"], "type": "project", "autoload": { "psr-4": { @@ -10542,9 +10017,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nuno Maduro", @@ -10553,13 +10026,7 @@ ], "description": "An opinionated code formatter for PHP.", "homepage": "https://laravel.com", - "keywords": [ - "format", - "formatter", - "lint", - "linter", - "php" - ], + "keywords": ["format", "formatter", "lint", "linter", "php"], "support": { "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" @@ -10592,15 +10059,11 @@ "orchestra/testbench": "^7.0|^8.0|^9.0", "phpstan/phpstan": "^1.10" }, - "bin": [ - "bin/sail" - ], + "bin": ["bin/sail"], "type": "library", "extra": { "laravel": { - "providers": [ - "Laravel\\Sail\\SailServiceProvider" - ] + "providers": ["Laravel\\Sail\\SailServiceProvider"] } }, "autoload": { @@ -10609,9 +10072,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Taylor Otwell", @@ -10619,10 +10080,7 @@ } ], "description": "Docker files for running a basic Laravel application.", - "keywords": [ - "docker", - "laravel" - ], + "keywords": ["docker", "laravel"], "support": { "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" @@ -10673,9 +10131,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Taylor Otwell", @@ -10687,11 +10143,7 @@ } ], "description": "An elegant debug assistant for the Laravel framework.", - "keywords": [ - "debugging", - "laravel", - "monitoring" - ], + "keywords": ["debugging", "laravel", "monitoring"], "support": { "issues": "https://github.com/laravel/telescope/issues", "source": "https://github.com/laravel/telescope/tree/v5.2.5" @@ -10726,18 +10178,13 @@ }, "type": "library", "autoload": { - "files": [ - "library/helpers.php", - "library/Mockery.php" - ], + "files": ["library/helpers.php", "library/Mockery.php"], "psr-4": { "Mockery\\": "library/Mockery" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Pádraic Brady", @@ -10828,17 +10275,13 @@ } }, "autoload": { - "files": [ - "./src/Adapters/Phpunit/Autoload.php" - ], + "files": ["./src/Adapters/Phpunit/Autoload.php"], "psr-4": { "NunoMaduro\\Collision\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nuno Maduro", @@ -10907,14 +10350,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Arne Blankerts", @@ -10964,14 +10403,10 @@ }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Arne Blankerts", @@ -11047,9 +10482,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], + "license": ["GPL-2.0-or-later"], "authors": [ { "name": "The phpMyAdmin Team", @@ -11114,15 +10547,11 @@ "type": "library", "autoload": { "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] + "PHPStan\\PhpDocParser\\": ["src/"] } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", @@ -11150,25 +10579,15 @@ "conflict": { "phpstan/phpstan-shim": "*" }, - "bin": [ - "phpstan", - "phpstan.phar" - ], + "bin": ["phpstan", "phpstan.phar"], "type": "library", "autoload": { - "files": [ - "bootstrap.php" - ] + "files": ["bootstrap.php"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "PHPStan - PHP Static Analysis Tool", - "keywords": [ - "dev", - "static analysis" - ], + "keywords": ["dev", "static analysis"], "support": { "docs": "https://phpstan.org/user-guide/getting-started", "forum": "https://github.com/phpstan/phpstan/discussions", @@ -11231,14 +10650,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -11248,11 +10663,7 @@ ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], + "keywords": ["coverage", "testing", "xunit"], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", @@ -11293,14 +10704,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -11310,10 +10717,7 @@ ], "description": "FilterIterator implementation that filters files based on a list of suffixes.", "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], + "keywords": ["filesystem", "iterator"], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", @@ -11358,14 +10762,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -11375,9 +10775,7 @@ ], "description": "Invoke callables with a timeout", "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], + "keywords": ["process"], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" @@ -11417,14 +10815,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -11434,9 +10828,7 @@ ], "description": "Simple template engine.", "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], + "keywords": ["template"], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", @@ -11477,14 +10869,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -11494,9 +10882,7 @@ ], "description": "Utility class for timing", "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], + "keywords": ["timer"], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" @@ -11554,9 +10940,7 @@ "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" }, - "bin": [ - "phpunit" - ], + "bin": ["phpunit"], "type": "library", "extra": { "branch-alias": { @@ -11564,17 +10948,11 @@ } }, "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] + "files": ["src/Framework/Assert/Functions.php"], + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -11584,11 +10962,7 @@ ], "description": "The PHP Unit Testing framework.", "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], + "keywords": ["phpunit", "testing", "xunit"], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", @@ -11637,14 +11011,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -11694,14 +11064,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -11750,14 +11116,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -11809,14 +11171,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -11837,11 +11195,7 @@ ], "description": "Provides the functionality to compare PHP values for equality", "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], + "keywords": ["comparator", "compare", "equality"], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", @@ -11883,14 +11237,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -11941,14 +11291,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -11961,12 +11307,7 @@ ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], + "keywords": ["diff", "udiff", "unidiff", "unified diff"], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", @@ -12010,14 +11351,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -12026,11 +11363,7 @@ ], "description": "Provides functionality to handle HHVM/PHP environments", "homepage": "https://github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], + "keywords": ["Xdebug", "environment", "hhvm"], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", @@ -12073,14 +11406,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -12105,10 +11434,7 @@ ], "description": "Provides the functionality to export PHP variables for visualization", "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], + "keywords": ["export", "exporter"], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", @@ -12152,14 +11478,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -12168,9 +11490,7 @@ ], "description": "Snapshotting of global state", "homepage": "https://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], + "keywords": ["global state"], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", @@ -12212,14 +11532,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -12271,14 +11587,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -12326,14 +11638,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -12381,14 +11689,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -12444,14 +11748,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -12497,14 +11797,10 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Sebastian Bergmann", @@ -12567,14 +11863,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", - "keywords": [ - "dev", - "phpcs" - ], + "keywords": ["dev", "phpcs"], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", "source": "https://github.com/slevomat/coding-standard/tree/8.15.0" @@ -12622,9 +11913,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Freek Van de Herten", @@ -12635,10 +11924,7 @@ ], "description": "A better backtrace", "homepage": "https://github.com/spatie/backtrace", - "keywords": [ - "Backtrace", - "spatie" - ], + "keywords": ["Backtrace", "spatie"], "support": { "source": "https://github.com/spatie/backtrace/tree/1.6.2" }, @@ -12700,9 +11986,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Ruben Van Assche", @@ -12712,10 +11996,7 @@ ], "description": "This is my package error-solutions", "homepage": "https://github.com/spatie/error-solutions", - "keywords": [ - "error-solutions", - "spatie" - ], + "keywords": ["error-solutions", "spatie"], "support": { "issues": "https://github.com/spatie/error-solutions/issues", "source": "https://github.com/spatie/error-solutions/tree/1.1.1" @@ -12766,25 +12047,16 @@ } }, "autoload": { - "files": [ - "src/helpers.php" - ], + "files": ["src/helpers.php"], "psr-4": { "Spatie\\FlareClient\\": "src" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "Send PHP errors to Flare", "homepage": "https://github.com/spatie/flare-client-php", - "keywords": [ - "exception", - "flare", - "reporting", - "spatie" - ], + "keywords": ["exception", "flare", "reporting", "spatie"], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", "source": "https://github.com/spatie/flare-client-php/tree/1.8.0" @@ -12848,9 +12120,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Spatie", @@ -12860,12 +12130,7 @@ ], "description": "A beautiful error page for PHP applications.", "homepage": "https://flareapp.io/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], + "keywords": ["error", "flare", "laravel", "page"], "support": { "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", "forum": "https://twitter.com/flareappio", @@ -12931,17 +12196,13 @@ } }, "autoload": { - "files": [ - "src/helpers.php" - ], + "files": ["src/helpers.php"], "psr-4": { "Spatie\\LaravelIgnition\\": "src" } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Spatie", @@ -12951,12 +12212,7 @@ ], "description": "A beautiful error page for Laravel applications.", "homepage": "https://flareapp.io/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], + "keywords": ["error", "flare", "laravel", "page"], "support": { "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", "forum": "https://twitter.com/flareappio", @@ -12994,10 +12250,7 @@ "require-dev": { "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, - "bin": [ - "bin/phpcbf", - "bin/phpcs" - ], + "bin": ["bin/phpcbf", "bin/phpcs"], "type": "library", "extra": { "branch-alias": { @@ -13005,9 +12258,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Greg Sherwood", @@ -13024,11 +12275,7 @@ ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards", - "static analysis" - ], + "keywords": ["phpcs", "standards", "static analysis"], "support": { "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", @@ -13076,20 +12323,14 @@ } }, "autoload": { - "files": [ - "bootstrap.php" - ], + "files": ["bootstrap.php"], "psr-4": { "Symfony\\Polyfill\\Php81\\": "" }, - "classmap": [ - "Resources/stubs" - ] + "classmap": ["Resources/stubs"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Nicolas Grekas", @@ -13102,12 +12343,7 @@ ], "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "keywords": ["compatibility", "polyfill", "portable", "shim"], "support": { "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" }, @@ -13151,22 +12387,16 @@ "require-dev": { "symfony/console": "^6.4|^7.0" }, - "bin": [ - "Resources/bin/yaml-lint" - ], + "bin": ["Resources/bin/yaml-lint"], "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Yaml\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] + "exclude-from-classmap": ["/Tests/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "authors": [ { "name": "Fabien Potencier", @@ -13232,9 +12462,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], + "license": ["MIT"], "description": "Automatically generate Laravel factories for your models.", "keywords": [ "factories", @@ -13281,14 +12509,10 @@ }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "classmap": ["src/"] }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], + "license": ["BSD-3-Clause"], "authors": [ { "name": "Arne Blankerts", diff --git a/config/scout.php b/config/scout.php new file mode 100644 index 00000000..d6b8882c --- /dev/null +++ b/config/scout.php @@ -0,0 +1,115 @@ + env('SCOUT_DRIVER', 'meilisearch'), + + /* + |-------------------------------------------------------------------------- + | Index Prefix + |-------------------------------------------------------------------------- + | + | Here you may specify a prefix that will be applied to all search index + | names used by Scout. This prefix may be useful if you have multiple + | "tenants" or applications sharing the same search infrastructure. + | + */ + + 'prefix' => env('SCOUT_PREFIX', ''), + + /* + |-------------------------------------------------------------------------- + | Queue Data Syncing + |-------------------------------------------------------------------------- + | + | This option allows you to control if the operations that sync your data + | with your search engines are queued. When this is set to "true" then + | all automatic data syncing will get queued for better performance. + | + */ + + 'queue' => env('SCOUT_QUEUE', false), + + /* + |-------------------------------------------------------------------------- + | Database Transactions + |-------------------------------------------------------------------------- + | + | This configuration option determines if your data will only be synced + | with your search indexes after every open database transaction has + | been committed, thus preventing any discarded data from syncing. + | + */ + + 'after_commit' => true, + + /* + |-------------------------------------------------------------------------- + | Chunk Sizes + |-------------------------------------------------------------------------- + | + | These options allow you to control the maximum chunk size when you are + | mass importing data into the search engine. This allows you to fine + | tune each of these chunk sizes based on the power of the servers. + | + */ + + 'chunk' => [ + 'searchable' => 500, + 'unsearchable' => 500, + ], + + /* + |-------------------------------------------------------------------------- + | Soft Deletes + |-------------------------------------------------------------------------- + | + | This option allows to control whether to keep soft deleted records in + | the search indexes. Maintaining soft deleted records can be useful + | if your application still needs to search for the records later. + | + */ + + 'soft_delete' => false, + + /* + |-------------------------------------------------------------------------- + | Meilisearch Configuration + |-------------------------------------------------------------------------- + | + | Here you may configure your Meilisearch settings. Meilisearch is an open + | source search engine with minimal configuration. Below, you can state + | the host and key information for your own Meilisearch installation. + | + | See: https://www.meilisearch.com/docs/learn/configuration/instance_options#all-instance-options + | + */ + + 'meilisearch' => [ + 'host' => env('MEILISEARCH_HOST', 'http://localhost:7700'), + 'key' => env('MEILISEARCH_KEY'), + 'index-settings' => [ + Product::class => Product::$searchSettings, + Recipe::class => Recipe::$searchSettings, + News::class => News::$searchSettings, + ], + ], +]; diff --git a/database/migrations/2024_21_27_123913_add_search_type_static_pages_table.php b/database/migrations/2024_21_27_123913_add_search_type_static_pages_table.php new file mode 100644 index 00000000..a2f1973d --- /dev/null +++ b/database/migrations/2024_21_27_123913_add_search_type_static_pages_table.php @@ -0,0 +1,44 @@ +forceCreateQuietly( + [ + 'type' => StaticPageType::search, + 'seo_title' => sprintf('Seo title pour la page %s', StaticPageType::search->label()), + 'seo_description' => sprintf('Seo description pour la page %s', StaticPageType::search->label()), + 'title' => StaticPageType::search->label(), + 'slug' => Str::of(StaticPageType::search->label())->slug(), + 'subtitle' => null, + 'picture_alt' => null, + 'picture_title' => null, + 'picture' => null, + 'content' => null, + 'data' => [], + ] + ); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down(): void + { + DB::statement('DELETE FROM `static_pages` WHERE `type` LIKE "' . StaticPageType::search->value() . '"'); + } +}; diff --git a/database/seeders/Mandatory/StaticPageSeeder.php b/database/seeders/Mandatory/StaticPageSeeder.php index d418c640..0aeb3d4b 100644 --- a/database/seeders/Mandatory/StaticPageSeeder.php +++ b/database/seeders/Mandatory/StaticPageSeeder.php @@ -106,6 +106,7 @@ class StaticPageSeeder extends Seeder 'required' => true ] ]); + $this->seedStaticPage(StaticPageType::search); } /** diff --git a/resources/sass/fo/base/_layout.scss b/resources/sass/fo/base/_layout.scss index 7e5da2a4..1bd667b9 100644 --- a/resources/sass/fo/base/_layout.scss +++ b/resources/sass/fo/base/_layout.scss @@ -230,55 +230,6 @@ body { } } - #input-group-search { - [type="submit"] { - border-radius: 1rem; - border-right-width: 0 !important; - border-bottom-right-radius: 0 !important; - border-top-right-radius: 0 !important; - - @include media-breakpoint-up(sm) { - border-radius: 0 1rem 1rem 0 !important; - border-right-width: var(--bs-border-width) !important; - border-left-width: 0 !important; - } - } - - #btn-search-empty { - border-radius: 1rem; - border-left-width: 0 !important; - border-bottom-left-radius: 0 !important; - border-top-left-radius: 0 !important; - - @include media-breakpoint-up(sm) { - border-radius: 1rem 0 0 1rem !important; - border-right-width: 0 !important; - border-left-width: var(--bs-border-width) !important; - } - } - - #search-input { - height: calc(2.65rem + calc(var(--bs-border-width) * 2)); - min-height: calc(2.65rem + calc(var(--bs-border-width) * 2)); - line-height: 1.25; - - @include media-breakpoint-up(md) { - @include rfs(20rem, min-width); - } - - @include media-breakpoint-up(lg) { - @include rfs(30rem, min-width); - } - - +label { - height: 2rem; - padding: 0.5rem 0.25rem; - line-height: 1.2; - } - } - } - - #menu-lang-list { display: none; diff --git a/resources/sass/fo/fo.scss b/resources/sass/fo/fo.scss index 4e5bdd84..2e5e065f 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/search"; // * PARTIALS @import "./partials/breeder-card"; @@ -47,6 +48,5 @@ @import "./partials/testimonial-card"; @import "./partials/video-card"; - // * COMPONENTS @import "./components/breeding/find-poultry-breeder"; diff --git a/resources/sass/fo/pages/search.scss b/resources/sass/fo/pages/search.scss new file mode 100644 index 00000000..87e9d210 --- /dev/null +++ b/resources/sass/fo/pages/search.scss @@ -0,0 +1,43 @@ +#search-section{ + #input-group-search { + [type="submit"] { + border-radius: 1rem; + border-right-width: 0 !important; + border-bottom-right-radius: 0 !important; + border-top-right-radius: 0 !important; + + @include media-breakpoint-up(sm) { + border-radius: 0 1rem 1rem 0 !important; + border-right-width: var(--bs-border-width) !important; + border-left-width: 0 !important; + } + } + + #search-input { + height: calc(2.65rem + calc(var(--bs-border-width) * 2)); + min-height: calc(2.65rem + calc(var(--bs-border-width) * 2)); + border-radius: 1rem 0 0 1rem; + border-right-width: 0; + line-height: 1.25; + + @include media-breakpoint-up(md) { + @include rfs(20rem, min-width); + } + + @include media-breakpoint-up(lg) { + @include rfs(30rem, min-width); + } + + +label { + height: 2rem; + padding: 0.8rem 1rem; + line-height: 1.2; + } + } + } + + #search-no-result-icon { + width: 5rem; + height: 5rem; + } +} diff --git a/resources/ts/fo/base/common.ts b/resources/ts/fo/base/common.ts index 1b54a82b..b924a6e6 100644 --- a/resources/ts/fo/base/common.ts +++ b/resources/ts/fo/base/common.ts @@ -410,6 +410,35 @@ document.addEventListener("DOMContentLoaded", function () { }, }, }, + "swiper-news": { + modules: [Navigation, Pagination], + grabCursor: true, + slidesPerView: 1, + centeredSlides: true, + spaceBetween: 20, + navigation: { + nextEl: ".swiper-news-button-next", + prevEl: ".swiper-news-button-prev", + }, + breakpoints: { + 768: { + spaceBetween: 40, + slidesPerView: 2, + }, + 992: { + slidesPerView: 3, + centeredSlides: false, + slidesPerGroup: 3, + }, + }, + pagination: { + el: ".swiper-recipe-pagination", + clickable: true, + renderBullet: function (index: number, className: string) { + return ""; + }, + }, + }, "swiper-testimonials": { modules: [Navigation, Pagination], grabCursor: true, diff --git a/resources/views/fo/layouts/header.blade.php b/resources/views/fo/layouts/header.blade.php index cf1d6059..1608fe60 100644 --- a/resources/views/fo/layouts/header.blade.php +++ b/resources/views/fo/layouts/header.blade.php @@ -12,7 +12,7 @@ {{-- Search BTN --}} - {{-- @include('fo.layouts.main-menu.search-btn', ['offcanvaId' => 'offcanvas-search']) --}} + @include('fo.layouts.main-menu.search-btn') {{-- LINKS --}} @include('fo.layouts.main-menu.links', [ @@ -32,7 +32,7 @@ 'header-export' => request()->routeIs('fo.*.export'), ])> {{-- Search BTN --}} - {{-- @include('fo.layouts.main-menu.search-btn', ['offcanvaId' => 'offcanvas-search']) --}} + @include('fo.layouts.main-menu.search-btn') {{-- LANGS --}} @include('fo.layouts.main-menu.locales') @@ -51,4 +51,3 @@ @include('fo.layouts.main-menu.offcanvas-menu-mobile', ['id' => 'offcanvas-main-menu']) -@include('fo.layouts.main-menu.offcanvas-search', ['id' => 'offcanvas-search']) diff --git a/resources/views/fo/layouts/main-menu/offcanvas-search.blade.php b/resources/views/fo/layouts/main-menu/offcanvas-search.blade.php deleted file mode 100644 index 4b332512..00000000 --- a/resources/views/fo/layouts/main-menu/offcanvas-search.blade.php +++ /dev/null @@ -1,124 +0,0 @@ -
-
- -
-
diff --git a/resources/views/fo/layouts/main-menu/search-btn.blade.php b/resources/views/fo/layouts/main-menu/search-btn.blade.php index 66ad0c2f..16f598ca 100644 --- a/resources/views/fo/layouts/main-menu/search-btn.blade.php +++ b/resources/views/fo/layouts/main-menu/search-btn.blade.php @@ -1,6 +1,6 @@ diff --git a/resources/views/fo/pages/home.blade.php b/resources/views/fo/pages/home.blade.php index bd3fae06..c0ffa1c7 100644 --- a/resources/views/fo/pages/home.blade.php +++ b/resources/views/fo/pages/home.blade.php @@ -245,7 +245,7 @@
- @include('fo.partials.news-card', ['newsModel' => $newsModels->first()]) + @include('fo.partials.news-card', ['model' => $newsModels->first()])
@@ -253,7 +253,7 @@ {{-- 3 horizontal cards (only for devices with width > md size) --}}
@foreach ($newsModels->slice(1, 3) as $newsModel) - @include('fo.partials.news-card-tiny', ['newsModel' => $newsModel]) + @include('fo.partials.news-card-tiny', ['model' => $newsModel]) @endforeach
@endif diff --git a/resources/views/fo/pages/partials-demo.blade.php b/resources/views/fo/pages/partials-demo.blade.php index 3d8ef0fb..d1fdfb04 100644 --- a/resources/views/fo/pages/partials-demo.blade.php +++ b/resources/views/fo/pages/partials-demo.blade.php @@ -79,13 +79,13 @@
- @include('fo.partials.news-card-tiny', ['newsModel' => $newsModel]) + @include('fo.partials.news-card-tiny', ['model' => $newsModel])
- @include('fo.partials.news-card-tiny', ['newsModel' => $newsModel]) + @include('fo.partials.news-card-tiny', ['model' => $newsModel])
- @include('fo.partials.news-card-tiny', ['newsModel' => $newsModel]) + @include('fo.partials.news-card-tiny', ['model' => $newsModel])
{{-- PRODUCT CARDS TINY VERSION --}} diff --git a/resources/views/fo/pages/search.blade.php b/resources/views/fo/pages/search.blade.php new file mode 100644 index 00000000..f18d312b --- /dev/null +++ b/resources/views/fo/pages/search.blade.php @@ -0,0 +1,106 @@ +@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') + {{-- MAIN CONTENT --}} +
+
+ {{-- INPUT SEARCH --}} +
+
+ +
+
+
+ {{-- PRODUCTS --}} +
+ @if ($productModels->isNotEmpty()) + @include('fo.partials.cards-slider', [ + 'id' => 'product', + 'title' => __('models.classes.product'), + 'classTitle' => 'text-start', + 'models' => $productModels, + 'btnRouteName' => route('fo.products.index'), + 'btnRouteTitle' => 'nos produits', + 'bgReverse' => true, + 'btnText' => 'voir tous les produits', + ]) + @endif +
+ {{-- RECIPES --}} +
+ @if ($recipeModels->isNotEmpty()) + @include('fo.partials.cards-slider', [ + 'id' => 'recipe', + 'title' => __('models.classes.recipe'), + 'classTitle' => 'text-start', + 'models' => $recipeModels, + 'btnRouteName' => route('fo.recipes.index'), + 'btnRouteTitle' => 'nos recettes', + ]) + @endif +
+ {{-- NEWS --}} +
+ @if ($newsModels->isNotEmpty()) + @include('fo.partials.cards-slider', [ + 'id' => 'new', + 'viewPath' => "fo.partials.news-card-tiny", + 'title' => __('models.classes.news'), + 'classTitle' => 'text-start', + 'models' => $newsModels, + 'btnRouteName' => route('fo.news.index'), + 'btnRouteTitle' => 'nos recettes', + ]) + @endif +
+ {{-- NO RESULT --}} + @if ($productModels->isEmpty() && $recipeModels->isEmpty()) +
+
+ +
+

{{ __('Aucun élément trouvé') }}

+

{{ __('Veuillez réinitialiser votre recherche') }}

+ + {{ __('Réinitialiser la recherche') }} + +
+ @endif +
+@endsection diff --git a/resources/views/fo/partials/breeding/paragraph-with-visual.blade.php b/resources/views/fo/partials/breeding/paragraph-with-visual.blade.php index c93c2db4..9ba7e44e 100644 --- a/resources/views/fo/partials/breeding/paragraph-with-visual.blade.php +++ b/resources/views/fo/partials/breeding/paragraph-with-visual.blade.php @@ -26,9 +26,7 @@ @endif

{{ str(strip_tags($newsBreedingModel->content))->limit('300') }}

@if (isset($newsModel)) - @include('fo.partials.news-card-tiny', [ - 'newsModel' => $newsModel, - ]) + @include('fo.partials.news-card-tiny', ['model' => $newsModel]) @endif @if (isset($btnLabel) && !empty($btnLabel)) empty($noBg) && empty($bgReverse), ])>
-
-

{{ str(__($title))->upper() }}

- {!! clean($text) !!} +
+ @if(isset($title)) +

{{ str(__($title))->upper() }}

+ @endif + @if(isset($text)) + {!! clean($text) !!} + @endif
@foreach ($models as $model)
- @include("fo.partials.$id-card") + @include($viewPath ?? "fo.partials.$id-card")
@endforeach
@@ -42,7 +46,7 @@
- {{ str($btnText ?? __('voir toutes les recettes'))->upper() }} + {{ str($btnText ?? __('voir toutes les recettes'))->upper() }} @if (isset($isYoutube) && $isYoutube) Logo Youtube @endif diff --git a/resources/views/fo/partials/commitments/paragraph-with-visual.blade.php b/resources/views/fo/partials/commitments/paragraph-with-visual.blade.php index 2cffd59c..37cfeaa6 100644 --- a/resources/views/fo/partials/commitments/paragraph-with-visual.blade.php +++ b/resources/views/fo/partials/commitments/paragraph-with-visual.blade.php @@ -25,9 +25,7 @@

{{ $subtext }}

@endif @if (isset($newsModel)) - @include('fo.partials.news-card-tiny', [ - 'newsModel' => $newsModel, - ]) + @include('fo.partials.news-card-tiny', ['model' => $newsModel]) @endif @if (isset($btnLabel) && !empty($btnLabel))
- +
{{ $newsModel->thumbnail_alt }} + src="{{ asset($model->thumbnail) }}" + title="{{ $model->thumbnail_title }}" alt="{{ $model->thumbnail_alt }}">
{{-- TAG --}}
- {{ $newsModel->newsCategory->title }} + style="background-color: {{ $model->newsCategory->color }}; color: #fff"> + {{ $model->newsCategory->title }}
{{-- DATE --}}

- {{ ($newsModel->updated_at)->format('d/m/Y') }} + {{ ($model->updated_at)->format('d/m/Y') }}

- {{ $newsModel->title }} + {{ $model->title }}

diff --git a/resources/views/fo/partials/news-card.blade.php b/resources/views/fo/partials/news-card.blade.php index cab0d5fa..c4e48ece 100644 --- a/resources/views/fo/partials/news-card.blade.php +++ b/resources/views/fo/partials/news-card.blade.php @@ -8,22 +8,22 @@ --}}
- +
- {{ $newsModel->thumbnail_alt }} + {{ $model->thumbnail_alt }}

- {{ $newsModel->newsCategory->title }} + style="background-color: {{ $model->newsCategory->color }}; color: #fff"> + {{ $model->newsCategory->title }}

-

{{ $newsModel->updated_at ->format('d/m/Y') }}

+

{{ $model->updated_at ->format('d/m/Y') }}

- {{ $newsModel->title }}

+ {{ $model->title }}

diff --git a/routes/web-fo.php b/routes/web-fo.php index 69c1b6a7..b501f69c 100644 --- a/routes/web-fo.php +++ b/routes/web-fo.php @@ -31,6 +31,7 @@ Route::middleware(['throttle:web'])->name('fo.')->group(function () { Route::get('/charte-de-confidentialite', [StaticPageController::class, 'policies'])->name('policies.show'); Route::get('/conditions-generales-de-vente', [StaticPageController::class, 'selling'])->name('conditions.show'); Route::get('/accessibilite', [StaticPageController::class, 'accessibility'])->name('accessibility.show'); + Route::get('/search', [StaticPageController::class, 'search'])->name('search.index'); // * CONTACT Route::get('/contact', [ContactController::class, 'contact'])->name('contact.show'); @@ -148,7 +149,6 @@ Route::middleware(['throttle:web'])->name('fo.')->group(function () { ->where('unsubscribe', 'unsubscribe|unsubscribe.php|unsubscribe.html|newsletter') ->name('unsubscribeNewsletter'); - // * BREEDERS Route::prefix('breeders') ->name('breeders.') From 291e16216cbbf501783c0fd0c206e9925ed3dc37 Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Tue, 24 Dec 2024 12:01:03 +0100 Subject: [PATCH 2/6] =?UTF-8?q?feat:=20=E2=9C=A8=20upgrade=20meilisearch?= =?UTF-8?q?=20functionnality=20#151?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Fo/ProductController.php | 54 ++- app/Http/Controllers/Fo/RecipeController.php | 45 +- app/Http/Controllers/Fo/SearchController.php | 101 +++++ .../Controllers/Fo/StaticPageController.php | 22 - app/Lib/Helpers/CollectionHelper.php | 31 ++ app/Models/News.php | 2 +- app/Models/NewsBreeding.php | 12 + app/Models/Product.php | 2 +- app/Models/Recipe.php | 2 +- config/scout.php | 8 +- package-lock.json | 24 +- resources/sass/fo/vendor/_swiper.scss | 2 +- .../components/MeilisearchModelsComponent.vue | 189 +++++++++ .../MeilisearchPaginateViewsComponent.vue | 398 ++++++++++++++++++ resources/ts/index.d.ts | 25 +- resources/ts/libs/.gitkeep | 0 .../views/fo/pages/breeding/article.blade.php | 7 +- .../views/fo/pages/breeding/index.blade.php | 16 +- .../fo/pages/breeding/oui-c-est-bon.blade.php | 5 +- .../views/fo/pages/breeding/show.blade.php | 10 +- resources/views/fo/pages/search.blade.php | 122 ++---- .../fo/partials/news-breeding-card.blade.php | 1 + .../views/fo/partials/news-card.blade.php | 22 +- .../views/fo/partials/product-card.blade.php | 2 +- .../views/fo/partials/recipe-badges.blade.php | 2 +- .../views/fo/partials/recipe-card.blade.php | 6 +- routes/web-fo.php | 6 +- 27 files changed, 895 insertions(+), 221 deletions(-) create mode 100644 app/Http/Controllers/Fo/SearchController.php create mode 100644 resources/ts/fo/components/MeilisearchModelsComponent.vue create mode 100644 resources/ts/fo/components/MeilisearchPaginateViewsComponent.vue delete mode 100644 resources/ts/libs/.gitkeep create mode 100644 resources/views/fo/partials/news-breeding-card.blade.php diff --git a/app/Http/Controllers/Fo/ProductController.php b/app/Http/Controllers/Fo/ProductController.php index d7adb5f5..03ec1ec7 100644 --- a/app/Http/Controllers/Fo/ProductController.php +++ b/app/Http/Controllers/Fo/ProductController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Fo; use App\Enums\StaticPageType; use App\Http\Controllers\Controller; +use App\Lib\Helpers\CollectionHelper; use App\Models\Meat; use App\Models\Product; use App\Models\Range; @@ -54,7 +55,11 @@ class ProductController extends Controller $meatModels = Meat::getPublishedOrderedWithSubmeats(); $submeatModels = $submeatModelsFiltered ?? Submeat::getPublishedOrdered(); return view('fo.pages.products.index', [ - 'viewsPaginate' => $this->getViewsFromPaginateModels($productModels), + 'viewsPaginate' => CollectionHelper::getViewsFromPaginateModels( + $productModels, + 'fo.partials.product-card', + 'model' + ), 'productDiscoverModels' => $productDiscoverModels, 'staticPageModel' => $staticPageModel, 'rangeModels' => $rangeModels, @@ -182,8 +187,7 @@ class ProductController extends Controller */ public function getProductModelsTitles(string|null $search = null): \Illuminate\Pagination\LengthAwarePaginator { - $query = Product::query(); - return $this->getModelsTitles($query, 'label', $search); + return $this->getModelsTitles(Product::query(), 'label', $search); } /** @@ -226,7 +230,11 @@ class ProductController extends Controller if ($request->ajax()) { return response()->json([ - 'viewsPaginate' => $this->getViewsFromPaginateModels($productModels), + 'viewsPaginate' => CollectionHelper::getViewsFromPaginateModels( + $productModels, + 'fo.partials.product-card', + 'model' + ), 'children' => [], ]); } @@ -276,7 +284,11 @@ class ProductController extends Controller if ($request->ajax()) { return response()->json([ - 'viewsPaginate' => $this->getViewsFromPaginateModels($productModels), + 'viewsPaginate' => CollectionHelper::getViewsFromPaginateModels( + $productModels, + 'fo.partials.product-card', + 'model' + ), 'children' => $subrangeModels, 'productModels' => $productModels, ]); @@ -330,7 +342,11 @@ class ProductController extends Controller if ($request->ajax()) { return response()->json([ 'productModels' => $productModels, - 'viewsPaginate' => $this->getViewsFromPaginateModels($productModels), + 'viewsPaginate' => CollectionHelper::getViewsFromPaginateModels( + $productModels, + 'fo.partials.product-card', + 'model' + ), 'children' => $subrangeModels, ]); } @@ -373,7 +389,11 @@ class ProductController extends Controller ->paginate($this->productModelsPerPage); if ($request->ajax()) { return response()->json([ - 'viewsPaginate' => $this->getViewsFromPaginateModels($productModels), + 'viewsPaginate' => CollectionHelper::getViewsFromPaginateModels( + $productModels, + 'fo.partials.product-card', + 'model' + ), 'children' => $submeatModels, ]); } @@ -421,7 +441,11 @@ class ProductController extends Controller ->paginate($this->productModelsPerPage); if ($request->ajax()) { return response()->json([ - 'viewsPaginate' => $this->getViewsFromPaginateModels($productModels), + 'viewsPaginate' => CollectionHelper::getViewsFromPaginateModels( + $productModels, + 'fo.partials.product-card', + 'model' + ), 'children' => $submeatModels, ]); } @@ -529,20 +553,6 @@ class ProductController extends Controller return $recipeModels->slice(0, $nbrMaxRecipes); } - /** - * Get an array of views for each product models given. - * - * @param \Illuminate\Contracts\Pagination\LengthAwarePaginator $productModels - * @return array - */ - public function getViewsFromPaginateModels(LengthAwarePaginator $productModels): array - { - // @phpstan-ignore-next-line - return $productModels->through(function ($productModel) { - return view('fo.partials.product-card', ['model' => $productModel])->render(); - })->toArray(); - } - /** * Get products by a specific range into a json response. * diff --git a/app/Http/Controllers/Fo/RecipeController.php b/app/Http/Controllers/Fo/RecipeController.php index 72bb33ba..37e3d329 100644 --- a/app/Http/Controllers/Fo/RecipeController.php +++ b/app/Http/Controllers/Fo/RecipeController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Fo; use App\Enums\StaticPageType; use App\Http\Controllers\Controller; use App\Http\Resources\Fo\Recipes\RecipeCommericalSheetResource; +use App\Lib\Helpers\CollectionHelper; use App\Models\ConsumptionMoment; use App\Models\Meat; use Illuminate\Database\Eloquent\Builder; @@ -51,7 +52,11 @@ class RecipeController extends Controller Submeat::getPublishedOrdered(); return view('fo.pages.recipes.index', [ - 'viewsPaginate' => $this->getViewsFromPaginateModels($recipeModels), + 'viewsPaginate' => CollectionHelper::getViewsFromPaginateModels( + $recipeModels, + 'fo.partials.recipe-card', + 'model' + ), 'recipeModel' => $recipeModel, 'staticPageModel' => $staticPageModel, 'consumptionMomentModels' => $consumptionMomentModels, @@ -140,7 +145,11 @@ class RecipeController extends Controller if ($request->ajax()) { return response()->json([ - 'viewsPaginate' => $this->getViewsFromPaginateModels($recipeModels), + 'viewsPaginate' => CollectionHelper::getViewsFromPaginateModels( + $recipeModels, + 'fo.partials.recipe-card', + 'model' + ), 'children' => [], ]); } @@ -170,7 +179,11 @@ class RecipeController extends Controller ->paginate($this->recipeModelsPerPage); if ($request->ajax()) { return response()->json([ - 'viewsPaginate' => $this->getViewsFromPaginateModels($recipeModels), + 'viewsPaginate' => CollectionHelper::getViewsFromPaginateModels( + $recipeModels, + 'fo.partials.recipe-card', + 'model' + ), 'children' => [], ]); } @@ -214,7 +227,11 @@ class RecipeController extends Controller ->paginate($this->recipeModelsPerPage); if ($request->ajax()) { return response()->json([ - 'viewsPaginate' => $this->getViewsFromPaginateModels($recipeModels), + 'viewsPaginate' => CollectionHelper::getViewsFromPaginateModels( + $recipeModels, + 'fo.partials.recipe-card', + 'model' + ), 'children' => $submeatModels, ]); } @@ -264,27 +281,17 @@ class RecipeController extends Controller ->paginate($this->recipeModelsPerPage); if ($request->ajax()) { return response()->json([ - 'viewsPaginate' => $this->getViewsFromPaginateModels($recipeModels), + 'viewsPaginate' => CollectionHelper::getViewsFromPaginateModels( + $recipeModels, + 'fo.partials.recipe-card', + 'model' + ), 'children' => [], ]); } return $this->index($recipeModels, $submeatModels); } - /** - * Get an array of views for each recipe models given. - * - * @param \Illuminate\Contracts\Pagination\LengthAwarePaginator $recipeModels - * @return array - */ - public function getViewsFromPaginateModels(LengthAwarePaginator $recipeModels): array - { - // @phpstan-ignore-next-line - return $recipeModels->through(function ($recipeModel) { - return view('fo.partials.recipe-card', ['model' => $recipeModel])->render(); - })->toArray(); - } - /** * Get recipes by a selected recipe model, * filtered first by products associated, diff --git a/app/Http/Controllers/Fo/SearchController.php b/app/Http/Controllers/Fo/SearchController.php new file mode 100644 index 00000000..9ff738e8 --- /dev/null +++ b/app/Http/Controllers/Fo/SearchController.php @@ -0,0 +1,101 @@ +input('texte'); + return view('fo.pages.search', [ + 'staticPageModel' => StaticPage::getCachedStaticPage(StaticPageType::search), + 'productModels' => $this->getResultFromMeilisearch($searchString, 'App\Models\Product'), + 'recipeModels' => $this->getResultFromMeilisearch($searchString, 'App\Models\Recipe'), + 'newsModels' => $this->getResultFromMeilisearch($searchString, 'App\Models\News'), + 'newsBreedingModels' => $this->getResultFromMeilisearch($searchString, 'App\Models\NewsBreeding'), + ]); + } + + /** + * Search string on multiple models. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function searchString(Request $request): \Illuminate\Http\JsonResponse + { + $search = $request->input('texte'); + $page = $request->input('page'); + $results = collect($request->models)->map(function (string $model) use ($search, $page) { + return $this->getResultFromMeilisearch($search, $model, $page); + }); + return response()->json($results); + } + + /** + * Search string on multiple models. + * + * @param string|null $search + * @param string $class + * @param integer $itemsPerPage + * @param integer $page + * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator + */ + public function getResultFromMeilisearch( + string|null $search, + string $className, + int $page = 1 + ): \Illuminate\Contracts\Pagination\LengthAwarePaginator { + $models = $className::search($search) + ->where('published', true) + ->paginateRaw(perPage: 4, page: $page); + return $this->getViewsFromMeilisearchPagination($models, $className); + } + + /** + * Search string on multiple models. + * + * @param \Illuminate\Contracts\Pagination\LengthAwarePaginator $models + * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator + */ + public function getViewsFromMeilisearchPagination( + LengthAwarePaginator $models, + string $className + ): \Illuminate\Contracts\Pagination\LengthAwarePaginator { + $models['hits'] = collect($models['hits'])->map(function ($model) use ($className) { + $class = new $className(); + return $class->forceFill($model); + }); + $models['hits'] = CollectionHelper::getViewsFromCollection( + $models['hits'], + "fo.partials.{$this->transformClassNameToSnakeCase($className)}-card", + 'model' + ); + return $models; + } + + /** + * Transform class name to snake case. + * + * @param string $className + * @return string + */ + public function transformClassNameToSnakeCase($className): string + { + return Str::lower(preg_replace('/(?input('search'))->get()->take(6); - $recipeModels = Recipe::search($request->input('search'))->get() - ->load(['products', 'consumptionMoment'])->take(6); - $newsModels = News::search($request->input('search'))->get() - ->load('newsCategory')->take(6); - return view('fo.pages.search', compact('staticPageModel', 'productModels', 'recipeModels', 'newsModels')); - } } diff --git a/app/Lib/Helpers/CollectionHelper.php b/app/Lib/Helpers/CollectionHelper.php index bbb51aba..98ec89cf 100644 --- a/app/Lib/Helpers/CollectionHelper.php +++ b/app/Lib/Helpers/CollectionHelper.php @@ -69,4 +69,35 @@ class CollectionHelper 'options' => $options ]); } + + /** + * Get an array of views for each recipe models given. + * + * @param \Illuminate\Contracts\Pagination\LengthAwarePaginator $models + * @param string $path + * @param string $key + * @return array + */ + public static function getViewsFromPaginateModels(LengthAwarePaginator $models, string $path, string $key): array + { + // @phpstan-ignore-next-line + return $models->through(function ($model) use ($path, $key) { + return view($path, [$key => $model])->render(); + })->toArray(); + } + + /** + * Get an array of views for each item in collection given. + * + * @param \Illuminate\Support\Collection $collection + * @param string $path + * @param string $key + * @return array + */ + public static function getViewsFromCollection(Collection $collection, string $path, string $key): array + { + return $collection->map(function ($item) use ($path, $key) { + return view($path, [$key => $item])->render(); + })->toArray(); + } } diff --git a/app/Models/News.php b/app/Models/News.php index bbf4a6e9..e65e6be5 100644 --- a/app/Models/News.php +++ b/app/Models/News.php @@ -86,7 +86,7 @@ class News extends Model implements Sitemapable * @return array */ public static $searchSettings = [ - 'filterableAttributes' => ['title', 'content'], + 'filterableAttributes' => ['title', 'content', 'published'], 'sortableAttributes' => ['title', 'content'] ]; diff --git a/app/Models/NewsBreeding.php b/app/Models/NewsBreeding.php index ddf12970..99691df8 100644 --- a/app/Models/NewsBreeding.php +++ b/app/Models/NewsBreeding.php @@ -10,6 +10,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Str; +use Laravel\Scout\Searchable; /** * @property string $title The title of the bredding news. @@ -31,6 +32,7 @@ class NewsBreeding extends Model { use ActivityLog; use HasFactory; + use Searchable; /** * The attributes that are mass assignable. @@ -66,6 +68,16 @@ class NewsBreeding extends Model 'associated_page' => StaticPageType::class, ]; + /** + * Get model's setting to apply on scout search (meilisearch). + * + * @return array + */ + public static $searchSettings = [ + 'filterableAttributes' => ['title', 'content', 'published'], + 'sortableAttributes' => ['title', 'content'] + ]; + /** * Perform any actions required after the model boots. * diff --git a/app/Models/Product.php b/app/Models/Product.php index 38f41671..42f4ea77 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -104,7 +104,7 @@ class Product extends Model implements SeoInterface, Sitemapable * @return array */ public static $searchSettings = [ - 'filterableAttributes' => ['label', 'description', 'preparation', 'ingredients'], + 'filterableAttributes' => ['label', 'description', 'preparation', 'ingredients', 'published'], 'sortableAttributes' => ['label', 'description', 'preparation', 'ingredients'] ]; diff --git a/app/Models/Recipe.php b/app/Models/Recipe.php index a2398691..09bb3f6f 100644 --- a/app/Models/Recipe.php +++ b/app/Models/Recipe.php @@ -92,7 +92,7 @@ class Recipe extends Model implements SeoInterface, Sitemapable * @return array */ public static $searchSettings = [ - 'filterableAttributes' => ['title', 'preparation', 'advice'], + 'filterableAttributes' => ['title', 'preparation', 'advice', 'published'], 'sortableAttributes' => ['title', 'preparation', 'advice'] ]; diff --git a/config/scout.php b/config/scout.php index d6b8882c..35e2cee3 100644 --- a/config/scout.php +++ b/config/scout.php @@ -1,6 +1,7 @@ env('MEILISEARCH_HOST', 'http://localhost:7700'), 'key' => env('MEILISEARCH_KEY'), 'index-settings' => [ - Product::class => Product::$searchSettings, - Recipe::class => Recipe::$searchSettings, - News::class => News::$searchSettings, + Product::class => Product::$searchSettings, + Recipe::class => Recipe::$searchSettings, + News::class => News::$searchSettings, + NewsBreeding::class => NewsBreeding::$searchSettings, ], ], ]; diff --git a/package-lock.json b/package-lock.json index 9e6dd0bb..c5cd4090 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3034,9 +3034,9 @@ "dev": true }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "dependencies": { "path-key": "^3.1.0", @@ -5542,9 +5542,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -7549,9 +7549,9 @@ "dev": true }, "node_modules/sweetalert2": { - "version": "11.14.4", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.14.4.tgz", - "integrity": "sha512-8QMzjxCuinwm18EK5AtYvuhP+lRMRxTWVXy8om9wGlULsXSI4TD29kyih3VYrSXMMBlD4EShFvNC7slhTC7j0w==", + "version": "11.15.3", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.15.3.tgz", + "integrity": "sha512-+0imNg+XYL8tKgx8hM0xoiXX3KfgxHDmiDc8nTJFO89fQEEhJlkecSdyYOZ3IhVMcUmoNte4fTIwWiugwkPU6w==", "dev": true, "funding": { "type": "individual", @@ -7559,9 +7559,9 @@ } }, "node_modules/swiper": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.1.tgz", - "integrity": "sha512-jGmEA/fNz1lACIcY4/40ggm1Gcyv+EUivmgV/Jd2WFPsEJhbWXnRAwzZR8OPjkBLtDxmzcoYG/iiAMWfRs0YKQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.0.tgz", + "integrity": "sha512-rjjAKgDEs+grR2eQshVDCcE4KNPC7CI294nfcbV9gE8WCsLdvOYXDeZKUYevqAZZp8j5hE7kpT3dAGVKFBWlxQ==", "dev": true, "funding": [ { diff --git a/resources/sass/fo/vendor/_swiper.scss b/resources/sass/fo/vendor/_swiper.scss index a26837fb..7e0f5fd2 100644 --- a/resources/sass/fo/vendor/_swiper.scss +++ b/resources/sass/fo/vendor/_swiper.scss @@ -1,4 +1,4 @@ -@import '~/swiper/swiper.min.css'; +@import '~/swiper/swiper-bundle.min'; // * CUSTOM STYLE .swiper { diff --git a/resources/ts/fo/components/MeilisearchModelsComponent.vue b/resources/ts/fo/components/MeilisearchModelsComponent.vue new file mode 100644 index 00000000..0558efdb --- /dev/null +++ b/resources/ts/fo/components/MeilisearchModelsComponent.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/resources/ts/fo/components/MeilisearchPaginateViewsComponent.vue b/resources/ts/fo/components/MeilisearchPaginateViewsComponent.vue new file mode 100644 index 00000000..0a7065d7 --- /dev/null +++ b/resources/ts/fo/components/MeilisearchPaginateViewsComponent.vue @@ -0,0 +1,398 @@ + + + + + diff --git a/resources/ts/index.d.ts b/resources/ts/index.d.ts index 4ddfbcaa..9f8555ee 100644 --- a/resources/ts/index.d.ts +++ b/resources/ts/index.d.ts @@ -12,17 +12,19 @@ interface EnumInterface { value: number | string; } -// * Laravel Paginator - -interface PaginatorLink { - url: null | string; - label: string; - active: boolean; +// * Paginator +interface LaravelScout { + hits: string[]; + hitsPerPage: Number; + page: Number; + processingTimeMs: Number; + query: String; + totalHits: Number; + totalPages: Number; } - interface Paginator { current_page: number; - data: LaravelModelList; + data: LaravelScout|array; first_page_url: string; from: number; last_page: number; @@ -35,6 +37,11 @@ interface Paginator { to: number; total: number; } +interface PaginatorLink { + url: null | string; + label: string; + active: boolean; +} // * Others type VselectOptionType = { @@ -70,7 +77,7 @@ type NestedStringList = NestedStringListInterface | StringList | string; type NestedNumberList = NestedNumberListInterface | NumberList | number; type ModelList = Array; -interface ModelListInterface extends ModelList { } +interface ModelListInterface extends ModelList {} declare global { DepStatus; diff --git a/resources/ts/libs/.gitkeep b/resources/ts/libs/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/resources/views/fo/pages/breeding/article.blade.php b/resources/views/fo/pages/breeding/article.blade.php index cd9826e9..8c7f62f9 100644 --- a/resources/views/fo/pages/breeding/article.blade.php +++ b/resources/views/fo/pages/breeding/article.blade.php @@ -48,6 +48,7 @@
+ {{-- CONTENT --}}
@@ -56,10 +57,10 @@ {!! clean($newsBreedingModel->content) !!}
-
diff --git a/resources/views/fo/pages/breeding/index.blade.php b/resources/views/fo/pages/breeding/index.blade.php index 2b337ec8..a2a2cb33 100644 --- a/resources/views/fo/pages/breeding/index.blade.php +++ b/resources/views/fo/pages/breeding/index.blade.php @@ -3,31 +3,27 @@ @section('title', str('Les élevages')->upper()) @section('description', str('Les élevages')->ucFirst()) @section('bg-offset', true) -@section('content') +@section('content') -
-
+
- - @include('fo.partials.breeding.farming-poultry-other', [ 'commitmentId' => 4, 'title' => 'L’élevage des volailles', 'text' => nl2br( - __( - 'Face aux préoccupations des consommateurs sur le bien-être animal, Le Gaulois vous dit tout sur ses :strongStartéleveurs partenaires:strongEnd et ses :strongStartconditions d’élevages de volailles.:strongEnd :br Chaque jour, nous collaborons avec les éleveurs partenaires engagés dans la :strongStartdémarche éthique et responsable:strongEnd pour améliorer le confort de nos volailles. Chez les éleveurs partenaires Le Gaulois, la :strongStartprotection animale:strongEnd ne cesse d’être l’enjeu majeur.', + __('Face aux préoccupations des consommateurs sur le bien-être animal, Le Gaulois vous dit tout sur ses :strongStartéleveurs partenaires:strongEnd et ses :strongStartconditions d’élevages de volailles.:strongEnd :br Chaque jour, nous collaborons avec les éleveurs partenaires engagés dans la :strongStartdémarche éthique et responsable:strongEnd pour améliorer le confort de nos volailles. Chez les éleveurs partenaires Le Gaulois, la :strongStartprotection animale:strongEnd ne cesse d’être l’enjeu majeur.', [ 'strongStart' => '', 'strongEnd' => '', 'br' => '
', - ])), + ] + ) + ), ]) -
- @endsection diff --git a/resources/views/fo/pages/breeding/oui-c-est-bon.blade.php b/resources/views/fo/pages/breeding/oui-c-est-bon.blade.php index ca6045c6..4e3eb528 100644 --- a/resources/views/fo/pages/breeding/oui-c-est-bon.blade.php +++ b/resources/views/fo/pages/breeding/oui-c-est-bon.blade.php @@ -3,10 +3,9 @@ @section('title', str('La marque 100% volaille française')->upper()) @section('description', str('La marque 100% volaille française')->ucFirst()) @section('bg-offset', true) + @section('content') - -
@@ -20,7 +19,5 @@
--}} - - {{-- --}} @endsection diff --git a/resources/views/fo/pages/breeding/show.blade.php b/resources/views/fo/pages/breeding/show.blade.php index a00e890e..9c4e6acb 100644 --- a/resources/views/fo/pages/breeding/show.blade.php +++ b/resources/views/fo/pages/breeding/show.blade.php @@ -7,13 +7,11 @@ @section('content') @include('fo.partials.breeding.navigation') - @include('fo.layouts.header-banner', [ 'picto' => $staticPageModel->picture, 'picto_alt' => $staticPageModel->picture_alt, 'picto_title' => $staticPageModel->picture_title, ]) -
@foreach ($newsBreedingModels as $newsBreedingModel) {{-- @foreach ($items as $newsBreedingModel) --}} @@ -27,18 +25,18 @@ 'btnLink' => route('fo.breeding.article.show', [$staticPageModel, $newsBreedingModel]), ]) @endforeach - @include('fo.partials.breeding.farming-poultry-other', [ 'commitmentId' => 4, 'title' => 'L\'élevage des volailles', 'text' => nl2br( - __( - 'Face aux préoccupations des consommateurs sur le bien-être animal, Le Gaulois vous dit tout sur ses :strongStartéleveurs partenaires:strongEnd et ses :strongStartconditions d\'élevages de volailles.:strongEnd :br Chaque jour, nous collaborons avec les éleveurs partenaires engagés dans la :strongStartdémarche éthique et responsable:strongEnd pour améliorer le confort de nos volailles. Chez les éleveurs partenaires Le Gaulois, la :strongStartprotection animale:strongEnd ne cesse d\'être l\'enjeu majeur.', + __('Face aux préoccupations des consommateurs sur le bien-être animal, Le Gaulois vous dit tout sur ses :strongStartéleveurs partenaires:strongEnd et ses :strongStartconditions d\'élevages de volailles.:strongEnd :br Chaque jour, nous collaborons avec les éleveurs partenaires engagés dans la :strongStartdémarche éthique et responsable:strongEnd pour améliorer le confort de nos volailles. Chez les éleveurs partenaires Le Gaulois, la :strongStartprotection animale:strongEnd ne cesse d\'être l\'enjeu majeur.', [ 'strongStart' => '', 'strongEnd' => '', 'br' => '
', - ])), + ] + ) + ), ])
@endsection diff --git a/resources/views/fo/pages/search.blade.php b/resources/views/fo/pages/search.blade.php index f18d312b..06d20be3 100644 --- a/resources/views/fo/pages/search.blade.php +++ b/resources/views/fo/pages/search.blade.php @@ -10,97 +10,37 @@ @include('fo.layouts.header-banner') {{-- MAIN CONTENT --}}
-
- {{-- INPUT SEARCH --}} -
-
- -
-
+
+ @php + $data = [ + 'elements' => [ + [ + 'name' => str(__('models.classes.product'))->ucFirst()->plural(), + 'class' => App\Models\Product::class, + 'models' => $productModels, + ], + [ + 'name' => str(__('models.classes.recipe'))->ucFirst()->plural(), + 'class' => App\Models\Recipe::class, + 'models' => $recipeModels, + ], + [ + 'name' => str(__('models.classes.news'))->ucFirst()->plural(), + 'class' => App\Models\News::class, + 'models' => $newsModels, + ], + [ + 'name' => str(trans_choice('models.classes.news_breeding', \INF))->ucFirst()->plural(), + 'class' => App\Models\NewsBreeding::class, + 'models' => $newsBreedingModels, + ], + ], + 'searchValue' => request()->input('texte'), + 'imgArrowSlider' => Vite::asset('resources/assets/images/common/arrow-brown.svg'), + 'routeUrl' => route('fo.search.string'), + ]; + @endphp +
- {{-- PRODUCTS --}} -
- @if ($productModels->isNotEmpty()) - @include('fo.partials.cards-slider', [ - 'id' => 'product', - 'title' => __('models.classes.product'), - 'classTitle' => 'text-start', - 'models' => $productModels, - 'btnRouteName' => route('fo.products.index'), - 'btnRouteTitle' => 'nos produits', - 'bgReverse' => true, - 'btnText' => 'voir tous les produits', - ]) - @endif -
- {{-- RECIPES --}} -
- @if ($recipeModels->isNotEmpty()) - @include('fo.partials.cards-slider', [ - 'id' => 'recipe', - 'title' => __('models.classes.recipe'), - 'classTitle' => 'text-start', - 'models' => $recipeModels, - 'btnRouteName' => route('fo.recipes.index'), - 'btnRouteTitle' => 'nos recettes', - ]) - @endif -
- {{-- NEWS --}} -
- @if ($newsModels->isNotEmpty()) - @include('fo.partials.cards-slider', [ - 'id' => 'new', - 'viewPath' => "fo.partials.news-card-tiny", - 'title' => __('models.classes.news'), - 'classTitle' => 'text-start', - 'models' => $newsModels, - 'btnRouteName' => route('fo.news.index'), - 'btnRouteTitle' => 'nos recettes', - ]) - @endif -
- {{-- NO RESULT --}} - @if ($productModels->isEmpty() && $recipeModels->isEmpty()) -
-
- -
-

{{ __('Aucun élément trouvé') }}

-

{{ __('Veuillez réinitialiser votre recherche') }}

- - {{ __('Réinitialiser la recherche') }} - -
- @endif
@endsection diff --git a/resources/views/fo/partials/news-breeding-card.blade.php b/resources/views/fo/partials/news-breeding-card.blade.php new file mode 100644 index 00000000..a2f18494 --- /dev/null +++ b/resources/views/fo/partials/news-breeding-card.blade.php @@ -0,0 +1 @@ +@include('fo.partials.news-card', $model) diff --git a/resources/views/fo/partials/news-card.blade.php b/resources/views/fo/partials/news-card.blade.php index c4e48ece..e48c8d96 100644 --- a/resources/views/fo/partials/news-card.blade.php +++ b/resources/views/fo/partials/news-card.blade.php @@ -8,17 +8,21 @@ --}}
- +
- {{ $model->thumbnail_alt }} -
-

- {{ $model->newsCategory->title }} -

-
+ {{ $model->thumbnail_alt ?? $model->picture_alt }} + @if (isset($model->newsCategory)) +
+

+ {{ $model->newsCategory->title }} +

+
+ @endif

{{ $model->updated_at ->format('d/m/Y') }}

diff --git a/resources/views/fo/partials/product-card.blade.php b/resources/views/fo/partials/product-card.blade.php index f33ed894..0df8538f 100644 --- a/resources/views/fo/partials/product-card.blade.php +++ b/resources/views/fo/partials/product-card.blade.php @@ -1,4 +1,4 @@ -
+
diff --git a/resources/views/fo/partials/recipe-badges.blade.php b/resources/views/fo/partials/recipe-badges.blade.php index 8bb4b3a6..81757114 100644 --- a/resources/views/fo/partials/recipe-badges.blade.php +++ b/resources/views/fo/partials/recipe-badges.blade.php @@ -2,7 +2,7 @@ @php $items = []; foreach ($model->products as $product) { - $relation = isset($product->submeat) && !is_null($product->submeat) ? $product->submeat : $product->meat; + $relation = isset($product->submeat) && !is_null($product->submeat) ? $product->submeat : ($product->meat); $items = array_merge($items, isset($relation) && !is_null($relation) ? [$relation->only('label')['label']] : []); } @endphp diff --git a/resources/views/fo/partials/recipe-card.blade.php b/resources/views/fo/partials/recipe-card.blade.php index 421604db..813e41c8 100644 --- a/resources/views/fo/partials/recipe-card.blade.php +++ b/resources/views/fo/partials/recipe-card.blade.php @@ -1,5 +1,4 @@
-
- {{-- FIXME: change packaging by the first product packaging - {{ $model->products[0]->packaging_alt }} --}} + {{ $model->products[0]->packaging_alt }} --}}
name('fo.')->group(function () { Route::get('/charte-de-confidentialite', [StaticPageController::class, 'policies'])->name('policies.show'); Route::get('/conditions-generales-de-vente', [StaticPageController::class, 'selling'])->name('conditions.show'); Route::get('/accessibilite', [StaticPageController::class, 'accessibility'])->name('accessibility.show'); - Route::get('/search', [StaticPageController::class, 'search'])->name('search.index'); + + // * SEARCH + Route::get('/recherche', [SearchController::class, 'search'])->name('search.index'); + Route::post('/recherche', [SearchController::class, 'searchString'])->name('search.string'); // * CONTACT Route::get('/contact', [ContactController::class, 'contact'])->name('contact.show'); From 0adf212693a6b02c75ed125df4a25eb5c8d291a3 Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Tue, 7 Jan 2025 12:29:06 +0100 Subject: [PATCH 3/6] feat: :sparkles: add search static page edition in back office --- .../StaticPages/UpdateStaticPageRequest.php | 3 ++- app/Providers/ViewServiceProvider.php | 1 + .../MeilisearchPaginateViewsComponent.vue | 3 --- resources/views/bo/layouts/sidemenu.blade.php | 19 +++++++++++++++++++ .../bo/pages/static_pages/form.blade.php | 3 ++- resources/views/fo/pages/search.blade.php | 1 - 6 files changed, 24 insertions(+), 6 deletions(-) diff --git a/app/Http/Requests/Bo/StaticPages/UpdateStaticPageRequest.php b/app/Http/Requests/Bo/StaticPages/UpdateStaticPageRequest.php index 59cdfefd..e3c46025 100644 --- a/app/Http/Requests/Bo/StaticPages/UpdateStaticPageRequest.php +++ b/app/Http/Requests/Bo/StaticPages/UpdateStaticPageRequest.php @@ -144,7 +144,8 @@ class UpdateStaticPageRequest extends UpdateMiniCrudRequest !$staticPageModel->type->equals(StaticPageType::recipe) && !$staticPageModel->type->equals(StaticPageType::product) && !$staticPageModel->type->equals(StaticPageType::home) && - !$staticPageModel->type->equals(StaticPageType::contact) + !$staticPageModel->type->equals(StaticPageType::contact) && + !$staticPageModel->type->equals(StaticPageType::search) ) { $rules = \array_merge( $rules, diff --git a/app/Providers/ViewServiceProvider.php b/app/Providers/ViewServiceProvider.php index 21600892..b5c857a9 100644 --- a/app/Providers/ViewServiceProvider.php +++ b/app/Providers/ViewServiceProvider.php @@ -130,6 +130,7 @@ class ViewServiceProvider extends ServiceProvider ['name' => 'breedingFoodStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::breedingFood)], ['name' => 'breedingHealthStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::breedingHealth)], ['name' => 'newsStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::news)], + ['name' => 'searchStaticPageModel', 'value' => StaticPage::getCachedStaticPage(StaticPageType::search)], ])->map(function ($array) { View::share($array['name'], (function () use ($array) { return $array['value'] ?: null; diff --git a/resources/ts/fo/components/MeilisearchPaginateViewsComponent.vue b/resources/ts/fo/components/MeilisearchPaginateViewsComponent.vue index 0a7065d7..06ef16b2 100644 --- a/resources/ts/fo/components/MeilisearchPaginateViewsComponent.vue +++ b/resources/ts/fo/components/MeilisearchPaginateViewsComponent.vue @@ -387,9 +387,6 @@ function ajaxErrorHandler(e: any): void { 30% { opacity: 1; } 70% { opacity: 1; } 100% { left: calc(100% - 20.5px);opacity: 0; } -} -.placeholder-img { - } .no-result-icon { width: 4rem; diff --git a/resources/views/bo/layouts/sidemenu.blade.php b/resources/views/bo/layouts/sidemenu.blade.php index b71d213b..d08c05b7 100644 --- a/resources/views/bo/layouts/sidemenu.blade.php +++ b/resources/views/bo/layouts/sidemenu.blade.php @@ -1002,6 +1002,25 @@
@endif + {{-- RECIPE PAGE --}} + @if (isset($searchStaticPageModel)) + + url()->current() === + route('bo.static_pages.edit', $searchStaticPageModel->type->value()), + ])> + + url()->current() === + route('bo.static_pages.edit', $searchStaticPageModel->type->value()), + ])> + {{ sprintf('Page %s', $searchStaticPageModel->type->label()) }} + + @endif {{-- CLUB --}}