Index: lams_central/src/java/org/lamsfoundation/lams/gradebook/service/GradeBookService.java =================================================================== diff -u -r50f28bb59571242e47c47f34a83d01fb53d81e20 -r3986ceae902d4b5f1b9e0fb41f74a369256e5ecd --- lams_central/src/java/org/lamsfoundation/lams/gradebook/service/GradeBookService.java (.../GradeBookService.java) (revision 50f28bb59571242e47c47f34a83d01fb53d81e20) +++ lams_central/src/java/org/lamsfoundation/lams/gradebook/service/GradeBookService.java (.../GradeBookService.java) (revision 3986ceae902d4b5f1b9e0fb41f74a369256e5ecd) @@ -43,7 +43,6 @@ import org.lamsfoundation.lams.gradebook.dto.GBUserGridRowDTO; import org.lamsfoundation.lams.gradebook.dto.GradeBookGridRowDTO; import org.lamsfoundation.lams.gradebook.util.GBGridView; -import org.lamsfoundation.lams.gradebook.util.GradeBookConstants; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.CompetenceMapping; import org.lamsfoundation.lams.learningdesign.ToolActivity; @@ -128,7 +127,48 @@ } return gradeBookActivityDTOs; } + + /** + * @see org.lamsfoundation.lams.gradebook.service.IGradeBookService#getGBActivityRowsForLesson(org.lamsfoundation.lams.lesson.Lesson) + */ + @SuppressWarnings("unchecked") + public List getGBActivityRowsForLesson(Lesson lesson) { + logger.debug("Getting gradebook data for lesson: " + lesson.getLessonId()); + + List gradeBookActivityDTOs = new ArrayList(); + + Set activities = (Set) lesson.getLearningDesign().getActivities(); + + /* + * Hibernate CGLIB is failing to load the first activity in + * the sequence as a ToolActivity for some mysterious reason + * Causes a ClassCastException when you try to cast it, even + * if it is a ToolActivity. + * + * THIS IS A HACK to retrieve the first tool activity + * manually so it can be cast as a ToolActivity - if it is one + */ + Activity firstActivity = monitoringService.getActivityById(lesson.getLearningDesign().getFirstActivity() + .getActivityId()); + + if (firstActivity.isToolActivity() && firstActivity instanceof ToolActivity) { + GBActivityGridRowDTO activityDTO = getGradeBookActivityDTO((ToolActivity) firstActivity, lesson); + gradeBookActivityDTOs.add(activityDTO); + } + + for (Activity activity : activities) { + if (activity.getActivityId().longValue() != firstActivity.getActivityId().longValue() + && activity instanceof ToolActivity) { + GBActivityGridRowDTO activityDTO = getGradeBookActivityDTO((ToolActivity) activity, lesson); + gradeBookActivityDTOs.add(activityDTO); + } + } + + return gradeBookActivityDTOs; + + } + /** * @see org.lamsfoundation.lams.gradebook.service.IGradeBookService#getGBUserRowsForActivity(org.lamsfoundation.lams.lesson.Lesson, * org.lamsfoundation.lams.learningdesign.Activity) @@ -181,47 +221,8 @@ } - /** - * @see org.lamsfoundation.lams.gradebook.service.IGradeBookService#getGBActivityRowsForLesson(org.lamsfoundation.lams.lesson.Lesson) - */ - @SuppressWarnings("unchecked") - public List getGBActivityRowsForLesson(Lesson lesson) { - logger.debug("Getting gradebook data for lesson: " + lesson.getLessonId()); - List gradeBookActivityDTOs = new ArrayList(); - - Set activities = (Set) lesson.getLearningDesign().getActivities(); - - /* - * Hibernate CGLIB is failing to load the first activity in - * the sequence as a ToolActivity for some mysterious reason - * Causes a ClassCastException when you try to cast it, even - * if it is a ToolActivity. - * - * THIS IS A HACK to retrieve the first tool activity - * manually so it can be cast as a ToolActivity - if it is one - */ - Activity firstActivity = monitoringService.getActivityById(lesson.getLearningDesign().getFirstActivity() - .getActivityId()); - - if (firstActivity.isToolActivity() && firstActivity instanceof ToolActivity) { - GBActivityGridRowDTO activityDTO = getGradeBookActivityDTO((ToolActivity) firstActivity, lesson); - gradeBookActivityDTOs.add(activityDTO); - } - - for (Activity activity : activities) { - if (activity.getActivityId().longValue() != firstActivity.getActivityId().longValue() - && activity instanceof ToolActivity) { - GBActivityGridRowDTO activityDTO = getGradeBookActivityDTO((ToolActivity) activity, lesson); - gradeBookActivityDTOs.add(activityDTO); - } - } - - return gradeBookActivityDTOs; - - } - /** * @see org.lamsfoundation.lams.gradebook.service.IGradeBookService#getGBUserRowsForLesson(org.lamsfoundation.lams.lesson.Lesson) */ @@ -370,9 +371,6 @@ lessonRow.setId(lesson.getLessonId()); lessonRow.setStartDate(getLocaleDateString(user, lesson.getStartDateTime())); - lessonRow.setLessonDescription(lesson.getLessonDescription()); - - if (view == GBGridView.MON_COURSE) { // Setting the averages for monitor view @@ -387,8 +385,12 @@ GradeBookUserLesson gbLesson = gradeBookDAO.getGradeBookUserDataForLesson(lesson.getLessonId(), user.getUserId()); + lessonRow.setAverageTimeTaken(gradeBookDAO.getAverageDurationLesson(lesson.getLessonId())); + lessonRow.setAverageMark(gradeBookDAO.getAverageMarkForLesson(lesson.getLessonId())); + if (gbLesson != null) { lessonRow.setMark(gbLesson.getMark()); + lessonRow.setFeedback(gbLesson.getFeedback()); } LearnerProgress learnerProgress = monitoringService.getLearnerProgress(user.getUserId(), lesson @@ -399,6 +401,8 @@ lessonRow.setTimeTaken(learnerProgress.getFinishDate().getTime() - learnerProgress.getStartDate().getTime()); } + + lessonRow.setFinishDate(getLocaleDateString(user, learnerProgress.getFinishDate())); } } @@ -422,6 +426,10 @@ } private String getLocaleDateString(User user, Date date) { + if (user == null || date == null) { + return null; + } + Locale locale = new Locale(user.getLocale().getLanguageIsoCode(), user.getLocale().getCountryIsoCode()); String dateStr = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, locale).format(date); return dateStr; Index: lams_central/src/java/org/lamsfoundation/lams/gradebook/util/GradeBookConstants.java =================================================================== diff -u -r50f28bb59571242e47c47f34a83d01fb53d81e20 -r3986ceae902d4b5f1b9e0fb41f74a369256e5ecd --- lams_central/src/java/org/lamsfoundation/lams/gradebook/util/GradeBookConstants.java (.../GradeBookConstants.java) (revision 50f28bb59571242e47c47f34a83d01fb53d81e20) +++ lams_central/src/java/org/lamsfoundation/lams/gradebook/util/GradeBookConstants.java (.../GradeBookConstants.java) (revision 3986ceae902d4b5f1b9e0fb41f74a369256e5ecd) @@ -69,6 +69,7 @@ public static final String VIEW_MON_USER = "monUserView"; public static final String VIEW_MON_COURSE= "monCourse"; public static final String VIEW_LRN_COURSE = "lrnCourse"; + public static final String VIEW_LRN_ACTIVITY = "lrnActivity"; // XML Elemetns public static final String ELEMENT_ROWS = "rows"; Index: lams_central/src/java/org/lamsfoundation/lams/gradebook/util/GradeBookUtil.java =================================================================== diff -u -r50f28bb59571242e47c47f34a83d01fb53d81e20 -r3986ceae902d4b5f1b9e0fb41f74a369256e5ecd --- lams_central/src/java/org/lamsfoundation/lams/gradebook/util/GradeBookUtil.java (.../GradeBookUtil.java) (revision 50f28bb59571242e47c47f34a83d01fb53d81e20) +++ lams_central/src/java/org/lamsfoundation/lams/gradebook/util/GradeBookUtil.java (.../GradeBookUtil.java) (revision 3986ceae902d4b5f1b9e0fb41f74a369256e5ecd) @@ -295,8 +295,10 @@ return GBGridView.MON_COURSE; else if (view.equals(GradeBookConstants.VIEW_LRN_COURSE)) return GBGridView.LRN_COURSE; + else if (view.equals(GradeBookConstants.VIEW_LRN_ACTIVITY)) + return GBGridView.LRN_ACTIVITY; else - throw new IllegalArgumentException("[" + view + "] is not a legal mode" + "in LAMS"); + throw new IllegalArgumentException("[" + view + "] is not a legal gradebook view"); } } Index: lams_central/src/java/org/lamsfoundation/lams/gradebook/web/action/GradeBookAction.java =================================================================== diff -u -r50f28bb59571242e47c47f34a83d01fb53d81e20 -r3986ceae902d4b5f1b9e0fb41f74a369256e5ecd --- lams_central/src/java/org/lamsfoundation/lams/gradebook/web/action/GradeBookAction.java (.../GradeBookAction.java) (revision 50f28bb59571242e47c47f34a83d01fb53d81e20) +++ lams_central/src/java/org/lamsfoundation/lams/gradebook/web/action/GradeBookAction.java (.../GradeBookAction.java) (revision 3986ceae902d4b5f1b9e0fb41f74a369256e5ecd) @@ -119,9 +119,20 @@ String searchString = WebUtil.readStrParam(request, GradeBookConstants.PARAM_SEARCH_STRING, true); GBGridView view = GradeBookUtil.readGBGridViewParam(request, GradeBookConstants.PARAM_VIEW, false); - // Getting the lesson id Long lessonID = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); - + + // Getting userID param, it is passed differently from different views + Integer userID = null; + if (view == GBGridView.MON_USER) { + userID = WebUtil.readIntParam(request, GradeBookConstants.PARAM_USERID); + } else if (view == GBGridView.LRN_ACTIVITY) { + + UserDTO userDTO = getUser(); + if (userDTO != null) { + userID = userDTO.getUserID(); + } + } + Lesson lesson = lessonService.getLesson(lessonID); if (lesson != null) { @@ -130,8 +141,8 @@ // Get the user gradebook list from the db // A slightly different list is needed for userview or activity view - if (view == GBGridView.MON_USER) { - Integer userID = WebUtil.readIntParam(request, GradeBookConstants.PARAM_USERID); + if (view == GBGridView.MON_USER || view == GBGridView.LRN_ACTIVITY) { + //Integer userID = WebUtil.readIntParam(request, GradeBookConstants.PARAM_USERID); User learner = (User) userService.findById(User.class, userID); if (learner != null) { gradeBookActivityDTOs = gradeBookService.getGBActivityRowsForLearner(lesson, learner); Index: lams_central/src/java/org/lamsfoundation/lams/gradebook/web/action/GradeBookLearningAction.java =================================================================== diff -u -r50f28bb59571242e47c47f34a83d01fb53d81e20 -r3986ceae902d4b5f1b9e0fb41f74a369256e5ecd --- lams_central/src/java/org/lamsfoundation/lams/gradebook/web/action/GradeBookLearningAction.java (.../GradeBookLearningAction.java) (revision 50f28bb59571242e47c47f34a83d01fb53d81e20) +++ lams_central/src/java/org/lamsfoundation/lams/gradebook/web/action/GradeBookLearningAction.java (.../GradeBookLearningAction.java) (revision 3986ceae902d4b5f1b9e0fb41f74a369256e5ecd) @@ -74,7 +74,7 @@ } @SuppressWarnings("unchecked") - public ActionForward courseMonitor(ActionMapping mapping, ActionForm form, HttpServletRequest request, + public ActionForward courseLearner(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { try { Index: lams_central/web/gradebook/gradeBookCourseLearner.jsp =================================================================== diff -u -r50f28bb59571242e47c47f34a83d01fb53d81e20 -r3986ceae902d4b5f1b9e0fb41f74a369256e5ecd --- lams_central/web/gradebook/gradeBookCourseLearner.jsp (.../gradeBookCourseLearner.jsp) (revision 50f28bb59571242e47c47f34a83d01fb53d81e20) +++ lams_central/web/gradebook/gradeBookCourseLearner.jsp (.../gradeBookCourseLearner.jsp) (revision 3986ceae902d4b5f1b9e0fb41f74a369256e5ecd) @@ -31,14 +31,18 @@ pager: 'organisationGridPager', rowList:[5,10,20,30], rowNum:10, - colNames:["", 'Lesson Name', 'Sub-Group', 'Start Date', 'Time Taken', 'Description', 'Mark'], + colNames:["", 'Lesson Name', 'Sub-Group', 'Progress', 'FeedBack', 'Start Date', 'Finish Date', 'Average Duration', 'Duration', 'Average Mark', 'Mark'], colModel:[ {name:'id', index:'id', sortable:false, editable:false, hidden:true, search:false, hidedlg:true}, {name:'rowName',index:'rowName', sortable:true, editable:false}, {name:'subGroup',index:'subGroup', sortable:false, editable:false, search:false}, - {name:'startDate',index:'startDate', sortable:false, editable:false, search:false}, - {name:'timeTaken',index:'timeTaken', sortable:true, editable:false, search:false}, - {name:'description',index:'description', sortable:false, editable:false, search:false}, + {name:'status',index:'status', sortable:false, editable:false, search:false}, + {name:'feedback',index:'feedback', sortable:false, editable:false, search:false}, + {name:'startDate',index:'startDate', sortable:false, editable:false, hidden:true, search:false}, + {name:'finishDate',index:'finishDate', sortable:false, editable:false, hidden:true, search:false}, + {name:'averageTimeTaken',index:'averageTimeTaken', sortable:true, hidden:true, editable:false, search:false}, + {name:'timeTaken',index:'timeTaken', sortable:true, editable:false, hidden:true, search:false}, + {name:'averageMark',index:'averageMark', sortable:true, editable:false, search:false}, {name:'mark',index:'mark', sortable:true, editable:false, search:false} ], loadError: function(xhr,st,err) { @@ -48,26 +52,28 @@ subGrid: true, subGridRowExpanded: function(subgrid_id, row_id) { var subgrid_table_id; - var userID = jQuery("#organisationGrid").getRowData(row_id)["id"]; + var lessonID = jQuery("#organisationGrid").getRowData(row_id)["id"]; subgrid_table_id = subgrid_id+"_t"; jQuery("#"+subgrid_id).html("
"); jQuery("#"+subgrid_table_id).jqGrid({ datatype: "xml", - url: "/gradebook/gradebook.do?dispatch=getActivityGridData&lessonID=${lessonDetails.lessonID}&view=monUserView&userID=" + userID, + url: "/gradebook/gradebook.do?dispatch=getActivityGridData&view=lrnActivity&lessonID=" + lessonID, height: "100%", width: 920, sortname: "id", imgpath: 'includes/javascript/jqgrid/themes/basic/images', pager: subgrid_table_id + "_pager", rowList:[5,10,20,30], rowNum:10, - colNames: ['Id','Activity','Progress', 'Time Taken', 'Activity FeedBack', 'Mark'], + colNames: ['Id','Activity','Progress', 'Feedback', 'Average Duration', 'Duration', 'Average Mark', 'Mark'], colModel: [ {name:'id', width:10, index:'id', sortable:false, hidden:true, hidedlg:true}, {name:'rowName', width:60, index:'rowName', sortable:false, editable: false}, {name:'status', align:'center', width:30, index:'status', sortable:false, editable:false}, - {name:'timeTaken', width:50, index:'timeTaken', sortable:true, editable: false}, {name:'feedback', width:250, index:'feedback', sortable:false, editable: false}, + {name:'averageTimeTaken',index:'averageTimeTaken', sortable:true, hidden:true, editable:false, search:false}, + {name:'timeTaken',index:'timeTaken', sortable:true, editable:false, hidden:true, search:false}, + {name:'averageMark',index:'averageMark', sortable:true, editable:false, search:false}, {name:'mark', width:100, index:'mark', sortable:true, editable: false} ], loadError: function(xhr,st,err) { Index: lams_central/web/gradebook/gradeBookCourseMonitor.jsp =================================================================== diff -u -r50f28bb59571242e47c47f34a83d01fb53d81e20 -r3986ceae902d4b5f1b9e0fb41f74a369256e5ecd --- lams_central/web/gradebook/gradeBookCourseMonitor.jsp (.../gradeBookCourseMonitor.jsp) (revision 50f28bb59571242e47c47f34a83d01fb53d81e20) +++ lams_central/web/gradebook/gradeBookCourseMonitor.jsp (.../gradeBookCourseMonitor.jsp) (revision 3986ceae902d4b5f1b9e0fb41f74a369256e5ecd) @@ -30,12 +30,11 @@ pager: 'organisationGridPager', rowList:[5,10,20,30], rowNum:10, - colNames:["", 'Lesson Name', 'Sub-Group', 'Start Date', 'Average Time Taken', 'Description', 'Average Mark'], + colNames:["", 'Lesson Name', 'Sub-Group', 'Start Date', 'Average Time Taken', 'Average Mark'], colModel:[ {name:'id', index:'id', sortable:false, editable:false, hidden:true, search:false, hidedlg:true}, {name:'rowName',index:'rowName', sortable:true, editable:false}, {name:'subGroup',index:'subGroup', sortable:false, editable:false, search:false}, - {name:'description',index:'description', sortable:false, editable:false, search:false}, {name:'startDate',index:'startDate', sortable:false, editable:false, search:false}, {name:'avgTimeTaken',index:'avgTimeTaken', sortable:true, editable:false, search:false}, {name:'avgMark',index:'avgMark', sortable:true, editable:false, search:false} Index: lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/GBActivityGridRowDTO.java =================================================================== diff -u -r50f28bb59571242e47c47f34a83d01fb53d81e20 -r3986ceae902d4b5f1b9e0fb41f74a369256e5ecd --- lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/GBActivityGridRowDTO.java (.../GBActivityGridRowDTO.java) (revision 50f28bb59571242e47c47f34a83d01fb53d81e20) +++ lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/GBActivityGridRowDTO.java (.../GBActivityGridRowDTO.java) (revision 3986ceae902d4b5f1b9e0fb41f74a369256e5ecd) @@ -80,6 +80,14 @@ ret.add((averageTimeTaken != null) ? convertTimeToString(averageTimeTaken) : CELL_EMPTY); ret.add(competences); ret.add((averageMark != null) ? averageMark.toString() : CELL_EMPTY); + } else if (view == GBGridView.LRN_ACTIVITY) { + ret.add(rowName); + ret.add(status); + ret.add(feedback); + ret.add((averageTimeTaken != null) ? convertTimeToString(averageTimeTaken) : CELL_EMPTY); + ret.add((timeTaken != null) ? convertTimeToString(timeTaken) : CELL_EMPTY); + ret.add((averageMark != null) ? averageMark.toString() : CELL_EMPTY); + ret.add((mark != null) ? mark.toString() : CELL_EMPTY); } return ret; Index: lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/GBLessonGridRowDTO.java =================================================================== diff -u -r50f28bb59571242e47c47f34a83d01fb53d81e20 -r3986ceae902d4b5f1b9e0fb41f74a369256e5ecd --- lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/GBLessonGridRowDTO.java (.../GBLessonGridRowDTO.java) (revision 50f28bb59571242e47c47f34a83d01fb53d81e20) +++ lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/GBLessonGridRowDTO.java (.../GBLessonGridRowDTO.java) (revision 3986ceae902d4b5f1b9e0fb41f74a369256e5ecd) @@ -32,7 +32,6 @@ public static final String VIEW_MONITOR = "monitorView"; public static final String VIEW_LEARNER = "learnerView"; - String lessonDescription; String subGroup; String startDate; @@ -43,6 +42,7 @@ String gradeBookLearnerURL; String finishDate; String status; + String feedback; public GBLessonGridRowDTO() { } @@ -61,9 +61,8 @@ ret.add(rowName); } ret.add(subGroup); - ret.add(lessonDescription); ret.add(startDate); - ret.add((averageTimeTaken != null) ? convertTimeToString(averageTimeTaken) : CELL_EMPTY); + ret.add((averageTimeTaken != null && averageTimeTaken != 0) ? convertTimeToString(averageTimeTaken) : CELL_EMPTY); ret.add((averageMark != null) ? averageMark.toString() : CELL_EMPTY); } else if (view == GBGridView.LRN_COURSE) { @@ -74,11 +73,15 @@ ret.add(rowName); } ret.add(subGroup); - ret.add(lessonDescription); - ret.add(status); - ret.add(startDate); + ret.add((status != null) ? status : CELL_EMPTY); + ret.add(feedback); + ret.add((startDate != null) ? startDate : CELL_EMPTY); ret.add((finishDate != null) ? finishDate : CELL_EMPTY); + ret.add((averageTimeTaken != null && averageTimeTaken != 0) ? toItalic(convertTimeToString(averageTimeTaken)) : CELL_EMPTY); + ret.add((timeTaken != null) ? convertTimeToString(timeTaken) : CELL_EMPTY); + ret.add((averageMark != null) ? toItalic(averageMark.toString()) : CELL_EMPTY); ret.add((mark != null) ? mark.toString() : CELL_EMPTY); + } return ret; } @@ -91,14 +94,6 @@ this.rowName = rowName; } - public String getLessonDescription() { - return lessonDescription; - } - - public void setLessonDescription(String lessonDescription) { - this.lessonDescription = lessonDescription; - } - public String getGradeBookMonitorURL() { return gradeBookMonitorURL; } @@ -146,4 +141,14 @@ public void setStatus(String status) { this.status = status; } + + public String getFeedback() { + return feedback; + } + + public void setFeedback(String feedback) { + this.feedback = feedback; + } + + } Index: lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/GradeBookGridRowDTO.java =================================================================== diff -u -r50f28bb59571242e47c47f34a83d01fb53d81e20 -r3986ceae902d4b5f1b9e0fb41f74a369256e5ecd --- lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/GradeBookGridRowDTO.java (.../GradeBookGridRowDTO.java) (revision 50f28bb59571242e47c47f34a83d01fb53d81e20) +++ lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/GradeBookGridRowDTO.java (.../GradeBookGridRowDTO.java) (revision 3986ceae902d4b5f1b9e0fb41f74a369256e5ecd) @@ -80,6 +80,10 @@ return null; } } + + protected String toItalic(String string) { + return "" + string + ""; + } public Long getTimeTaken() { return timeTaken; Index: lams_common/src/java/org/lamsfoundation/lams/gradebook/util/GBGridView.java =================================================================== diff -u -r50f28bb59571242e47c47f34a83d01fb53d81e20 -r3986ceae902d4b5f1b9e0fb41f74a369256e5ecd --- lams_common/src/java/org/lamsfoundation/lams/gradebook/util/GBGridView.java (.../GBGridView.java) (revision 50f28bb59571242e47c47f34a83d01fb53d81e20) +++ lams_common/src/java/org/lamsfoundation/lams/gradebook/util/GBGridView.java (.../GBGridView.java) (revision 3986ceae902d4b5f1b9e0fb41f74a369256e5ecd) @@ -27,5 +27,6 @@ MON_USER, MON_ACTIVITY, MON_COURSE, - LRN_COURSE + LRN_COURSE, + LRN_ACTIVITY }