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]); + } +}