diff --git a/modules/backend/behaviors/ListController.php b/modules/backend/behaviors/ListController.php index 1cba33666..ce40e392d 100644 --- a/modules/backend/behaviors/ListController.php +++ b/modules/backend/behaviors/ListController.php @@ -216,6 +216,13 @@ class ListController extends ControllerBehavior return $widget->onRefresh(); }); + /* + * Extend the query of the list of options + */ + $filterWidget->bindEvent('filter.extendQuery', function($query, $scope) { + $this->controller->listFilterExtendQuery($query, $scope); + }); + // Apply predefined filter values $widget->addFilter([$filterWidget, 'applyAllScopesToQuery']); @@ -350,6 +357,16 @@ class ListController extends ControllerBehavior { } + /** + * Controller override: Extend the query used for populating the filter + * options before the default query is processed. + * @param October\Rain\Database\Builder $query + * @param array $scope + */ + public function listFilterExtendQuery($query, $scope) + { + } + /** * Returns a CSS class name for a list row (). * @param Model $record The populated model used for the column diff --git a/modules/backend/widgets/Filter.php b/modules/backend/widgets/Filter.php index 4f3417bdb..27e0418bc 100644 --- a/modules/backend/widgets/Filter.php +++ b/modules/backend/widgets/Filter.php @@ -208,12 +208,16 @@ class Filter extends WidgetBase protected function getOptionsFromModel($scope, $searchQuery = null) { $model = $this->scopeModels[$scope->scopeName]; + $query = $model->newQuery(); + + $this->fireEvent('filter.extendQuery', [$query, $scope]); + if (!$searchQuery) { - return $model->all(); + return $query->get(); } $searchFields = [$model->getKeyName(), $this->getScopeNameColumn($scope)]; - return $model->searchWhere($searchQuery, $searchFields)->get(); + return $query->searchWhere($searchQuery, $searchFields)->get(); } /**