diff --git a/core/src/main/java/de/srsoftware/umbrella/core/constants/Field.java b/core/src/main/java/de/srsoftware/umbrella/core/constants/Field.java index 512f19c4..33e16539 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/constants/Field.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/constants/Field.java @@ -139,6 +139,7 @@ public class Field { public static final String RECEIVERS = "receivers"; public static final String REDIRECT = "redirect"; + public static final String RENDER = "render"; public static final String RENDERED = "rendered"; public static final String REQUIRED_TASKS_IDS = "required_tasks_ids"; diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java index d4dce056..3f935b6d 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java @@ -118,8 +118,7 @@ public class Project extends UmbrellaObject { return tagColors; } - @Override - public Map toMap() { + public Map toMap(boolean renderMarkdown){ var memberMap = new HashMap>(); if (members != null) for (var entry : members.entrySet()){ memberMap.put(entry.getKey(),entry.getValue().toMap()); @@ -128,7 +127,7 @@ public class Project extends UmbrellaObject { for (var state : allowedStates) stateMap.put(state.code(),state.name()); return super.map( NAME,name, - DESCRIPTION,mapMarkdown(description), + DESCRIPTION, renderMarkdown ? mapMarkdown(description) : Map.of(SOURCE,description), STATUS,status, COMPANY_ID,companyId, SHOW_CLOSED,showClosed, @@ -137,6 +136,11 @@ public class Project extends UmbrellaObject { TAG_COLORS,tagColors); } + @Override + public Map toMap() { + return toMap(true); + } + @Override public String toString() { return name(); diff --git a/frontend/src/routes/project/Kanban.svelte b/frontend/src/routes/project/Kanban.svelte index 9b37d048..d739b839 100644 --- a/frontend/src/routes/project/Kanban.svelte +++ b/frontend/src/routes/project/Kanban.svelte @@ -190,7 +190,7 @@ const url = api('task/list'); selector.show_closed = true; selector.no_index = true; - selector.rendered = false; + selector.render = false; var resp = await post(url,selector); if (resp.ok){ var json = await resp.json(); diff --git a/frontend/src/routes/project/View.svelte b/frontend/src/routes/project/View.svelte index d3147cd4..5f7e5363 100644 --- a/frontend/src/routes/project/View.svelte +++ b/frontend/src/routes/project/View.svelte @@ -108,13 +108,10 @@ const url = api('task/list'); const data = { project_id:+id, - show_closed:project.show_closed + show_closed:project.show_closed, + render: false } - const resp = await fetch(url,{ - credentials : 'include', - method : 'POST', - body : JSON.stringify(data) - }); + const resp = await post(url,data); if (resp.ok){ tasks = {}; est_time.sum = 0; diff --git a/frontend/src/routes/task/Index.svelte b/frontend/src/routes/task/Index.svelte index ed448c68..bd6a06d9 100644 --- a/frontend/src/routes/task/Index.svelte +++ b/frontend/src/routes/task/Index.svelte @@ -65,7 +65,7 @@ } async function loadProject(pid){ - const url = api(`project/${pid}`); + const url = api(`project/${pid}?render=false`); const resp = await get(url); if (resp.ok){ projects[pid] = await resp.json(); @@ -73,7 +73,7 @@ } async function load(){ - const url = api(`task?offset=${bounds.offset}&limit=${bounds.limit}`); + const url = api(`task?offset=${bounds.offset}&limit=${bounds.limit}&render=false`); const resp = await get(url); if (resp.ok){ let newTasks = await resp.json(); diff --git a/frontend/src/routes/task/ListTask.svelte b/frontend/src/routes/task/ListTask.svelte index 424685bb..1fc1bf01 100644 --- a/frontend/src/routes/task/ListTask.svelte +++ b/frontend/src/routes/task/ListTask.svelte @@ -80,7 +80,8 @@ const url = api('task/list'); const data = { parent_task_id : +task.id, - show_closed : show_closed + show_closed : show_closed, + render : false }; if (task.show_closed) data.show_closed = true; const resp = await post(url,data); diff --git a/project/src/main/java/de/srsoftware/umbrella/project/ProjectModule.java b/project/src/main/java/de/srsoftware/umbrella/project/ProjectModule.java index 20a5e6eb..09c6d6ef 100644 --- a/project/src/main/java/de/srsoftware/umbrella/project/ProjectModule.java +++ b/project/src/main/java/de/srsoftware/umbrella/project/ProjectModule.java @@ -144,9 +144,11 @@ public class ProjectModule extends BaseHandler implements ProjectService { } private boolean getProject(HttpExchange ex, long projectId, UmbrellaUser user) throws IOException, UmbrellaException { + var params = queryParam(ex); + var render = !(params.get(RENDER) instanceof String r) || r.equals("true"); var project = loadMembers(projectDb.load(projectId)); if (!project.hasMember(user)) throw notAmember(t(PROJECT_WITH_ID,ID,project.name())); - var map = project.toMap(); + var map = project.toMap(render); project.companyId().map(companyService()::get).map(Company::toMap).ifPresent(data -> map.put(Field.COMPANY,data)); return sendContent(ex,map); } diff --git a/task/src/main/java/de/srsoftware/umbrella/task/TaskModule.java b/task/src/main/java/de/srsoftware/umbrella/task/TaskModule.java index 4863a8fc..ad87152e 100644 --- a/task/src/main/java/de/srsoftware/umbrella/task/TaskModule.java +++ b/task/src/main/java/de/srsoftware/umbrella/task/TaskModule.java @@ -280,8 +280,9 @@ public class TaskModule extends BaseHandler implements TaskService { } catch (NumberFormatException e) { throw invalidField(LIMIT, t(Text.NUMBER)); } + var render = !(params.get(RENDER) instanceof String r) || r.equals("true"); var tasks = taskDb.listUserTasks(user.id(), limit, offset, false); - var mapped = loadMembers(tasks).stream().map(Task::toMap); + var mapped = loadMembers(tasks).stream().map(t -> t.toMap(render)); return sendContent(ex, mapped); } @@ -474,24 +475,26 @@ public class TaskModule extends BaseHandler implements TaskService { var noIndex = json.has(NO_INDEX) && json.get(NO_INDEX) instanceof Boolean bool ? bool : false; var projectId = json.has(PROJECT_ID) && json.get(PROJECT_ID) instanceof Number number ? number.longValue() : null; var parentTaskId = json.has(PARENT_TASK_ID) && json.get(PARENT_TASK_ID) instanceof Number number ? number.longValue() : null; - var markdown = !json.has(RENDERED) || !(json.get(RENDERED) instanceof Boolean render) || render; + var render = !json.has(RENDER) || !(json.get(RENDER) instanceof Boolean bool) || bool; if (isSet(projectId)) { if (parentTaskId == null) { var list = taskDb.listRootTasks(projectId, user, showClosed); - return sendContent(ex, mapTasks(list,markdown)); + return sendContent(ex, mapTasks(list,render)); } var projectTasks = taskDb.listProjectTasks(projectId, parentTaskId, noIndex); loadMembers(projectTasks.values()); var tags = tagService().getTags(TASK,projectTasks.keySet(),user); projectTasks = addTags(projectTasks, tags); - return sendContent(ex, mapTasks(projectTasks, markdown)); + return sendContent(ex, mapTasks(projectTasks, render)); } - if (isSet(parentTaskId)) return sendContent(ex, mapValues(taskDb.listChildrenOf(parentTaskId, user, showClosed))); - var taskIds = json.has(IDS) && json.get(IDS) instanceof JSONArray ids ? ids.toList().stream().map(Object::toString).map(Long::parseLong).toList() : null; - var tasks = taskDb.load(taskIds); - if (isSet(taskIds)) return sendContent(ex, mapTasks(tasks,markdown)); - return sendEmptyResponse(HTTP_NOT_IMPLEMENTED, ex); + Map tasks; + if (!isSet(parentTaskId)) { + var taskIds = json.has(IDS) && json.get(IDS) instanceof JSONArray ids ? ids.toList().stream().map(Object::toString).map(Long::parseLong).toList() : null; + if (!isSet(taskIds)) return sendEmptyResponse(HTTP_NOT_IMPLEMENTED,ex); + tasks = taskDb.load(taskIds); + } else tasks = taskDb.listChildrenOf(parentTaskId,user,showClosed); + return sendContent(ex, mapTasks(tasks,render)); } private Map addTags(Map taskList, Map> tags) {