* 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).
'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();
}
/**
*
* Return string
*/
- private function getApiAction() {
+ protected function getApiAction() {
$action = $this->getAction();
if ($action & (CRM_Core_Action::UPDATE + CRM_Core_Action::ADD)) {
return 'create';
*/
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;
/**
* Get entity fields for the entity to be added to the form.
*
- * @var array
+ * @return string
*/
public function getDeleteMessage() {
return $this->deleteMessage;
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'];
+ }
+ }
+ }
+
}