diff --git a/modules/backend/widgets/Filter.php b/modules/backend/widgets/Filter.php index 15a85f5d9..4049b152c 100644 --- a/modules/backend/widgets/Filter.php +++ b/modules/backend/widgets/Filter.php @@ -142,6 +142,7 @@ class Filter extends WidgetBase } break; + case 'numberrange': if ($scope->value && is_array($scope->value) && count($scope->value) === 2 && $scope->value[0] && @@ -157,6 +158,12 @@ class Filter extends WidgetBase $params['max'] = $max ? $max : null; } + break; + + case 'text': + $params['value'] = $scope->value; + $params['size'] = array_get($scope->config, 'size', 10); + break; } @@ -238,7 +245,7 @@ class Filter extends WidgetBase $this->setScopeValue($scope, $number); break; - case 'numberrange': + case 'numberrange': $numbers = $this->numbersFromAjax(post('options.numbers')); if (!empty($numbers)) { @@ -252,6 +259,19 @@ class Filter extends WidgetBase $this->setScopeValue($scope, $numbers); break; + + case 'text': + $values = post('options.value'); + + if (!is_null($values) && $values !== '') { + list($value) = $values; + } + else { + $value = null; + } + + $this->setScopeValue($scope, $value); + break; } /* @@ -705,6 +725,25 @@ class Filter extends WidgetBase break; + case 'text': + /* + * Condition + */ + if ($scopeConditions = $scope->conditions) { + $query->whereRaw(DbDongle::parse(strtr($scopeConditions, [ + ':value' => Db::getPdo()->quote($scope->value), + ]))); + } + + /* + * Scope + */ + elseif ($scopeMethod = $scope->scope) { + $query->$scopeMethod($scope->value); + } + + break; + default: $value = is_array($scope->value) ? array_keys($scope->value) : $scope->value; diff --git a/modules/backend/widgets/filter/partials/_scope_text.htm b/modules/backend/widgets/filter/partials/_scope_text.htm new file mode 100644 index 000000000..c7e31ee19 --- /dev/null +++ b/modules/backend/widgets/filter/partials/_scope_text.htm @@ -0,0 +1,15 @@ +
+ +
\ No newline at end of file diff --git a/modules/system/assets/ui/less/filter.less b/modules/system/assets/ui/less/filter.less index 9d41ab111..071ed0658 100644 --- a/modules/system/assets/ui/less/filter.less +++ b/modules/system/assets/ui/less/filter.less @@ -86,6 +86,31 @@ } } + &.text { + padding: 0 10px; + + &, label { + margin: 0; + } + + .form-control { + display: inline; + width: auto; + height: 30px; + margin-left: 10px; + } + + &:after { + content: ''; + } + + .loading-indicator { + top: -2px; + right: 7px; + left: auto; + } + } + &:hover, &.active { &, &.custom-checkbox label { color: @color-filter-text-active; diff --git a/modules/system/assets/ui/storm.css b/modules/system/assets/ui/storm.css index 9fe8b1163..4f7bb79d7 100644 --- a/modules/system/assets/ui/storm.css +++ b/modules/system/assets/ui/storm.css @@ -2881,6 +2881,11 @@ ul.autocomplete.dropdown-menu.inspector-autocomplete li a{padding:5px 12px;white .control-filter > .filter-scope.checkbox,.control-filter > .filter-scope.checkbox label{margin-bottom:0} .control-filter > .filter-scope.checkbox label{padding-left:25px} .control-filter > .filter-scope.checkbox:after{content:''} +.control-filter > .filter-scope.text{padding:0 10px} +.control-filter > .filter-scope.text,.control-filter > .filter-scope.text label{margin:0} +.control-filter > .filter-scope.text .form-control{display:inline;width:auto;height:30px;margin-left:10px} +.control-filter > .filter-scope.text:after{content:''} +.control-filter > .filter-scope.text .loading-indicator{top:-2px;right:7px;left:auto} .control-filter > .filter-scope:hover,.control-filter > .filter-scope.active,.control-filter > .filter-scope:hover.custom-checkbox label,.control-filter > .filter-scope.active.custom-checkbox label{color:#000000} .control-filter > .filter-scope:hover .filter-label,.control-filter > .filter-scope.active .filter-label{color:#000000} .control-filter > .filter-scope:hover.active .filter-setting,.control-filter > .filter-scope.active.active .filter-setting{background-color:#5f9a4c}