summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhorus2022-09-25 02:32:49 +0200
committerhorus2022-09-25 02:32:49 +0200
commitd699e048e6fae9864cb25fb175c4995af1c35543 (patch)
treeb2ddbfe049adeeb329f166f07181850ac359a176
parent11da906808cd5d57168b181facba87f96332e3f7 (diff)
downloadkategorischeraperitif-d699e048e6fae9864cb25fb175c4995af1c35543.tar.gz
Exclude in Cocktail search.
-rw-r--r--app/Http/Controllers/CocktailController.php47
-rw-r--r--resources/views/cocktail_list.blade.php10
-rw-r--r--resources/views/fragments/cocktails.blade.php7
-rw-r--r--resources/views/layouts/base.blade.php9
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