diff --git a/app/Http/Controllers/Bo/FaqQuestionsController.php b/app/Http/Controllers/Bo/FaqQuestionsController.php index ac692607..1329a303 100644 --- a/app/Http/Controllers/Bo/FaqQuestionsController.php +++ b/app/Http/Controllers/Bo/FaqQuestionsController.php @@ -12,9 +12,18 @@ class FaqQuestionsController extends Controller { use UpdateModelStatus; - public function index() + public function index(Request $request) { - $q = FaqQuestions::paginate(); + $q = FaqQuestions::with('theme'); + $this->sortQuery($q, ['utility']); + if ($request->sort_col === 'utility' and $request->sort_way) { + $q = $q->select('faq_questions.*'); + $q = $q->selectRaw( + '(1 - faq_questions.negative_vote / faq_questions.positive_vote) AS `faq_questions_utility`' + ); + $q = $q->orderBy('faq_questions_utility', $request->sort_way); + } + $q = $q->paginate(); return view('bo.faq-questions.index', compact('q')); } diff --git a/app/Http/Controllers/Bo/OCBBreedersController.php b/app/Http/Controllers/Bo/OCBBreedersController.php index 1a2d7e7a..3370e89c 100644 --- a/app/Http/Controllers/Bo/OCBBreedersController.php +++ b/app/Http/Controllers/Bo/OCBBreedersController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Bo; use App\Enums\OCBType; use App\Http\Controllers\Controller; +use App\Http\Requests\SearchRequest; use App\Http\Requests\StoreOcbBreeder; use App\Http\Requests\UpdateOcbBreeder; use App\Models\OCBBreeder; @@ -14,10 +15,23 @@ class OCBBreedersController extends Controller { use UpdateModelStatus; - public function index(OCBType $type) + public function index(SearchRequest $request, OCBType $type) { - $b = OCBBreeder::where('ocbType', $type->value)->paginate(); - return view('bo.ocbbreeders.index', compact('b', 'type')); + $b = OCBBreeder::where('ocbType', $type->value); + if ($request->search) { + $b = $this->searchQuery( + $b, + $request->search, + 'inuavs', + 'first_name', + 'last_name', + ['first_name', 'last_name'], + ['last_name', 'first_name'], + ); + } + $searchFields = trans('Nom, Prénom, Inuav'); + $b = $b->paginate(); + return view('bo.ocbbreeders.index', compact('b', 'type', 'searchFields')); } public function create() diff --git a/app/Http/Controllers/Bo/ProductsController.php b/app/Http/Controllers/Bo/ProductsController.php index 88969397..8fd3539c 100644 --- a/app/Http/Controllers/Bo/ProductsController.php +++ b/app/Http/Controllers/Bo/ProductsController.php @@ -27,12 +27,26 @@ class ProductsController extends Controller public function index(SearchProduct $request) { - $p = Products::orderBy('order', 'ASC'); + $p = Products::query()->with('range'); if ($request->search) { - $p = $p->where('name', 'LIKE', "%$request->search%"); + $p = $this->searchQuery( + $p, + $request->search, + 'name', + 'description', + 'ingredients', + 'tips', + 'tags', + 'seo_title', + 'seo_description', + 'info1', + 'info2' + ); } + $this->sortQuery($p); + $searchFields = trans('Nom, Desc., Ingr., Cons., Tags, Infos'); $p = $p->paginate(); - return view('bo.products.index', compact('p')); + return view('bo.products.index', compact('p', 'searchFields')); } public function create() diff --git a/app/Http/Controllers/Bo/RecipesController.php b/app/Http/Controllers/Bo/RecipesController.php index 65ead956..6573da90 100644 --- a/app/Http/Controllers/Bo/RecipesController.php +++ b/app/Http/Controllers/Bo/RecipesController.php @@ -6,6 +6,7 @@ use App\Enums\ArticleCategory; use App\Enums\NotificationType; use App\Events\NewNotification; use App\Http\Controllers\Controller; +use App\Http\Requests\SearchRequest; use App\Http\Requests\StoreRecipe; use App\Http\Requests\UpdateRecipe; use App\Models\Articles; @@ -20,10 +21,34 @@ class RecipesController extends Controller { use UpdateModelStatus; - public function index() + public function index(SearchRequest $request) { - $r = Recipes::paginate(); - return view('bo.recipes.index', compact('r')); + $r = Recipes::with('products.range'); + if ($request->search) { + $r = $this->searchQuery( + $r, + $request->search, + 'title', + 'catch_phrase', + 'seo_title', + 'seo_description', + 'ingredients', + 'preparation', + 'advice' + ); + } + $r = $this->sortQuery($r, ['range_id']); + // handle ignore columns (range_id which depends on the product used) + if ($request->sort_col === 'range_id' and $request->sort_way) { + $r = $r->select('recipes.*'); + $r = $r->join('recipes_products', 'recipes.id', '=', 'recipes_products.recipe_id'); + $r = $r->join('products', 'products.id', '=', 'recipes_products.product_id'); + $r = $r->join('ranges', 'products.range_id', '=', 'ranges.id'); + $r = $r->orderBy('ranges.name', $request->sort_way); + } + $searchFields = trans('Titre, Description, Ingredient, Préparation, Conseils'); + $r = $r->paginate(); + return view('bo.recipes.index', compact('r', 'searchFields')); } public function create() @@ -71,7 +96,7 @@ class RecipesController extends Controller public function edit(Recipes $r) { $c = ConsumptionTimes::all(); - $p = Products::all(); + $p = Products::with(['recipes', 'consumptionTimes'])->get(); $a = Articles::where('type', ArticleCategory::actu())->get(); $raIds = []; foreach ($r->articles as $recipe_article) { diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index ce1176dd..10a30d09 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -2,14 +2,90 @@ namespace App\Http\Controllers; +use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Model; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Routing\Controller as BaseController; +use Illuminate\Support\Facades\Schema; +use Illuminate\Support\Facades\Session; class Controller extends BaseController { use AuthorizesRequests; use DispatchesJobs; use ValidatesRequests; + + /** + * Undocumented function + * + * @param Builder $query The eloquent query builder + * @param string $search The query string + * @param string|array ...$field Either a simple array or a string + * In case of a string the two fields would be concatenate to make the search + * @return Builder + */ + protected function searchQuery( + Builder $query, + string $search, + ...$field + ): Builder { + if (count($field)) { + $table = $query->getModel()->getTable(); + $query = $query->where(function ($q) use ($field, $search, $table) { + foreach ($field as $f) { + $f = str_replace('?', '\?', $f); + if (is_array($f)) { + $q->orWhereRaw( + sprintf("UPPER(CONCAT(%s)) LIKE UPPER(?)", collect($f)->map(function ($q) use ($table) { + return "`$table`.`$q`"; + })->implode(', \' \', ')), + ["%$search%"] + ); + } else { + $q->orWhereRaw("UPPER(`$table`.`$f`) LIKE UPPER(?)", ["%$search%"]); + } + } + }); + } + return $query; + } + + /** + * Sort columns with a query + * + * @param Builder $query + * @param array $ignore + * @return Builder + */ + protected function sortQuery(Builder $query, array $ignore = []): Builder + { + $rName = request()->route()->getName(); + $table = $query->getModel()->getTable(); + if (request()->sort_col) { + Session::put("$rName.sort_col", request()->sort_col); + } else { + Session::remove("$rName.sort_col"); + } + if (request()->sort_way) { + Session::put("$rName.sort_way", request()->sort_way); + } else { + Session::remove("$rName.sort_way"); + } + if (request()->sort_col and request()->sort_way) { + if ( + !isset($ignore) or + (isset($ignore) and !in_array(request()->sort_col, $ignore)) + ) { + $query = $query->orderBy(\sprintf("$table.%s", request()->sort_col), request()->sort_way); + } + } elseif (Schema::hasColumn($table, 'order')) { + $query = $query->orderBy('order', 'ASC'); + Session::put("$rName.sort_col", 'order'); + Session::put("$rName.sort_way", 'asc'); + } + Session::save(); + return $query; + } } diff --git a/app/Http/Controllers/FaqController.php b/app/Http/Controllers/FaqController.php index 5ce35d9c..448e7fbc 100644 --- a/app/Http/Controllers/FaqController.php +++ b/app/Http/Controllers/FaqController.php @@ -9,10 +9,29 @@ use Illuminate\Http\Request; class FaqController extends Controller { + /** + * OrderBy utility + * Working SQL query + * + * select * from `faq_themes` + * inner join `faq_questions` on `faq_themes`.`id` = `faq_questions`.`faq_themes_id` + * inner JOIN ( + * SELECT (1 - faq_questions.negative_vote / faq_questions.positive_vote) AS `faq_questions_utility` + * FROM `faq_questions` + * ) b on `faq_themes`.`id` = `faq_questions`.`faq_themes_id` + * order by `faq_questions_utility` desc; + * + * @return void + */ public function index() { return view('front.faq.index', [ - 'themes' => FaqThemes::with('questions')->get() + 'themes' => FaqThemes::with(['questions' => function ($q) { + return $q->select('faq_questions.*') + ->selectRaw( + '(1 - faq_questions.negative_vote / faq_questions.positive_vote) AS `faq_questions_utility`' + )->orderBy('faq_questions_utility', 'desc'); + }])->orderBy('order')->get() ]); } diff --git a/app/Http/Middleware/XssSanitizer.php b/app/Http/Middleware/XssSanitizer.php index f76446ee..9426ad5c 100644 --- a/app/Http/Middleware/XssSanitizer.php +++ b/app/Http/Middleware/XssSanitizer.php @@ -2,6 +2,7 @@ namespace App\Http\Middleware; +use App\Lib\Utils; use Closure; class XssSanitizer @@ -19,6 +20,7 @@ class XssSanitizer array_walk_recursive($inputs, function (&$input, $name) use ($params) { if (in_array($name, $params)) { $input = clean($input); + $input = Utils::assertNoInternalUrls($name, $input); } else { $input = strip_tags($input); } diff --git a/app/Http/Requests/SearchRequest.php b/app/Http/Requests/SearchRequest.php new file mode 100644 index 00000000..4d33229b --- /dev/null +++ b/app/Http/Requests/SearchRequest.php @@ -0,0 +1,30 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'search' => 'sometimes|string|min:1' + ]; + } +} diff --git a/app/Lib/Utils.php b/app/Lib/Utils.php index f4c15bb7..4b114bc9 100644 --- a/app/Lib/Utils.php +++ b/app/Lib/Utils.php @@ -2,6 +2,11 @@ namespace App\Lib; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Route; +use Illuminate\Validation\ValidationException; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; + // phpcs:disable Generic.Files.LineLength.TooLong class Utils { @@ -92,7 +97,7 @@ class Utils * @param string|null $to * @return void */ - public static function mbStrtr($str, $from, $to = null) + public static function mbStrtr($str, $from, $to = null): string { if (is_array($from)) { $from = array_map('utf8_decode', $from); @@ -101,4 +106,40 @@ class Utils } return utf8_encode(strtr(utf8_decode($str), utf8_decode($from), utf8_decode($to))); } + + /** + * Assert That no Back Office url is present on txt + * + * @param string $field + * @param string $text + * @return string + * @throws \Illuminate\Validation\ValidationException + */ + public static function assertNoInternalUrls(string $field, string $text): string + { + $routes = Route::getRoutes(); + // url replace and email replace + $text = preg_replace_callback( + '/(?P(?:http[s]?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*))/', + function ($matches) use ($routes, $field) { + $match = collect($matches)->first() ?? ''; + $url = $match; + try { + $request = Request::create($url); + // if a route is match then it do not throws exception + if ($routes->match($request)->getPrefix() === 'bo') { + // removes the matched url + throw ValidationException::withMessages([ + $field => trans($field) . " : Il est interdit de coller une url du Back Office Le Gaulois dans ce champ" + ]); + } + return $match; + } catch (NotFoundHttpException $e) { + return $match; + } + }, + $text + ); + return $text; + } } diff --git a/resources/assets/images/le-vegetal/logo-lgl_202.png b/resources/assets/images/le-vegetal/logo-lgl_202.png index ed216468..52cf4246 100644 Binary files a/resources/assets/images/le-vegetal/logo-lgl_202.png and b/resources/assets/images/le-vegetal/logo-lgl_202.png differ diff --git a/resources/assets/images/le-vegetal/logo-lgl_202.webp b/resources/assets/images/le-vegetal/logo-lgl_202.webp index 71f1b803..1e58dddd 100644 Binary files a/resources/assets/images/le-vegetal/logo-lgl_202.webp and b/resources/assets/images/le-vegetal/logo-lgl_202.webp differ diff --git a/resources/assets/images/le-vegetal/logo-lgl_289.png b/resources/assets/images/le-vegetal/logo-lgl_289.png index ce73bcec..a5a1be96 100644 Binary files a/resources/assets/images/le-vegetal/logo-lgl_289.png and b/resources/assets/images/le-vegetal/logo-lgl_289.png differ diff --git a/resources/assets/images/le-vegetal/logo-lgl_289.webp b/resources/assets/images/le-vegetal/logo-lgl_289.webp index 18c3c70c..2fc581ab 100644 Binary files a/resources/assets/images/le-vegetal/logo-lgl_289.webp and b/resources/assets/images/le-vegetal/logo-lgl_289.webp differ diff --git a/resources/assets/images/le-vegetal/logo-lgl_378.png b/resources/assets/images/le-vegetal/logo-lgl_378.png index 4085bba7..15c00cf6 100644 Binary files a/resources/assets/images/le-vegetal/logo-lgl_378.png and b/resources/assets/images/le-vegetal/logo-lgl_378.png differ diff --git a/resources/assets/images/le-vegetal/logo-lgl_378.webp b/resources/assets/images/le-vegetal/logo-lgl_378.webp index 6f95e163..17869ff4 100644 Binary files a/resources/assets/images/le-vegetal/logo-lgl_378.webp and b/resources/assets/images/le-vegetal/logo-lgl_378.webp differ diff --git a/resources/assets/images/le-vegetal/logo_gamme.png b/resources/assets/images/le-vegetal/logo_gamme.png index 2d87ed89..f5d339b8 100644 Binary files a/resources/assets/images/le-vegetal/logo_gamme.png and b/resources/assets/images/le-vegetal/logo_gamme.png differ diff --git a/resources/assets/images/le-vegetal/logo_gamme.webp b/resources/assets/images/le-vegetal/logo_gamme.webp index b117d306..18e3ef89 100644 Binary files a/resources/assets/images/le-vegetal/logo_gamme.webp and b/resources/assets/images/le-vegetal/logo_gamme.webp differ diff --git a/resources/assets/images/produit/logo_gamme.png b/resources/assets/images/produit/logo_gamme.png deleted file mode 100644 index 2d87ed89..00000000 Binary files a/resources/assets/images/produit/logo_gamme.png and /dev/null differ diff --git a/resources/sass/front/_header.scss b/resources/sass/front/_header.scss index abfaf9bd..3478f3f6 100644 --- a/resources/sass/front/_header.scss +++ b/resources/sass/front/_header.scss @@ -362,6 +362,9 @@ body > div > header { } } } + &.color-vegetal nav { + background-color: $vegetalTitle; + } & .menu-toggle { display: block; } diff --git a/resources/sass/front/_sub_header.scss b/resources/sass/front/_sub_header.scss index 42f7356b..f84f432b 100644 --- a/resources/sass/front/_sub_header.scss +++ b/resources/sass/front/_sub_header.scss @@ -699,13 +699,19 @@ & .infos { margin: 0 auto; - width: 80%; + width: auto; + display: flex; + flex-direction: row; + flex-wrap: wrap; & > li { line-height: 27px; font-family: "CreamyScriptRegular"; color: $color5; font-size: 3em; + display: flex; + flex-direction: row; + align-items: center; &:before { font-family: "icomoon"; diff --git a/resources/sass/front/pages/recipes/_show.scss b/resources/sass/front/pages/recipes/_show.scss index aa80866c..5fb6acb7 100644 --- a/resources/sass/front/pages/recipes/_show.scss +++ b/resources/sass/front/pages/recipes/_show.scss @@ -114,15 +114,20 @@ margin-bottom: 0.2em !important; font-size: 1.5rem; } + } + ul { + padding-left: 1.5em; - &::before { - content: "• "; - color: $color6; - font-size: 1.7em; - left: 0; - line-height: 1em; - position: absolute; - top: -0.1em; + & > li { + &::before { + content: "• "; + color: $color6; + font-size: 1.7em; + left: 0; + line-height: 1em; + position: absolute; + top: -0.1em; + } } } } diff --git a/resources/views/bo/balanced-menus/edit.blade.php b/resources/views/bo/balanced-menus/edit.blade.php index 2f3c0380..81dda192 100644 --- a/resources/views/bo/balanced-menus/edit.blade.php +++ b/resources/views/bo/balanced-menus/edit.blade.php @@ -65,15 +65,15 @@
- +
- +
- +
@endsection diff --git a/resources/views/bo/faq-questions/index.blade.php b/resources/views/bo/faq-questions/index.blade.php index 900abce0..de74f96a 100644 --- a/resources/views/bo/faq-questions/index.blade.php +++ b/resources/views/bo/faq-questions/index.blade.php @@ -12,11 +12,14 @@ - - - - - + @include('bo.modules.tableColSorter', [ + 'cols' => [ + 'question' => 'Question', + 'faq_themes_id' => 'Thème', + 'utility' => 'Utilité', + 'status' => 'Publié ?' + ] + ]) diff --git a/resources/views/bo/modules/searchBar.blade.php b/resources/views/bo/modules/searchBar.blade.php new file mode 100644 index 00000000..3231b087 --- /dev/null +++ b/resources/views/bo/modules/searchBar.blade.php @@ -0,0 +1,37 @@ +@php + $routeName = request()->route()->getName(); + $iArgs = []; + if(request()->sort_col) { + $iArgs['sort_col'] = request()->sort_col; + } + + if(request()->search) { + $iArgs['search'] = request()->sort_way; + } +@endphp +
+
+
+
+
+ +
+ @if(request()->sort_col) + + @endif + @if(request()->sort_way) + + @endif + +
+ + +
+
+ +
+
diff --git a/resources/views/bo/modules/tableColSorter.blade.php b/resources/views/bo/modules/tableColSorter.blade.php new file mode 100644 index 00000000..c7773f0e --- /dev/null +++ b/resources/views/bo/modules/tableColSorter.blade.php @@ -0,0 +1,42 @@ +@php + $route = request()->route(); + $routeName = $route->getName(); + $noOrder = request()->sort_col and request()->sort_way; +@endphp + + @foreach($cols as $col => $colname) + @php + $iArgs = ['sort_col' => $col]; + if(request()->search) { + $iArgs['search'] = request()->search; + } + @endphp + {{-- NO Sort for order column --}} + @if($col === 'order') + @if($noOrder) @continue @endif + + @continue + @endif + + @endforeach + {{-- Buttons Col --}} + + diff --git a/resources/views/bo/moments/edit.blade.php b/resources/views/bo/moments/edit.blade.php index 3d4a8f46..d726e45d 100644 --- a/resources/views/bo/moments/edit.blade.php +++ b/resources/views/bo/moments/edit.blade.php @@ -129,7 +129,7 @@
- +
@@ -142,7 +142,7 @@
- +
- +
diff --git a/resources/views/bo/ocbbreeders/index.blade.php b/resources/views/bo/ocbbreeders/index.blade.php index 884f7bed..eb6ccbc8 100644 --- a/resources/views/bo/ocbbreeders/index.blade.php +++ b/resources/views/bo/ocbbreeders/index.blade.php @@ -8,6 +8,7 @@
+ @include('bo.modules.searchBar') {{ $b->withQueryString()->links()}}
QuestionThèmeUtilitéPublié ?
+ {{ $colname }} + + + {{ $colname }} + @if(!session("$routeName.sort_way") or session("$routeName.sort_col") !== $col or (session("$routeName.sort_way") === 'desc' and session("$routeName.sort_col") === $col)) +  ↓  + @endif + @if(!session("$routeName.sort_way") or session("$routeName.sort_col") !== $col or (session("$routeName.sort_way") === 'asc' and session("$routeName.sort_col") === $col)) +  ↑  + @endif + + + @if($noOrder) + $iArgs['search']] : []) }}"> + + + @endif +
diff --git a/resources/views/bo/products/index.blade.php b/resources/views/bo/products/index.blade.php index 62862db8..f3eac3a2 100644 --- a/resources/views/bo/products/index.blade.php +++ b/resources/views/bo/products/index.blade.php @@ -8,25 +8,19 @@
-
-
- -
- -
-
- + @include('bo.modules.searchBar') {{ $p->withQueryString()->links() }}
- - - - - - - - + @include('bo.modules.tableColSorter', [ + 'cols' => [ + 'name' => 'Nom', + 'range_id' => 'Gamme', + 'star' => 'Produit star ?', + 'status' => 'Publié ?', + 'order' => 'Ordre', + ] + ]) @foreach($p as $product) @@ -51,6 +45,7 @@ @endif + @if(!request()->sort_col and !request()->sort_way) + @endif @endforeach diff --git a/resources/views/bo/recipes/form-inputs.blade.php b/resources/views/bo/recipes/form-inputs.blade.php index 6e01e85b..2fd3bca5 100644 --- a/resources/views/bo/recipes/form-inputs.blade.php +++ b/resources/views/bo/recipes/form-inputs.blade.php @@ -81,18 +81,18 @@
diff --git a/resources/views/bo/recipes/index.blade.php b/resources/views/bo/recipes/index.blade.php index 2c5057ff..cac18653 100644 --- a/resources/views/bo/recipes/index.blade.php +++ b/resources/views/bo/recipes/index.blade.php @@ -8,15 +8,17 @@
+ @include('bo.modules.searchBar') {{ $r->withQueryString()->links() }}
NomGammeProduit star ?Publié ?Ordre
@if ($loop->first) @@ -69,6 +64,7 @@ @endif Éditer
- - - - - - + @include('bo.modules.tableColSorter', [ + 'cols' => [ + 'title' => 'Titre', + 'range_id' => 'Gamme', + 'status' => 'Publié ?' + ] + ]) @foreach($r as $recipe) diff --git a/resources/views/front/brand/traceability.blade.php b/resources/views/front/brand/traceability.blade.php index 6f600dce..5607c748 100644 --- a/resources/views/front/brand/traceability.blade.php +++ b/resources/views/front/brand/traceability.blade.php @@ -29,9 +29,10 @@
-
+ {{-- Ticket 149 removed this item (facturé) --}} + {{--
-
+
--}} @endsection diff --git a/resources/views/front/products/product-vegetal.blade.php b/resources/views/front/products/product-vegetal.blade.php index 86c230aa..2322cc7d 100644 --- a/resources/views/front/products/product-vegetal.blade.php +++ b/resources/views/front/products/product-vegetal.blade.php @@ -1,6 +1,6 @@
- Le Végétal - Le Gaulois + Le Végétal - Le Gaulois

