-
-
Notifications
You must be signed in to change notification settings - Fork 825
/
Copy pathPDF.php
166 lines (147 loc) · 4.59 KB
/
PDF.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
<?php
/*
+--------------------------------------------------------------------+
| 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 |
+--------------------------------------------------------------------+
*/
/**
*
* @package CRM
* @copyright CiviCRM LLC https://civicrm.org/licensing
*/
/**
* This class provides the functionality to create PDF letter for a group of contacts or a single contact.
*/
class CRM_Contact_Form_Task_PDF extends CRM_Contact_Form_Task {
use CRM_Contact_Form_Task_PDFTrait;
/**
* All the existing templates in the system.
*
* @var array
*/
public $_templates = NULL;
public $_single = NULL;
public $_cid = NULL;
public $_activityId = NULL;
/**
* This should be replaced by an externally supposed getCaseID() method.
*
* Property may change as it is not really required.
*
* @var int|null
*
* @internal
*/
public $_caseId;
/**
* This should be replaced by an externally supposed getCaseID() method.
*
* Property may change as it is kinda weird.
*
* @var int|null
*
* @internal
*/
public $_caseIds;
/**
* Build all the data structures needed to build the form.
*/
public function preProcess() {
$this->preProcessPDF();
// store case id if present
$this->_caseId = CRM_Utils_Request::retrieve('caseid', 'CommaSeparatedIntegers', $this, FALSE);
if (!empty($this->_caseId) && strpos($this->_caseId, ',')) {
$this->_caseIds = explode(',', $this->_caseId);
unset($this->_caseId);
}
// retrieve contact ID if this is 'single' mode
$cid = CRM_Utils_Request::retrieve('cid', 'CommaSeparatedIntegers', $this, FALSE);
if ($cid) {
// this is true in non-search context / single mode
// in search context 'id' is the default profile id for search display
// CRM-11227
$this->_activityId = CRM_Utils_Request::retrieve('id', 'Positive', $this, FALSE);
$this->_contactIds = explode(',', $cid);
// put contact display name in title for single contact mode
if (count($this->_contactIds) === 1) {
CRM_Utils_System::setTitle(ts('Print/Merge Document for %1', [1 => CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $cid, 'display_name')]));
}
$this->_single = TRUE;
}
else {
parent::preProcess();
}
$this->assign('single', $this->_single);
}
/**
* Set default values for the form.
*/
public function setDefaultValues() {
$defaults = $this->getPDFDefaultValues();
if (isset($this->_activityId)) {
$params = ['id' => $this->_activityId];
CRM_Activity_BAO_Activity::retrieve($params, $defaults);
$defaults['html_message'] = $defaults['details'] ?? NULL;
}
return $defaults;
}
/**
* {@inheritDoc}
*/
protected function getFieldsToExcludeFromPurification(): array {
return [
'details',
'activity_details',
'html_message',
];
}
/**
* Build the form object.
*
* @throws \CRM_Core_Exception
*/
public function buildQuickForm() {
//enable form element
$this->assign('suppressForm', FALSE);
$this->addPDFElementsToForm();
}
/**
* List available tokens for this form.
*
* @return array
*/
public function listTokens() {
$tokens = CRM_Core_SelectValues::contactTokens();
if (isset($this->_caseId) || isset($this->_caseIds)) {
// For a single case, list tokens relevant for only that case type
$caseTypeId = isset($this->_caseId) ? CRM_Core_DAO::getFieldValue('CRM_Case_DAO_Case', $this->_caseId, 'case_type_id') : NULL;
$tokens += CRM_Core_SelectValues::caseTokens($caseTypeId);
}
return $tokens;
}
/**
* Get the rows from the results to be pdf-d.
*
* @todo the case handling should be in the case pdf task.
* It needs fixing to support standalone & some url fixes
*
* similar to https://github.com/civicrm/civicrm-core/pull/21688
*
* @return array
*/
protected function getRows(): array {
$rows = [];
foreach ($this->_contactIds as $index => $contactID) {
$caseID = $this->_caseId;
if (empty($caseID) && !empty($this->_caseIds[$index])) {
$caseID = $this->_caseIds[$index];
}
$rows[] = ['contact_id' => $contactID, 'schema' => ['caseId' => $caseID, 'contactId' => $contactID]];
}
return $rows;
}
}