3 +--------------------------------------------------------------------+
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2019 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
31 * @copyright CiviCRM LLC (c) 2004-2019
33 class CRM_Upgrade_Incremental_MessageTemplates
{
36 * Version we are upgrading to.
40 protected $upgradeVersion;
45 public function getUpgradeVersion() {
46 return $this->upgradeVersion
;
50 * @param string $upgradeVersion
52 public function setUpgradeVersion($upgradeVersion) {
53 $this->upgradeVersion
= $upgradeVersion;
57 * CRM_Upgrade_Incremental_MessageTemplates constructor.
59 * @param string $upgradeVersion
61 public function __construct($upgradeVersion) {
62 $this->setUpgradeVersion($upgradeVersion);
66 * Get any templates that have been updated.
70 protected function getTemplateUpdates() {
73 'version' => '5.4.alpha1',
74 'upgrade_descriptor' => ts('Use email greeting at top where available'),
76 ['name' => 'membership_online_receipt', 'type' => 'text'],
77 ['name' => 'membership_online_receipt', 'type' => 'html'],
78 ['name' => 'contribution_online_receipt', 'type' => 'text'],
79 ['name' => 'contribution_online_receipt', 'type' => 'html'],
80 ['name' => 'event_online_receipt', 'type' => 'text'],
81 ['name' => 'event_online_receipt', 'type' => 'html'],
82 ['name' => 'event_online_receipt', 'type' => 'subject'],
86 'version' => '5.7.alpha1',
87 'upgrade_descriptor' => ts('Fix invoice number (human readable) instead of id (reference)'),
88 'label' => ts('Contributions - Invoice'),
90 ['name' => 'contribution_invoice_receipt', 'type' => 'html'],
94 'version' => '5.10.alpha1',
95 'upgrade_descriptor' => ts('Show recurring cancel/update URLs in receipt based on payment processor capabilities'),
96 'label' => ts('Receipts - cancel/update subscription URLs'),
98 ['name' => 'contribution_online_receipt', 'type' => 'text'],
99 ['name' => 'contribution_online_receipt', 'type' => 'html'],
100 ['name' => 'contribution_recurring_notify', 'type' => 'text'],
101 ['name' => 'contribution_recurring_notify', 'type' => 'html'],
102 ['name' => 'membership_online_receipt', 'type' => 'text'],
103 ['name' => 'membership_online_receipt', 'type' => 'html'],
107 'version' => '5.12.alpha1',
108 'upgrade_descriptor' => ts('Update payment notification to remove print text, use email greeting'),
109 'label' => ts('Payment notification'),
111 ['name' => 'payment_or_refund_notification', 'type' => 'text'],
112 ['name' => 'payment_or_refund_notification', 'type' => 'html'],
116 'version' => '5.15.alpha1',
117 'upgrade_descriptor' => ts('Use email greeting and fix capitalization'),
118 'label' => ts('Pledge acknowledgement'),
120 ['name' => 'pledge_acknowledge', 'type' => 'text'],
121 ['name' => 'pledge_acknowledge', 'type' => 'html'],
125 'version' => '5.20.alpha1',
126 'upgrade_descriptor' => ts('Fix missing Email greetings'),
128 ['name' => 'contribution_dupalert', 'type' => 'subject'],
129 ['name' => 'contribution_invoice_receipt', 'type' => 'subject'],
130 ['name' => 'contribution_offline_receipt', 'type' => 'html'],
131 ['name' => 'contribution_offline_receipt', 'type' => 'subject'],
132 ['name' => 'contribution_offline_receipt', 'type' => 'text'],
133 ['name' => 'contribution_online_receipt', 'type' => 'subject'],
134 ['name' => 'contribution_online_receipt', 'type' => 'html'],
135 ['name' => 'contribution_recurring_billing', 'type' => 'html'],
136 ['name' => 'contribution_recurring_billing', 'type' => 'subject'],
137 ['name' => 'contribution_recurring_billing', 'type' => 'text'],
138 ['name' => 'contribution_recurring_cancelled', 'type' => 'html'],
139 ['name' => 'contribution_recurring_cancelled', 'type' => 'subject'],
140 ['name' => 'contribution_recurring_cancelled', 'type' => 'text'],
141 ['name' => 'contribution_recurring_edit', 'type' => 'html'],
142 ['name' => 'contribution_recurring_edit', 'type' => 'subject'],
143 ['name' => 'contribution_recurring_edit', 'type' => 'text'],
144 ['name' => 'contribution_recurring_notify', 'type' => 'html'],
145 ['name' => 'contribution_recurring_notify', 'type' => 'subject'],
146 ['name' => 'contribution_recurring_notify', 'type' => 'text'],
147 ['name' => 'event_offline_receipt', 'type' => 'html'],
148 ['name' => 'event_offline_receipt', 'type' => 'subject'],
149 ['name' => 'event_offline_receipt', 'type' => 'text'],
150 ['name' => 'event_online_receipt', 'type' => 'html'],
151 ['name' => 'event_online_receipt', 'type' => 'subject'],
152 ['name' => 'event_online_receipt', 'type' => 'text'],
153 ['name' => 'event_registration_receipt', 'type' => 'html'],
154 ['name' => 'event_registration_receipt', 'type' => 'subject'],
155 ['name' => 'event_registration_receipt', 'type' => 'text'],
156 ['name' => 'membership_autorenew_billing', 'type' => 'html'],
157 ['name' => 'membership_autorenew_billing', 'type' => 'subject'],
158 ['name' => 'membership_autorenew_billing', 'type' => 'text'],
159 ['name' => 'membership_autorenew_cancelled', 'type' => 'html'],
160 ['name' => 'membership_autorenew_cancelled', 'type' => 'subject'],
161 ['name' => 'membership_autorenew_cancelled', 'type' => 'text'],
162 ['name' => 'membership_offline_receipt', 'type' => 'html'],
163 ['name' => 'membership_offline_receipt', 'type' => 'subject'],
164 ['name' => 'membership_offline_receipt', 'type' => 'text'],
165 ['name' => 'membership_online_receipt', 'type' => 'subject'],
166 ['name' => 'membership_online_receipt', 'type' => 'html'],
167 ['name' => 'participant_cancelled', 'type' => 'html'],
168 ['name' => 'participant_cancelled', 'type' => 'subject'],
169 ['name' => 'participant_cancelled', 'type' => 'text'],
170 ['name' => 'participant_confirm', 'type' => 'html'],
171 ['name' => 'participant_confirm', 'type' => 'subject'],
172 ['name' => 'participant_confirm', 'type' => 'text'],
173 ['name' => 'participant_expired', 'type' => 'html'],
174 ['name' => 'participant_expired', 'type' => 'subject'],
175 ['name' => 'participant_expired', 'type' => 'text'],
176 ['name' => 'participant_transferred', 'type' => 'html'],
177 ['name' => 'participant_transferred', 'type' => 'subject'],
178 ['name' => 'participant_transferred', 'type' => 'text'],
179 ['name' => 'payment_or_refund_notification', 'type' => 'html'],
180 ['name' => 'payment_or_refund_notification', 'type' => 'subject'],
181 ['name' => 'payment_or_refund_notification', 'type' => 'text'],
182 ['name' => 'pcp_notify', 'type' => 'subject'],
183 ['name' => 'pcp_owner_notify', 'type' => 'html'],
184 ['name' => 'pcp_owner_notify', 'type' => 'subject'],
185 ['name' => 'pcp_owner_notify', 'type' => 'text'],
186 ['name' => 'pcp_status_change', 'type' => 'subject'],
187 ['name' => 'pcp_status_change', 'type' => 'html'],
188 ['name' => 'pcp_supporter_notify', 'type' => 'html'],
189 ['name' => 'pcp_supporter_notify', 'type' => 'subject'],
190 ['name' => 'pcp_supporter_notify', 'type' => 'text'],
191 ['name' => 'petition_confirmation_needed', 'type' => 'html'],
192 ['name' => 'petition_confirmation_needed', 'type' => 'subject'],
193 ['name' => 'petition_confirmation_needed', 'type' => 'text'],
194 ['name' => 'petition_sign', 'type' => 'html'],
195 ['name' => 'petition_sign', 'type' => 'subject'],
196 ['name' => 'petition_sign', 'type' => 'text'],
197 ['name' => 'pledge_acknowledge', 'type' => 'subject'],
198 ['name' => 'pledge_acknowledge', 'type' => 'html'],
199 ['name' => 'pledge_acknowledge', 'type' => 'text'],
200 ['name' => 'pledge_reminder', 'type' => 'html'],
201 ['name' => 'pledge_reminder', 'type' => 'subject'],
202 ['name' => 'pledge_reminder', 'type' => 'text'],
203 ['name' => 'uf_notify', 'type' => 'subject'],
204 ['name' => 'uf_notify', 'type' => 'html'],
205 ['name' => 'case_activity', 'type' => 'html'],
206 ['name' => 'contribution_dupalert', 'type' => 'html'],
207 ['name' => 'friend', 'type' => 'html'],
208 ['name' => 'test_preview', 'type' => 'html'],
216 * Get any required template updates.
220 public function getTemplatesToUpdate() {
221 $templates = $this->getTemplateUpdates();
223 foreach ($templates as $templateArray) {
224 if ($templateArray['version'] === $this->getUpgradeVersion()) {
225 foreach ($templateArray['templates'] as $template) {
226 $return[$template['name'] . '_' . $template['type']] = array_merge($template, $templateArray);
234 * Get the upgrade messages.
236 public function getUpgradeMessages() {
237 $updates = $this->getTemplatesToUpdate();
240 foreach ($updates as $key => $value) {
242 $templateLabel = civicrm_api3('OptionValue', 'getvalue', [
244 'name' => $value['name'],
245 'options' => ['limit' => 1],
248 catch (Exception
$e) {
249 if (!empty($value['label'])) {
250 $templateLabel = $value['label'];
253 $messages[$templateLabel] = $value['upgrade_descriptor'];
259 * Update message templates.
261 public function updateTemplates() {
262 $templates = $this->getTemplatesToUpdate();
263 foreach ($templates as $template) {
264 $workFlowID = CRM_Core_DAO
::singleValueQuery("SELECT MAX(id) as id FROM civicrm_option_value WHERE name = %1", [
265 1 => [$template['name'], 'String'],
267 $content = file_get_contents(\Civi
::paths()->getPath('[civicrm.root]/xml/templates/message_templates/' . $template['name'] . '_' . $template['type'] . '.tpl'));
268 $templatesToUpdate = [];
269 if (!empty($workFlowID)) {
270 $templatesToUpdate[] = CRM_Core_DAO
::singleValueQuery("SELECT id FROM civicrm_msg_template WHERE workflow_id = $workFlowID AND is_reserved = 1");
271 $defaultTemplateID = CRM_Core_DAO
::singleValueQuery("
272 SELECT default_template.id FROM civicrm_msg_template reserved
273 LEFT JOIN civicrm_msg_template default_template
274 ON reserved.workflow_id = default_template.workflow_id
275 WHERE reserved.workflow_id = $workFlowID
276 AND reserved.is_reserved = 1 AND default_template.is_default = 1 AND reserved.id <> default_template.id
277 AND reserved.msg_{$template['type']} = default_template.msg_{$template['type']}
279 if ($defaultTemplateID) {
280 $templatesToUpdate[] = $defaultTemplateID;
283 CRM_Core_DAO
::executeQuery("
284 UPDATE civicrm_msg_template SET msg_{$template['type']} = %1 WHERE id IN (" . implode(',', $templatesToUpdate) . ")", [
285 1 => [$content, 'String'],