Merge pull request #22458 from eileenmcnaughton/test
[civicrm-core.git] / CRM / Contact / Page / View / CustomData.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
5 | |
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 +--------------------------------------------------------------------+
10 */
11
12 /**
13 *
14 * @package CRM
15 * @copyright CiviCRM LLC https://civicrm.org/licensing
16 */
17
18 /**
19 * Page for displaying custom data.
20 */
21 class CRM_Contact_Page_View_CustomData extends CRM_Core_Page {
22
23 /**
24 * Custom group id.
25 *
26 * @var int
27 */
28 public $_groupId;
29
30 /**
31 * Add a few specific things to view contact.
32 */
33 public function preProcess() {
34 $this->_groupId = CRM_Utils_Request::retrieve('gid', 'Positive', $this, TRUE);
35 $this->assign('groupId', $this->_groupId);
36
37 $this->_contactId = CRM_Utils_Request::retrieve('cid', 'Positive', $this);
38 $this->_recId = CRM_Utils_Request::retrieve('recId', 'Positive', $this);
39
40 // If no cid supplied, look it up
41 if (!$this->_contactId && $this->_recId) {
42 $tableName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $this->_groupId, 'table_name');
43 if ($tableName) {
44 $this->_contactId = CRM_Core_DAO::singleValueQuery("SELECT entity_id FROM `$tableName` WHERE id = %1", [1 => [$this->_recId, 'Integer']]);
45 }
46 }
47 if (!$this->_contactId) {
48 throw new CRM_Core_Exception(ts('Could not find valid value for %1', [1 => 'cid']));
49 }
50
51 $this->assign('contactId', $this->_contactId);
52
53 // check logged in url permission
54 CRM_Contact_Page_View::checkUserPermission($this);
55
56 $this->_action = CRM_Utils_Request::retrieve('action', 'String', $this, FALSE, 'browse');
57 $this->assign('action', $this->_action);
58
59 $this->_multiRecordDisplay = CRM_Utils_Request::retrieve('multiRecordDisplay', 'String', $this, FALSE);
60 $this->_cgcount = CRM_Utils_Request::retrieve('cgcount', 'Positive', $this, FALSE);
61 }
62
63 /**
64 * Run the page.
65 *
66 * This method is called after the page is created. It checks for the
67 * type of action and executes that action.
68 */
69 public function run() {
70 $this->preProcess();
71
72 //set the userContext stack
73 $doneURL = 'civicrm/contact/view';
74 $session = CRM_Core_Session::singleton();
75 $session->pushUserContext(CRM_Utils_System::url($doneURL, 'action=browse&selectedChild=custom_' . $this->_groupId), FALSE);
76
77 // Check permission to edit this contact
78 $editPermission = CRM_Contact_BAO_Contact_Permission::allow($this->_contactId, CRM_Core_Permission::EDIT);
79 $this->assign('editPermission', $editPermission);
80
81 if ($this->_action == CRM_Core_Action::BROWSE) {
82
83 $displayStyle = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup',
84 $this->_groupId,
85 'style'
86 );
87
88 if ($this->_multiRecordDisplay != 'single') {
89 $id = "custom_{$this->_groupId}";
90 $tableName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $this->_groupId, 'table_name');
91 $this->ajaxResponse['tabCount'] = CRM_Contact_BAO_Contact::getCountComponent($id, $this->_contactId, $tableName);
92 }
93
94 if ($displayStyle === 'Tab with table' && $this->_multiRecordDisplay != 'single') {
95 $ctype = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact',
96 $this->_contactId,
97 'contact_type'
98 );
99
100 $this->assign('displayStyle', 'tableOriented');
101 // here the multi custom data listing code will go
102 $multiRecordFieldListing = TRUE;
103 $page = new CRM_Profile_Page_MultipleRecordFieldsListing();
104 $page->set('contactId', $this->_contactId);
105 $page->set('customGroupId', $this->_groupId);
106 $page->set('action', CRM_Core_Action::BROWSE);
107 $page->set('multiRecordFieldListing', $multiRecordFieldListing);
108 $page->set('pageViewType', 'customDataView');
109 $page->set('contactType', $ctype);
110 $page->_headersOnly = TRUE;
111 $page->run();
112 }
113 else {
114 //Custom Groups Inline
115 $entityType = CRM_Contact_BAO_Contact::getContactType($this->_contactId);
116 $entitySubType = CRM_Contact_BAO_Contact::getContactSubType($this->_contactId);
117 $recId = NULL;
118 if ($this->_multiRecordDisplay == 'single') {
119 $groupTitle = CRM_Core_BAO_CustomGroup::getTitle($this->_groupId);
120 CRM_Utils_System::setTitle(ts('View %1 Record', [1 => $groupTitle]));
121 $groupTree = CRM_Core_BAO_CustomGroup::getTree($entityType, NULL, $this->_contactId,
122 $this->_groupId, $entitySubType, NULL, TRUE, NULL, FALSE, CRM_Core_Permission::VIEW, $this->_cgcount
123 );
124
125 $recId = $this->_recId;
126 $this->assign('multiRecordDisplay', $this->_multiRecordDisplay);
127 $this->assign('skipTitle', 1);
128 }
129 else {
130 $groupTree = CRM_Core_BAO_CustomGroup::getTree($entityType, NULL, $this->_contactId,
131 $this->_groupId, $entitySubType, NULL, TRUE, NULL, FALSE, CRM_Core_Permission::VIEW
132 );
133 }
134 CRM_Core_BAO_CustomGroup::buildCustomDataView($this, $groupTree, FALSE, NULL, NULL, $recId, $this->_contactId, TRUE);
135 }
136 }
137 else {
138
139 $controller = new CRM_Core_Controller_Simple('CRM_Contact_Form_CustomData',
140 ts('Custom Data'),
141 $this->_action
142 );
143 $controller->setEmbedded(TRUE);
144
145 $controller->set('tableId', $this->_contactId);
146 $controller->set('groupId', $this->_groupId);
147 $controller->set('entityType', CRM_Contact_BAO_Contact::getContactType($this->_contactId));
148 $controller->set('entitySubType', CRM_Contact_BAO_Contact::getContactSubType($this->_contactId, ','));
149 $controller->process();
150 $controller->run();
151 }
152 return parent::run();
153 }
154
155 }