From 6b59ee2a6427431a1d5e76bf70f8c5e97b10eb3e Mon Sep 17 00:00:00 2001 From: horus Date: Sun, 25 Sep 2022 03:51:14 +0200 Subject: Verodern der Zutaten möglich. --- app/Http/Controllers/CocktailController.php | 52 +++++++++++++++++---------- resources/views/cocktail_list.blade.php | 2 ++ resources/views/fragments/cocktails.blade.php | 2 +- 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/app/Http/Controllers/CocktailController.php b/app/Http/Controllers/CocktailController.php index ef24ab8..117f490 100644 --- a/app/Http/Controllers/CocktailController.php +++ b/app/Http/Controllers/CocktailController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Str; use App\Cocktail; use App\Ingredient; @@ -33,7 +34,7 @@ class CocktailController extends Controller } $excludes = $request->input("i_ex"); if ( ! isset($excludes) || empty($excludes) ) { - $excludes = array(); + $excludes = array(""); } $cocktails = new Cocktail; @@ -42,25 +43,38 @@ class CocktailController extends Controller $q = Helper::escapeLike($q); $q = "%".$q."%"; - if ( ! isset($excludes) || empty($excludes) ) { - $cocktails = $cocktails->where(function($query) use ($q){ + 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); + if ( Str::contains($q, '$or$') ) { + $exploded = explode('$or$', $q); + $query->where( function ($query) use ($exploded){ + foreach($exploded as $e) + $query->orWhere('name', 'like', $e); + }); + } else { + $query->where('name', 'like', $q); + } }); + if ( "%%" != $ex ) { + $query->whereDoesntHave("getIngredients", function ($query) use ($ex){ + $query->where('name', 'like', $ex); + }); + } }); - } 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); - }); - }); - } + } + } + + foreach($ingredients as $key => $q) { + if ( Str::contains($q, '$or$') ) { + unset($ingredients[$key]); + $exploded = explode('$or$', $q); + foreach($exploded as $key => $val ) + $exploded[$key] = trim($exploded[$key] ); + $ingredients = array_merge($ingredients, $exploded); } } @@ -84,8 +98,10 @@ class CocktailController extends Controller $exclude_phrase = rtrim($exclude_phrase, " und "); } - $search_phrase .= " und nicht nach " . $exclude_phrase; + if ( "" != $exclude_phrase) + $search_phrase .= " und nicht nach " . $exclude_phrase; + #var_dump( array_filter($ingredients));exit; 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 a0fc9a3..37d5627 100644 --- a/resources/views/cocktail_list.blade.php +++ b/resources/views/cocktail_list.blade.php @@ -31,6 +31,7 @@ Du hast nach {{ implode(" und ", $search_terms) }} gesucht: {{$count}} Cocktails gesucht. + @if ( ! empty($exclude_terms) ) Ausgeschlossen sind folgende Zutaten: @foreach( $exclude_terms as $term ) @@ -39,6 +40,7 @@ Du hast nach {{ implode(" und ", $search_terms) }} gesucht: {{$count}} Cocktails @endif {{ $term }} @endforeach + @endif

diff --git a/resources/views/fragments/cocktails.blade.php b/resources/views/fragments/cocktails.blade.php index c6cd7ae..fa8a13f 100644 --- a/resources/views/fragments/cocktails.blade.php +++ b/resources/views/fragments/cocktails.blade.php @@ -34,7 +34,7 @@ -

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

+

Tipp: Du kannst Zutaten verodern. "Jamaika $or$ Jamaica" findet beide Schreibweisen. Oder auch: "Peat $or$ Torf $or$ Islay"

-- cgit v1.2.3