From d699e048e6fae9864cb25fb175c4995af1c35543 Mon Sep 17 00:00:00 2001 From: horus Date: Sun, 25 Sep 2022 02:32:49 +0200 Subject: Exclude in Cocktail search. --- app/Http/Controllers/CocktailController.php | 47 ++++++++++++++++++++++++--- resources/views/cocktail_list.blade.php | 10 ++++++ resources/views/fragments/cocktails.blade.php | 7 +++- resources/views/layouts/base.blade.php | 9 +++++ 4 files changed, 67 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/CocktailController.php b/app/Http/Controllers/CocktailController.php index 21655d2..ef24ab8 100644 --- a/app/Http/Controllers/CocktailController.php +++ b/app/Http/Controllers/CocktailController.php @@ -28,17 +28,40 @@ class CocktailController extends Controller public function search(Request $request) { $ingredients = $request->input("i"); + if ( ! isset($ingredients) || empty($ingredients) ) { + $ingredients = array( $request->input("q") ); + } + $excludes = $request->input("i_ex"); + if ( ! isset($excludes) || empty($excludes) ) { + $excludes = array(); + } $cocktails = new Cocktail; foreach($ingredients as $q) { $q = Helper::escapeLike($q); $q = "%".$q."%"; - $cocktails = $cocktails->where(function($query) use ($q){ - $query->whereHas("getIngredients", function ($query) use ($q){ - $query->where('name', 'like', $q); + + if ( ! isset($excludes) || empty($excludes) ) { + $cocktails = $cocktails->where(function($query) use ($q){ + $query->whereHas("getIngredients", function ($query) use ($q){ + $query->where('name', 'like', $q); + }); }); - }); + } else { + foreach($excludes as $ex) { + $ex = Helper::escapeLike($ex); + $ex = "%".$ex."%"; + + $cocktails = $cocktails->where(function($query) use ($q, $ex){ + $query->whereHas("getIngredients", function ($query) use ($q){ + $query->where('name', 'like', $q); + })->whereDoesntHave("getIngredients", function ($query) use ($ex){ + $query->where('name', 'like', $ex); + }); + }); + } + } } $count = $cocktails->count(); @@ -51,6 +74,20 @@ class CocktailController extends Controller } $search_phrase = rtrim($search_phrase, " und "); - return view('cocktail_list', [ "cocktails" => $cocktails, "count" => $count, "search_terms" => array_filter($ingredients), "search_phrase" => $search_phrase ]); + $exclude_phrase = ""; + if ( isset($excludes) ) { + foreach(array_filter($excludes) as $term) { + if ( $exclude_phrase != "" ) + $exclude_phrase = $exclude_phrase . " und "; + $exclude_phrase = $exclude_phrase . ucwords($term); + } + $exclude_phrase = rtrim($exclude_phrase, " und "); + } + + $search_phrase .= " und nicht nach " . $exclude_phrase; + + + + return view('cocktail_list', [ "cocktails" => $cocktails, "count" => $count, "search_terms" => array_filter($ingredients), "search_phrase" => $search_phrase, "exclude_terms" => array_filter($excludes) ]); } } diff --git a/resources/views/cocktail_list.blade.php b/resources/views/cocktail_list.blade.php index 7165b9f..a0fc9a3 100644 --- a/resources/views/cocktail_list.blade.php +++ b/resources/views/cocktail_list.blade.php @@ -30,6 +30,16 @@ Du hast nach {{ implode(" und ", $search_terms) }} gesucht: {{$count}} Cocktails @endforeach gesucht. + + Ausgeschlossen sind folgende Zutaten: + + @foreach( $exclude_terms as $term ) + @if ( !$loop->first ) + und + @endif + {{ $term }} + @endforeach +

Zurück zur Suche diff --git a/resources/views/fragments/cocktails.blade.php b/resources/views/fragments/cocktails.blade.php index 3c6ebda..c6cd7ae 100644 --- a/resources/views/fragments/cocktails.blade.php +++ b/resources/views/fragments/cocktails.blade.php @@ -29,9 +29,14 @@

-

Wie wäre es zum Beispiel mit einem Cocktail aus Gin und Kirschwasser?

+
+
+ +
+

Wie wäre es zum Beispiel mit einem Cocktail aus Gin und Kirschwasser?

+ diff --git a/resources/views/layouts/base.blade.php b/resources/views/layouts/base.blade.php index 0770ca6..50b6a2f 100644 --- a/resources/views/layouts/base.blade.php +++ b/resources/views/layouts/base.blade.php @@ -96,6 +96,15 @@ function addField(){ document.getElementById("cocktail_search_form_field").appendChild(field); } +function addFieldExclude(){ + var field = document.createElement("input"); + field.setAttribute("type","text"); + field.setAttribute("placeholder","Weitere Ausnahme (optional)"); + field.setAttribute("name","i_ex[]"); + field.className = "form-control"; + + document.getElementById("cocktail_search_form_field_exclude").appendChild(field); +}