diff --git a/extension/Documentation/Manual.rst b/extension/Documentation/Manual.rst index 7b0f91b13000f9bdb7ef061a8c29aabe8ac6034a..446620aab135fef5d3f2647153fa3f443f1aeb5b 100644 --- a/extension/Documentation/Manual.rst +++ b/extension/Documentation/Manual.rst @@ -3732,8 +3732,9 @@ Type: sendmail * *sendMailXId* = `<string>` - Will be copied to the mailLog record. Helps to setup specific logfile queries. * *sendMailXId2* = `<string>` - Will be copied to the mailLog record. Helps to setup specific logfile queries. * *sendMailXId3* = `<string>` - Will be copied to the mailLog record. Helps to setup specific logfile queries. - * *sendMailSubjectHtmlEntity* = `<string>` - **encode|decode|none** - the mail subject will htmlspecialchar() encoded / decoded (default) or none (untouched). - * *sendMailBodyHtmlEntity*= `<string>` - **encode|decode|none** - the mail body will htmlspecialchar() encoded, decoded (default) or none (untouched). + * *sendMailMode* = `<string>` - **html** - if set, the e-mail body will be rendered as html. + * *sendMailSubjectHtmlEntity* = `<string>` - **encode|decode|none** - the mail subject will be htmlspecialchar() encoded / decoded (default) or none (untouched). + * *sendMailBodyHtmlEntity*= `<string>` - **encode|decode|none** - the mail body will be htmlspecialchar() encoded, decoded (default) or none (untouched). * To use values of the submitted form, use the STORE_FORM. E.g. `{{name:F:allbut}}` * To use the `id` of a new created or already existing primary record, use the STORE_RECORD. E.g. `{{id:R}}`. @@ -5616,7 +5617,7 @@ The following parameters can also be written as complete words for ease of use: to:<email[,email]>|from:<email>|subject:<subject>|body:<body> [|cc:<email[,email]]>[|bcc:<email[,email]]>[|reply-to:<email>] [|autosubmit:<on/off>][|grid:<grid>][|xid:<xId>][|xid2:<xId2>][|xid3:<xId3>][|header:<mail header>] - [|M:html] + [|mode:html] Send emails. Every mail will be logged in the table `mailLog`. Attachments are supported. diff --git a/extension/qfq/external/AutoCron.php b/extension/qfq/external/AutoCron.php index 5d921e915773d9ec3a23f8033cc5a8367c0c13e9..0dc3ad9f7d3ed08035ce516e48e6741c1ca25bb2 100644 --- a/extension/qfq/external/AutoCron.php +++ b/extension/qfq/external/AutoCron.php @@ -202,7 +202,8 @@ class AutoCron { private function mailEntryFill(array $mailEntry) { foreach ([FE_SENDMAIL_TO, FE_SENDMAIL_CC, FE_SENDMAIL_BCC, FE_SENDMAIL_FROM, FE_SENDMAIL_SUBJECT, FE_SENDMAIL_REPLY_TO, FE_SENDMAIL_FLAG_AUTO_SUBMIT, FE_SENDMAIL_GR_ID, FE_SENDMAIL_X_ID, - FE_SENDMAIL_X_ID2, FE_SENDMAIL_X_ID3] as $key) { + FE_SENDMAIL_X_ID2, FE_SENDMAIL_X_ID3, FE_SENDMAIL_BODY_MODE, + FE_SENDMAIL_BODY_HTML_ENTITY, FE_SENDMAIL_SUBJECT_HTML_ENTITY] as $key) { if (!isset($mailEntry[$key])) { $mailEntry[$key] = ''; } @@ -253,6 +254,9 @@ class AutoCron { $mail[SENDMAIL_TOKEN_RECEIVER_BCC] = $this->evaluate->parse($mailEntry[FE_SENDMAIL_BCC]); $mail[SENDMAIL_TOKEN_X_ID2] = $this->evaluate->parse($mailEntry[FE_SENDMAIL_X_ID2]); $mail[SENDMAIL_TOKEN_X_ID3] = $this->evaluate->parse($mailEntry[FE_SENDMAIL_X_ID3]); + $mail[SENDMAIL_TOKEN_BODY_MODE] = $this->evaluate->parse($mailEntry[FE_SENDMAIL_BODY_MODE]); + $mail[SENDMAIL_TOKEN_BODY_HTML_ENTITY] = $this->evaluate->parse($mailEntry[FE_SENDMAIL_BODY_HTML_ENTITY]); + $mail[SENDMAIL_TOKEN_SUBJECT_HTML_ENTITY] = $this->evaluate->parse($mailEntry[FE_SENDMAIL_SUBJECT_HTML_ENTITY]); $mail[SENDMAIL_TOKEN_SRC] = "AutoCron: Cron.id=" . $job[COLUMN_ID]; diff --git a/extension/qfq/qfq/Constants.php b/extension/qfq/qfq/Constants.php index 53313c886e388a011244497e1f0c64a0eabdf848..e999fa0cbfff45beaa61b057c0360e43a38106e3 100644 --- a/extension/qfq/qfq/Constants.php +++ b/extension/qfq/qfq/Constants.php @@ -975,9 +975,10 @@ const FE_SENDMAIL_GR_ID = 'sendMailGrId'; // gr_id: used to classify mail log en const FE_SENDMAIL_X_ID = 'sendMailXId'; // x_id: used to classify mail log entries ind table mailLog const FE_SENDMAIL_X_ID2 = 'sendMailXId2'; // x_id: used to classify mail log entries ind table mailLog const FE_SENDMAIL_X_ID3 = 'sendMailXId3'; // x_id: used to classify mail log entries ind table mailLog -const FE_SENDMAIL_SUBJECT_HTML_ENTITY = 'sendMailSubjectHtmlEntity'; // encode|decode >> DECODE, ENCODE -const FE_SENDMAIL_BODY_HTML_ENTITY = 'sendMailBodyHtmlEntity'; // encode | decode >> DECODE, ENCODE -const FE_SENDMAIL_ATTACHMENT = 'sendMailAttachment'; // x_id: used to classify mail log entries in table mailLog +const FE_SENDMAIL_SUBJECT_HTML_ENTITY = 'sendMailSubjectHtmlEntity'; // encode|decode|none >> DECODE, ENCODE, NONE +const FE_SENDMAIL_BODY_HTML_ENTITY = 'sendMailBodyHtmlEntity'; // encode|decode|none >> DECODE, ENCODE, NONE +const FE_SENDMAIL_ATTACHMENT = 'sendMailAttachment'; +const FE_SENDMAIL_BODY_MODE = 'sendMailMode'; // html >> render body as html const FE_AUTOFOCUS = 'autofocus'; // value: <none>|0|1 , <none>==1, this element becomes the focus during form load. const FE_RETYPE = 'retype'; // value: <none>|0|1 , <none>==1, this element becomes the focus during form load. const FE_RETYPE_LABEL = 'retypeLabel'; // value: label text for retype FormElement diff --git a/extension/qfq/qfq/form/FormAction.php b/extension/qfq/qfq/form/FormAction.php index c816f8dc3b8eaaa446708013c4f74dfd54dcfd10..6f51f161d73bb1ee00f45c9cae588c6627f2aa6c 100644 --- a/extension/qfq/qfq/form/FormAction.php +++ b/extension/qfq/qfq/form/FormAction.php @@ -271,6 +271,9 @@ class FormAction { $args[] = SENDMAIL_TOKEN_SRC . PARAM_TOKEN_DELIMITER . "FormId: " . $feSpecAction[FE_FORM_ID] . ", FormElementId: " . $feSpecAction['id']; $args[] = SENDMAIL_TOKEN_X_ID2 . PARAM_TOKEN_DELIMITER . $this->evaluate->parse($feSpecAction[FE_SENDMAIL_X_ID2]); $args[] = SENDMAIL_TOKEN_X_ID3 . PARAM_TOKEN_DELIMITER . $this->evaluate->parse($feSpecAction[FE_SENDMAIL_X_ID3]); + $args[] = SENDMAIL_TOKEN_BODY_MODE . PARAM_TOKEN_DELIMITER . $this->evaluate->parse($feSpecAction[FE_SENDMAIL_BODY_MODE]); + $args[] = SENDMAIL_TOKEN_BODY_HTML_ENTITY . PARAM_TOKEN_DELIMITER . $this->evaluate->parse($feSpecAction[FE_SENDMAIL_BODY_HTML_ENTITY]); + $args[] = SENDMAIL_TOKEN_SUBJECT_HTML_ENTITY . PARAM_TOKEN_DELIMITER . $this->evaluate->parse($feSpecAction[FE_SENDMAIL_SUBJECT_HTML_ENTITY]); $args[] = $this->evaluate->parse($feSpecAction[FE_SENDMAIL_ATTACHMENT]); // Mail: send @@ -434,28 +437,6 @@ class FormAction { return false; } - /** - * Set all necessary keys - subsequent 'isset()' are not necessary anymore. - * - * @param array $fe - * - * @return array - */ - private function initActionFormElement(array $fe) { - - $list = [FE_TYPE, FE_SLAVE_ID, FE_SQL_VALIDATE, FE_SQL_BEFORE, FE_SQL_INSERT, FE_SQL_UPDATE, FE_SQL_DELETE, - FE_SQL_AFTER, FE_EXPECT_RECORDS, FE_REQUIRED_LIST, FE_MESSAGE_FAIL, FE_SENDMAIL_TO, FE_SENDMAIL_CC, - FE_SENDMAIL_BCC, FE_SENDMAIL_FROM, FE_SENDMAIL_SUBJECT, FE_SENDMAIL_REPLY_TO, FE_SENDMAIL_FLAG_AUTO_SUBMIT, - FE_SENDMAIL_GR_ID, FE_SENDMAIL_X_ID]; - - foreach ($list as $key) { - Support::setIfNotSet($fe, $key); - } - - return $fe; - } - - /** * Will be called for each master record (clipboard). * Process all FE.type='paste' for the given master record in clipboard. diff --git a/extension/qfq/qfq/helper/HelperFormElement.php b/extension/qfq/qfq/helper/HelperFormElement.php index 350ff69e224bfb3fd8fd6ef3f2bf7845fd2197db..b2640c4b123022e0a5c20023a08560b448a2970c 100644 --- a/extension/qfq/qfq/helper/HelperFormElement.php +++ b/extension/qfq/qfq/helper/HelperFormElement.php @@ -266,7 +266,8 @@ class HelperFormElement { $list = [FE_TYPE, FE_SLAVE_ID, FE_SQL_VALIDATE, FE_SQL_BEFORE, FE_SQL_INSERT, FE_SQL_UPDATE, FE_SQL_DELETE, FE_SQL_AFTER, FE_EXPECT_RECORDS, FE_REQUIRED_LIST, FE_MESSAGE_FAIL, FE_SENDMAIL_TO, FE_SENDMAIL_CC, FE_SENDMAIL_BCC, FE_SENDMAIL_FROM, FE_SENDMAIL_SUBJECT, FE_SENDMAIL_REPLY_TO, FE_SENDMAIL_FLAG_AUTO_SUBMIT, - FE_SENDMAIL_GR_ID, FE_SENDMAIL_X_ID, FE_SENDMAIL_X_ID2, FE_SENDMAIL_X_ID3]; + FE_SENDMAIL_GR_ID, FE_SENDMAIL_X_ID, FE_SENDMAIL_X_ID2, FE_SENDMAIL_X_ID3, FE_SENDMAIL_BODY_MODE, + FE_SENDMAIL_BODY_HTML_ENTITY, FE_SENDMAIL_SUBJECT_HTML_ENTITY]; foreach ($list as $key) { Support::setIfNotSet($fe, $key); diff --git a/extension/qfq/qfq/report/SendMail.php b/extension/qfq/qfq/report/SendMail.php index 87fc4a3a8e2820b2f2ab79b5d2d475dfe28320b5..0b6751fca4e736f0b7bcad59a5fbfabce8b7463d 100644 --- a/extension/qfq/qfq/report/SendMail.php +++ b/extension/qfq/qfq/report/SendMail.php @@ -100,12 +100,16 @@ class SendMail { } // Subject - if (empty($mailConfig[SENDMAIL_TOKEN_SUBJECT_HTML_ENTITY]) || $mailConfig[SENDMAIL_TOKEN_SUBJECT_HTML_ENTITY] !== MODE_ENCODE) { + if (empty($mailConfig[SENDMAIL_TOKEN_SUBJECT_HTML_ENTITY]) || + ($mailConfig[SENDMAIL_TOKEN_SUBJECT_HTML_ENTITY] !== MODE_ENCODE && + $mailConfig[SENDMAIL_TOKEN_SUBJECT_HTML_ENTITY] !== MODE_NONE)) { $mailConfig[SENDMAIL_TOKEN_SUBJECT_HTML_ENTITY] = MODE_DECODE; } // Body - if (empty($mailConfig[SENDMAIL_TOKEN_BODY_HTML_ENTITY]) || $mailConfig[SENDMAIL_TOKEN_BODY_HTML_ENTITY] !== MODE_ENCODE) { + if (empty($mailConfig[SENDMAIL_TOKEN_BODY_HTML_ENTITY]) || + ($mailConfig[SENDMAIL_TOKEN_BODY_HTML_ENTITY] !== MODE_ENCODE && + $mailConfig[SENDMAIL_TOKEN_BODY_HTML_ENTITY] !== MODE_NONE)) { $mailConfig[SENDMAIL_TOKEN_BODY_HTML_ENTITY] = MODE_DECODE; } @@ -171,7 +175,7 @@ class SendMail { $encodedSubject = Support::escapeDoubleTick($encodedSubject); // now, escape double ticks. - $args[] = '-u "' . $encodedSubject . '"';; + $args[] = '-u "' . $encodedSubject . '"'; } if (!empty($mailConfig[SENDMAIL_TOKEN_BODY])) { @@ -312,23 +316,14 @@ class SendMail { unset($attach[$key]); break; - case SENDMAIL_TOKEN_DOWNLOAD_MODE: - $downloadMode = substr($element, 2); - unset($attach[$key]); - break; - case SENDMAIL_TOKEN_ATTACHMENT_FILE: - if ($downloadMode == '') { // Set only if not explicit given. - $downloadMode = DOWNLOAD_MODE_FILE; - } + $downloadMode = DOWNLOAD_MODE_FILE; break; case SENDMAIL_TOKEN_ATTACHMENT_URL: case SENDMAIL_TOKEN_ATTACHMENT_URL_PARAM: case SENDMAIL_TOKEN_ATTACHMENT_PAGE: - if ($downloadMode == '') { // Set only if not explicit given. - $downloadMode = DOWNLOAD_MODE_PDF; - } + $downloadMode = DOWNLOAD_MODE_PDF; break; default: diff --git a/extension/qfq/tests/phpunit/HelperFormElementTest.php b/extension/qfq/tests/phpunit/HelperFormElementTest.php index c944813f31bbe2a3c725b9768ff683ecdcb59730..fc6d2517bd80f842ea1b0935508291e27cc79df5 100644 --- a/extension/qfq/tests/phpunit/HelperFormElementTest.php +++ b/extension/qfq/tests/phpunit/HelperFormElementTest.php @@ -111,7 +111,8 @@ class HelperFormElementTest extends TestCase { $list = [FE_TYPE, FE_SLAVE_ID, FE_SQL_VALIDATE, FE_SQL_BEFORE, FE_SQL_INSERT, FE_SQL_UPDATE, FE_SQL_DELETE, FE_SQL_AFTER, FE_EXPECT_RECORDS, FE_REQUIRED_LIST, FE_MESSAGE_FAIL, FE_SENDMAIL_TO, FE_SENDMAIL_CC, FE_SENDMAIL_BCC, FE_SENDMAIL_FROM, FE_SENDMAIL_SUBJECT, FE_SENDMAIL_REPLY_TO, FE_SENDMAIL_FLAG_AUTO_SUBMIT, - FE_SENDMAIL_GR_ID, FE_SENDMAIL_X_ID, FE_SENDMAIL_X_ID2, FE_SENDMAIL_X_ID3]; + FE_SENDMAIL_GR_ID, FE_SENDMAIL_X_ID, FE_SENDMAIL_X_ID2, FE_SENDMAIL_X_ID3, FE_SENDMAIL_BODY_MODE, + FE_SENDMAIL_BODY_HTML_ENTITY, FE_SENDMAIL_SUBJECT_HTML_ENTITY]; $expect = array(); foreach ($list as $key) {