Skip to content

Commit 86e4c1a

Browse files
Email: add ##shortcourses## placeholder (#215)
* Email: add ##shortcourses## placeholder * Add phpunit test for replace placeholders * Fix Codestyle
1 parent 80b4d28 commit 86e4c1a

File tree

4 files changed

+82
-40
lines changed

4 files changed

+82
-40
lines changed

step/email/lang/de/lifecyclestep_email.php

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
. '<br>' . 'Nachname des Empfängers: ##lastname##'
3131
. '<br>' . 'Link zur Antwortseite: ##link##'
3232
. '<br>' . 'Betroffene Kurse: ##courses##'
33+
. '<br>' . 'Kurznamen betroffener Kurse: ##shortcourses##'
3334
. '</p>';
3435
$string['email_content_html'] = 'HTML-Vorlage für Emails';
3536
$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!)' . '<p>' . 'Sie können die folgenden Platzhalter benutzen:'
@@ -45,6 +46,7 @@
4546
. '<br>' . 'Nachname des Empfängers: ##lastname##'
4647
. '<br>' . 'Link zur Antwortseite: ##link##'
4748
. '<br>' . 'Betroffene Kurse: ##courses##'
49+
. '<br>' . 'Kurznamen betroffener Kurse: ##shortcourses-html##'
4850
. '</p>';
4951
$string['keep_course'] = 'Kurs behalten';
5052
$string['pluginname'] = 'Email-Schritt';

step/email/lang/en/lifecyclestep_email.php

+2
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,15 @@
3030
. '<br>' . 'Last name of recipient: ##lastname##'
3131
. '<br>' . 'Link to response page: ##link##'
3232
. '<br>' . 'Impacted courses: ##courses##'
33+
. '<br>' . 'Short names of impacted courses: ##shortcourses##'
3334
. '</p>';
3435
$string['email_content_html'] = 'Content HTML Template';
3536
$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!)' . '<p>' . 'You can use the following placeholders:'
3637
. '<br>' . 'First name of recipient: ##firstname##'
3738
. '<br>' . 'Last name of recipient: ##lastname##'
3839
. '<br>' . 'Link to response page: ##link-html##'
3940
. '<br>' . 'Impacted courses: ##courses-html##'
41+
. '<br>' . 'Short names of impacted courses: ##shortcourses-html##'
4042
. '</p>';
4143
$string['email_responsetimeout'] = 'Time the user has for the response';
4244
$string['email_subject'] = 'Subject template';

step/email/lib.php

+20-40
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
use tool_lifecycle\local\manager\settings_manager;
2828
use tool_lifecycle\local\response\step_response;
2929
use tool_lifecycle\local\manager\step_manager;
30-
use tool_lifecycle\local\manager\process_data_manager;
3130
use tool_lifecycle\settings_type;
3231

