diff --git a/src/Query/Scopes/Filters/Fields/Bard.php b/src/Query/Scopes/Filters/Fields/Bard.php index 18e7f23530..5af40ca404 100644 --- a/src/Query/Scopes/Filters/Fields/Bard.php +++ b/src/Query/Scopes/Filters/Fields/Bard.php @@ -2,7 +2,58 @@ namespace Statamic\Query\Scopes\Filters\Fields; -class Bard extends Textarea +use Statamic\Support\Arr; +use Statamic\Support\Str; + +class Bard extends FieldtypeFilter { - // + public function fieldItems() + { + return [ + 'operator' => [ + 'type' => 'select', + 'placeholder' => __('Select Operator'), + 'options' => [ + 'like' => __('Contains'), + 'null' => __('Empty'), + 'not-null' => __('Not empty'), + ], + 'default' => 'like', + ], + 'value' => [ + 'type' => 'text', + 'if' => [ + 'operator' => 'like', + ], + 'required' => false, + ], + ]; + } + + public function apply($query, $handle, $values) + { + $operator = $values['operator']; + $value = $values['value']; + + if ($operator === 'like') { + $value = Str::ensureLeft($value, '%'); + $value = Str::ensureRight($value, '%'); + } + + match ($operator) { + 'null' => $query->whereNull($handle), + 'not-null' => $query->whereNotNull($handle), + default => $query->where($handle, $operator, $value), + }; + } + + public function badge($values) + { + $field = $this->fieldtype->field()->display(); + $operator = $values['operator']; + $translatedOperator = Arr::get($this->fieldItems(), "operator.options.{$operator}"); + $value = $values['value']; + + return $field.' '.strtolower($translatedOperator).' '.$value; + } } diff --git a/src/Query/Scopes/Filters/Fields/Grid.php b/src/Query/Scopes/Filters/Fields/Grid.php index ed710847ee..6446ba9fe9 100644 --- a/src/Query/Scopes/Filters/Fields/Grid.php +++ b/src/Query/Scopes/Filters/Fields/Grid.php @@ -2,7 +2,58 @@ namespace Statamic\Query\Scopes\Filters\Fields; -class Grid extends Textarea +use Statamic\Support\Arr; +use Statamic\Support\Str; + +class Grid extends FieldtypeFilter { - // + public function fieldItems() + { + return [ + 'operator' => [ + 'type' => 'select', + 'placeholder' => __('Select Operator'), + 'options' => [ + 'like' => __('Contains'), + 'null' => __('Empty'), + 'not-null' => __('Not empty'), + ], + 'default' => 'like', + ], + 'value' => [ + 'type' => 'text', + 'if' => [ + 'operator' => 'like', + ], + 'required' => false, + ], + ]; + } + + public function apply($query, $handle, $values) + { + $operator = $values['operator']; + $value = $values['value']; + + if ($operator === 'like') { + $value = Str::ensureLeft($value, '%'); + $value = Str::ensureRight($value, '%'); + } + + match ($operator) { + 'null' => $query->whereNull($handle), + 'not-null' => $query->whereNotNull($handle), + default => $query->where($handle, $operator, $value), + }; + } + + public function badge($values) + { + $field = $this->fieldtype->field()->display(); + $operator = $values['operator']; + $translatedOperator = Arr::get($this->fieldItems(), "operator.options.{$operator}"); + $value = $values['value']; + + return $field.' '.strtolower($translatedOperator).' '.$value; + } } diff --git a/src/Query/Scopes/Filters/Fields/Replicator.php b/src/Query/Scopes/Filters/Fields/Replicator.php index 4d0ee67dc8..1614b5f1ef 100644 --- a/src/Query/Scopes/Filters/Fields/Replicator.php +++ b/src/Query/Scopes/Filters/Fields/Replicator.php @@ -2,7 +2,58 @@ namespace Statamic\Query\Scopes\Filters\Fields; -class Replicator extends Textarea +use Statamic\Support\Arr; +use Statamic\Support\Str; + +class Replicator extends FieldtypeFilter { - // + public function fieldItems() + { + return [ + 'operator' => [ + 'type' => 'select', + 'placeholder' => __('Select Operator'), + 'options' => [ + 'like' => __('Contains'), + 'null' => __('Empty'), + 'not-null' => __('Not empty'), + ], + 'default' => 'like', + ], + 'value' => [ + 'type' => 'text', + 'if' => [ + 'operator' => 'like', + ], + 'required' => false, + ], + ]; + } + + public function apply($query, $handle, $values) + { + $operator = $values['operator']; + $value = $values['value']; + + if ($operator === 'like') { + $value = Str::ensureLeft($value, '%'); + $value = Str::ensureRight($value, '%'); + } + + match ($operator) { + 'null' => $query->whereNull($handle), + 'not-null' => $query->whereNotNull($handle), + default => $query->where($handle, $operator, $value), + }; + } + + public function badge($values) + { + $field = $this->fieldtype->field()->display(); + $operator = $values['operator']; + $translatedOperator = Arr::get($this->fieldItems(), "operator.options.{$operator}"); + $value = $values['value']; + + return $field.' '.strtolower($translatedOperator).' '.$value; + } }