diff --git a/Civi/Api4/Action/ContactCategoryDefinition/Get.php b/Civi/Api4/Action/ContactCategoryDefinition/Get.php index 9e3ae06..aed8747 100644 --- a/Civi/Api4/Action/ContactCategoryDefinition/Get.php +++ b/Civi/Api4/Action/ContactCategoryDefinition/Get.php @@ -18,46 +18,56 @@ class Get extends DAOGetAction { /** */ public function _run(Result $result) { + if ($this->withLabels) { + // Ensure we have search_type. + if ($this->select && !in_array('search_type', $this->select)) { + $this->addSelect('search_type'); + } + } + parent::_run($result); - $groupIDs = $searchIDs = []; - foreach ($result as $idx => $row) { - if ($row['search_type'] === 'group') { - $groupIDs[] = $row['search_data']['group_id'] ?? NULL; - } - elseif ($row['search_type'] === 'search') { - $searchIDs[] = $row['search_data']['saved_search_id'] ?? NULL; - } - } - $groupIDs = array_filter($groupIDs); - $searchIDs = array_filter($searchIDs); - if ($groupIDs) { - $groupNames = Group::get() - ->addWhere('id', 'IN', $groupIDs) - ->addSelect('title') - ->execute()->indexBy('id')->column('title'); - } - if ($searchIDs) { - $searchNames = SavedSearch::get() - ->addWhere('id', 'IN', $searchIDs) - ->addSelect('label') - ->execute()->indexBy('id')->column('label'); - } - if ($searchNames || $groupNames) { + if ($this->withLabels) { + $groupIDs = $searchIDs = []; foreach ($result as $row) { - if ($row['search_type'] === 'group' - && !empty($groupNames[$row['search_data']['group_id'] ?? '']) - ) { - $row['search_source'] = $groupNames[$row['search_data']['group_id'] ?? '']; + if ($row['search_type'] === 'group') { + $groupIDs[] = $row['search_data']['group_id'] ?? NULL; } - elseif (($row['search_type'] === 'search') - && !empty($searchNames[$row['search_data']['saved_search_id'] ?? '']) - ) { - $row['search_source'] = $searchNames[$row['search_data']['saved_search_id'] ?? '']; + elseif ($row['search_type'] === 'search') { + $searchIDs[] = $row['search_data']['saved_search_id'] ?? NULL; + } + } + $groupIDs = array_filter($groupIDs); + $searchIDs = array_filter($searchIDs); + $groupNames = $searchNames = []; + if ($groupIDs) { + $groupNames = Group::get() + ->addWhere('id', 'IN', $groupIDs) + ->addSelect('title') + ->execute()->indexBy('id')->column('title'); + } + if ($searchIDs) { + $searchNames = SavedSearch::get() + ->addWhere('id', 'IN', $searchIDs) + ->addSelect('label') + ->execute()->indexBy('id')->column('label'); + } + if ($searchNames || $groupNames) { + foreach ($result as $idx => $row) { + if ($row['search_type'] === 'group' + && !empty($groupNames[$row['search_data']['group_id'] ?? '']) + ) { + $row['search_source'] = $groupNames[$row['search_data']['group_id'] ?? '']; + } + elseif (($row['search_type'] === 'search') + && !empty($searchNames[$row['search_data']['saved_search_id'] ?? '']) + ) { + $row['search_source'] = $searchNames[$row['search_data']['saved_search_id'] ?? '']; + } + $result[$idx] = $row; } } } - $result[$idx] = $row; } }