diff options
| -rw-r--r-- | app/Http/Controllers/CocktailController.php | 47 | ||||
| -rw-r--r-- | resources/views/cocktail_list.blade.php | 10 | ||||
| -rw-r--r-- | resources/views/fragments/cocktails.blade.php | 7 | ||||
| -rw-r--r-- | 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 + <strong>{{ $term }}</strong> + @endforeach + </p> <p> <a href="{{ route('cocktail_index') }}">Zurück zur Suche</a> 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 @@ <div id="cocktail_search_form_field"> <input type="text" class="form-control" id=ingredient_search name="i[]" id="front_search_form" aria-describedby="suchform-help" placeholder="Hier nach der gewünschten Zutat suchen..." required> </div> - <p id="front_search_help" class="form-text">Wie wäre es zum Beispiel mit einem Cocktail aus Gin und Kirschwasser?</p> + <br> + <div id="cocktail_search_form_field_exclude"> + <input type="text" class="form-control" id=ingredient_search_exclude name="i_ex[]" id="front_search_form" aria-describedby="suchform-help" placeholder="Ignoriere Cocktails mit dieser Zutat! (optional)"> + </div--> </div> + <p id="front_search_help" class="form-text">Wie wäre es zum Beispiel mit einem Cocktail aus Gin und Kirschwasser?</p> <button class="btn btn-primary" type="button" onclick="addField()">Zutat hinzufügen</button> + <button class="btn btn-primary" type="button" onclick="addFieldExclude()">Ausnahme hinzufügen</button> <button type="submit" class="btn btn-secondary">Suchen</button> </form> </div> 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); +} </script> <?php |
