From 78f30a199871a4fa7bddee6fa0ca22ce0cd30bca Mon Sep 17 00:00:00 2001 From: "Matthew Wire (MJW Consulting)" Date: Mon, 17 Sep 2018 22:33:41 +0100 Subject: [PATCH] Fix saving of relationship permissions when relationship is b_a on form --- CRM/Contact/Form/Relationship.php | 24 +++++++++++---------- templates/CRM/Contact/Form/Relationship.tpl | 2 +- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/CRM/Contact/Form/Relationship.php b/CRM/Contact/Form/Relationship.php index fc115dcf92..2ce6c062f0 100644 --- a/CRM/Contact/Form/Relationship.php +++ b/CRM/Contact/Form/Relationship.php @@ -578,22 +578,23 @@ class CRM_Contact_Form_Relationship extends CRM_Core_Form { /** * Prepares parameters to be used for create/update actions * - * @param array $params + * @param array $values * * @return array */ - private function preparePostProcessParameters($params) { - $relationshipTypeParts = explode('_', $params['relationship_type_id']); + private function preparePostProcessParameters($values) { + $params = $values; + list($relationshipTypeId, $relationshipContactA, $relationshipContactB) = explode('_', $params['relationship_type_id']); - $params['relationship_type_id'] = $relationshipTypeParts[0]; - $params['contact_id_' . $relationshipTypeParts[1]] = $this->_contactId; + $params['relationship_type_id'] = $relationshipTypeId; + $params['contact_id_' . $relationshipContactA] = $this->_contactId; if (empty($this->_relationshipId)) { - $params['contact_id_' . $relationshipTypeParts[2]] = explode(',', $params['related_contact_id']); + $params['contact_id_' . $relationshipContactB] = explode(',', $params['related_contact_id']); } else { $params['id'] = $this->_relationshipId; - $params['contact_id_' . $relationshipTypeParts[2]] = $params['related_contact_id']; + $params['contact_id_' . $relationshipContactB] = $params['related_contact_id']; foreach (array('start_date', 'end_date') as $dateParam) { if (!empty($params[$dateParam])) { @@ -602,11 +603,12 @@ class CRM_Contact_Form_Relationship extends CRM_Core_Form { } } - // CRM-14612 - Don't use adv-checkbox as it interferes with the form js - $params['is_permission_a_b'] = CRM_Utils_Array::value('is_permission_a_b', $params, 0); - $params['is_permission_b_a'] = CRM_Utils_Array::value('is_permission_b_a', $params, 0); + // The javascript on the form will swap these fields if it is a b_a relationship, so we compensate here + $relationshipType = "${relationshipContactA}_${relationshipContactB}"; + $params['is_permission_a_b'] = CRM_Utils_Array::value('is_permission_' . $relationshipType, $values, 0); + $params['is_permission_b_a'] = CRM_Utils_Array::value('is_permission_' . strrev($relationshipType), $values, 0); - return array($params, $relationshipTypeParts[1]); + return array($params, $relationshipContactA); } /** diff --git a/templates/CRM/Contact/Form/Relationship.tpl b/templates/CRM/Contact/Form/Relationship.tpl index ad0efe0c0a..8165519e27 100644 --- a/templates/CRM/Contact/Form/Relationship.tpl +++ b/templates/CRM/Contact/Form/Relationship.tpl @@ -121,7 +121,7 @@ - + {ts 1=$contact_b|ucfirst 2=$display_name_a}Permission for %1 to access information about %2{/ts}
{$form.is_permission_b_a.html} -- 2.25.1