Skip to content
Snippets Groups Projects
Unverified Commit 3ecfe7f9 authored by bgm's avatar bgm Committed by GitHub
Browse files

Merge pull request #23807 from colemanw/fixAfformTitle

SearchKit - Only add filter values to Afform title if passed internally
parents ecd8c938 f3a21337
No related merge requests found
<div af-fieldset="">
<af-field name="source" />
<af-field name="contact_type" />
<div class="af-container af-layout-inline">
<af-field name="Contact_Email_contact_id_01.email" />
<af-field name="Contact_Email_contact_id_01.location_type_id" defn="{input_attrs: {multiple: true}}" />
</div>
<crm-search-display-table filters="{last_name: 'AfformTest'}" search-name="TestContactEmailSearch" display-name="TestContactEmailDisplay"></crm-search-display-table>
<crm-search-display-table filters="{last_name: 'AfformTest', contact_type: dummy_var}" search-name="TestContactEmailSearch" display-name="TestContactEmailDisplay"></crm-search-display-table>
</div>
......@@ -779,8 +779,9 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction {
*/
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 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction {
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 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction {
}
/**
* 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] === '{') {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment