From 00dfff78c91c6bae58d2582efa5b957a260a397d Mon Sep 17 00:00:00 2001 From: Adrian Fish Date: Thu, 3 Oct 2024 14:53:10 +0100 Subject: [PATCH] SAK-49949 tasks Soft delete tasks for soft deleted sites https://sakaiproject.atlassian.net/browse/SAK-49949 --- .../sakaiproject/site/api/SiteService.java | 3 + .../java/org/sakaiproject/tasks/api/Task.java | 4 +- .../tasks/api/repository/TaskRepository.java | 2 + .../api/repository/UserTaskRepository.java | 7 +- .../tasks/impl/TaskServiceImpl.java | 67 +++++++-- .../impl/repository/TaskRepositoryImpl.java | 25 ++++ .../repository/UserTaskRepositoryImpl.java | 63 ++++++--- .../main/webapp/WEB-INF/tasks-components.xml | 6 - .../tasks/impl/test/TaskServiceTest.java | 26 ++-- .../sakaiproject/site/tool/SiteAction.java | 1 + .../webapi/controllers/TasksController.java | 3 + .../bundle/src/main/bundle/tasks.properties | 5 +- .../packages/sakai-tasks/src/SakaiTasks.js | 132 ++++-------------- .../sakai-tasks/src/sakai-tasks-constants.js | 1 - 14 files changed, 185 insertions(+), 160 deletions(-) diff --git a/kernel/api/src/main/java/org/sakaiproject/site/api/SiteService.java b/kernel/api/src/main/java/org/sakaiproject/site/api/SiteService.java index 91473389cdc6..f0612095983c 100644 --- a/kernel/api/src/main/java/org/sakaiproject/site/api/SiteService.java +++ b/kernel/api/src/main/java/org/sakaiproject/site/api/SiteService.java @@ -95,6 +95,9 @@ public interface SiteService extends EntityProducer /** Name for the event for soft deleting a site */ static final String SOFT_DELETE_SITE = "site.del.soft"; + + /** Name for the event for restoring a soft deleted site */ + static final String SITE_RESTORED = "site.restored"; /** Name for the event of removing a site that has already been softly deleted */ static final String SECURE_REMOVE_SOFTLY_DELETED_SITE = "site.del.softly.deleted"; diff --git a/kernel/api/src/main/java/org/sakaiproject/tasks/api/Task.java b/kernel/api/src/main/java/org/sakaiproject/tasks/api/Task.java index 0581271bcc28..4d9ced0c28ac 100644 --- a/kernel/api/src/main/java/org/sakaiproject/tasks/api/Task.java +++ b/kernel/api/src/main/java/org/sakaiproject/tasks/api/Task.java @@ -86,5 +86,7 @@ public class Task implements PersistableEntity { @Column(name = "TASK_OWNER", length = 99) private String owner; - + + @Column(name = "SOFT_DELETED") + private Boolean softDeleted; } diff --git a/kernel/api/src/main/java/org/sakaiproject/tasks/api/repository/TaskRepository.java b/kernel/api/src/main/java/org/sakaiproject/tasks/api/repository/TaskRepository.java index bcf36c74d036..ace40c4c7254 100644 --- a/kernel/api/src/main/java/org/sakaiproject/tasks/api/repository/TaskRepository.java +++ b/kernel/api/src/main/java/org/sakaiproject/tasks/api/repository/TaskRepository.java @@ -29,6 +29,8 @@ public interface TaskRepository extends SpringCrudRepository { + List findBySiteId(String siteId); Optional findByReference(String reference); List findByGroupsContaining(String groupId); + int setSoftDeletedBySiteId(String siteId, Boolean softDeleted); } diff --git a/kernel/api/src/main/java/org/sakaiproject/tasks/api/repository/UserTaskRepository.java b/kernel/api/src/main/java/org/sakaiproject/tasks/api/repository/UserTaskRepository.java index edfc070e9156..02713fa557f8 100644 --- a/kernel/api/src/main/java/org/sakaiproject/tasks/api/repository/UserTaskRepository.java +++ b/kernel/api/src/main/java/org/sakaiproject/tasks/api/repository/UserTaskRepository.java @@ -31,11 +31,12 @@ public interface UserTaskRepository extends SpringCrudRepository { + List findBySiteId(String siteId); List findByTaskIdAndUserIdIn(Long taskId, List userIds); - List findByUserIdAndStartsAfter(String userId, Instant from); + List findByUserIdAndStartsAfterAndSoftDeleted(String userId, Instant from, Boolean softDeleted); List findByUserIdAndSiteId(String userId, String siteId); List findByUserIdAndTask_StartsLessThanEqual(String userId, Instant instant); List findByTask_SiteId(String siteId); - void deleteByTask(Task task); - void deleteByTaskAndUserIdNotIn(Task task, Set users); + int deleteByTask(Task task); + int deleteByTaskAndUserIdNotIn(Task task, Set users); } diff --git a/kernel/kernel-impl/src/main/java/org/sakaiproject/tasks/impl/TaskServiceImpl.java b/kernel/kernel-impl/src/main/java/org/sakaiproject/tasks/impl/TaskServiceImpl.java index 16ec58939d06..c79c3034971f 100644 --- a/kernel/kernel-impl/src/main/java/org/sakaiproject/tasks/impl/TaskServiceImpl.java +++ b/kernel/kernel-impl/src/main/java/org/sakaiproject/tasks/impl/TaskServiceImpl.java @@ -56,7 +56,8 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; - +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.TransactionTemplate; @@ -72,6 +73,10 @@ public class TaskServiceImpl implements TaskService, Observer { @Autowired private EntityManager entityManager; @Autowired private EventTrackingService eventTrackingService; @Autowired private FunctionManager functionManager; + + @Qualifier("org.sakaiproject.springframework.orm.hibernate.GlobalTransactionManager") + @Autowired private PlatformTransactionManager transactionManager; + @Autowired private SecurityService securityService; @Autowired private SessionManager sessionManager; @Autowired private SiteService siteService; @@ -79,8 +84,6 @@ public class TaskServiceImpl implements TaskService, Observer { @Autowired private TaskRepository taskRepository; @Autowired private UserTaskRepository userTaskRepository; - @Setter private TransactionTemplate transactionTemplate; - public void init() { functionManager.registerFunction(TaskPermissions.CREATE_TASK, true); @@ -95,7 +98,10 @@ public void update(Observable o, Object arg) { if (event.getEvent().equals(SiteService.SECURE_UPDATE_SITE_MEMBERSHIP)) { try { Set siteUsers = siteService.getSite(event.getContext()).getUsers(); - transactionTemplate.executeWithoutResult(status -> { + + TransactionTemplate tt = new TransactionTemplate(transactionManager); + + tt.executeWithoutResult(status -> { userTaskRepository.findByTask_SiteId(event.getContext()).forEach(userTask -> { @@ -112,7 +118,10 @@ public void update(Observable o, Object arg) { String groupId = event.getResource(); try { String groupRef = AuthzGroupReferenceBuilder.builder().site(event.getContext()).group(groupId).build(); - transactionTemplate.executeWithoutResult(status -> { + + TransactionTemplate tt = new TransactionTemplate(transactionManager); + + tt.executeWithoutResult(status -> { // Find any task containing this group taskRepository.findByGroupsContaining(groupRef).forEach(t -> { @@ -134,6 +143,46 @@ public void update(Observable o, Object arg) { } catch (Exception e) { log.error("Failed to update user tasks for group {}: {}", groupId, e.toString()); } + } else if (event.getEvent().equals(SiteService.SOFT_DELETE_SITE)) { + + String siteId = event.getContext(); + + TransactionTemplate tt = new TransactionTemplate(transactionManager); + + tt.executeWithoutResult(status -> { + + userTaskRepository.findBySiteId(siteId).forEach(ut -> { + + ut.setSoftDeleted(Boolean.TRUE); + userTaskRepository.save(ut); + }); + + taskRepository.findBySiteId(siteId).forEach(t -> { + + t.setSoftDeleted(Boolean.TRUE); + taskRepository.save(t); + }); + }); + } else if (event.getEvent().equals(SiteService.SITE_RESTORED)) { + + String siteId = event.getContext(); + + TransactionTemplate tt = new TransactionTemplate(transactionManager); + + tt.executeWithoutResult(status -> { + + userTaskRepository.findBySiteId(siteId).forEach(ut -> { + + ut.setSoftDeleted(Boolean.FALSE); + userTaskRepository.save(ut); + }); + + taskRepository.findBySiteId(siteId).forEach(t -> { + + t.setSoftDeleted(Boolean.FALSE); + taskRepository.save(t); + }); + }); } } } @@ -162,9 +211,7 @@ public Task createTask(Task task, Set users, Integer priority) { Optional optionalCurrentTask = getTask(task.getReference()); - if (optionalCurrentTask.isPresent()) { - task.setId(optionalCurrentTask.get().getId()); - } + optionalCurrentTask.ifPresent(t -> task.setId(t.getId())); final Task mergedTask = taskRepository.save(task); @@ -217,6 +264,7 @@ public UserTask saveUserTask(UserTaskAdapterBean transfer) { @Transactional public UserTask createUserTask(Task task, UserTaskAdapterBean transfer) { + UserTask userTask = new UserTask(); userTask.setTask(task); BeanUtils.copyProperties(transfer, userTask); @@ -241,9 +289,10 @@ public List getCurrentTasksForCurrentUser() { String userId = sessionManager.getCurrentSessionUserId(); - return userTaskRepository.findByUserIdAndStartsAfter(userId, Instant.now()) + return userTaskRepository.findByUserIdAndStartsAfterAndSoftDeleted(userId, Instant.now(), Boolean.FALSE) .stream() .map(ut -> { + UserTaskAdapterBean bean = new UserTaskAdapterBean(); BeanUtils.copyProperties(ut, bean); BeanUtils.copyProperties(ut.getTask(), bean); diff --git a/kernel/kernel-impl/src/main/java/org/sakaiproject/tasks/impl/repository/TaskRepositoryImpl.java b/kernel/kernel-impl/src/main/java/org/sakaiproject/tasks/impl/repository/TaskRepositoryImpl.java index afb912a92b60..6608e7c4c86e 100644 --- a/kernel/kernel-impl/src/main/java/org/sakaiproject/tasks/impl/repository/TaskRepositoryImpl.java +++ b/kernel/kernel-impl/src/main/java/org/sakaiproject/tasks/impl/repository/TaskRepositoryImpl.java @@ -26,6 +26,7 @@ import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.CriteriaUpdate; import javax.persistence.criteria.Root; import org.hibernate.Session; @@ -36,6 +37,18 @@ public class TaskRepositoryImpl extends SpringCrudRepositoryImpl implements TaskRepository { + public List findBySiteId(String siteId) { + + Session session = sessionFactory.getCurrentSession(); + + CriteriaBuilder cb = session.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(Task.class); + Root root = cq.from(Task.class); + cq.where(cb.equal(root.get("siteId"), siteId)); + + return session.createQuery(cq).list(); + } + public Optional findByReference(String reference) { Session session = sessionFactory.getCurrentSession(); @@ -60,4 +73,16 @@ public List findByGroupsContaining(String groupId) { return session.createQuery(cq).list(); } + + public int setSoftDeletedBySiteId(String siteId, Boolean softDeleted) { + + Session session = sessionFactory.getCurrentSession(); + + CriteriaBuilder cb = session.getCriteriaBuilder(); + CriteriaUpdate cu = cb.createCriteriaUpdate(Task.class); + Root root = cu.from(Task.class); + cu.set("softDeleted", softDeleted).where(cb.equal(root.get("siteId"), siteId)); + + return session.createQuery(cu).executeUpdate(); + } } diff --git a/kernel/kernel-impl/src/main/java/org/sakaiproject/tasks/impl/repository/UserTaskRepositoryImpl.java b/kernel/kernel-impl/src/main/java/org/sakaiproject/tasks/impl/repository/UserTaskRepositoryImpl.java index 01378a1fb4aa..064a562f9941 100644 --- a/kernel/kernel-impl/src/main/java/org/sakaiproject/tasks/impl/repository/UserTaskRepositoryImpl.java +++ b/kernel/kernel-impl/src/main/java/org/sakaiproject/tasks/impl/repository/UserTaskRepositoryImpl.java @@ -26,7 +26,6 @@ import java.time.Instant; import org.hibernate.Session; -import org.hibernate.criterion.Restrictions; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaDelete; @@ -41,23 +40,39 @@ public class UserTaskRepositoryImpl extends SpringCrudRepositoryImpl implements UserTaskRepository { + public List findBySiteId(String siteId) { + + Session session = sessionFactory.getCurrentSession(); + + CriteriaBuilder cb = session.getCriteriaBuilder(); + CriteriaQuery query = cb.createQuery(UserTask.class); + Root userTask = query.from(UserTask.class); + query.where(cb.equal(userTask.get("task").get("siteId"), siteId)); + + return session.createQuery(query).list(); + } + public List findByTaskIdAndUserIdIn(Long taskId, List userIds) { Session session = sessionFactory.getCurrentSession(); - return (List) session.createCriteria(UserTask.class) - .add(Restrictions.eq("task.id", taskId)) - .add(Restrictions.in("userId", userIds)).list(); + CriteriaBuilder cb = session.getCriteriaBuilder(); + CriteriaQuery query = cb.createQuery(UserTask.class); + Root userTask = query.from(UserTask.class); + query.where(cb.equal(userTask.get("task").get("id"), taskId), userTask.get("userId").in(userIds)); + + return session.createQuery(query).list(); } - public List findByUserIdAndStartsAfter(String userId, Instant from) { + public List findByUserIdAndStartsAfterAndSoftDeleted(String userId, Instant from, Boolean softDeleted) { Session session = sessionFactory.getCurrentSession(); CriteriaBuilder cb = session.getCriteriaBuilder(); CriteriaQuery query = cb.createQuery(UserTask.class); Root userTask = query.from(UserTask.class); - query.where(cb.equal(userTask.get("userId"), userId), cb.lessThanOrEqualTo(userTask.get("task").get("starts"), from)); + query.where(cb.and(cb.equal(userTask.get("userId"), userId) , cb.lessThanOrEqualTo(userTask.get("task").get("starts"), from)) + , cb.or(cb.isNull(userTask.get("softDeleted")), cb.equal(userTask.get("softDeleted"), softDeleted))); return session.createQuery(query).list(); } @@ -66,18 +81,24 @@ public List findByUserIdAndSiteId(String userId, String siteId) { Session session = sessionFactory.getCurrentSession(); - return session.createQuery("select u from UserTask u where userId = :userId and task.siteId = :siteId") - .setParameter("userId", userId) - .setParameter("siteId", siteId).list(); + CriteriaBuilder cb = session.getCriteriaBuilder(); + CriteriaQuery query = cb.createQuery(UserTask.class); + Root userTask = query.from(UserTask.class); + query.where(cb.equal(userTask.get("userId"), userId), cb.equal(userTask.get("task").get("siteId"), siteId)); + + return session.createQuery(query).list(); } - public List findByUserIdAndTask_StartsLessThanEqual(String userId, Instant instant) { + public List findByUserIdAndTask_StartsLessThanEqual(String userId, Instant earlierThan) { Session session = sessionFactory.getCurrentSession(); - return (List) session.createCriteria(UserTask.class) - .add(Restrictions.eq("userId", userId)) - .add(Restrictions.le("task.starts", instant)).list(); + CriteriaBuilder cb = session.getCriteriaBuilder(); + CriteriaQuery query = cb.createQuery(UserTask.class); + Root userTask = query.from(UserTask.class); + query.where(cb.equal(userTask.get("userId"), userId), cb.lessThanOrEqualTo(userTask.get("task").get("starts"), earlierThan)); + + return session.createQuery(query).list(); } public List findByTask_SiteId(String siteId) { @@ -92,19 +113,21 @@ public List findByTask_SiteId(String siteId) { cq.where(cb.equal(taskJoin.get("siteId"), siteId)); return session.createQuery(cq).list(); - } - public void deleteByTask(Task task) { + public int deleteByTask(Task task) { Session session = sessionFactory.getCurrentSession(); - session.createQuery("delete from UserTask where task = :task") - .setParameter("task", task).executeUpdate(); - session.delete(task); + CriteriaBuilder cb = session.getCriteriaBuilder(); + CriteriaDelete cd = cb.createCriteriaDelete(UserTask.class); + Root userTask = cd.from(UserTask.class); + cd.where(cb.equal(userTask.get("task"), task)); + + return session.createQuery(cd).executeUpdate(); } - public void deleteByTaskAndUserIdNotIn(Task task, Set users) { + public int deleteByTaskAndUserIdNotIn(Task task, Set users) { Session session = sessionFactory.getCurrentSession(); @@ -113,6 +136,6 @@ public void deleteByTaskAndUserIdNotIn(Task task, Set users) { Root root = cd.from(UserTask.class); cd.where(cb.equal(root.get("task"), task), cb.not(root.get("userId").in(users))); - session.createQuery(cd).executeUpdate(); + return session.createQuery(cd).executeUpdate(); } } diff --git a/kernel/kernel-impl/src/main/webapp/WEB-INF/tasks-components.xml b/kernel/kernel-impl/src/main/webapp/WEB-INF/tasks-components.xml index 7e4ce2f2988d..11ee7bdabbdb 100644 --- a/kernel/kernel-impl/src/main/webapp/WEB-INF/tasks-components.xml +++ b/kernel/kernel-impl/src/main/webapp/WEB-INF/tasks-components.xml @@ -20,12 +20,6 @@ - - - - - - userTasks = taskService.getCurrentTasksForCurrentUser(); assertTrue("There should only be one task", userTasks.size() == 1); - UserTaskAdapterBean userTask = userTasks.get(0); + Event event = mock(Event.class); + when(event.getEvent()).thenReturn(SiteService.SOFT_DELETE_SITE); + when(event.getContext()).thenReturn(task.getSiteId()); - userTask.setSoftDeleted(true); - taskService.saveUserTask(userTask); + ((Observer) taskService).update(null, event); userTasks = taskService.getCurrentTasksForCurrentUser(); - Assert.isTrue(userTasks.size() == 1, "There should only be one task"); + Assert.isTrue(userTasks.size() == 0, "There should be no tasks for the current user"); - userTask = userTasks.get(0); + when(event.getEvent()).thenReturn(SiteService.SITE_RESTORED); + + ((Observer) taskService).update(null, event); - Assert.isTrue(userTask.getSoftDeleted(), "The task should be soft deleted"); + userTasks = taskService.getCurrentTasksForCurrentUser(); + Assert.isTrue(userTasks.size() == 1, "There should be 1 task for the current user"); } @Test diff --git a/site-manage/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteAction.java b/site-manage/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteAction.java index 0ceff458b158..1f89d9570c97 100644 --- a/site-manage/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteAction.java +++ b/site-manage/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteAction.java @@ -5658,6 +5658,7 @@ public void doMenu_site_restore(RunData data) { //reverse it s.setSoftlyDeleted(false); siteService.save(s); + eventTrackingService.post(eventTrackingService.newEvent(SiteService.SITE_RESTORED, s.getReference(), s.getId(), true, NotificationService.NOTI_OPTIONAL)); } catch (IdUnusedException e) { log.warn("Error restoring site:" + siteId + ":" + e.getClass() + ":" + e.getMessage()); diff --git a/webapi/src/main/java/org/sakaiproject/webapi/controllers/TasksController.java b/webapi/src/main/java/org/sakaiproject/webapi/controllers/TasksController.java index 318e143d5d2e..b05f23646298 100644 --- a/webapi/src/main/java/org/sakaiproject/webapi/controllers/TasksController.java +++ b/webapi/src/main/java/org/sakaiproject/webapi/controllers/TasksController.java @@ -166,6 +166,7 @@ public UserTaskAdapterBean createTask(@RequestBody UserTaskAdapterBean taskTrans task.setReference("/user/" + taskTransfer.getUserId() + "/" + time); task.setDue(taskTransfer.getDue()); task.setSystem(false); + task.setSoftDeleted(Boolean.FALSE); String assignationType = taskTransfer.getAssignationType(); if (AssignationType.site.name().equals(assignationType)) { try { @@ -242,6 +243,7 @@ public void deleteTask(@PathVariable Long userTaskId) { } private String getTaskAssignedDescription(Long taskId, Site site) { + List taskAssignedList = taskService.getTaskAssignments(taskId); String result = USER_REPLACE; for (TaskAssigned taskAssigned : taskAssignedList) { @@ -276,6 +278,7 @@ private void updateUserTaskAdapterBean(UserTaskAdapterBean bean) throws IdUnused if (StringUtils.isNotBlank(bean.getReference()) && !bean.getReference().startsWith("/user/")) { entityManager.getUrl(bean.getReference(), Entity.UrlType.PORTAL).ifPresent(u -> bean.setUrl(u)); } + bean.setTaskAssignedTo(getTaskAssignedDescription(bean.getTaskId(), site)); } } diff --git a/webcomponents/bundle/src/main/bundle/tasks.properties b/webcomponents/bundle/src/main/bundle/tasks.properties index 9859fdb6844f..d9bdba6aadf4 100644 --- a/webcomponents/bundle/src/main/bundle/tasks.properties +++ b/webcomponents/bundle/src/main/bundle/tasks.properties @@ -21,8 +21,7 @@ due=Due no_tasks=No tasks at the moment ! options=Options edit=Edit this task -hard_delete=Permanently delete this task -soft_delete=Send this task to the trash. You'll be able to restore it under the \'trash\' filter +delete=Permanently delete this task close=Close create_new_task=Create New Task edit_task=Edit Task @@ -39,9 +38,7 @@ add=Add Task cancel=Cancel save=Save save_failed=Failed to save task -restore=Restore this task from the trash edit_task=Edit Task -trash=Trash text=Text task_url=Click to be taken to the task add_new_task=Add diff --git a/webcomponents/tool/src/main/frontend/packages/sakai-tasks/src/SakaiTasks.js b/webcomponents/tool/src/main/frontend/packages/sakai-tasks/src/SakaiTasks.js index 123c9cafdd9e..c94b8c0771b3 100644 --- a/webcomponents/tool/src/main/frontend/packages/sakai-tasks/src/SakaiTasks.js +++ b/webcomponents/tool/src/main/frontend/packages/sakai-tasks/src/SakaiTasks.js @@ -116,31 +116,28 @@ export class SakaiTasks extends SakaiPageableElement { switch (f) { case constants.PRIORITY_5: - this.data.forEach(t => t.visible = !!(!t.softDeleted && !t.complete && t.priority === 5)); + this.data.forEach(t => t.visible = !!(!t.complete && t.priority === 5)); break; case constants.PRIORITY_4: - this.data.forEach(t => t.visible = !!(!t.softDeleted && t.priority === 4)); + this.data.forEach(t => t.visible = !!(t.priority === 4)); break; case constants.PRIORITY_3: - this.data.forEach(t => t.visible = !!(!t.softDeleted && !t.complete && t.priority === 3)); + this.data.forEach(t => t.visible = !!(!t.complete && t.priority === 3)); break; case constants.PRIORITY_2: - this.data.forEach(t => t.visible = !!(!t.softDeleted && !t.complete && t.priority === 2)); + this.data.forEach(t => t.visible = !!(!t.complete && t.priority === 2)); break; case constants.PRIORITY_1: - this.data.forEach(t => t.visible = !!(!t.softDeleted && !t.complete && t.priority === 1)); + this.data.forEach(t => t.visible = !!(!t.complete && t.priority === 1)); break; case constants.OVERDUE: this.data.forEach(t => t.visible = !t.complete && t.due && (t.due < Date.now())); break; - case constants.TRASH: - this.data.forEach(t => t.visible = t.softDeleted); - break; case constants.COMPLETE: this.data.forEach(t => t.visible = t.complete); break; default: - this.data.forEach(t => t.visible = !t.softDeleted && !t.complete); + this.data.forEach(t => t.visible = !t.complete); break; } this.repage(); @@ -186,67 +183,11 @@ export class SakaiTasks extends SakaiPageableElement { if (r.ok) { this.data.splice(this.data.findIndex(t => t.userTaskId == taskId), 1); - if (this.data.filter(t => t.softDeleted).length == 0) { - this.filter(constants.CURRENT); - } else { - this.requestUpdate(); - this.repage(); - } - } else { - throw new Error(`Failed to delete task at ${url}`); - } - }) - .catch(error => console.error(error)); - } - - softDeleteTask(e) { - - const task = this.data.find(t => t.taskId == e.currentTarget.dataset.taskId); - - task.softDeleted = true; - task.visible = false; - const url = `/api/tasks/${task.taskId}`; - fetch(url, { - credentials: "include", - method: "PUT", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(task), - }) - .then(r => { - - if (r.ok) { + this.filter(constants.CURRENT); this.requestUpdate(); this.repage(); } else { - throw new Error(`Failed to soft delete task at ${url}`); - } - }) - .catch(error => console.error(error)); - } - - restoreTask(e) { - - const task = this.data.find(t => t.taskId == e.currentTarget.dataset.taskId); - - task.softDeleted = false; - task.visible = true; - const url = `/api/tasks/${task.taskId}`; - fetch(url, { - credentials: "include", - method: "PUT", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(task), - }) - .then(r => { - - if (r.ok) { - if (this.data.filter(t => t.softDeleted).length > 0) { - this.filter(constants.TRASH); - } else { - this.filter(constants.CURRENT); - } - } else { - throw new Error(`Failed to soft delete task at ${url}`); + throw new Error(`Failed to delete task at ${url}`); } }) .catch(error => console.error(error)); @@ -287,7 +228,6 @@ export class SakaiTasks extends SakaiPageableElement { site-id="${this.siteId}" user-id="${this.userId}" @task-created=${this.taskCreated} - @soft-deleted=${this.softDeleteTask} .groups=${this._groups} ?deliver-tasks=${this._canUpdateSite}> @@ -305,15 +245,14 @@ export class SakaiTasks extends SakaiPageableElement {
@@ -366,36 +305,15 @@ export class SakaiTasks extends SakaiPageableElement {
- ${t.softDeleted ? html` -
- - - -
-
- - - -
- ` : html` -
- - - -
- `} +
+ + + +
` : nothing}
${t.url ? html` diff --git a/webcomponents/tool/src/main/frontend/packages/sakai-tasks/src/sakai-tasks-constants.js b/webcomponents/tool/src/main/frontend/packages/sakai-tasks/src/sakai-tasks-constants.js index 5c2295399772..2ca277180a3d 100644 --- a/webcomponents/tool/src/main/frontend/packages/sakai-tasks/src/sakai-tasks-constants.js +++ b/webcomponents/tool/src/main/frontend/packages/sakai-tasks/src/sakai-tasks-constants.js @@ -6,4 +6,3 @@ export const PRIORITY_5 = "priority_5"; export const CURRENT = "current"; export const OVERDUE = "overdue"; export const COMPLETE = "complete"; -export const TRASH = "trash";