From ffb9cdec46912922be880e96869c504fd6f7ee05 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Fri, 12 Apr 2019 14:28:23 -0400 Subject: [PATCH] Add pseudoconstant to UFField dao --- CRM/Core/BAO/UFField.php | 32 ++++++++++++++++++++------------ CRM/Core/DAO/UFField.php | 5 ++++- xml/schema/Core/UFField.xml | 3 +++ 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/CRM/Core/BAO/UFField.php b/CRM/Core/BAO/UFField.php index dba79c97c8..9717f8ff35 100644 --- a/CRM/Core/BAO/UFField.php +++ b/CRM/Core/BAO/UFField.php @@ -1061,24 +1061,32 @@ SELECT id * * @param bool $force * - * @return array, multidimensional; e.g. $result['field_name']['label'] + * @return array + * e.g. $result['field_name']['label'] */ public static function getAvailableFieldsFlat($force = FALSE) { - // FIXME reset when data model changes - static $result = NULL; - if ($result === NULL || $force) { - $fieldTree = self::getAvailableFields(); - $result = []; - foreach ($fieldTree as $field_type => $fields) { - foreach ($fields as $field_name => $field) { - if (!isset($result[$field_name])) { - $field['field_type'] = $field_type; - $result[$field_name] = $field; + if (!isset(Civi::$statics['UFFieldsFlat']) || $force) { + Civi::$statics['UFFieldsFlat'] = []; + foreach (self::getAvailableFields() as $fieldType => $fields) { + foreach ($fields as $fieldName => $field) { + if (!isset(Civi::$statics['UFFieldsFlat'][$fieldName])) { + $field['field_type'] = $fieldType; + Civi::$statics['UFFieldsFlat'][$fieldName] = $field; } } } } - return $result; + return Civi::$statics['UFFieldsFlat']; + } + + /** + * Get a list of fields which can be added to profiles in the format [name => title] + * + * @return array + */ + public static function getAvailableFieldTitles() { + $fields = self::getAvailableFieldsFlat(); + return CRM_Utils_Array::collect('title', $fields); } /** diff --git a/CRM/Core/DAO/UFField.php b/CRM/Core/DAO/UFField.php index 9befc7fab5..5cbd2726fa 100644 --- a/CRM/Core/DAO/UFField.php +++ b/CRM/Core/DAO/UFField.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/UFField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:efbfbe95aac7abe98b31ab715965b57f) + * (GenCodeChecksum:c73a4661d33e4dde2240d6d8ac7fd2c4) */ /** @@ -236,6 +236,9 @@ class CRM_Core_DAO_UFField extends CRM_Core_DAO { 'entity' => 'UFField', 'bao' => 'CRM_Core_BAO_UFField', 'localizable' => 0, + 'pseudoconstant' => [ + 'callback' => 'CRM_Core_BAO_UFField::getAvailableFieldTitles', + ] ], 'is_active' => [ 'name' => 'is_active', diff --git a/xml/schema/Core/UFField.xml b/xml/schema/Core/UFField.xml index fd0322b49a..fdcdcf83b3 100644 --- a/xml/schema/Core/UFField.xml +++ b/xml/schema/Core/UFField.xml @@ -49,6 +49,9 @@ 64 true Name for CiviCRM field which is being exposed for sharing. + + CRM_Core_BAO_UFField::getAvailableFieldTitles + 1.1 -- 2.25.1