3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
15 * @copyright CiviCRM LLC https://civicrm.org/licensing
19 * Page for displaying custom data.
21 class CRM_Contact_Page_View_CustomData
extends CRM_Core_Page
{
33 * @return CRM_Contact_Page_View_CustomData
35 public function __construct() {
36 parent
::__construct();
40 * Add a few specific things to view contact.
42 public function preProcess() {
43 $this->_groupId
= CRM_Utils_Request
::retrieve('gid', 'Positive', $this, TRUE);
44 $this->assign('groupId', $this->_groupId
);
46 $this->_contactId
= CRM_Utils_Request
::retrieve('cid', 'Positive', $this);
47 $this->_recId
= CRM_Utils_Request
::retrieve('recId', 'Positive', $this);
49 // If no cid supplied, look it up
50 if (!$this->_contactId
&& $this->_recId
) {
51 $tableName = CRM_Core_DAO
::getFieldValue('CRM_Core_DAO_CustomGroup', $this->_groupId
, 'table_name');
53 $this->_contactId
= CRM_Core_DAO
::singleValueQuery("SELECT entity_id FROM `$tableName` WHERE id = %1", [1 => [$this->_recId
, 'Integer']]);
56 if (!$this->_contactId
) {
57 throw new CRM_Core_Exception(ts('Could not find valid value for %1', [1 => 'cid']));
60 $this->assign('contactId', $this->_contactId
);
62 // check logged in url permission
63 CRM_Contact_Page_View
::checkUserPermission($this);
65 $this->_action
= CRM_Utils_Request
::retrieve('action', 'String', $this, FALSE, 'browse');
66 $this->assign('action', $this->_action
);
68 $this->_multiRecordDisplay
= CRM_Utils_Request
::retrieve('multiRecordDisplay', 'String', $this, FALSE);
69 $this->_cgcount
= CRM_Utils_Request
::retrieve('cgcount', 'Positive', $this, FALSE);
75 * This method is called after the page is created. It checks for the
76 * type of action and executes that action.
78 public function run() {
81 //set the userContext stack
82 $doneURL = 'civicrm/contact/view';
83 $session = CRM_Core_Session
::singleton();
84 $session->pushUserContext(CRM_Utils_System
::url($doneURL, 'action=browse&selectedChild=custom_' . $this->_groupId
), FALSE);
86 // Get permission detail - view or edit.
87 // use a contact id specific function which gives us much better granularity
89 $editCustomData = CRM_Contact_BAO_Contact_Permission
::allow($this->_contactId
, CRM_Core_Permission
::EDIT
);
90 $this->assign('editCustomData', $editCustomData);
92 // Allow to edit own custom data CRM-5518.
93 $editOwnCustomData = FALSE;
94 if ($session->get('userID') == $this->_contactId
) {
95 $editOwnCustomData = TRUE;
97 $this->assign('editOwnCustomData', $editOwnCustomData);
99 if ($this->_action
== CRM_Core_Action
::BROWSE
) {
101 $displayStyle = CRM_Core_DAO
::getFieldValue('CRM_Core_DAO_CustomGroup',
106 if ($this->_multiRecordDisplay
!= 'single') {
107 $id = "custom_{$this->_groupId}";
108 $tableName = CRM_Core_DAO
::getFieldValue('CRM_Core_DAO_CustomGroup', $this->_groupId
, 'table_name');
109 $this->ajaxResponse
['tabCount'] = CRM_Contact_BAO_Contact
::getCountComponent($id, $this->_contactId
, $tableName);
112 if ($displayStyle === 'Tab with table' && $this->_multiRecordDisplay
!= 'single') {
113 $ctype = CRM_Core_DAO
::getFieldValue('CRM_Contact_DAO_Contact',
118 $this->assign('displayStyle', 'tableOriented');
119 // here the multi custom data listing code will go
120 $multiRecordFieldListing = TRUE;
121 $page = new CRM_Profile_Page_MultipleRecordFieldsListing();
122 $page->set('contactId', $this->_contactId
);
123 $page->set('customGroupId', $this->_groupId
);
124 $page->set('action', CRM_Core_Action
::BROWSE
);
125 $page->set('multiRecordFieldListing', $multiRecordFieldListing);
126 $page->set('pageViewType', 'customDataView');
127 $page->set('contactType', $ctype);
128 $page->_headersOnly
= TRUE;
132 //Custom Groups Inline
133 $entityType = CRM_Contact_BAO_Contact
::getContactType($this->_contactId
);
134 $entitySubType = CRM_Contact_BAO_Contact
::getContactSubType($this->_contactId
);
136 if ($this->_multiRecordDisplay
== 'single') {
137 $groupTitle = CRM_Core_BAO_CustomGroup
::getTitle($this->_groupId
);
138 CRM_Utils_System
::setTitle(ts('View %1 Record', [1 => $groupTitle]));
139 $groupTree = CRM_Core_BAO_CustomGroup
::getTree($entityType, NULL, $this->_contactId
,
140 $this->_groupId
, $entitySubType, NULL, TRUE, NULL, FALSE, TRUE, $this->_cgcount
143 $recId = $this->_recId
;
144 $this->assign('multiRecordDisplay', $this->_multiRecordDisplay
);
145 $this->assign('skipTitle', 1);
148 $groupTree = CRM_Core_BAO_CustomGroup
::getTree($entityType, NULL, $this->_contactId
,
149 $this->_groupId
, $entitySubType
152 CRM_Core_BAO_CustomGroup
::buildCustomDataView($this, $groupTree, FALSE, NULL, NULL, $recId, $this->_contactId
);
157 $controller = new CRM_Core_Controller_Simple('CRM_Contact_Form_CustomData',
161 $controller->setEmbedded(TRUE);
163 $controller->set('tableId', $this->_contactId
);
164 $controller->set('groupId', $this->_groupId
);
165 $controller->set('entityType', CRM_Contact_BAO_Contact
::getContactType($this->_contactId
));
166 $controller->set('entitySubType', CRM_Contact_BAO_Contact
::getContactSubType($this->_contactId
, ','));
167 $controller->process();
170 return parent
::run();