From 4d87634827b540f75d014cb520314c1b7bb23698 Mon Sep 17 00:00:00 2001 From: eileen Date: Tue, 5 Jun 2018 14:06:29 +1200 Subject: [PATCH] Fix unrelease regression - fatal when editing relationship type Employer --- CRM/Admin/Form/RelationshipType.php | 31 +++++++++++------------------ CRM/Core/Form/EntityFormTrait.php | 5 ++++- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/CRM/Admin/Form/RelationshipType.php b/CRM/Admin/Form/RelationshipType.php index 387905615cee..fde8d4c3b3d4 100644 --- a/CRM/Admin/Form/RelationshipType.php +++ b/CRM/Admin/Form/RelationshipType.php @@ -50,6 +50,8 @@ class CRM_Admin_Form_RelationshipType extends CRM_Admin_Form { * - help (option) add help to the field - e.g ['id' => 'id-source', 'file' => 'CRM/Contact/Form/Contact']] * - template - use a field specific template to render this field * - required + * - is_freeze (field should be frozen). + * * @var array */ protected $entityFields = []; @@ -102,6 +104,8 @@ public function setDeleteMessage() { * Build the form object. */ public function buildQuickForm() { + $isReserved = ($this->_id && CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_RelationshipType', $this->_id, 'is_reserved')); + $this->entityFields['is_active']['is_freeze'] = $isReserved; self::buildQuickEntityForm(); if ($this->_action & CRM_Core_Action::DELETE) { @@ -116,25 +120,14 @@ public function buildQuickForm() { ); $contactTypes = CRM_Contact_BAO_ContactType::getSelectElements(FALSE, TRUE, '__'); - - // add select for contact type - $this->add('select', 'contact_types_a', ts('Contact Type A') . ' ', - array( - '' => ts('All Contacts'), - ) + $contactTypes - ); - $this->add('select', 'contact_types_b', ts('Contact Type B') . ' ', - array( - '' => ts('All Contacts'), - ) + $contactTypes - ); - - //only selected field should be allow for edit, CRM-4888 - if ($this->_id && - CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_RelationshipType', $this->_id, 'is_reserved') - ) { - foreach (array('contactTypeA', 'contactTypeB', 'isActive') as $field) { - $$field->freeze(); + foreach (['contact_types_a' => ts('Contact Type A'), 'contact_types_b' => ts('Contact Type B')] as $name => $label) { + $element = $this->add('select', $name, $label . ' ', + array( + '' => ts('All Contacts'), + ) + $contactTypes + ); + if ($isReserved) { + $element->freeze(); } } diff --git a/CRM/Core/Form/EntityFormTrait.php b/CRM/Core/Form/EntityFormTrait.php index 76b1a2cd69c9..564edf6754e5 100644 --- a/CRM/Core/Form/EntityFormTrait.php +++ b/CRM/Core/Form/EntityFormTrait.php @@ -161,7 +161,10 @@ protected function setTranslatedFields() { protected function addEntityFieldsToTemplate() { foreach ($this->getEntityFields() as $fieldSpec) { if (empty($fieldSpec['not-auto-addable'])) { - $this->addField($fieldSpec['name'], [], CRM_Utils_Array::value('required', $fieldSpec)); + $element = $this->addField($fieldSpec['name'], [], CRM_Utils_Array::value('required', $fieldSpec)); + if (!empty($fieldSpec['is_freeze'])) { + $element->freeze(); + } } } }