Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/gradebookApplicationContext.xml =================================================================== diff -u -r57c6309187d8c559f1b273202c6b3a99e559edae -re9144c94e842e1e1609999a71cca9e6ea30dd054 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/gradebookApplicationContext.xml (.../gradebookApplicationContext.xml) (revision 57c6309187d8c559f1b273202c6b3a99e559edae) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/gradebookApplicationContext.xml (.../gradebookApplicationContext.xml) (revision e9144c94e842e1e1609999a71cca9e6ea30dd054) @@ -22,6 +22,7 @@ + @@ -30,6 +31,7 @@ PROPAGATION_REQUIRED + PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly PROPAGATION_REQUIRED,readOnly Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -rcda0a3d272f76d413f458d02ebeb068b937a026c -re9144c94e842e1e1609999a71cca9e6ea30dd054 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision cda0a3d272f76d413f458d02ebeb068b937a026c) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision e9144c94e842e1e1609999a71cca9e6ea30dd054) @@ -41,9 +41,15 @@ import java.util.TimeZone; import java.util.TreeSet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import org.apache.struts.action.ActionForm; +import org.apache.struts.action.ActionForward; +import org.apache.struts.action.ActionMapping; import org.lamsfoundation.lams.dao.IBaseDAO; import org.lamsfoundation.lams.gradebook.GradebookUserActivity; import org.lamsfoundation.lams.gradebook.GradebookUserLesson; @@ -53,6 +59,7 @@ 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.gradebook.util.LessonComparator; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ActivityEvaluation; @@ -73,12 +80,16 @@ import org.lamsfoundation.lams.usermanagement.OrganisationType; import org.lamsfoundation.lams.usermanagement.Role; import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.Configuration; import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.DateUtil; import org.lamsfoundation.lams.util.ExcelCell; import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.audit.IAuditService; +import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; /** @@ -102,6 +113,7 @@ private IBaseDAO baseDAO; private IActivityDAO activityDAO; private MessageService messageService; + private IAuditService auditService; @SuppressWarnings("unchecked") public List getGBActivityRowsForLearner(Lesson lesson, User learner) { @@ -360,13 +372,22 @@ if (gradebookUserLesson == null) { gradebookUserLesson = new GradebookUserLesson(lesson, learner); } + String oldMark = (gradebookUserLesson.getMark() == null) ? "-" : gradebookUserLesson.getMark().toString(); + gradebookUserLesson.setMark(mark); gradebookDAO.insertOrUpdate(gradebookUserLesson); + + // audit log changed gradebook mark + UserDTO monitorUser = (UserDTO) SessionManager.getSession().getAttribute(AttributeNames.USER); + String[] args = new String[] { learner.getLogin() + "(" + learner.getUserId() + ")", + lesson.getLessonId().toString(), oldMark, mark.toString() }; + String message = messageService.getMessage("audit.lesson.change.mark", args); + auditService.log(monitorUser, GradebookConstants.MODULE_NAME, message); } } public void updateUserActivityGradebookMark(Lesson lesson, User learner, Activity activity, Double mark, - Boolean markedInGradebook) { + Boolean markedInGradebook, boolean isAuditLogRequired) { if (lesson != null && activity != null && learner != null && activity.isToolActivity()) { // First, update the mark for the activity @@ -376,6 +397,8 @@ if (gradebookUserActivity == null) { gradebookUserActivity = new GradebookUserActivity((ToolActivity) activity, learner); } + String oldMark = (gradebookUserActivity.getMark() == null) ? "-" : gradebookUserActivity.getMark() + .toString(); gradebookUserActivity.setMark(mark); gradebookUserActivity.setMarkedInGradebook(markedInGradebook); @@ -392,6 +415,16 @@ } aggregateTotalMarkForLesson(gradebookUserLesson); + + // audit log changed gradebook mark + if (isAuditLogRequired) { + UserDTO monitorUser = (UserDTO) SessionManager.getSession().getAttribute(AttributeNames.USER); + String[] args = new String[] { learner.getLogin() + "(" + learner.getUserId() + ")", + activity.getActivityId().toString(), lesson.getLessonId().toString(), oldMark.toString(), + mark.toString() }; + String message = messageService.getMessage("audit.activity.change.mark", args); + auditService.log(monitorUser, GradebookConstants.MODULE_NAME, message); + } } } @@ -420,7 +453,23 @@ gradebookUserActivity.setFeedback(feedback); gradebookDAO.insertOrUpdate(gradebookUserActivity); } + + @Override + public void toggleMarksReleased(Long lessonId) { + Lesson lesson = lessonService.getLesson(lessonId); + + boolean isMarksReleased = (lesson.getMarksReleased() != null) && lesson.getMarksReleased(); + lesson.setMarksReleased(!isMarksReleased); + userService.save(lesson); + + // audit log marks released + UserDTO monitor = (UserDTO) SessionManager.getSession().getAttribute(AttributeNames.USER); + String messageKey = (isMarksReleased) ? "audit.marks.released.off" : "audit.marks.released.on"; + String message = messageService.getMessage(messageKey, new String[] {lessonId.toString()}); + auditService.log(monitor, GradebookConstants.MODULE_NAME, message); + } + @SuppressWarnings("unchecked") public List getGBLessonRows(Organisation organisation, User user, User viewer, GBGridView view) { List lessonRows = new ArrayList(); @@ -1042,7 +1091,7 @@ // If gradebook user activity is null or the mark is set by teacher or was set previously by user - save the // mark and feedback if (gradebookUserActivity == null || markedInGradebook || !gradebookUserActivity.getMarkedInGradebook()) { - updateUserActivityGradebookMark(toolSession.getLesson(), learner, activity, mark, markedInGradebook); + updateUserActivityGradebookMark(toolSession.getLesson(), learner, activity, mark, markedInGradebook, false); updateUserActivityGradebookFeedback(activity, learner, feedback); } } @@ -1544,6 +1593,11 @@ } // Getter and setter methods ----------------------------------------------- + + public void setAuditService(IAuditService auditService) { + this.auditService = auditService; + } + public ILamsCoreToolService getToolService() { return toolService; } Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookService.java =================================================================== diff -u -rfc2765358dd2ee073be452d5c1e265a3b7e404a1 -re9144c94e842e1e1609999a71cca9e6ea30dd054 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookService.java (.../IGradebookService.java) (revision fc2765358dd2ee073be452d5c1e265a3b7e404a1) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookService.java (.../IGradebookService.java) (revision e9144c94e842e1e1609999a71cca9e6ea30dd054) @@ -89,8 +89,7 @@ ArrayList getGBUserRowsForOrganisation(Organisation organisation); /** - * Updates a user's lesson mark, this will make it desynchronised with the - * aggregated marks from the activities + * Updates a user's lesson mark, this will make it desynchronised with the aggregated marks from the activities * * @param lesson * @param learner @@ -99,16 +98,19 @@ void updateUserLessonGradebookMark(Lesson lesson, User learner, Double mark); /** - * Updates a user's activity mark, this will automatically add up all the - * user's activity marks for a lesson and set the lesson mark too + * Updates a user's activity mark, this will automatically add up all the user's activity marks for a lesson and set + * the lesson mark too * * @param lesson * @param learner * @param activity * @param mark + * @param markedInGradebook + * @param isAuditLogRequired should this event be logged with audit service */ - void updateUserActivityGradebookMark(Lesson lesson, User learner, Activity activity, Double mark, Boolean markedInGradebook); - + void updateUserActivityGradebookMark(Lesson lesson, User learner, Activity activity, Double mark, + Boolean markedInGradebook, boolean isAuditLogRequired); + /** * Updates the user's feedback for an activity * @@ -128,6 +130,13 @@ void updateUserLessonGradebookFeedback(Lesson lesson, User learner, String feedback); /** + * Toggle on/off marks released option + * + * @param lessonId + */ + void toggleMarksReleased(Long lessonId); + + /** * Gets the lesson row dtos for a given organisation * * @param organisation Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GradebookConstants.java =================================================================== diff -u -rea79f29aed5c764a223234e456442bc1e49fcf85 -re9144c94e842e1e1609999a71cca9e6ea30dd054 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GradebookConstants.java (.../GradebookConstants.java) (revision ea79f29aed5c764a223234e456442bc1e49fcf85) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/util/GradebookConstants.java (.../GradebookConstants.java) (revision e9144c94e842e1e1609999a71cca9e6ea30dd054) @@ -31,6 +31,8 @@ */ public class GradebookConstants { + public static final String MODULE_NAME = "gradebook"; + // Parameters public static final String PARAM_PAGE = "page"; public static final String PARAM_ROWS = "rows"; Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookMonitoringAction.java =================================================================== diff -u -rfc2765358dd2ee073be452d5c1e265a3b7e404a1 -re9144c94e842e1e1609999a71cca9e6ea30dd054 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookMonitoringAction.java (.../GradebookMonitoringAction.java) (revision fc2765358dd2ee073be452d5c1e265a3b7e404a1) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookMonitoringAction.java (.../GradebookMonitoringAction.java) (revision e9144c94e842e1e1609999a71cca9e6ea30dd054) @@ -252,7 +252,7 @@ if (markStr != null && !markStr.equals("")) { Double mark = Double.parseDouble(markStr); - gradebookService.updateUserActivityGradebookMark(lesson, learner, activity, mark, true); + gradebookService.updateUserActivityGradebookMark(lesson, learner, activity, mark, true, true); } if (feedback != null) { @@ -265,33 +265,27 @@ return null; } - /** - * Toggles the release mark flag for a lesson - * - * @param mapping - * @param form - * @param request - * @param response - * @return - * @throws Exception - */ - public ActionForward toggleReleaseMarks(ActionMapping mapping, ActionForm form, HttpServletRequest request, - HttpServletResponse response) throws Exception { - initServices(); - Long lessonID = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); + /** + * Toggles the release mark flag for a lesson + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws Exception + */ + public ActionForward toggleReleaseMarks(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws Exception { + initServices(); + Long lessonID = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); + + gradebookService.toggleMarksReleased(lessonID); - Lesson lesson = lessonService.getLesson(lessonID); + writeResponse(response, CONTENT_TYPE_TEXT_PLAIN, ENCODING_UTF8, "success"); + return null; + } - boolean marksReleased = lesson.getMarksReleased() != null && lesson.getMarksReleased(); - - lesson.setMarksReleased(!marksReleased); - - userService.save(lesson); - - writeResponse(response, CONTENT_TYPE_TEXT_PLAIN, ENCODING_UTF8, "success"); - return null; - } - /** * Exports Lesson Gradebook into excel. */ Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r4a197b8d9fc40820ac1069f737aefc26babb315b -re9144c94e842e1e1609999a71cca9e6ea30dd054 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 4a197b8d9fc40820ac1069f737aefc26babb315b) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision e9144c94e842e1e1609999a71cca9e6ea30dd054) @@ -702,7 +702,7 @@ // Only set the mark if it hasnt previously been set by a teacher if ((gradebookUserActivity == null) || !gradebookUserActivity.getMarkedInGradebook()) { gradebookService.updateUserActivityGradebookMark(lesson, learner, toolActivity, - outputDouble, false); + outputDouble, false, false); } } }