diff --git a/step/email/lang/de/lifecyclestep_email.php b/step/email/lang/de/lifecyclestep_email.php
index b0fab933..f2710d1d 100644
--- a/step/email/lang/de/lifecyclestep_email.php
+++ b/step/email/lang/de/lifecyclestep_email.php
@@ -30,6 +30,7 @@
. '
' . 'Nachname des Empfängers: ##lastname##'
. '
' . 'Link zur Antwortseite: ##link##'
. '
' . 'Betroffene Kurse: ##courses##'
+ . '
' . 'Kurznamen betroffener Kurse: ##shortcourses##'
. '
';
$string['email_content_html'] = 'HTML-Vorlage für Emails';
$string['email_content_html_help'] = 'Stellen sie die HTML-Vorlage für Emails ein. (in HTML-Format; falls gesetzt, wird es an Stelle der Klartext-Vorlage benutzt!)' . '' . 'Sie können die folgenden Platzhalter benutzen:'
@@ -45,6 +46,7 @@
. '
' . 'Nachname des Empfängers: ##lastname##'
. '
' . 'Link zur Antwortseite: ##link##'
. '
' . 'Betroffene Kurse: ##courses##'
+ . '
' . 'Kurznamen betroffener Kurse: ##shortcourses-html##'
. '
';
$string['keep_course'] = 'Kurs behalten';
$string['pluginname'] = 'Email-Schritt';
diff --git a/step/email/lang/en/lifecyclestep_email.php b/step/email/lang/en/lifecyclestep_email.php
index a0fd8ec4..e593339f 100644
--- a/step/email/lang/en/lifecyclestep_email.php
+++ b/step/email/lang/en/lifecyclestep_email.php
@@ -30,6 +30,7 @@
. '
' . 'Last name of recipient: ##lastname##'
. '
' . 'Link to response page: ##link##'
. '
' . 'Impacted courses: ##courses##'
+ . '
' . 'Short names of impacted courses: ##shortcourses##'
. '';
$string['email_content_html'] = 'Content HTML Template';
$string['email_content_html_help'] = 'Set the html template for the content of the email (HTML email, will be used instead of plaintext field if not empty!)' . '' . 'You can use the following placeholders:'
@@ -37,6 +38,7 @@
. '
' . 'Last name of recipient: ##lastname##'
. '
' . 'Link to response page: ##link-html##'
. '
' . 'Impacted courses: ##courses-html##'
+ . '
' . 'Short names of impacted courses: ##shortcourses-html##'
. '
';
$string['email_responsetimeout'] = 'Time the user has for the response';
$string['email_subject'] = 'Subject template';
diff --git a/step/email/lib.php b/step/email/lib.php
index f25b78bb..1dfcbbc2 100644
--- a/step/email/lib.php
+++ b/step/email/lib.php
@@ -27,7 +27,6 @@
use tool_lifecycle\local\manager\settings_manager;
use tool_lifecycle\local\response\step_response;
use tool_lifecycle\local\manager\step_manager;
-use tool_lifecycle\local\manager\process_data_manager;
use tool_lifecycle\settings_type;
defined('MOODLE_INTERNAL') || die();
@@ -169,53 +168,34 @@ private function replace_placeholders($strings, $user, $stepid, $mailentries) {
$patterns[] = '##link-html##';
$replacements[] = \html_writer::link($url, $url);
- // Replace courses list.
- $patterns[] = '##courses##';
- $courses = $mailentries;
- $coursesstring = '';
- $coursesstring .= $this->parse_course(array_pop($courses)->courseid);
- foreach ($courses as $entry) {
- $coursesstring .= "\n" . $this->parse_course($entry->courseid);
+ $courses = [];
+ foreach ($mailentries as $entry) {
+ $courses[] = get_course($entry->courseid);
}
- $replacements[] = $coursesstring;
- // Replace courses html.
+ // Replace courses list.
+ $coursesstrings = [];
+ foreach ($courses as $course) {
+ $coursesstrings[] = $course->fullname;
+ }
+ $patterns[] = '##courses##';
+ $replacements[] = join("\n", $coursesstrings);
$patterns[] = '##courses-html##';
- $courses = $mailentries;
- $coursestabledata = [];
- foreach ($courses as $entry) {
- $coursestabledata[$entry->courseid] = $this->parse_course_row_data($entry->courseid);
+ $replacements[] = join("
", $coursesstrings);
+
+ // Replace short courses list.
+ $coursesstrings = [];
+ foreach ($courses as $course) {
+ $coursesstrings[] = $course->shortname;
}
- $coursestable = new \html_table();
- $coursestable->data = $coursestabledata;
- $replacements[] = \html_writer::table($coursestable);
+ $patterns[] = '##shortcourses##';
+ $replacements[] = join("\n", $coursesstrings);
+ $patterns[] = '##shortcourses-html##';
+ $replacements[] = join("
", $coursesstrings);
return str_ireplace($patterns, $replacements, $strings);
}
- /**
- * Parses a course for the non html format.
- * @param int $courseid id of the course
- * @return string
- * @throws \dml_exception
- */
- private function parse_course($courseid) {
- $course = get_course($courseid);
- $result = $course->fullname;
- return $result;
- }
-
- /**
- * Parses a course for the html format.
- * @param int $courseid id of the course
- * @return array column of a course
- * @throws \dml_exception
- */
- private function parse_course_row_data($courseid) {
- $course = get_course($courseid);
- return [$course->fullname];
- }
-
/**
* Defines which settings each instance of the subplugin offers for the user to define.
* @return instance_setting[] containing settings keys and PARAM_TYPES
diff --git a/step/email/tests/lib_test.php b/step/email/tests/lib_test.php
new file mode 100644
index 00000000..826842be
--- /dev/null
+++ b/step/email/tests/lib_test.php
@@ -0,0 +1,58 @@
+.
+/**
+ * Unit tests for the lifecyclestep_email lib.php.
+ *
+ * @package lifecyclestep_email
+ * @copyright 2024 Justus Dieckmann, University of Münster.
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+namespace lifecyclestep_email;
+
+/**
+ * Unit tests for the lifecyclestep_email lib.php.
+ *
+ * @package lifecyclestep_email
+ * @copyright 2024 Justus Dieckmann, University of Münster.
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+final class lib_test extends \advanced_testcase {
+
+ /**
+ * Tests \tool_lifecycle\step\email::replace_placeholders.
+ *
+ * @covers \tool_lifecycle\step\email::replace_placeholders
+ */
+ public function test_replace_placeholders(): void {
+ $this->resetAfterTest();
+
+ $user1 = $this->getDataGenerator()->create_user(['firstname' => 'Jane', 'lastname' => 'Doe']);
+ $course1 = $this->getDataGenerator()->create_course(['fullname' => 'Course 1', 'shortname' => 'C1']);
+ $course2 = $this->getDataGenerator()->create_course(['fullname' => 'Course 2', 'shortname' => 'C2']);
+ $lib = new \tool_lifecycle\step\email();
+ $callreplaceplaceholders = function($strings, $user, $stepid, $mailentries) {
+ return $this->replace_placeholders($strings, $user, $stepid, $mailentries);
+ };
+ $response = $callreplaceplaceholders->call($lib, [
+ "##firstname##\n##lastname##\n##courses##\n##shortcourses##",
+ "##firstname##
##lastname##
##courses-html##
##shortcourses-html##",
+ ], $user1, 0, [(object) ['courseid' => $course1->id], (object) ['courseid' => $course2->id]]);
+
+ $this->assertCount(2, $response);
+ $this->assertEquals("Jane\nDoe\nCourse 1\nCourse 2\nC1\nC2", $response[0]);
+ $this->assertEquals("Jane
Doe
Course 1
Course 2
C1
C2", $response[1]);
+ }
+}