<p class="help-block">{{:: ts('Keep a log of the date, time, user, and items saved by each form submission.') }}</p>
</div>
- <div class="form-inline" ng-if="editor.afform.create_submission">
+ <div class="form-group" ng-if="editor.afform.create_submission">
<label for="submit_limit">{{:: ts('Maximum Submissions') }}</label>
<input type="number" min="1" step="1" id="submit_limit" ng-model="editor.afform.submit_limit" placeholder="{{:: ts('Unlimited') }}">
</div>
- <div class="form-group" >
+ <div class="form-group">
<label>
<input type="checkbox" ng-model="editor.afform.manual_processing" ng-click="editor.toggleManualProcessing()" ng-class="{'disabled': !!editor.afform.allow_verification_by_email}">
{{:: ts('Verify submission before processing') }}
foreach ($tokenForms as $tokenName => $afform) {
$e->tokens['afform']["afform.{$tokenName}Url"] = E::ts('%1 (URL)', [1 => $afform['title'] ?? $afform['name']]);
$e->tokens['afform']["afform.{$tokenName}Link"] = E::ts('%1 (Full Hyperlink)', [1 => $afform['title'] ?? $afform['name']]);
+ $e->tokens['afform']["afform.{$tokenName}ValidateSubmissionUrl"] = E::ts('%1 Validate Submission URL)', [1 => $afform['title'] ?? $afform['name']]);
+ $e->tokens['afform']["afform.{$tokenName}ValidateSubmissionLink"] = E::ts('%1 Validate Submission (Full Hyperlink)', [1 => $afform['title'] ?? $afform['name']]);
}
}
// let's not save the data in other CiviCRM table if manual verification is needed.
if (!empty($this->_afform['manual_processing']) && empty($this->args['sid'])) {
+ // check for verification email
+ $this->processVerficationEmail($submission['id']);
return [];
}
]);
}
+ /**
+ * Function to send the verification email if configured
+ *
+ * @param int $submissionId
+ *
+ * @return void
+ */
+ private function processVerficationEmail(int $submissionId):void {
+ // check if email verification configured and message template is set
+ if (empty($this->_afform['allow_verification_by_email']) || empty($this->_afform['email_confirmation_template_id'])) {
+ return;
+ }
+
+ $emailValue = '';
+ $submittedValues = $this->getValues();
+ foreach ($this->_formDataModel->getEntities() as $entityName => $entity) {
+ foreach ($submittedValues[$entityName] ?? [] as $values) {
+ $values['joins'] = array_intersect_key($values['joins'] ?? [], $entity['joins']);
+ foreach ($values['joins'] as $joinEntity => &$joinValues) {
+ if ($joinEntity === 'Email') {
+ foreach ($joinValues as $fld => $val) {
+ if (!empty($val['email'])) {
+ $emailValue = $val['email'];
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // processing sending of email only if email field exists in the form
+ if (!empty($emailValue)) {
+ $this->sendEmail($emailValue, $submissionId);
+ }
+ }
+
+ /**
+ * Function to send email
+ *
+ * @param string $emailAddress
+ * @param int $submissionId
+ *
+ * @return void
+ */
+ private function sendEmail(string $emailAddress, int $submissionId) {
+ // get domain email address
+ [$domainEmailName, $domainEmailAddress] = \CRM_Core_BAO_Domain::getNameAndEmail();
+
+ $tokenContext = [
+ 'validateAfformSubmission' => [
+ 'submissionId' => $submissionId,
+ ],
+ ];
+
+ // send email
+ $emailParams = [
+ 'id' => $this->_afform['email_confirmation_template_id'],
+ 'from' => "$domainEmailName <" . $domainEmailAddress . ">",
+ 'toEmail' => $emailAddress,
+ 'tokenContext' => $tokenContext,
+ ];
+
+ civicrm_api3('MessageTemplate', 'send', $emailParams);
+ }
+
}