diff --git a/CRM/Case/Form/CaseView.php b/CRM/Case/Form/CaseView.php index 75b35d48c8e1..0e34b65bb27c 100644 --- a/CRM/Case/Form/CaseView.php +++ b/CRM/Case/Form/CaseView.php @@ -55,6 +55,12 @@ public function preProcess() { $this->assign('contactID', $this->_contactID = (int) $this->get('cid')); $this->assign('caseID', $this->_caseID = (int) $this->get('id')); + $this->assign('primaryCaseContactID', civicrm_api3('Activity', 'get', [ + 'case_id' => $this->_caseID, + 'activity_type_id' => 'Open Case', + 'return' => ['assignee_contact_id', 'source_contact_id', 'target_contact_id'], + 'sequential' => 1, + ])['values'][0]['target_contact_id'][0]); // Access check. if (!CRM_Case_BAO_Case::accessCase($this->_caseID, FALSE)) { diff --git a/CRM/Case/Form/DeleteClient.php b/CRM/Case/Form/DeleteClient.php new file mode 100644 index 000000000000..b8f6c503539b --- /dev/null +++ b/CRM/Case/Form/DeleteClient.php @@ -0,0 +1,117 @@ +cid = CRM_Utils_Request::retrieve('cid', 'Positive', $this, TRUE); + $this->id = CRM_Utils_Request::retrieve('id', 'Positive', $this, TRUE); + $context = CRM_Utils_Request::retrieve('context', 'Alphanumeric', $this); + + //get current client name. + $this->assign('currentClientName', CRM_Contact_BAO_Contact::displayName($this->cid)); + $this->assign('id', $this->id); + + //set the context. + $url = CRM_Utils_System::url('civicrm/contact/view', "reset=1&force=1&cid={$this->cid}&selectedChild=case"); + if ($context == 'search') { + $qfKey = CRM_Utils_Request::retrieve('key', 'String', $this); + //validate the qfKey + $urlParams = 'force=1'; + if (CRM_Utils_Rule::qfKey($qfKey)) { + $urlParams .= "&qfKey=$qfKey"; + } + $url = CRM_Utils_System::url('civicrm/case/search', $urlParams); + } + elseif ($context == 'dashboard') { + $url = CRM_Utils_System::url('civicrm/case', 'reset=1'); + } + elseif (in_array($context, [ + 'dashlet', + 'dashletFullscreen', + ])) { + $url = CRM_Utils_System::url('civicrm/dashboard', 'reset=1'); + } + $session = CRM_Core_Session::singleton(); + $session->pushUserContext($url); + } + + /** + * Build the form object. + */ + public function buildQuickForm() { + $this->add('hidden', 'id', $this->id); + $this->add('hidden', 'contact_id', $this->cid); + $this->addButtons([ + [ + 'type' => 'submit', + 'name' => ts('Remove Client from Case'), + ], + [ + 'type' => 'cancel', + 'name' => ts('Cancel'), + ], + ]); + + // This form may change the url structure so should not submit via ajax + $this->preventAjaxSubmit(); + } + + /** + * Process the form. + */ + public function postProcess() { + $params = $this->controller->exportValues($this->_name); + civicrm_api3('CaseContact', 'get', [ + 'case_id' => $params['id'], + 'contact_id' => $params['contact_id'], + 'api.case_contact.delete' => ['id' => "\$value.id"], + ]); + + $pirmaryCaseContact = civicrm_api3('Activity', 'get', [ + 'case_id' => $this->id, + 'activity_type_id' => 'Open Case', + 'return' => ['assignee_contact_id', 'source_contact_id', 'target_contact_id'], + 'sequential' => 1, + ])['values'][0]['target_contact_id'][0]; + // user context + $url = CRM_Utils_System::url('civicrm/contact/view/case', + "reset=1&action=view&cid={$pirmaryCaseContact}&id={$params['id']}&show=1" + ); + CRM_Utils_System::redirect($url); + + } + +} diff --git a/CRM/Case/xml/Menu/Case.xml b/CRM/Case/xml/Menu/Case.xml index 91348e1c9a3d..28d716afa68d 100644 --- a/CRM/Case/xml/Menu/Case.xml +++ b/CRM/Case/xml/Menu/Case.xml @@ -141,4 +141,9 @@ Email CRM_Case_Form_Task_Email + + civicrm/contact/view/case/deleteClient + Remove Client + CRM_Case_Form_DeleteClient + diff --git a/templates/CRM/Case/Form/CaseView.tpl b/templates/CRM/Case/Form/CaseView.tpl index 0c2422ba0323..fcdc1e30aee4 100644 --- a/templates/CRM/Case/Form/CaseView.tpl +++ b/templates/CRM/Case/Form/CaseView.tpl @@ -24,7 +24,7 @@ {ts}Clients:{/ts} {foreach from=$caseRoles.client item=client name=clients} - {$client.display_name}{if not $smarty.foreach.clients.last},   {/if} + {$client.display_name}{if $primaryCaseContactID neq $client.contact_id && call_user_func(array('CRM_Core_Permission','giveMeAllACLs'))}{/if}{if not $smarty.foreach.clients.last},   {/if} {/foreach} diff --git a/templates/CRM/Case/Form/DeleteClient.tpl b/templates/CRM/Case/Form/DeleteClient.tpl new file mode 100644 index 000000000000..301f2be84eb5 --- /dev/null +++ b/templates/CRM/Case/Form/DeleteClient.tpl @@ -0,0 +1,18 @@ +{* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ +*} +{* template for assigning the current case to another client*} +
+
+ {icon icon="fa-info-circle"}{/icon} {ts 1=$currentClientName 2=$id}Remove Client %1 from case %2{/ts} +
+
+
{include file="CRM/common/formButtons.tpl" location="bottom"}
+
+