diff options
author | Simon Rettberg | 2017-01-13 13:03:42 +0100 |
---|---|---|
committer | Simon Rettberg | 2017-01-13 13:03:42 +0100 |
commit | e757d5904d5ee3db61d06b034b3023368e2dd94c (patch) | |
tree | 40b21dfb8c0f0d4821bb7adf6552b9be695f7ed4 /dozentenmodulserver | |
parent | [server] use mail template from the configuration database when generating ma... (diff) | |
download | tutor-module-e757d5904d5ee3db61d06b034b3023368e2dd94c.tar.gz tutor-module-e757d5904d5ee3db61d06b034b3023368e2dd94c.tar.xz tutor-module-e757d5904d5ee3db61d06b034b3023368e2dd94c.zip |
[server] Refine mail template parsing; fix too many mails being sent for invalid lectures
Diffstat (limited to 'dozentenmodulserver')
3 files changed, 40 insertions, 14 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java index 8a8f6bd9..147b6b8a 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java @@ -250,9 +250,12 @@ public class DbLecture { } protected static List<LectureSummary> getAllUsingImageVersion(MysqlConnection connection, - String imageVersionId) throws SQLException { - MysqlStatement stmt = connection.prepareStatement(summaryBaseSql - + " WHERE imageversionid = :imageversionid"); + String imageVersionId, boolean enabledOnly) throws SQLException { + String query = summaryBaseSql + " WHERE i.imageversionid = :imageversionid"; + if (enabledOnly) { + query += " AND l.isenabled = 1"; + } + MysqlStatement stmt = connection.prepareStatement(query); stmt.setString("imageversionid", imageVersionId); stmt.setString("userid", "-"); ResultSet rs = stmt.executeQuery(); @@ -398,7 +401,7 @@ public class DbLecture { || (newVersion != null && newVersion.imageVersionId.equals(oldVersion.imageVersionId))) return; // First, get list of lectures using the image version to switch away from - List<LectureSummary> lectures = getAllUsingImageVersion(connection, oldVersion.imageVersionId); + List<LectureSummary> lectures = getAllUsingImageVersion(connection, oldVersion.imageVersionId, true); if (lectures.isEmpty()) return; MysqlStatement stmt; diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailTemplate.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailTemplate.java index 6ed88e28..46eec60b 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailTemplate.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailTemplate.java @@ -40,17 +40,38 @@ public class MailTemplate { return sb.toString(); } - /* + private boolean validVarChar(char c) { + if (c >= 'a' && c <= 'z') + return true; + if (c >= 'A' && c <= 'Z') + return true; + if (c >= '0' && c <= '9') + return true; + return c == '_'; + } + + /** * read the raw string from % to % and the fragments either into snippets or - * variables + * variables. Valid variable names are surrounded are /%[a-zA-Z0-9_]+%/ + * The trailing % might be missing. The name simply ends at the first + * character that is not valid for variable names. So the regexp is actually + * /%[a-zA-Z0-9_]+%?/ + * Why? Compatibility with an old release that had a borked default template + * :( */ private void parseTemplate(String raw) { int i = 0; while (true) { + final int len = raw.length(); int begin = raw.indexOf("%", i); - int end = raw.indexOf("%", begin + 1); + int end = begin + 1; + if (begin != -1) { + while (end < len && validVarChar(raw.charAt(end))) { + end++; + } + } - if (begin == -1 || end == -1) { + if (begin == -1 || end >= len) { /* no variable anymore, so just add a snippet until the end */ /* OR: stray %, add rest as literal text */ String snippet = raw.substring(i); @@ -63,8 +84,11 @@ public class MailTemplate { this.snippets.add(snippet); this.identifiers.add(identifier); - i = end + 1; - + if (raw.charAt(end) == '%') { + i = end + 1; + } else { + i = end; + } } } diff --git a/dozentenmodulserver/src/test/java/bwlehrpool/MailTemplateTest.java b/dozentenmodulserver/src/test/java/bwlehrpool/MailTemplateTest.java index d6b5158c..fda23d01 100644 --- a/dozentenmodulserver/src/test/java/bwlehrpool/MailTemplateTest.java +++ b/dozentenmodulserver/src/test/java/bwlehrpool/MailTemplateTest.java @@ -9,22 +9,21 @@ import junit.framework.TestCase; public class MailTemplateTest extends TestCase { public void testMailTemplate() { - String test = "Hallo Eins %zwei% drei"; - MailTemplate template = new MailTemplate(test); - /* variables */ HashMap<String, String> map = new HashMap<>(); map.put("eins", "1"); map.put("zwei", "2"); map.put("drei", "3"); - assertEquals("Hallo Eins 2 drei", template.format(map)); + assertEquals("Hallo Eins 2 drei", new MailTemplate("Hallo Eins %zwei% drei").format(map)); assertEquals("1", new MailTemplate("%eins%").format(map)); assertEquals("x1", new MailTemplate("x%eins%").format(map)); assertEquals("1x", new MailTemplate("%eins%x").format(map)); assertEquals("123", new MailTemplate("%eins%%zwei%%drei%").format(map)); assertEquals("123x11", new MailTemplate("%eins%%zwei%%drei%x%eins%1").format(map)); assertEquals(".1.%zwei", new MailTemplate(".%eins%.%zwei").format(map)); + assertEquals(".1.2 3' und vier", new MailTemplate(".%eins%.%zwei %drei' und vier").format(map)); + assertEquals("1 null null zehn%", new MailTemplate("%eins% %acht% %neun zehn%").format(map)); } public void testMailTemplateWrongPlaceholder() { |