Pour tous ceux qui aiment le visuel et la texture de la viande et qui souhaitent diversifier leur alimentation et leurs sources de protéines, Le Gaulois a développé une gamme 100% GOURMANDE, SANS VIANDE.

Les atouts de la gamme

Le Gaulois a mis tout son savoir-faire dans l’élaboration de sa gamme Le Gaulois Végétal : des recettes gourmandes, de qualité, destinées à toute la famille.

diff --git a/resources/views/front/products/vegetal-animation.blade.php b/resources/views/front/products/vegetal-animation.blade.php index e9ac125d..991af4b2 100644 --- a/resources/views/front/products/vegetal-animation.blade.php +++ b/resources/views/front/products/vegetal-animation.blade.php @@ -2,7 +2,7 @@
- Le Gaulois - Le Vegetal/>
+            <img class= @desktop
diff --git a/resources/views/layouts/app-header.blade.php b/resources/views/layouts/app-header.blade.php index b8a35fd9..e960f178 100644 --- a/resources/views/layouts/app-header.blade.php +++ b/resources/views/layouts/app-header.blade.php @@ -93,7 +93,8 @@ -
  • + {{-- Ticket 148 removed this menu entry (facturé) --}} + {{--
  • {{ __('Témoignage des éleveurs engagés dans la démarche') }} @@ -101,7 +102,7 @@ {{__('Oui c\'est Bon! - Le Gaulois') }} -
  • + --}}
    NomGammePublié ?