implemented member editing on creating new tasks
Build Docker Image / Docker-Build (push) Successful in 3m5s
Build Docker Image / Clean-Registry (push) Successful in 5s

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2026-07-01 15:51:55 +02:00
parent 95bd48df82
commit 167365d0b3
2 changed files with 22 additions and 34 deletions
@@ -386,40 +386,33 @@ public class TaskModule extends BaseHandler implements TaskService {
long projectId = pid.longValue();
var project = projectService().load(projectId);
projectService().loadMembers(List.of(project));
var members = project.members();
var member = members.get(user.id());
var parentMembers = project.members();
var member = parentMembers.get(user.id());
if (member == null || member.permission() == READ_ONLY) throw forbidden("You are not allowed to create new tasks in this project");
var parentTask = json.has(PARENT_TASK_ID) && json.get(PARENT_TASK_ID) instanceof Number par ? taskService().load(Set.of(par.longValue())).get(par.longValue()) : null;
if (parentTask != null) {
taskService().loadMembers(parentTask);
members = parentTask.members();
member = members.get(user.id());
parentMembers = parentTask.members();
member = parentMembers.get(user.id());
if (member == null || member.permission() == READ_ONLY) throw forbidden("You are not allowed to add sub-stasks to {object}", OBJECT, parentTask.name());
}
var newMembers = new HashMap<Long, Permission>();
for (var mem : members.values()) { // Assign members from project or parent task
var permission = mem.permission() == OWNER ? EDIT : mem.permission();
newMembers.put(mem.user().id(), permission);
}
if (json.has(MEMBERS) && json.get(MEMBERS) instanceof JSONObject mems) {
// check of assignee has been set by client
for (var k : mems.keySet()) {
try {
var userId = Long.parseLong(k);
var permName = mems.getJSONObject(k).getJSONObject(PERMISSION).getString(NAME);
if (Permission.valueOf(permName) == ASSIGNEE) newMembers.put(userId, ASSIGNEE);
} catch (Exception ignored) {
LOG.log(WARNING, "Failed to parse {0}", mems.get(k));
}
if (json.has(MEMBERS) && json.get(MEMBERS) instanceof JSONObject members) {
for (var key : members.keySet()){
var code = members.getJSONObject(key).getJSONObject(PERMISSION).getInt(CODE);
var perm = Permission.of(code);
if (perm == OWNER) perm = EDIT;
var userId = Long.parseLong(key);
if (!parentMembers.containsKey(userId)) throw forbidden("{user} is not a member of {path}",Field.USER,userService().loadUser(userId).name(),Field.PATH, parentTask == null ? project.name() : parentTask.name());
newMembers.put(userId,perm);
}
}
// set ownership to current user
newMembers.put(user.id(), OWNER);
json.put(MEMBERS, Map.of()); // reset member map for task-to-be-created
Task task = Task.of(json);
if (parentTask != null && parentTask.dueDate() != null && task.dueDate() == null) task.dueDate(parentTask.dueDate());