3332
defined('MOODLE_INTERNAL') || die();
@@ -182,53 +181,34 @@ private function replace_placeholders($strings, $user, $stepid, $mailentries) {
182181
$patterns[] = '##link-html##';
183182
$replacements[] = \html_writer::link($url, $url);
184183

185-
// Replace courses list.
186-
$patterns[] = '##courses##';
187-
$courses = $mailentries;
188-
$coursesstring = '';
189-
$coursesstring .= $this->parse_course(array_pop($courses)->courseid);
190-
foreach ($courses as $entry) {
191-
$coursesstring .= "\n" . $this->parse_course($entry->courseid);
184+
$courses = [];
185+
foreach ($mailentries as $entry) {
186+
$courses[] = get_course($entry->courseid);
192187
}
193-
$replacements[] = $coursesstring;
194188

195-
// Replace courses html.
189+
// Replace courses list.
190+
$coursesstrings = [];
191+
foreach ($courses as $course) {
192+
$coursesstrings[] = $course->fullname;
193+
}
194+
$patterns[] = '##courses##';
195+
$replacements[] = join("\n", $coursesstrings);
196196
$patterns[] = '##courses-html##';
197-
$courses = $mailentries;
198-
$coursestabledata = [];
199-
foreach ($courses as $entry) {
200-
$coursestabledata[$entry->courseid] = $this->parse_course_row_data($entry->courseid);
197+
$replacements[] = join("<br>", $coursesstrings);
198+
199+
// Replace short courses list.
200+
$coursesstrings = [];
201+
foreach ($courses as $course) {
202+
$coursesstrings[] = $course->shortname;
201203
}
202-
$coursestable = new \html_table();
203-
$coursestable->data = $coursestabledata;
204-
$replacements[] = \html_writer::table($coursestable);
204+
$patterns[] = '##shortcourses##';
205+
$replacements[] = join("\n", $coursesstrings);
206+
$patterns[] = '##shortcourses-html##';
207+
$replacements[] = join("<br>", $coursesstrings);
205208

206209
return str_ireplace($patterns, $replacements, $strings);
207210
}
208211

209-
/**
210-
* Parses a course for the non html format.
211-
* @param int $courseid id of the course
212-
* @return string
213-
* @throws \dml_exception
214-
*/
215-
private function parse_course($courseid) {
216-
$course = get_course($courseid);
217-
$result = $course->fullname;
218-
return $result;
219-
}
220-
221-
/**
222-
* Parses a course for the html format.
223-
* @param int $courseid id of the course
224-
* @return array column of a course
225-
* @throws \dml_exception
226-
*/
227-
private function parse_course_row_data($courseid) {
228-
$course = get_course($courseid);
229-
return [$course->fullname];
230-
}
231-
232212
/**
233213
* Defines which settings each instance of the subplugin offers for the user to define.
234214
* @return instance_setting[] containing settings keys and PARAM_TYPES

step/email/tests/lib_test.php

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
// This file is part of Moodle - http://moodle.org/
3+
//
4+
// Moodle is free software: you can redistribute it and/or modify
5+
// it under the terms of the GNU General Public License as published by
6+
// the Free Software Foundation, either version 3 of the License, or
7+
// (at your option) any later version.
8+
//
9+
// Moodle is distributed in the hope that it will be useful,
10+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
// GNU General Public License for more details.
13+
//
14+
// You should have received a copy of the GNU General Public License
15+
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
16+
/**
17+
* Unit tests for the lifecyclestep_email lib.php.
18+
*
19+
* @package lifecyclestep_email
20+
* @copyright 2024 Justus Dieckmann, University of Münster.
21+
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
22+
*/
23+
namespace lifecyclestep_email;
24+
25+
/**
26+
* Unit tests for the lifecyclestep_email lib.php.
27+
*
28+
* @package lifecyclestep_email
29+
* @copyright 2024 Justus Dieckmann, University of Münster.
30+
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
31+
*/
32+
final class lib_test extends \advanced_testcase {
33+
34+
/**
35+
* Tests \tool_lifecycle\step\email::replace_placeholders.
36+
*
37+
* @covers \tool_lifecycle\step\email::replace_placeholders
38+
*/
39+
public function test_replace_placeholders(): void {
40+
$this->resetAfterTest();
41+
42+
$user1 = $this->getDataGenerator()->create_user(['firstname' => 'Jane', 'lastname' => 'Doe']);
43+
$course1 = $this->getDataGenerator()->create_course(['fullname' => 'Course 1', 'shortname' => 'C1']);
44+
$course2 = $this->getDataGenerator()->create_course(['fullname' => 'Course 2', 'shortname' => 'C2']);
45+
$lib = new \tool_lifecycle\step\email();
46+
$callreplaceplaceholders = function($strings, $user, $stepid, $mailentries) {
47+
return $this->replace_placeholders($strings, $user, $stepid, $mailentries);
48+
};
49+
$response = $callreplaceplaceholders->call($lib, [
50+
"##firstname##\n##lastname##\n##courses##\n##shortcourses##",
51+
"##firstname##<br>##lastname##<br>##courses-html##<br>##shortcourses-html##",
52+
], $user1, 0, [(object) ['courseid' => $course1->id], (object) ['courseid' => $course2->id]]);
53+
54+
$this->assertCount(2, $response);
55+
$this->assertEquals("Jane\nDoe\nCourse 1\nCourse 2\nC1\nC2", $response[0]);
56+
$this->assertEquals("Jane<br>Doe<br>Course 1<br>Course 2<br>C1<br>C2", $response[1]);
57+
}
58+
}

0 commit comments

Comments
 (0)