summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver
diff options
context:
space:
mode:
authorSimon Rettberg2017-01-13 13:03:42 +0100
committerSimon Rettberg2017-01-13 13:03:42 +0100
commite757d5904d5ee3db61d06b034b3023368e2dd94c (patch)
tree40b21dfb8c0f0d4821bb7adf6552b9be695f7ed4 /dozentenmodulserver
parent[server] use mail template from the configuration database when generating ma... (diff)
downloadtutor-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')
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java11
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/mail/MailTemplate.java36
-rw-r--r--dozentenmodulserver/src/test/java/bwlehrpool/MailTemplateTest.java7
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() {