Index: lams_build/lib/lams/lams-gradebook.jar =================================================================== diff -u -rf54815212f3ba8ed21821d87b885057842cf5d69 -rc3db10fe6622ab0bb74375275547f75608241c65 Binary files differ Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -rb26f90eccf164c7058201360d2ca771adcfb597a -rc3db10fe6622ab0bb74375275547f75608241c65 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision b26f90eccf164c7058201360d2ca771adcfb597a) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision c3db10fe6622ab0bb74375275547f75608241c65) @@ -474,7 +474,7 @@ public GradebookUserActivity getGradebookUserActivity(Long activityID, Integer userID) { return gradebookDAO.getGradebookUserDataForActivity(activityID, userID); } - + @Override public List getGradebookUserActivities(Long activityId) { return gradebookDAO.getAllGradebookUserActivitiesForActivity(activityId); @@ -516,7 +516,8 @@ String[] args = new String[] { learner.getLogin() + "(" + learner.getUserId() + ")", lesson.getLessonId().toString(), oldMark, mark.toString() }; String message = messageService.getMessage("audit.lesson.change.mark", args); - logEventService.logEvent(LogEvent.TYPE_MARK_UPDATED, monitorUser.getUserID(), learner.getUserId(), lesson.getLessonId(), null, message); + logEventService.logEvent(LogEvent.TYPE_MARK_UPDATED, monitorUser.getUserID(), learner.getUserId(), + lesson.getLessonId(), null, message); } } @@ -526,7 +527,7 @@ if (lesson == null) { return; } - boolean weighted = toolService.isWeightedMarks(lesson.getLearningDesign());; + boolean weighted = toolService.isWeightedMarks(lesson.getLearningDesign()); Map userToGradebookUserLessonMap = getUserToGradebookUserLessonMap(lesson, null); @@ -969,7 +970,8 @@ @SuppressWarnings("unchecked") public LinkedHashMap exportLessonGradebook(Lesson lesson) { - boolean isWeighted = toolService.isWeightedMarks(lesson.getLearningDesign());; + boolean isWeighted = toolService.isWeightedMarks(lesson.getLearningDesign()); + ; LinkedHashMap dataToExport = new LinkedHashMap(); @@ -1735,6 +1737,29 @@ } @Override + public void removeActivityMark(Integer userID, Long toolSessionID) { + ToolSession toolSession = toolService.getToolSessionById(toolSessionID); + User learner = (User) userService.findById(User.class, userID); + if ((learner != null) && (toolSession != null)) { + ToolActivity activity = toolSession.getToolActivity(); + GradebookUserActivity gradebookUserActivity = getGradebookUserActivity(activity.getActivityId(), userID); + if (gradebookUserActivity != null) { + // act as if the mark was updated to 0 so lesson mark calculates correctly + Double oldActivityMark = gradebookUserActivity.getMark(); + gradebookUserActivity.setMark(0D); + Lesson lesson = (Lesson) activity.getLearningDesign().getLessons().iterator().next(); + boolean isWeightedMarks = toolService.isWeightedMarks(lesson.getLearningDesign()); + GradebookUserLesson gradebookUserLesson = getGradebookUserLesson(lesson.getLessonId(), userID); + aggregateTotalMarkForLesson(isWeightedMarks, gradebookUserLesson, gradebookUserActivity, + oldActivityMark); + + // finally completely remove the activity mark + gradebookDAO.delete(gradebookUserActivity); + } + } + } + + @Override public Activity getActivityById(Long activityID) { return activityDAO.getActivityByActivityId(activityID); } @@ -1901,7 +1926,7 @@ totalMark = calculateLessonMark(useWeightings, userActivities, markedActivity); } else if (!useWeightings) { totalMark = gradebookUserLesson.getMark() - oldActivityMark; - if (markedActivity.getMark() != null) { + if (markedActivity != null && markedActivity.getMark() != null) { totalMark += markedActivity.getMark(); } } else { @@ -1980,10 +2005,10 @@ .setAverageMark(gradebookDAO.getAverageMarkForGroupedActivity(activity.getActivityId(), groupId)); activityDTO.setMedianTimeTaken( gradebookDAO.getMedianTimeTakenForGroupedActivity(activity.getActivityId(), groupId)); - activityDTO.setMinTimeTaken( - gradebookDAO.getMinTimeTakenForGroupedActivity(activity.getActivityId(), groupId)); - activityDTO.setMaxTimeTaken( - gradebookDAO.getMaxTimeTakenForGroupedActivity(activity.getActivityId(), groupId)); + activityDTO + .setMinTimeTaken(gradebookDAO.getMinTimeTakenForGroupedActivity(activity.getActivityId(), groupId)); + activityDTO + .setMaxTimeTaken(gradebookDAO.getMaxTimeTakenForGroupedActivity(activity.getActivityId(), groupId)); } else { // Setting averages for lesson Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookService.java =================================================================== diff -u -rb39597d17e4c55346d4732e0867fd2be09393fa5 -rc3db10fe6622ab0bb74375275547f75608241c65 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookService.java (.../IGradebookService.java) (revision b39597d17e4c55346d4732e0867fd2be09393fa5) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookService.java (.../IGradebookService.java) (revision c3db10fe6622ab0bb74375275547f75608241c65) @@ -238,7 +238,7 @@ * @return */ GradebookUserActivity getGradebookUserActivity(Long activityID, Integer userID); - + /** * Gets all available gradebookUserActivity objects for the specified activity * @@ -280,6 +280,11 @@ Boolean markedInGradebook); /** + * Delete user activity mark and updates aggregates + */ + void removeActivityMark(Integer userID, Long toolSessionID); + + /** * Get an activity from the db by id * * @param activityID @@ -339,5 +344,4 @@ /** Get a summary of the weightings */ List getWeights(LearningDesign design); - } \ No newline at end of file