diff --git a/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php b/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php index b0fef3dee957..5a768e5c7428 100644 --- a/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php +++ b/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php @@ -19,12 +19,7 @@ public static function getAdminSettings() { ->addWhere('option_group_id:name', '=', 'afform_placement') ->addOrderBy('weight') ->execute(), 'label', 'value'); - $afformTags = \CRM_Utils_Array::formatForSelect2((array) \Civi\Api4\OptionValue::get(FALSE) - ->addSelect('value', 'label', 'icon', 'description') - ->addWhere('is_active', '=', TRUE) - ->addWhere('option_group_id:name', '=', 'afform_tags') - ->addOrderBy('weight') - ->execute(), 'label', 'value'); + $afformTags = \CRM_Utils_Array::formatForSelect2((array) \Civi\Api4\Utils\AfformTags::getTagOptions()); $afformTypes = (array) \Civi\Api4\OptionValue::get(FALSE) ->addSelect('name', 'label', 'icon') ->addWhere('is_active', '=', TRUE) diff --git a/ext/afform/core/Civi/Api4/Afform.php b/ext/afform/core/Civi/Api4/Afform.php index d4761fbb9386..6fc8cb2d434f 100644 --- a/ext/afform/core/Civi/Api4/Afform.php +++ b/ext/afform/core/Civi/Api4/Afform.php @@ -187,7 +187,9 @@ public static function getFields($checkPermissions = TRUE) { [ 'name' => 'tags', 'title' => E::ts('Tags'), - 'pseudoconstant' => ['optionGroupName' => 'afform_tags'], + 'pseudoconstant' => [ + 'callback' => [Utils\AfformTags::class, 'getTagOptions'], + ], 'data_type' => 'Array', 'input_type' => 'Select', ], diff --git a/ext/afform/core/Civi/Api4/Utils/AfformTags.php b/ext/afform/core/Civi/Api4/Utils/AfformTags.php new file mode 100644 index 000000000000..4234244f554f --- /dev/null +++ b/ext/afform/core/Civi/Api4/Utils/AfformTags.php @@ -0,0 +1,33 @@ +addSelect('name', 'label', 'description', 'color') + ->addWhere('used_for', 'CONTAINS', 'Afform') + ->addWhere('is_selectable', '=', TRUE) + ->execute(); + + $tagOptions = []; + + // prefer tag names to keys for portability + foreach ($tagRecords as $record) { + $record['id'] = $record['name']; + $tagOptions[] = $record; + } + + return $tagOptions; + } +} diff --git a/ext/afform/core/managed/AfformTags.mgd.php b/ext/afform/core/managed/AfformTags.mgd.php index 807ed205788d..7eb83e39e812 100644 --- a/ext/afform/core/managed/AfformTags.mgd.php +++ b/ext/afform/core/managed/AfformTags.mgd.php @@ -2,49 +2,52 @@ use CRM_Afform_ExtensionUtil as E; -// Option group for Afform.tags field +// This file: +// - adds option value to `tag_used_for`, allowing Afforms to be tagged +// NOTE: this is unusual in that afform is not a db entity +// (normally the value normally corresponds to a physical table name in the +// database - here it is just the entity name) +// +// - creates an example tag that can be used for afforms. This is more to demonstrate +// how it can be used, as Donor Journey might be useful for some orgs but not for others +// @todo think of better example tag that is more universally applicable? return [ [ - 'name' => 'AfformTags', - 'entity' => 'OptionGroup', - 'update' => 'always', + 'name' => 'AfformTags:tag_used_for', + 'entity' => 'OptionValue', 'cleanup' => 'always', + 'update' => 'always', 'params' => [ 'version' => 4, 'values' => [ - 'name' => 'afform_tags', - 'title' => E::ts('Afform Tags'), - 'is_reserved' => TRUE, + 'option_group_id.name' => 'tag_used_for', + 'value' => 'Afform', + 'name' => 'Afform', + 'label' => E::ts('Afforms'), + 'is_reserved' => FALSE, 'is_active' => TRUE, - 'option_value_fields' => [ - 'name', - 'label', - 'icon', - 'description', - 'color', - ], + 'domain_id' => NULL, ], - 'match' => ['name'], + 'match' => ['option_group_id', 'name'], ], ], [ 'name' => 'AfformTags:donor_journey', - 'entity' => 'OptionValue', + 'entity' => 'Tag', 'cleanup' => 'unused', 'update' => 'unmodified', 'params' => [ 'version' => 4, 'values' => [ - 'option_group_id.name' => 'afform_tags', 'name' => 'donor_journey', - 'value' => 'donor_journey', + 'tag_used_for' => ['afform'], 'label' => E::ts('Donor Journey'), 'is_reserved' => FALSE, 'is_active' => TRUE, 'icon' => 'fa-coins', 'description' => E::ts('Forms relating to donor journey.'), ], - 'match' => ['option_group_id', 'name'], + 'match' => ['name'], ], ], ];