From 396561777cf0b8cda475dbe562c4fd2a50bc44d2 Mon Sep 17 00:00:00 2001 From: Eileen McNaughton Date: Sat, 20 Aug 2022 12:16:55 +1200 Subject: [PATCH] Add initial Event Message Template previewability --- CRM/Event/BAO/Event.php | 5 +- CRM/Event/Form/SelfSvcTransfer.php | 5 +- CRM/Event/WorkflowMessage/EventExamples.php | 108 ++++++++++++++++++ .../WorkflowMessage/EventOnlineReceipt.php | 26 +++++ .../WorkflowMessage/ParticipantTrait.php | 10 ++ .../Event/Form/Registration/ConfirmTest.php | 2 +- .../event_offline_receipt_html.tpl | 4 +- .../event_offline_receipt_subject.tpl | 2 +- .../event_offline_receipt_text.tpl | 4 +- .../event_online_receipt_html.tpl | 4 +- .../event_online_receipt_subject.tpl | 2 +- .../event_online_receipt_text.tpl | 4 +- 12 files changed, 163 insertions(+), 13 deletions(-) create mode 100644 CRM/Event/WorkflowMessage/EventExamples.php create mode 100644 CRM/Event/WorkflowMessage/EventOnlineReceipt.php diff --git a/CRM/Event/BAO/Event.php b/CRM/Event/BAO/Event.php index 6e31f5bef4..193081eb2e 100644 --- a/CRM/Event/BAO/Event.php +++ b/CRM/Event/BAO/Event.php @@ -1189,12 +1189,15 @@ WHERE civicrm_event.is_active = 1 } $sendTemplateParams = [ - 'groupName' => 'msg_tpl_workflow_event', 'workflow' => 'event_online_receipt', 'contactId' => $contactID, 'isTest' => $isTest, 'tplParams' => $tplParams, 'PDFFilename' => ts('confirmation') . '.pdf', + 'modelProps' => [ + 'participantID' => (int) $participantId, + 'eventID' => (int) $values['event']['id'], + ], ]; // address required during receipt processing (pdf and email receipt) diff --git a/CRM/Event/Form/SelfSvcTransfer.php b/CRM/Event/Form/SelfSvcTransfer.php index 3bc858f0a6..75ab966ebc 100644 --- a/CRM/Event/Form/SelfSvcTransfer.php +++ b/CRM/Event/Form/SelfSvcTransfer.php @@ -398,7 +398,6 @@ class CRM_Event_Form_SelfSvcTransfer extends CRM_Core_Form { ]; $sendTemplateParams = [ - 'groupName' => 'msg_tpl_workflow_event', 'workflow' => 'event_online_receipt', 'contactId' => $participantDetails[$participant->id]['contact_id'], 'tplParams' => $tplParams, @@ -407,6 +406,10 @@ class CRM_Event_Form_SelfSvcTransfer extends CRM_Core_Form { 'toEmail' => $toEmail, 'cc' => $eventDetails['cc_confirm'] ?? NULL, 'bcc' => $eventDetails['bcc_confirm'] ?? NULL, + 'modelProps' => [ + 'participantID' => $participant->id, + 'eventID' => $participant->event_id, + ], ]; CRM_Core_BAO_MessageTemplate::sendTemplate($sendTemplateParams); } diff --git a/CRM/Event/WorkflowMessage/EventExamples.php b/CRM/Event/WorkflowMessage/EventExamples.php new file mode 100644 index 0000000000..68de53d91d --- /dev/null +++ b/CRM/Event/WorkflowMessage/EventExamples.php @@ -0,0 +1,108 @@ +getPriceSets(); + foreach ($priceSets as $priceSet) { + yield [ + 'name' => 'workflow/' . $workflow . '/' . 'price_set_' . $priceSet['name'], + 'title' => ts('Completed Registration') . ' : ' . $priceSet['title'], + 'tags' => ['preview'], + 'workflow' => $workflow, + 'is_show_line_items' => !$priceSet['is_quick_config'], + 'event_id' => $priceSet['event_id'], + ]; + } + } + } + + /** + * Build an example to use when rendering the workflow. + * + * @param array $example + * + * @throws \API_Exception + */ + public function build(array &$example): void { + $workFlow = WorkflowMessage::get(TRUE)->addWhere('name', '=', $example['workflow'])->execute()->first(); + $this->setWorkflowName($workFlow['name']); + $messageTemplate = new $workFlow['class'](); + $this->addExampleData($messageTemplate, $example); + $example['data'] = $this->toArray($messageTemplate); + } + + /** + * Add relevant example data. + * + * @param \CRM_Event_WorkflowMessage_EventOnlineReceipt|\CRM_Event_WorkflowMessage_EventOfflineReceipt $messageTemplate + * @param array $example + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + * @throws \Civi\API\Exception\UnauthorizedException + */ + private function addExampleData(GenericWorkflowMessage $messageTemplate, $example): void { + $messageTemplate->setContact(\Civi\Test::example('entity/Contact/Barb')); + $messageTemplate->setEventID($example['event_id']); + } + + /** + * Get prices sets from the site - ideally one quick config & one not. + * + * @return array + * + * @throws \API_Exception + */ + private function getPriceSets(): ?array { + // Permission check defaults to true - likely implicitly OK but may need to be false. + $quickConfigPriceSet = $this->getPriceSet(TRUE); + $nonQuickConfigPriceSet = $this->getPriceSet(FALSE); + + return array_filter([$quickConfigPriceSet, $nonQuickConfigPriceSet]); + } + + /** + * Get a price set. + * + * @param bool $isQuickConfig + * + * @return array|null + * @throws \API_Exception + */ + private function getPriceSet(bool $isQuickConfig): ?array { + $priceSetEntity = PriceSetEntity::get(FALSE) + ->addWhere('entity_table', '=', 'civicrm_event') + ->addSelect('price_set_id.id', 'entity_id', 'price_set_id.is_quick_config', 'price_set_id.name', 'price_set_id.title') + ->setLimit(1) + ->addWhere('price_set_id.is_quick_config', '=', $isQuickConfig) + ->execute()->first(); + + return empty($priceSetEntity) ? NULL : [ + 'id' => $priceSetEntity['price_set_id'], + 'name' => $priceSetEntity['price_set_id.name'], + 'title' => $priceSetEntity['price_set_id.title'], + 'event_id' => $priceSetEntity['entity_id'], + 'is_quick_config' => $priceSetEntity['price_set_id.is_quick_config'], + ]; + } + +} diff --git a/CRM/Event/WorkflowMessage/EventOnlineReceipt.php b/CRM/Event/WorkflowMessage/EventOnlineReceipt.php new file mode 100644 index 0000000000..d17591cc9a --- /dev/null +++ b/CRM/Event/WorkflowMessage/EventOnlineReceipt.php @@ -0,0 +1,26 @@ +eventID = $eventID; + return $this; + } + } diff --git a/tests/phpunit/CRM/Event/Form/Registration/ConfirmTest.php b/tests/phpunit/CRM/Event/Form/Registration/ConfirmTest.php index ab19da3b92..cebc6e73ef 100644 --- a/tests/phpunit/CRM/Event/Form/Registration/ConfirmTest.php +++ b/tests/phpunit/CRM/Event/Form/Registration/ConfirmTest.php @@ -82,7 +82,7 @@ class CRM_Event_Form_Registration_ConfirmTest extends CiviUnitTestCase { * * @dataProvider getThousandSeparators */ - public function testPaidSubmit($thousandSeparator) { + public function testPaidSubmit(string $thousandSeparator): void { // @todo - figure out why this doesn't pass validate financials $this->isValidateFinancialsOnPostAssert = FALSE; $this->setCurrencySeparators($thousandSeparator); diff --git a/xml/templates/message_templates/event_offline_receipt_html.tpl b/xml/templates/message_templates/event_offline_receipt_html.tpl index 15cee91f4a..427c71e79b 100644 --- a/xml/templates/message_templates/event_offline_receipt_html.tpl +++ b/xml/templates/message_templates/event_offline_receipt_html.tpl @@ -52,8 +52,8 @@ - {$event.event_title}
- {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|crmDate:"%Y%m%d" == $event.event_start_date|crmDate:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} + {event.title}
+ {event.start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|crmDate:"%Y%m%d" == $event.event_start_date|crmDate:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} diff --git a/xml/templates/message_templates/event_offline_receipt_subject.tpl b/xml/templates/message_templates/event_offline_receipt_subject.tpl index e686b72f8c..6b9da87a86 100644 --- a/xml/templates/message_templates/event_offline_receipt_subject.tpl +++ b/xml/templates/message_templates/event_offline_receipt_subject.tpl @@ -1 +1 @@ -{ts}Event Confirmation{/ts} - {$event.title} - {contact.display_name} +{ts}Event Confirmation{/ts} - {event.title} - {contact.display_name} diff --git a/xml/templates/message_templates/event_offline_receipt_text.tpl b/xml/templates/message_templates/event_offline_receipt_text.tpl index a37f38e352..1ea394eedf 100644 --- a/xml/templates/message_templates/event_offline_receipt_text.tpl +++ b/xml/templates/message_templates/event_offline_receipt_text.tpl @@ -41,8 +41,8 @@ ==========================================================={if !empty($pricesetFieldsCount) }===================={/if} -{$event.event_title} -{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|crmDate:"%Y%m%d" == $event.event_start_date|crmDate:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} +{event.title} +{event.start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|crmDate:"%Y%m%d" == $event.event_start_date|crmDate:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} {if !empty($event.participant_role) and $event.participant_role neq 'Attendee' and empty($defaultRole)} {ts}Participant Role{/ts}: {$event.participant_role} diff --git a/xml/templates/message_templates/event_online_receipt_html.tpl b/xml/templates/message_templates/event_online_receipt_html.tpl index 6bc51ef4cc..3f023ed6aa 100644 --- a/xml/templates/message_templates/event_online_receipt_html.tpl +++ b/xml/templates/message_templates/event_online_receipt_html.tpl @@ -63,8 +63,8 @@ - {$event.event_title}
- {$event.event_start_date|crmDate:"%A"} {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|crmDate:"%Y%m%d" == $event.event_start_date|crmDate:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate:"%A"} {$event.event_end_date|crmDate}{/if}{/if} + {event.title}
+ {event.start_date|crmDate:"%A"} {event.start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|crmDate:"%Y%m%d" == $event.event_start_date|crmDate:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate:"%A"} {$event.event_end_date|crmDate}{/if}{/if} diff --git a/xml/templates/message_templates/event_online_receipt_subject.tpl b/xml/templates/message_templates/event_online_receipt_subject.tpl index da1dab7259..10795520cd 100644 --- a/xml/templates/message_templates/event_online_receipt_subject.tpl +++ b/xml/templates/message_templates/event_online_receipt_subject.tpl @@ -1 +1 @@ -{if !empty($isOnWaitlist)}{ts}Wait List Confirmation{/ts}{elseif !empty($isRequireApproval)}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} - {contact.display_name} +{if !empty($isOnWaitlist)}{ts}Wait List Confirmation{/ts}{elseif !empty($isRequireApproval)}{ts}Registration Request Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {event.title} - {contact.display_name} diff --git a/xml/templates/message_templates/event_online_receipt_text.tpl b/xml/templates/message_templates/event_online_receipt_text.tpl index 893d3ff5c3..6f8fafbb2a 100644 --- a/xml/templates/message_templates/event_online_receipt_text.tpl +++ b/xml/templates/message_templates/event_online_receipt_text.tpl @@ -46,8 +46,8 @@ ==========================================================={if !empty($pricesetFieldsCount)}===================={/if} -{$event.event_title} -{$event.event_start_date|crmDate:"%A"} {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|crmDate:"%Y%m%d" == $event.event_start_date|crmDate:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate:"%A"} {$event.event_end_date|crmDate}{/if}{/if} +{event.title} +{event.start_date|crmDate:"%A"} {event.start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|crmDate:"%Y%m%d" == $event.event_start_date|crmDate:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate:"%A"} {$event.event_end_date|crmDate}{/if}{/if} {if !empty($conference_sessions)} -- 2.25.1