From d5e4784ef13d1489de5999f7733f535cde3a32f9 Mon Sep 17 00:00:00 2001 From: "Matthew Wire (MJW Consulting)" Date: Fri, 19 Oct 2018 15:36:44 +0100 Subject: [PATCH] Use description from schema if available when using entityForm --- CRM/Admin/Form/RelationshipType.php | 8 +++++++- CRM/Core/Form.php | 2 +- CRM/Core/Form/EntityFormTrait.php | 23 +++++++++++++++++++++-- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/CRM/Admin/Form/RelationshipType.php b/CRM/Admin/Form/RelationshipType.php index fde8d4c3b3..3ef04472ab 100644 --- a/CRM/Admin/Form/RelationshipType.php +++ b/CRM/Admin/Form/RelationshipType.php @@ -44,6 +44,7 @@ class CRM_Admin_Form_RelationshipType extends CRM_Admin_Form { * Fields may have keys * - name (required to show in tpl from the array) * - description (optional, will appear below the field) + * Auto-added by setEntityFieldsMetadata unless specified here (use description => '' to hide) * - not-auto-addable - this class will not attempt to add the field using addField. * (this will be automatically set if the field does not have html in it's metadata * or is not a core field on the form's entity). @@ -70,11 +71,16 @@ class CRM_Admin_Form_RelationshipType extends CRM_Admin_Form { 'name' => 'label_b_a', 'description' => ts("Label for the relationship from Contact B to Contact A. EXAMPLE: Contact B is 'Child of' Contact A. You may leave this blank for relationships where the name is the same in both directions (e.g. Spouse).") ], - 'description' => ['name' => 'description'], + 'description' => [ + 'name' => 'description', + 'description' => '' + ], 'contact_types_a' => ['name' => 'contact_types_a', 'not-auto-addable' => TRUE], 'contact_types_b' => ['name' => 'contact_types_b', 'not-auto-addable' => TRUE], 'is_active' => ['name' => 'is_active'], ]; + + self::setEntityFieldsMetadata(); } /** diff --git a/CRM/Core/Form.php b/CRM/Core/Form.php index 613bcf227d..9755ec7334 100644 --- a/CRM/Core/Form.php +++ b/CRM/Core/Form.php @@ -1292,7 +1292,7 @@ class CRM_Core_Form extends HTML_QuickForm_Page { * * Return string */ - private function getApiAction() { + protected function getApiAction() { $action = $this->getAction(); if ($action & (CRM_Core_Action::UPDATE + CRM_Core_Action::ADD)) { return 'create'; diff --git a/CRM/Core/Form/EntityFormTrait.php b/CRM/Core/Form/EntityFormTrait.php index 13f7057431..30e81b7b3d 100644 --- a/CRM/Core/Form/EntityFormTrait.php +++ b/CRM/Core/Form/EntityFormTrait.php @@ -32,10 +32,11 @@ */ trait CRM_Core_Form_EntityFormTrait { + /** * Get entity fields for the entity to be added to the form. * - * @var array + * @return array */ public function getEntityFields() { return $this->entityFields; @@ -51,7 +52,7 @@ trait CRM_Core_Form_EntityFormTrait { /** * Get entity fields for the entity to be added to the form. * - * @var array + * @return string */ public function getDeleteMessage() { return $this->deleteMessage; @@ -221,4 +222,22 @@ trait CRM_Core_Form_EntityFormTrait { return ($this->_action & CRM_Core_Action::DELETE); } + protected function setEntityFieldsMetadata() { + foreach ($this->entityFields as $field => &$props) { + if (!empty($props['not-auto-addable'])) { + // We can't load this field using metadata + continue; + } + // Resolve action. + if (empty($props['action'])) { + $props['action'] = $this->getApiAction(); + } + $fieldSpec = civicrm_api3($this->getDefaultEntity(), 'getfield', $props); + $fieldSpec = $fieldSpec['values']; + if (!isset($props['description']) && isset($fieldSpec['description'])) { + $props['description'] = $fieldSpec['description']; + } + } + } + } -- 2.25.1