diff --git a/ext/afform/mock/ang/testContactEmailSearchForm.aff.html b/ext/afform/mock/ang/testContactEmailSearchForm.aff.html index 390be362f67d..90de6fee163d 100644 --- a/ext/afform/mock/ang/testContactEmailSearchForm.aff.html +++ b/ext/afform/mock/ang/testContactEmailSearchForm.aff.html @@ -1,9 +1,8 @@
-
- +
diff --git a/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php b/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php index aaf693fb9d00..ade9286e2609 100644 --- a/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php +++ b/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php @@ -779,8 +779,9 @@ protected function formatViewValue($key, $rawValue) { */ protected function applyFilters() { // Allow all filters that are included in SELECT clause or are fields on the Afform. - $afformFilters = $this->getAfformFilters(); - $allowedFilters = array_merge($this->getSelectAliases(), $afformFilters); + $fieldFilters = $this->getAfformFilterFields(); + $directiveFilters = $this->getAfformDirectiveFilters(); + $allowedFilters = array_merge($this->getSelectAliases(), $fieldFilters, $directiveFilters); // Ignore empty strings $filters = array_filter($this->filters, [$this, 'hasValue']); @@ -793,7 +794,8 @@ protected function applyFilters() { if (in_array($key, $allowedFilters, TRUE) || !array_diff($fieldNames, $allowedFilters)) { $this->applyFilter($fieldNames, $value); } - if (in_array($key, $afformFilters, TRUE)) { + // Filter labels are used to set the page title for drilldown forms + if (in_array($key, $directiveFilters, TRUE)) { $this->addFilterLabel($key, $value); } } @@ -1051,22 +1053,36 @@ private function hasValue($value) { } /** - * Returns a list of filter fields and directive filters + * Returns a list of afform fields used as search filters * - * Automatically applies directive filters + * Limited to the current display * - * @return array + * @return string[] + */ + private function getAfformFilterFields() { + $afform = $this->loadAfform(); + if ($afform) { + return array_column(\CRM_Utils_Array::findAll( + $afform['searchDisplay']['fieldset'], + ['#tag' => 'af-field'] + ), 'name'); + } + return []; + } + + /** + * Finds all directive filters and applies the ones with a literal value + * + * Returns the list of filters that did not get auto-applied (value was passed via js) + * + * @return string[] */ - private function getAfformFilters() { + private function getAfformDirectiveFilters() { $afform = $this->loadAfform(); if (!$afform) { return []; } - // Get afform field filters - $filterKeys = array_column(\CRM_Utils_Array::findAll( - $afform['searchDisplay']['fieldset'], - ['#tag' => 'af-field'] - ), 'name'); + $filterKeys = []; // Get filters passed into search display directive from Afform markup $filterAttr = $afform['searchDisplay']['filters'] ?? NULL; if ($filterAttr && is_string($filterAttr) && $filterAttr[0] === '{') {