Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java =================================================================== diff -u -r0b789ab29e5a14f005e0978cdcad6add8606c83f -r616c7119289412164b78e0f420725a865e60c933 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java (.../ILessonDAO.java) (revision 0b789ab29e5a14f005e0978cdcad6add8606c83f) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java (.../ILessonDAO.java) (revision 616c7119289412164b78e0f420725a865e60c933) @@ -29,6 +29,7 @@ import org.lamsfoundation.lams.dao.IBaseDAO; import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.lesson.dto.ActivityTimeLimitDTO; import org.lamsfoundation.lams.usermanagement.User; /** @@ -215,4 +216,9 @@ * or a Hibernate error occurs. So we need a way to get the ids withouth calling Organisation.getLessons() */ List getOrganisationLessons(Integer organisationId); + + /** + * Finds activities in the given lesson which have non-expired absolute time limit set up. + */ + List getRunningAbsoluteTimeLimits(long lessonId); } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java =================================================================== diff -u -r2188972474f8d186d6811e3dea2e4136be669335 -r616c7119289412164b78e0f420725a865e60c933 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java (.../LessonDAO.java) (revision 2188972474f8d186d6811e3dea2e4136be669335) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java (.../LessonDAO.java) (revision 616c7119289412164b78e0f420725a865e60c933) @@ -23,9 +23,12 @@ package org.lamsfoundation.lams.lesson.dao.hibernate; +import java.math.BigInteger; +import java.time.ZoneId; import java.util.Arrays; import java.util.Date; import java.util.LinkedHashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -41,8 +44,11 @@ import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.dao.ILessonDAO; +import org.lamsfoundation.lams.lesson.dto.ActivityTimeLimitDTO; +import org.lamsfoundation.lams.tool.Tool; import org.lamsfoundation.lams.usermanagement.Role; import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.util.CommonConstants; import org.springframework.stereotype.Repository; /** @@ -98,6 +104,14 @@ private final static String FIND_LESSON_IDS_BY_ORG_ID = "SELECT lesson.lessonId FROM " + Lesson.class.getName() + " AS lesson WHERE lesson.organisation.organisationId = :organisationId"; + private final static String FIND_ABSOLUTE_TIME_LIMITS = "SELECT a.activity_id AS activityId, a.title AS activityTitle, " + + "(SELECT absolute_time_limit FROM tl_lascrt11_scratchie WHERE content_id = tool_content_id UNION " + + " SELECT absolute_time_limit FROM tl_laasse10_assessment WHERE content_id = tool_content_id " + + ") AS absolute_time_limit " + + "FROM lams_lesson AS l JOIN lams_learning_activity AS a USING (learning_design_id) " + + "WHERE l.lesson_id = :lessonId AND a.tool_content_id IS NOT NULL " + + "HAVING absolute_time_limit > NOW() ORDER BY absolute_time_limit"; + /** * Retrieves the Lesson. Used in instances where it cannot be lazy loaded so it forces an initialize. * @@ -433,4 +447,35 @@ return query.list(); } + @Override + @SuppressWarnings("unchecked") + public List getRunningAbsoluteTimeLimits(long lessonId) { + StringBuilder additionalToolsBuilder = new StringBuilder(); + + boolean toolAvailable = !findByProperty(Tool.class, "toolSignature", CommonConstants.TOOL_SIGNATURE_DOKU, true) + .isEmpty(); + if (toolAvailable) { + additionalToolsBuilder.append( + "UNION SELECT absolute_time_limit FROM tl_ladoku11_dokumaran WHERE content_id = tool_content_id "); + } + + toolAvailable = !findByProperty(Tool.class, "toolSignature", CommonConstants.TOOL_SIGNATURE_WHITEBOARD, true) + .isEmpty(); + if (toolAvailable) { + additionalToolsBuilder.append( + "UNION SELECT absolute_time_limit FROM tl_lawhiteboard11_whiteboard WHERE content_id = tool_content_id"); + } + + String queryText = FIND_ABSOLUTE_TIME_LIMITS.replace("", additionalToolsBuilder); + Query query = getSession().createSQLQuery(queryText).setParameter("lessonId", lessonId); + List queryResult = query.getResultList(); + List result = new LinkedList<>(); + for (Object[] entry : queryResult) { + + ActivityTimeLimitDTO dto = new ActivityTimeLimitDTO(((BigInteger) entry[0]).longValue(), (String) entry[1], + ((Date) entry[2]).toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + result.add(dto); + } + return result; + } } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dto/ActivityTimeLimitDTO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/lesson/dto/ActivityTimeLimitDTO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dto/ActivityTimeLimitDTO.java (revision 616c7119289412164b78e0f420725a865e60c933) @@ -0,0 +1,27 @@ +package org.lamsfoundation.lams.lesson.dto; + +import java.time.LocalDateTime; + +public class ActivityTimeLimitDTO { + private Long activityId; + private String activityTitle; + private LocalDateTime absoluteTimeLimit; + + public ActivityTimeLimitDTO(Long activityId, String activityTitle, LocalDateTime absoluteTimeLimit) { + this.activityId = activityId; + this.activityTitle = activityTitle; + this.absoluteTimeLimit = absoluteTimeLimit; + } + + public Long getActivityId() { + return activityId; + } + + public String getActivityTitle() { + return activityTitle; + } + + public LocalDateTime getAbsoluteTimeLimit() { + return absoluteTimeLimit; + } +} \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java =================================================================== diff -u -re9e7042e16de3421b8c0cd6b1cf6c59dede544b4 -r616c7119289412164b78e0f420725a865e60c933 --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java (.../ILessonService.java) (revision e9e7042e16de3421b8c0cd6b1cf6c59dede544b4) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java (.../ILessonService.java) (revision 616c7119289412164b78e0f420725a865e60c933) @@ -35,6 +35,7 @@ import org.lamsfoundation.lams.learningdesign.GroupingActivity; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.lesson.dto.ActivityTimeLimitDTO; import org.lamsfoundation.lams.lesson.dto.LessonDetailsDTO; import org.lamsfoundation.lams.usermanagement.User; @@ -448,4 +449,9 @@ * or a Hibernate error occurs. So we need a way to get the ids withouth calling Organisation.getLessons() */ List getOrganisationLessons(Integer organisationId); + + /** + * Finds activities in the given lesson which have non-expired absolute time limit set up. + */ + List getRunningAbsoluteTimeLimits(long lessonId); } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java =================================================================== diff -u -re9e7042e16de3421b8c0cd6b1cf6c59dede544b4 -r616c7119289412164b78e0f420725a865e60c933 --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision e9e7042e16de3421b8c0cd6b1cf6c59dede544b4) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision 616c7119289412164b78e0f420725a865e60c933) @@ -49,6 +49,7 @@ import org.lamsfoundation.lams.lesson.dao.ILearnerProgressDAO; import org.lamsfoundation.lams.lesson.dao.ILessonClassDAO; import org.lamsfoundation.lams.lesson.dao.ILessonDAO; +import org.lamsfoundation.lams.lesson.dto.ActivityTimeLimitDTO; import org.lamsfoundation.lams.lesson.dto.LessonDetailsDTO; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.util.MessageService; @@ -741,4 +742,9 @@ public void saveLesson(Lesson lesson) { lessonDAO.saveLesson(lesson); } + + @Override + public List getRunningAbsoluteTimeLimits(long lessonId) { + return lessonDAO.getRunningAbsoluteTimeLimits(lessonId); + } } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/util/CommonConstants.java =================================================================== diff -u -rf9f3f3fababd3ccbc84765f36d73be67c7655b46 -r616c7119289412164b78e0f420725a865e60c933 --- lams_common/src/java/org/lamsfoundation/lams/util/CommonConstants.java (.../CommonConstants.java) (revision f9f3f3fababd3ccbc84765f36d73be67c7655b46) +++ lams_common/src/java/org/lamsfoundation/lams/util/CommonConstants.java (.../CommonConstants.java) (revision 616c7119289412164b78e0f420725a865e60c933) @@ -45,6 +45,7 @@ public static final String TOOL_SIGNATURE_ASSESSMENT = "laasse10"; public static final String TOOL_SIGNATURE_DOKU = "ladoku11"; + public static final String TOOL_SIGNATURE_WHITEBOARD = "lawhiteboard11"; public static final String TOOL_SIGNATURE_FORUM = "lafrum11"; public static final String TOOL_SIGNATURE_LEADERSELECTION = "lalead11"; public static final String TOOL_SIGNATURE_MCQ = "lamc11"; Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java =================================================================== diff -u -r434f8c5a2d415879cc5c52b495baed5d6c987edf -r616c7119289412164b78e0f420725a865e60c933 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java (.../MonitoringController.java) (revision 434f8c5a2d415879cc5c52b495baed5d6c987edf) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java (.../MonitoringController.java) (revision 616c7119289412164b78e0f420725a865e60c933) @@ -72,6 +72,7 @@ import org.lamsfoundation.lams.learningdesign.service.ILearningDesignService; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.lesson.dto.ActivityTimeLimitDTO; import org.lamsfoundation.lams.lesson.dto.LessonDetailsDTO; import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.lesson.util.LearnerActivityCompleteFluxItem; @@ -1032,6 +1033,8 @@ request.setAttribute("burningQuestionsEnabled", burningQuestionsEnabled); } + List absoluteTimeLimits = lessonService.getRunningAbsoluteTimeLimits(lessonId); + return "monitor" + (useNewUI ? "5" : ""); }