diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/Poll.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Poll.java index 0e5c2176..6ba04ada 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/Poll.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Poll.java @@ -111,7 +111,7 @@ public class Poll implements Mappable { private HashMap> selections = new HashMap<>(); public void count(ResultSet rs) throws SQLException { var optionId = rs.getInt(OPTION_ID); - var userId = rs.getObject(USER_ID); + var userId = rs.getObject(USER); var weight = rs.getInt(WEIGHT); var optionStats = selections.computeIfAbsent(optionId, k -> new HashMap<>()); optionStats.compute(weight, (k, sum) -> sum == null ? 1 : sum + 1); diff --git a/frontend/src/routes/poll/Evaluate.svelte b/frontend/src/routes/poll/Evaluate.svelte index 1078004f..0cf38ab6 100644 --- a/frontend/src/routes/poll/Evaluate.svelte +++ b/frontend/src/routes/poll/Evaluate.svelte @@ -72,7 +72,7 @@ {#each Object.entries(hist).sort((a,b) => a[0] - b[0]) as [weight,count]} - + {weight} {/each} diff --git a/poll/src/main/java/de/srsoftware/umbrella/poll/PollModule.java b/poll/src/main/java/de/srsoftware/umbrella/poll/PollModule.java index 3f1043f9..d6229e25 100644 --- a/poll/src/main/java/de/srsoftware/umbrella/poll/PollModule.java +++ b/poll/src/main/java/de/srsoftware/umbrella/poll/PollModule.java @@ -96,7 +96,6 @@ public class PollModule extends BaseHandler implements PollService { var poll = pollDb.loadPoll(pollId); var permitted = !poll.isPrivate() || poll.owner().equals(user); if (!permitted && poll.permissions().get(user) == null) throw forbidden(Text.NOT_ALLOWED_TO_EDIT, Field.OBJECT,Text.POLL); - var eval = pollDb.loadEvaluation(pollId); return sendContent(ex,poll); } diff --git a/poll/src/main/java/de/srsoftware/umbrella/poll/SqliteDb.java b/poll/src/main/java/de/srsoftware/umbrella/poll/SqliteDb.java index 081d5116..8a58eb5b 100644 --- a/poll/src/main/java/de/srsoftware/umbrella/poll/SqliteDb.java +++ b/poll/src/main/java/de/srsoftware/umbrella/poll/SqliteDb.java @@ -9,9 +9,11 @@ import static de.srsoftware.umbrella.core.ModuleRegistry.userService; import static de.srsoftware.umbrella.core.constants.Field.*; import static de.srsoftware.umbrella.core.constants.Field.DESCRIPTION; import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.*; +import static de.srsoftware.umbrella.core.model.Permission.READ_ONLY; import static de.srsoftware.umbrella.poll.Constants.*; import static java.text.MessageFormat.format; +import de.srsoftware.tools.jdbc.Query; import de.srsoftware.umbrella.core.BaseDb; import de.srsoftware.umbrella.core.constants.Field; import de.srsoftware.umbrella.core.constants.Text; @@ -40,8 +42,10 @@ public class SqliteDb extends BaseDb implements PollDb { createSelectionsTable(); case 1: createSharesTable(); + case 2: + updateSharesTable(); } - return setCurrentVersion(2); + return setCurrentVersion(3); } private void createOptionsTable() { @@ -295,4 +299,49 @@ public class SqliteDb extends BaseDb implements PollDb { return option; } + private void updateSharesTable() { + try { + var newPermissions = new HashMap>(); // Map from PollId → (Map from UserId → Permission) + var rs = select(ALL).from(TABLE_SHARES).exec(db); + while (rs.next()) { + var pollID = rs.getString(POLL_ID); + var userId = rs.getLong(USER_ID); + var perm = rs.getInt(PERMISSION); + var userMap = newPermissions.computeIfAbsent(pollID, k -> new HashMap<>()); + switch (perm) { + case 0: + userMap.put(userId, READ_ONLY); + break; + case 1: + case 2: + userMap.put(userId, Permission.EDIT); + break; + default: + userMap.put(userId, null); + } + } + rs.close(); + for (var pollEntry : newPermissions.entrySet()){ + var pollId = pollEntry.getKey(); + for (var userEntry : pollEntry.getValue().entrySet()){ + var userId = userEntry.getKey(); + var permission = userEntry.getValue(); + if (permission == null) { + Query.delete().from(TABLE_SHARES) + .where(USER_ID, equal(userId)) + .where(POLL_ID, equal(pollId)) + .execute(db); + } else { + Query.update(TABLE_SHARES) + .where(USER_ID, equal(userId)) + .where(POLL_ID, equal(pollId)) + .set(PERMISSION).prepare(db) + .apply(permission.code()).close(); + } + } + } + } catch (SQLException ex){ + throw databaseException("Failed to update permissions in shares table!"); + } + } } diff --git a/translations/src/main/resources/de.json b/translations/src/main/resources/de.json index 95f48625..f118e4f1 100644 --- a/translations/src/main/resources/de.json +++ b/translations/src/main/resources/de.json @@ -418,6 +418,7 @@ "version": "Version", "version_of": "Version {version} von {element}", "visible_to_guests": "Für Besucher sichtbar", + "voted {count} times": "{count} mal gewählt", "website": "Website", "welcome" : "Willkommen, {0}", diff --git a/translations/src/main/resources/en.json b/translations/src/main/resources/en.json index 539dccd9..9573e157 100644 --- a/translations/src/main/resources/en.json +++ b/translations/src/main/resources/en.json @@ -418,6 +418,7 @@ "version": "version", "version_of": "version {version} of {element}", "visible_to_guests": "visible to guests", + "voted {count} times": "voted {count} times", "website": "website", "welcome" : "Welcome, {0}",