Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/GateActivity.java =================================================================== diff -u -r664113e5a7f816094b983d8c601e0de4a4b2d19d -r7913826df20868a8bf035076a14ac89d5e615b46 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/GateActivity.java (.../GateActivity.java) (revision 664113e5a7f816094b983d8c601e0de4a4b2d19d) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/GateActivity.java (.../GateActivity.java) (revision 7913826df20868a8bf035076a14ac89d5e615b46) @@ -146,16 +146,6 @@ waitingLearnerCount); } - /** - * Force the gate to open, irrespective of the strategy. Used for preview. Opens the gate and clears any "waiting" - * list. - * - * @return the gate is open or closed. - */ - public void forceGateOpen() { - setGateOpen(true); - } - // --------------------------------------------------------------------- // Helper methods // --------------------------------------------------------------------- Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/GateActivityStrategy.java =================================================================== diff -u -r51fb2a37254f24bb2a805d4ffd54482c779f43fa -r7913826df20868a8bf035076a14ac89d5e615b46 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/GateActivityStrategy.java (.../GateActivityStrategy.java) (revision 51fb2a37254f24bb2a805d4ffd54482c779f43fa) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/GateActivityStrategy.java (.../GateActivityStrategy.java) (revision 7913826df20868a8bf035076a14ac89d5e615b46) @@ -23,6 +23,7 @@ package org.lamsfoundation.lams.learningdesign.strategy; import java.util.ArrayList; +import java.util.Date; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.GateActivity; @@ -71,6 +72,7 @@ return true; } else if (isOpenConditionMet(expectedLearnerCount, waitingLearnerCount)) { gateActivity.setGateOpen(true); + gateActivity.setGateOpenTime(new Date()); if (!gateActivity.getAllowedToPassLearners().isEmpty()) { gateActivity.getAllowedToPassLearners().clear(); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r045ebfd1d11d9ed0a1f81a00abb1a2ea373e8d93 -r7913826df20868a8bf035076a14ac89d5e615b46 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 045ebfd1d11d9ed0a1f81a00abb1a2ea373e8d93) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 7913826df20868a8bf035076a14ac89d5e615b46) @@ -221,7 +221,7 @@ } public void setMessageService(MessageService messageService) { - this.messageService = messageService; + this.messageService = messageService; } // --------------------------------------------------------------------- @@ -651,11 +651,11 @@ updateGradebookMark(activity, progress); } // } - logEventService.logEvent(LogEvent.TYPE_LEARNER_ACTIVITY_FINISH, learnerId, - learnerId, progress.getLesson().getLessonId(), - activity.getActivityId(), - messageService.getMessage(ProgressEngine.AUDIT_ACTIVITY_STOP_KEY, new Object[] { progress.getUser().getLogin(), - progress.getUser().getUserId(), activity.getTitle(), activity.getActivityId() })); + logEventService.logEvent(LogEvent.TYPE_LEARNER_ACTIVITY_FINISH, learnerId, learnerId, + progress.getLesson().getLessonId(), activity.getActivityId(), + messageService.getMessage(ProgressEngine.AUDIT_ACTIVITY_STOP_KEY, + new Object[] { progress.getUser().getLogin(), progress.getUser().getUserId(), + activity.getTitle(), activity.getActivityId() })); } @Override @@ -766,8 +766,8 @@ } } } - - private boolean forceGrouping(Lesson lesson, Grouping grouping, Group group, User learner) { + + private boolean forceGrouping(Lesson lesson, Grouping grouping, Group group, User learner) { boolean groupingDone = false; if (lesson.isPreviewLesson()) { ArrayList learnerList = new ArrayList(); @@ -826,6 +826,8 @@ if (lesson.isPreviewLesson()) { // special case for preview - if forceGate is true then brute force open the gate gate.setGateOpen(true); + gate.setGateOpenUser(knocker); + gate.setGateOpenTime(new Date()); gateOpen = true; } } @@ -1249,7 +1251,7 @@ @Override public Integer calculateMaxNumberOfLearnersPerGroup(Long lessonId, Long groupingId) { LearnerChoiceGrouping grouping = (LearnerChoiceGrouping) getGrouping(groupingId); - LearnerChoiceGrouping learnerChoiceGrouping = (LearnerChoiceGrouping) grouping; + LearnerChoiceGrouping learnerChoiceGrouping = grouping; Integer maxNumberOfLearnersPerGroup = null; int learnerCount = lessonService.getCountLessonLearners(lessonId, null); int groupCount = grouping.getGroups().size(); Index: lams_monitoring/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r045ebfd1d11d9ed0a1f81a00abb1a2ea373e8d93 -r7913826df20868a8bf035076a14ac89d5e615b46 --- lams_monitoring/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 045ebfd1d11d9ed0a1f81a00abb1a2ea373e8d93) +++ lams_monitoring/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 7913826df20868a8bf035076a14ac89d5e615b46) @@ -14,7 +14,8 @@ label.schedule.gate.open.message =Schedule gate will be opened at: label.schedule.gate.close.message =Schedule gate will be closed at: label.gate.you.open.message =You may open the gate for the whole class -label.gate.gate.open =Gate has been opened +label.gate.gate.open =Gate was opened +label.gate.gate.open.user =by {0} label.gate.open =Open label.gate.closed =Closed label.gate.waiting.learners ={0} out of {1} are waiting in front of the gate. Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/PermissionGateDTO.java =================================================================== diff -u -rd7ed1173946998f754a2efef09d68c9e3bfe307f -r7913826df20868a8bf035076a14ac89d5e615b46 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/PermissionGateDTO.java (.../PermissionGateDTO.java) (revision d7ed1173946998f754a2efef09d68c9e3bfe307f) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/PermissionGateDTO.java (.../PermissionGateDTO.java) (revision 7913826df20868a8bf035076a14ac89d5e615b46) @@ -1,25 +1,34 @@ package org.lamsfoundation.lams.monitoring.dto; -import org.lamsfoundation.lams.learningdesign.Activity; +import java.util.Date; +import org.lamsfoundation.lams.learningdesign.PermissionGateActivity; +import org.lamsfoundation.lams.usermanagement.User; + /** * DTO used to return the activity details needed for the contribute activities list * * @author Andrey Balan */ public class PermissionGateDTO { - private String title; private String url; private Long activityID; private Integer activityTypeID; private Integer orderID; private int waitingLearnersCount; private boolean complete; + private String openUser; + private Date openTime; - public PermissionGateDTO(Activity activity) { - this.title = activity.getTitle(); - this.activityID = activity.getActivityId(); + public PermissionGateDTO(PermissionGateActivity gate) { + this.title = gate.getTitle(); + this.activityID = gate.getActivityId(); + this.openTime = gate.getGateOpenTime(); + User openUser = gate.getGateOpenUser(); + if (openUser != null) { + this.openUser = openUser.getFirstName() + " " + openUser.getLastName(); + } } /** @@ -78,4 +87,11 @@ this.complete = complete; } -} + public String getOpenUser() { + return openUser; + } + + public Date getOpenTime() { + return openTime; + } +} \ No newline at end of file Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/quartz/job/OpenScheduleGateJob.java =================================================================== diff -u -r3399163940c61c9132223c758d274486e57ff9b7 -r7913826df20868a8bf035076a14ac89d5e615b46 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/quartz/job/OpenScheduleGateJob.java (.../OpenScheduleGateJob.java) (revision 3399163940c61c9132223c758d274486e57ff9b7) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/quartz/job/OpenScheduleGateJob.java (.../OpenScheduleGateJob.java) (revision 7913826df20868a8bf035076a14ac89d5e615b46) @@ -21,7 +21,6 @@ * **************************************************************** */ - package org.lamsfoundation.lams.monitoring.quartz.job; import java.util.Map; @@ -34,7 +33,7 @@ /** * The Quartz sheduling job that opens the gate. It is configured as a Spring * bean and will be triggered by the scheduler to perform its work. - * + * * @author Jacky Fang * @since 2005-4-12 * @version 1.1 @@ -57,12 +56,13 @@ //getting gate id set from scheduler Map properties = context.getJobDetail().getJobDataMap(); Long gateId = (Long) properties.get("gateId"); + Integer openerId = (Integer) properties.get("userId"); if (log.isDebugEnabled()) { log.debug("Openning gate......[" + gateId.longValue() + "]"); } - monitoringService.openGate(gateId); + monitoringService.openGate(gateId, openerId); if (log.isDebugEnabled()) { log.debug("Gate......[" + gateId.longValue() + "] opened"); Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== diff -u -rfe122f9f7ac40f3a3696a7c69043fc34df7994d4 -r7913826df20868a8bf035076a14ac89d5e615b46 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision fe122f9f7ac40f3a3696a7c69043fc34df7994d4) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 7913826df20868a8bf035076a14ac89d5e615b46) @@ -351,7 +351,7 @@ * @param gate * the id of the gate we need to open. */ - GateActivity openGate(Long gateId); + GateActivity openGate(Long gateId, Integer openerId); /** * Allows a single learner to pass the gate. Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -rb26f90eccf164c7058201360d2ca771adcfb597a -r7913826df20868a8bf035076a14ac89d5e615b46 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision b26f90eccf164c7058201360d2ca771adcfb597a) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 7913826df20868a8bf035076a14ac89d5e615b46) @@ -394,7 +394,8 @@ forceLearnerRestart, allowLearnerRestart, gradebookOnComplete, scheduledNumberDaysToLessonFinish, precedingLesson); - logLessonStateChange(LogEvent.TYPE_TEACHER_LESSON_CREATE, initializedLesson, userID, null, initializedLesson.getLessonStateId()); + logLessonStateChange(LogEvent.TYPE_TEACHER_LESSON_CREATE, initializedLesson, userID, null, + initializedLesson.getLessonStateId()); return initializedLesson; } @@ -459,8 +460,8 @@ enableLessonNotifications, forceLearnerRestart, allowLearnerRestart, gradebookOnComplete, scheduledNumberDaysToLessonFinish, precedingLesson); logLessonGeneralChange(LogEvent.TYPE_TEACHER_LESSON_CREATE, user != null ? user.getUserId() : null, - lesson != null ? lesson.getLessonId() : null, MonitoringService.AUDIT_LESSON_CREATED_KEY, - new Object[] { lessonName, copiedLearningDesign.getTitle(), copiedLearningDesign.getLearningDesignId() }); + lesson != null ? lesson.getLessonId() : null, MonitoringService.AUDIT_LESSON_CREATED_KEY, new Object[] { + lessonName, copiedLearningDesign.getTitle(), copiedLearningDesign.getLearningDesignId() }); return lesson; } @@ -511,7 +512,6 @@ return; } - // Change client/users schedule date to server's timezone. User user = (User) baseDAO.find(User.class, userId); TimeZone userTimeZone = TimeZone.getTimeZone(user.getTimeZone()); @@ -531,7 +531,7 @@ // start the scheduling job try { - if ( ! alreadyScheduled ) { + if (!alreadyScheduled) { // setup the message for scheduling job JobDetail startLessonJob = JobBuilder.newJob(StartScheduleLessonJob.class) .withIdentity("startLessonOnSchedule:" + lessonId) @@ -541,18 +541,18 @@ .usingJobData(MonitoringConstants.KEY_USER_ID, new Integer(userId)).build(); // create customized triggers - startLessonTrigger = TriggerBuilder.newTrigger() - .withIdentity(triggerName).startAt(tzStartLessonDate).build(); + startLessonTrigger = TriggerBuilder.newTrigger().withIdentity(triggerName).startAt(tzStartLessonDate) + .build(); scheduler.scheduleJob(startLessonJob, startLessonTrigger); } else { - + startLessonTrigger = startLessonTrigger.getTriggerBuilder().startAt(tzStartLessonDate).build(); scheduler.rescheduleJob(startLessonTrigger.getKey(), startLessonTrigger); - - } - + + } + requestedLesson.setScheduleStartDate(tzStartLessonDate); setLessonState(requestedLesson, Lesson.NOT_STARTED_STATE, userId); } catch (SchedulerException e) { @@ -561,7 +561,8 @@ } if (MonitoringService.log.isDebugEnabled()) { - MonitoringService.log.debug("Start lesson [" + lessonId + "] on schedule is configured to start at " + DateUtil.convertToStringForTimeagoJSON(tzStartLessonDate)); + MonitoringService.log.debug("Start lesson [" + lessonId + "] on schedule is configured to start at " + + DateUtil.convertToStringForTimeagoJSON(tzStartLessonDate)); } } @@ -735,7 +736,8 @@ if (MonitoringService.log.isDebugEnabled()) { MonitoringService.log.debug("=============Lesson " + lessonId + " started==============="); } - logLessonStateChange(LogEvent.TYPE_TEACHER_LESSON_START, requestedLesson, userId, null, requestedLesson.getLessonStateId()); + logLessonStateChange(LogEvent.TYPE_TEACHER_LESSON_START, requestedLesson, userId, null, + requestedLesson.getLessonStateId()); } @Override @@ -837,7 +839,7 @@ if (gateActivity != null && gateActivity.isScheduleGate()) { if (tzSchedulingDatetime.getTime() < System.currentTimeMillis()) { // too late! Time already passed - openGate(gateId); + openGate(gateId, userId); } else { ScheduleGateActivity gate = (ScheduleGateActivity) activityDAO @@ -873,7 +875,8 @@ JobDetail openScheduleGateJob = JobBuilder.newJob(OpenScheduleGateJob.class) .withIdentity("openGate:" + gate.getActivityId()) .withDescription(gate.getTitle() + ":" + lesson.getLessonName()) - .usingJobData("gateId", gate.getActivityId()).build(); + .usingJobData("gateId", gate.getActivityId()).usingJobData("openerId", userId) + .build(); openGateTrigger = TriggerBuilder.newTrigger() .withIdentity("openGateTrigger:" + gate.getActivityId()) .startAt(tzSchedulingDatetime).build(); @@ -894,7 +897,8 @@ } return gateActivity; } - + + @Override public void finishLesson(long lessonId, Integer userId) { securityService.isLessonMonitor(lessonId, userId, "finish lesson", true); Lesson requestedLesson = lessonDAO.getLesson(new Long(lessonId)); @@ -909,7 +913,7 @@ // remove any triggers waiting to suspend the lesson removeScheduleDisableTrigger(requestedLesson); - + // if lesson has 'suspended'('disabled') state - then unsuspend it first so its previous lesson state will be 'started' if (Lesson.SUSPENDED_STATE.equals(lessonState)) { unsuspendLesson(lessonId, userId); @@ -973,7 +977,8 @@ * @param status */ private void setLessonState(Lesson requestedLesson, Integer status, Integer userId) { - logLessonStateChange(LogEvent.TYPE_TEACHER_LESSON_CHANGE_STATE, requestedLesson, userId, requestedLesson.getLessonStateId(), status); + logLessonStateChange(LogEvent.TYPE_TEACHER_LESSON_CHANGE_STATE, requestedLesson, userId, + requestedLesson.getLessonStateId(), status); requestedLesson.setPreviousLessonStateId(requestedLesson.getLessonStateId()); requestedLesson.setLessonStateId(status); lessonDAO.updateLesson(requestedLesson); @@ -989,13 +994,12 @@ null, lesson.getLessonId(), null, message); } - private void logLessonGeneralChange(int logEventType, Integer userId, Long lessonId, String messageKey, Object[] args) { + private void logLessonGeneralChange(int logEventType, Integer userId, Long lessonId, String messageKey, + Object[] args) { String message = messageService.getMessage(messageKey, args); logEventService.logEvent(logEventType, userId, null, lessonId, null, message); } - - private String getStateDescription(Integer status) { if (status != null) { if (status.equals(Lesson.CREATED)) { @@ -1070,7 +1074,8 @@ } lessonDAO.updateLesson(requestedLesson); - logLessonStateChange(LogEvent.TYPE_TEACHER_LESSON_CHANGE_STATE, requestedLesson, userId, currentStatus, newStatus); + logLessonStateChange(LogEvent.TYPE_TEACHER_LESSON_CHANGE_STATE, requestedLesson, userId, currentStatus, + newStatus); } @Override @@ -1151,7 +1156,7 @@ // finally remove the learning design lessonDAO.delete(learningDesign); - logLessonGeneralChange(LogEvent.TYPE_TEACHER_LESSON_CHANGE_STATE, userId, lessonId, + logLessonGeneralChange(LogEvent.TYPE_TEACHER_LESSON_CHANGE_STATE, userId, lessonId, MonitoringService.AUDIT_LESSON_REMOVED_PERMANENTLY_KEY, new Object[] { lesson.getLessonName(), lesson.getLessonId() }); } @@ -1193,10 +1198,14 @@ } @Override - public GateActivity openGate(Long gateId) { + public GateActivity openGate(Long gateId, Integer openerId) { GateActivity gate = (GateActivity) activityDAO.getActivityByActivityId(gateId); if (gate != null) { gate.setGateOpen(new Boolean(true)); + gate.setGateOpenTime(new Date()); + if (openerId != null) { + gate.setGateOpenUser((User) baseDAO.find(User.class, openerId)); + } // we un-schedule the gate from the scheduler if it's of a scheduled // gate (LDEV-1271) @@ -1231,6 +1240,8 @@ public GateActivity closeGate(Long gateId) { GateActivity gate = (GateActivity) activityDAO.getActivityByActivityId(gateId); gate.setGateOpen(new Boolean(false)); + gate.setGateOpenUser(null); + gate.setGateOpenTime(null); activityDAO.update(gate); return gate; } @@ -2269,52 +2280,53 @@ } @Override - public int addUsersToGroupByLogins(Long activityID, String groupName, Set logins) throws LessonServiceException { + public int addUsersToGroupByLogins(Long activityID, String groupName, Set logins) + throws LessonServiceException { ArrayList learners = new ArrayList(); for (String login : logins) { - User learner = (User) userManagementService.getUserByLogin(login); + User learner = userManagementService.getUserByLogin(login); if (learner == null) { MonitoringService.log.warn("Unable to add learner " + login + " for group in related to activity " + activityID + " as learner cannot be found."); } else { learners.add(learner); } } - + Activity activity = getActivityById(activityID); Grouping grouping = getGroupingForActivity(activity, !activity.isChosenBranchingActivity(), "addUsersToGroupByLogins"); - + Group group = null; Set otherGroupNames = new HashSet(); - for ( Group checkGroup: grouping.getGroups() ) { - if ( checkGroup.getGroupName().equalsIgnoreCase(groupName) ) { + for (Group checkGroup : grouping.getGroups()) { + if (checkGroup.getGroupName().equalsIgnoreCase(groupName)) { group = checkGroup; break; } else { otherGroupNames.add(checkGroup.getGroupName()); } } - - if ( group == null ) { + + if (group == null) { // Leave performGrouping to create any new groups as addGroup returns a group without an id, so it could not be // used by performGrouping. Fix up name afterwards. Clumsy way to find to find the new group but how else? // It may not be the only new group and hence not the only group with no id. lessonService.performGrouping(grouping, (Long) null, learners); - for ( Group checkGroup: grouping.getGroups() ) { - if ( ! otherGroupNames.contains(checkGroup.getGroupName()) ) { - group = checkGroup; - break; + for (Group checkGroup : grouping.getGroups()) { + if (!otherGroupNames.contains(checkGroup.getGroupName())) { + group = checkGroup; + break; } } - if ( group != null ) { + if (group != null) { group.setGroupName(groupName); } } else { lessonService.performGrouping(grouping, group.getGroupId(), learners); } - + return learners.size(); } Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GateAction.java =================================================================== diff -u -r225d293907a5e2976e367ee3aa790239bad38699 -r7913826df20868a8bf035076a14ac89d5e615b46 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GateAction.java (.../GateAction.java) (revision 225d293907a5e2976e367ee3aa790239bad38699) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GateAction.java (.../GateAction.java) (revision 7913826df20868a8bf035076a14ac89d5e615b46) @@ -114,6 +114,7 @@ private static final String SCHEDULE_DATE = "scheduleDate"; private static final DateFormat SCHEDULING_DATETIME_FORMAT = new SimpleDateFormat("MM/dd/yy HH:mm"); + // --------------------------------------------------------------------- // Struts Dispatch Method // --------------------------------------------------------------------- @@ -197,7 +198,8 @@ DynaActionForm gateForm = (DynaActionForm) form; - GateActivity gate = monitoringService.openGate((Long) gateForm.get(GateAction.ACTIVITY_FORM_FIELD)); + GateActivity gate = monitoringService.openGate((Long) gateForm.get(GateAction.ACTIVITY_FORM_FIELD), + getUserId()); return findViewByGateType(mapping, gateForm, gate); } @@ -252,14 +254,15 @@ } return findViewByGateType(mapping, gateForm, gate); } + // --------------------------------------------------------------------- // Helper Methods // --------------------------------------------------------------------- private Integer getUserId() { - HttpSession ss = SessionManager.getSession(); - UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); - return user != null ? user.getUserID() : null; - } + HttpSession ss = SessionManager.getSession(); + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + return user != null ? user.getUserID() : null; + } /** * Dispatch view the according to the gate type. Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/TblMonitoringAction.java =================================================================== diff -u -r6a8cbf03dadd48f4ba4feb43fedffa052a8b177b -r7913826df20868a8bf035076a14ac89d5e615b46 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/TblMonitoringAction.java (.../TblMonitoringAction.java) (revision 6a8cbf03dadd48f4ba4feb43fedffa052a8b177b) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/TblMonitoringAction.java (.../TblMonitoringAction.java) (revision 7913826df20868a8bf035076a14ac89d5e615b46) @@ -13,7 +13,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.commons.lang.StringEscapeUtils; import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; @@ -29,6 +28,7 @@ import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.learningdesign.GroupingActivity; +import org.lamsfoundation.lams.learningdesign.PermissionGateActivity; import org.lamsfoundation.lams.learningdesign.SequenceActivity; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.learningdesign.Transition; @@ -66,10 +66,11 @@ private static ILamsToolService toolService; private static IActivityDAO activityDAO; private static IGradebookService gradebookService; - + /** - * Displays addStudent page. + * Displays addStudent page. */ + @Override public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { initServices(); @@ -113,18 +114,18 @@ List traGradebookUserActivities = new LinkedList<>(); if (isIraMcqAvailable || isIraAssessmentAvailable) { iraGradebookUserActivities = gradebookService.getGradebookUserActivities(iraToolActivityId); - } + } if (isScratchieAvailable) { traGradebookUserActivities = gradebookService.getGradebookUserActivities(traToolActivityId); } - + Set leaderUserIds = leaderselectionToolActivityId == null ? new HashSet() : toolService.getLeaderUserId(leaderselectionToolActivityId); GroupingActivity groupingActivity = getGroupingActivity(lesson); Grouping grouping = groupingActivity == null ? null : groupingActivity.getCreateGrouping(); Set groups = grouping == null ? null : grouping.getGroups(); - + Set groupDtos = new TreeSet(); if (groups != null) { for (Group group : groups) { @@ -151,7 +152,7 @@ } } } - + if (isScratchieAvailable) { //find according traGradebookUserActivity for (GradebookUserActivity traGradebookUserActivity : traGradebookUserActivities) { @@ -160,7 +161,7 @@ groupDto.setTraScore(traGradebookUserActivity.getMark()); break; } - } + } } } } @@ -193,7 +194,7 @@ Long activityId = contributeActivity.getActivityID(); Activity activity = monitoringService.getActivityById(activityId); - PermissionGateDTO gateDto = new PermissionGateDTO(activity); + PermissionGateDTO gateDto = new PermissionGateDTO((PermissionGateActivity) activity); gateDto.setUrl(contributeEntry.getURL()); gateDto.setComplete(contributeEntry.getIsComplete()); @@ -212,16 +213,16 @@ request.setAttribute("permissionGates", permissionGates); return mapping.findForward("gates"); } - + /** * Shows forum page */ public ActionForward forum(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - + long forumActivityId = WebUtil.readLongParam(request, "activityId"); ToolActivity forumActivity = (ToolActivity) monitoringService.getActivityById(forumActivityId); - + int attemptedLearnersNumber = lessonService.getCountLearnersHaveAttemptedActivity(forumActivity); request.setAttribute("attemptedLearnersNumber", attemptedLearnersNumber); @@ -230,16 +231,16 @@ return mapping.findForward("forum"); } - + /** * Shows peerreview page */ public ActionForward peerreview(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - + long peerreviewActivityId = WebUtil.readLongParam(request, "activityId"); ToolActivity peerreviewActivity = (ToolActivity) monitoringService.getActivityById(peerreviewActivityId); - + int attemptedLearnersNumber = lessonService.getCountLearnersHaveAttemptedActivity(peerreviewActivity); request.setAttribute("attemptedLearnersNumber", attemptedLearnersNumber); @@ -261,7 +262,7 @@ } /** - * Returns lesson activities sorted by the learning design order. + * Returns lesson activities sorted by the learning design order. */ @SuppressWarnings("unchecked") private List getLessonActivities(Lesson lesson) { @@ -280,10 +281,10 @@ return activities; } - + /** * Sort all activities by the learning design order. - * + * * @param activity * @param sortedActivities */ @@ -376,16 +377,16 @@ iraPassed = true; if (CentralConstants.TOOL_SIGNATURE_MCQ.equals(toolSignature)) { request.setAttribute("isIraMcqAvailable", true); - + } else { request.setAttribute("isIraAssessmentAvailable", true); } request.setAttribute("iraToolContentId", toolContentId); request.setAttribute("iraToolActivityId", toolActivityId); - + continue; } - + //aes are counted only after Scratchie activity if (scratchiePassed && CentralConstants.TOOL_SIGNATURE_ASSESSMENT.equals(toolSignature)) { request.setAttribute("isAeAvailable", true); @@ -396,20 +397,20 @@ } else if (CentralConstants.TOOL_SIGNATURE_FORUM.equals(toolSignature)) { request.setAttribute("isForumAvailable", true); request.setAttribute("forumActivityId", toolActivityId); - + } else if (CentralConstants.TOOL_SIGNATURE_PEER_REVIEW.equals(toolSignature)) { request.setAttribute("isPeerreviewAvailable", true); request.setAttribute("peerreviewToolContentId", toolContentId); - //tRA is the first scratchie activity + //tRA is the first scratchie activity } else if (!scratchiePassed && CentralConstants.TOOL_SIGNATURE_SCRATCHIE.equals(toolSignature)) { scratchiePassed = true; - + request.setAttribute("isScratchieAvailable", true); request.setAttribute("traToolContentId", toolContentId); request.setAttribute("traToolActivityId", toolActivityId); } - + if (CentralConstants.TOOL_SIGNATURE_LEADERSELECTION.equals(toolSignature)) { request.setAttribute("leaderselectionToolActivityId", toolActivityId); request.setAttribute("leaderselectionToolContentId", toolContentId); @@ -419,7 +420,7 @@ request.setAttribute("isGatesAvailable", true); } } - + request.setAttribute("assessmentToolContentIds", assessmentToolContentIds); request.setAttribute("assessmentActivityTitles", assessmentActivityTitles); } @@ -438,7 +439,7 @@ if (coreToolService == null) { coreToolService = (ILamsCoreToolService) ctx.getBean("lamsCoreToolService"); } - + if (toolService == null) { toolService = (ILamsToolService) ctx.getBean("lamsToolService"); } Index: lams_monitoring/web/css/tblmonitor.scss =================================================================== diff -u -rc5bb3b300fb9098f88d7cc9440e4a65a0422f3d2 -r7913826df20868a8bf035076a14ac89d5e615b46 --- lams_monitoring/web/css/tblmonitor.scss (.../tblmonitor.scss) (revision c5bb3b300fb9098f88d7cc9440e4a65a0422f3d2) +++ lams_monitoring/web/css/tblmonitor.scss (.../tblmonitor.scss) (revision 7913826df20868a8bf035076a14ac89d5e615b46) @@ -271,7 +271,7 @@ color:green; font-size:2.2em; margin-top:-8px; - padding: 3px 5px 3px 5px; + padding: 0px 5px 0px 5px; } i.fa.fa-minus-square{ Index: lams_monitoring/web/gate/gateStatus.jsp =================================================================== diff -u -r225d293907a5e2976e367ee3aa790239bad38699 -r7913826df20868a8bf035076a14ac89d5e615b46 --- lams_monitoring/web/gate/gateStatus.jsp (.../gateStatus.jsp) (revision 225d293907a5e2976e367ee3aa790239bad38699) +++ lams_monitoring/web/gate/gateStatus.jsp (.../gateStatus.jsp) (revision 7913826df20868a8bf035076a14ac89d5e615b46) @@ -16,10 +16,18 @@
- + + +   + + +   + + + +
- Index: lams_monitoring/web/tblmonitor/gates.jsp =================================================================== diff -u -rd7ed1173946998f754a2efef09d68c9e3bfe307f -r7913826df20868a8bf035076a14ac89d5e615b46 --- lams_monitoring/web/tblmonitor/gates.jsp (.../gates.jsp) (revision d7ed1173946998f754a2efef09d68c9e3bfe307f) +++ lams_monitoring/web/tblmonitor/gates.jsp (.../gates.jsp) (revision 7913826df20868a8bf035076a14ac89d5e615b46) @@ -22,13 +22,21 @@
- +
+ + + +   + + +   + + + + -