Merge branch 'feature/new_task_members' into dev
This commit is contained in:
@@ -63,9 +63,13 @@
|
|||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
parent_task = await resp.json();
|
parent_task = await resp.json();
|
||||||
task.parent_task_id = +parent_task_id;
|
task.parent_task_id = +parent_task_id;
|
||||||
|
for (let [uid, member] of Object.entries(parent_task.members)){
|
||||||
|
if (['OWNER','ASSIGNEE'].includes(member.permission.name)) member.permission = { name: 'EDIT', code: 2 };
|
||||||
|
task.members[uid] = member;
|
||||||
|
}
|
||||||
project_id = +parent_task.project_id;
|
project_id = +parent_task.project_id;
|
||||||
yikes();
|
yikes();
|
||||||
project = null; // TODO
|
project = null;
|
||||||
} else error(resp);
|
} else error(resp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,11 +79,17 @@
|
|||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
project = await resp.json();
|
project = await resp.json();
|
||||||
task.project_id = +project_id;
|
task.project_id = +project_id;
|
||||||
|
if (Object.keys(task.members).length < 1) {
|
||||||
|
for (let [uid, member] of Object.entries(project.members)){
|
||||||
|
if (['OWNER','ASSIGNEE'].includes(member.permission.name)) member.permission = { name: 'EDIT', code: 2 };
|
||||||
|
task.members[uid] = member;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (assignee && project.members[assignee]){
|
if (assignee && project.members[assignee]){
|
||||||
task.members[assignee] = project.members[assignee];
|
task.members[assignee] = project.members[assignee];
|
||||||
task.members[assignee].permission = { name : "ASSIGNEE", code : 3 }
|
task.members[assignee].permission = { name : "ASSIGNEE", code : 3 }
|
||||||
}
|
}
|
||||||
if (task.taks.length < 1) task.tags = project.tags;
|
if (task.tags.length < 1) task.tags = project.tags;
|
||||||
yikes();
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error(resp);
|
error(resp);
|
||||||
@@ -124,6 +134,10 @@
|
|||||||
extendedSettings = !extendedSettings;
|
extendedSettings = !extendedSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updatePermission(uid,perm){
|
||||||
|
task.members[uid].permission = perm;
|
||||||
|
}
|
||||||
|
|
||||||
onMount(load);
|
onMount(load);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -161,7 +175,7 @@
|
|||||||
{#if extendedSettings}
|
{#if extendedSettings}
|
||||||
<div>{t('members')}</div>
|
<div>{t('members')}</div>
|
||||||
<div>
|
<div>
|
||||||
<PermissionEditor members={task.members} {addMember} {dropMember} {getCandidates} />
|
<PermissionEditor members={task.members} {addMember} {dropMember} {getCandidates} {updatePermission} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>{t('estimated_time')}</div>
|
<div>{t('estimated_time')}</div>
|
||||||
|
|||||||
@@ -386,40 +386,33 @@ public class TaskModule extends BaseHandler implements TaskService {
|
|||||||
long projectId = pid.longValue();
|
long projectId = pid.longValue();
|
||||||
var project = projectService().load(projectId);
|
var project = projectService().load(projectId);
|
||||||
projectService().loadMembers(List.of(project));
|
projectService().loadMembers(List.of(project));
|
||||||
var members = project.members();
|
var parentMembers = project.members();
|
||||||
var member = members.get(user.id());
|
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");
|
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;
|
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) {
|
if (parentTask != null) {
|
||||||
taskService().loadMembers(parentTask);
|
taskService().loadMembers(parentTask);
|
||||||
members = parentTask.members();
|
parentMembers = parentTask.members();
|
||||||
member = members.get(user.id());
|
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());
|
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>();
|
var newMembers = new HashMap<Long, Permission>();
|
||||||
for (var mem : members.values()) { // Assign members from project or parent task
|
if (json.has(MEMBERS) && json.get(MEMBERS) instanceof JSONObject members) {
|
||||||
var permission = mem.permission() == OWNER ? EDIT : mem.permission();
|
for (var key : members.keySet()){
|
||||||
newMembers.put(mem.user().id(), permission);
|
var code = members.getJSONObject(key).getJSONObject(PERMISSION).getInt(CODE);
|
||||||
}
|
var perm = Permission.of(code);
|
||||||
|
if (perm == OWNER) perm = EDIT;
|
||||||
if (json.has(MEMBERS) && json.get(MEMBERS) instanceof JSONObject mems) {
|
var userId = Long.parseLong(key);
|
||||||
// check of assignee has been set by client
|
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());
|
||||||
for (var k : mems.keySet()) {
|
newMembers.put(userId,perm);
|
||||||
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));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set ownership to current user
|
// set ownership to current user
|
||||||
newMembers.put(user.id(), OWNER);
|
newMembers.put(user.id(), OWNER);
|
||||||
|
|
||||||
|
|
||||||
json.put(MEMBERS, Map.of()); // reset member map for task-to-be-created
|
json.put(MEMBERS, Map.of()); // reset member map for task-to-be-created
|
||||||
Task task = Task.of(json);
|
Task task = Task.of(json);
|
||||||
if (parentTask != null && parentTask.dueDate() != null && task.dueDate() == null) task.dueDate(parentTask.dueDate());
|
if (parentTask != null && parentTask.dueDate() != null && task.dueDate() == null) task.dueDate(parentTask.dueDate());
|
||||||
|
|||||||
Reference in New Issue
Block a user