Merge branch 'module/poll' into dev
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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<String, Map<Long, Permission>>(); // 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!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user