Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r1973448340d094a80e2e45079dcda82555649155 -raee0c08639547cfdf353db8f22c4aedf22092787 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/util/audit/AuditService.java =================================================================== diff -u -r3de11bf54a449905b116b6a3d2569c91b286a227 -raee0c08639547cfdf353db8f22c4aedf22092787 --- lams_common/src/java/org/lamsfoundation/lams/util/audit/AuditService.java (.../AuditService.java) (revision 3de11bf54a449905b116b6a3d2569c91b286a227) +++ lams_common/src/java/org/lamsfoundation/lams/util/audit/AuditService.java (.../AuditService.java) (revision aee0c08639547cfdf353db8f22c4aedf22092787) @@ -32,98 +32,103 @@ import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; -/** - * Write out audit entries to a log4j based log file. Gets the user details from the shared session. -*/ +/** + * Write out audit entries to a log4j based log file. Gets the user details from the shared session. + */ /* - * Relies on the followig two entries in the log4j configuration file: + * Relies on the followig two entries in the log4j configuration file: * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * + * + * + * + * + * + * + * + * */ public class AuditService implements IAuditService { - static Logger logger = Logger.getLogger(AuditService.class.getName()); + static Logger logger = Logger.getLogger(AuditService.class.getName()); - private final String AUDIT_CHANGE_I18N_KEY = "audit.change.entry"; - private final String AUDIT_HIDE_I18N_KEY = "audit.hide.entry"; - private final String AUDIT_SHOW_I18N_KEY = "audit.show.entry"; - protected MessageService messageService; + private final String AUDIT_CHANGE_I18N_KEY = "audit.change.entry"; + private final String AUDIT_MARK_CHANGE_I18N_KEY = "audit.change.mark"; + private final String AUDIT_HIDE_I18N_KEY = "audit.hide.entry"; + private final String AUDIT_SHOW_I18N_KEY = "audit.show.entry"; + protected MessageService messageService; - private String getUserString() { - HttpSession ss = SessionManager.getSession(); - if ( ss != null ) { - UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); - if ( user != null ) { - return getUserString(user); - } - } - return "System Generated (No Current User): "; + private String getUserString() { + HttpSession ss = SessionManager.getSession(); + if (ss != null) { + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + if (user != null) { + return getUserString(user); + } } - - private String getUserString(UserDTO userDTO) { - return userDTO.getLogin()+"("+userDTO.getUserID()+"): "; - } + return "System Generated (No Current User): "; + } - public void log(String moduleName, String message) { - logger.info(getUserString()+moduleName+": "+message); - } - - public void log(UserDTO userDTO, String moduleName, String message) { - logger.info(getUserString(userDTO)+moduleName+": "+message); - } + private String getUserString(UserDTO userDTO) { + return userDTO.getLogin() + "(" + userDTO.getUserID() + "): "; + } - public void logChange(String moduleName, Long originalUserId, String originalUserLogin, - String originalText, String newText) { - String[] args = new String[3]; - args[0] = originalUserLogin+"("+originalUserId+")"; - args[1] = originalText; - args[2] = newText; - String message = messageService.getMessage(AUDIT_CHANGE_I18N_KEY, args); - log(moduleName, message); - } + public void log(String moduleName, String message) { + logger.info(getUserString() + moduleName + ": " + message); + } - public void logHideEntry(String moduleName, Long originalUserId, String originalUserLogin, String hiddenItem) { - String[] args = new String[3]; - args[0] = originalUserLogin+"("+originalUserId+")"; - args[1] = hiddenItem; - String message = messageService.getMessage(AUDIT_HIDE_I18N_KEY, args); - log(moduleName, message); - } + public void log(UserDTO userDTO, String moduleName, String message) { + logger.info(getUserString(userDTO) + moduleName + ": " + message); + } - public void logShowEntry(String moduleName, Long originalUserId, String originalUserLogin, String hiddenItem) { - String[] args = new String[3]; - args[0] = originalUserLogin+"("+originalUserId+")"; - args[1] = hiddenItem; - String message = messageService.getMessage(AUDIT_SHOW_I18N_KEY, args); - log(moduleName, message); - } + public void logChange(String moduleName, Long originalUserId, String originalUserLogin, String originalText, + String newText) { + String[] args = new String[3]; + args[0] = originalUserLogin + "(" + originalUserId + ")"; + args[1] = originalText; + args[2] = newText; + String message = messageService.getMessage(AUDIT_CHANGE_I18N_KEY, args); + log(moduleName, message); + } - /* *** Spring Injection Methods *************/ - - public MessageService getMessageService() { - return messageService; - } + public void logMarkChange(String moduleName, Long originalUserId, String originalUserLogin, String originalMark, + String newMark) { + String[] args = new String[3]; + args[0] = originalUserLogin + "(" + originalUserId + ")"; + args[1] = originalMark; + args[2] = newMark; + String message = messageService.getMessage(AUDIT_MARK_CHANGE_I18N_KEY, args); + log(moduleName, message); + } - public void setMessageService(MessageService messageService) { - this.messageService = messageService; - } + public void logHideEntry(String moduleName, Long originalUserId, String originalUserLogin, String hiddenItem) { + String[] args = new String[3]; + args[0] = originalUserLogin + "(" + originalUserId + ")"; + args[1] = hiddenItem; + String message = messageService.getMessage(AUDIT_HIDE_I18N_KEY, args); + log(moduleName, message); + } + public void logShowEntry(String moduleName, Long originalUserId, String originalUserLogin, String hiddenItem) { + String[] args = new String[3]; + args[0] = originalUserLogin + "(" + originalUserId + ")"; + args[1] = hiddenItem; + String message = messageService.getMessage(AUDIT_SHOW_I18N_KEY, args); + log(moduleName, message); + } + + /* *** Spring Injection Methods ************ */ + + public MessageService getMessageService() { + return messageService; + } + + public void setMessageService(MessageService messageService) { + this.messageService = messageService; + } + } Index: lams_common/src/java/org/lamsfoundation/lams/util/audit/IAuditService.java =================================================================== diff -u -r96393fcda711611ec39dbc961ab6431b1f16bb4e -raee0c08639547cfdf353db8f22c4aedf22092787 --- lams_common/src/java/org/lamsfoundation/lams/util/audit/IAuditService.java (.../IAuditService.java) (revision 96393fcda711611ec39dbc961ab6431b1f16bb4e) +++ lams_common/src/java/org/lamsfoundation/lams/util/audit/IAuditService.java (.../IAuditService.java) (revision aee0c08639547cfdf353db8f22c4aedf22092787) @@ -29,52 +29,90 @@ /** Public interface for a service that writes audit records */ public interface IAuditService { - /** - * Log a message. The username, date, moduleName and message are recorded in the audit log - * @param moduleName module generating the audit entry e.g. learning, voting tool - * @param message message to be logged - */ - public void log(String moduleName, String message); - - /** - * Same as above, but logs message using given userDTO instead of current session DTO. - * Useful when importing users in a separate thread which isn't linked to main session. - * @param userDTO - * @param moduleName - * @param message - */ - public void log(UserDTO userDTO, String moduleName, String message); + /** + * Log a message. The username, date, moduleName and message are recorded in the audit log + * + * @param moduleName + * module generating the audit entry e.g. learning, voting tool + * @param message + * message to be logged + */ + void log(String moduleName, String message); - /** - * Log a data change. The username, date, moduleName and change details are recorded in the audit log. - * @param moduleName tool generating the audit entry - * @param originalText the text before it was changed - * @param newText the text after it was changed - * @param originalUserID the userID of the user who created the text initially - * @param originalUserLogin the login of the user who created the text initially - */ - public void logChange(String moduleName, Long originalUserId, String originalUserLogin, - String originalText, String newText); - - /** - * Log staff member hiding a user entry. The username, date, moduleName and hidden entry are - * recorded in the audit log. - * @param moduleName tool generating the audit entry - * @param hiddenItem String version of the item that has been hidden - * @param newText the text after it was changed - * @param originalUserID the userID of the user who created the text initially - * @param originalUserLogin the login of the user who created the text initially - */ - public void logHideEntry(String moduleName, Long originalUserId, String originalUserLogin, String hiddenItem); + /** + * Same as above, but logs message using given userDTO instead of current session DTO. Useful when importing users + * in a separate thread which isn't linked to main session. + * + * @param userDTO + * @param moduleName + * @param message + */ + void log(UserDTO userDTO, String moduleName, String message); - /** - * Log staff member showing a user entry. The username, date, moduleName and hidden entry are - * recorded in the audit log. Presumably the item was hidden previously. - * @param moduleName tool generating the audit entry - * @param hiddenItem String version of the item that has been hidden - * @param newText the text after it was changed - * @param originalUserID the userID of the user who created the text initially - * @param originalUserLogin the login of the user who created the text initially - */ - public void logShowEntry(String moduleName, Long originalUserId, String originalUserLogin, String hiddenItem); + /** + * Log a data change. The username, date, moduleName and change details are recorded in the audit log. + * + * @param moduleName + * tool generating the audit entry + * @param originalText + * the text before it was changed + * @param newText + * the text after it was changed + * @param originalUserID + * the userID of the user who created the text initially + * @param originalUserLogin + * the login of the user who created the text initially + */ + void logChange(String moduleName, Long originalUserId, String originalUserLogin, String originalText, String newText); + + /** + * Log a mark change in Gradebook. The username, date, moduleName and change details are recorded in the audit log. + * + * @param moduleName + * tool generating the audit entry + * @param originalMark + * the text before it was changed + * @param newMark + * the text after it was changed + * @param originalUserId + * the userID of the user who created the text initially + * @param originalUserLogin + * the login of the user who created the text initially + */ + void logMarkChange(String moduleName, Long originalUserId, String originalUserLogin, String originalMark, + String newMark); + + /** + * Log staff member hiding a user entry. The username, date, moduleName and hidden entry are recorded in the audit + * log. + * + * @param moduleName + * tool generating the audit entry + * @param hiddenItem + * String version of the item that has been hidden + * @param newText + * the text after it was changed + * @param originalUserID + * the userID of the user who created the text initially + * @param originalUserLogin + * the login of the user who created the text initially + */ + void logHideEntry(String moduleName, Long originalUserId, String originalUserLogin, String hiddenItem); + + /** + * Log staff member showing a user entry. The username, date, moduleName and hidden entry are recorded in the audit + * log. Presumably the item was hidden previously. + * + * @param moduleName + * tool generating the audit entry + * @param hiddenItem + * String version of the item that has been hidden + * @param newText + * the text after it was changed + * @param originalUserID + * the userID of the user who created the text initially + * @param originalUserLogin + * the login of the user who created the text initially + */ + void logShowEntry(String moduleName, Long originalUserId, String originalUserLogin, String hiddenItem); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/assessmentApplicationContext.xml =================================================================== diff -u -rcabd1e5deca9e19bb9739e37e823195a38f512a6 -raee0c08639547cfdf353db8f22c4aedf22092787 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/assessmentApplicationContext.xml (.../assessmentApplicationContext.xml) (revision cabd1e5deca9e19bb9739e37e823195a38f512a6) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/assessmentApplicationContext.xml (.../assessmentApplicationContext.xml) (revision aee0c08639547cfdf353db8f22c4aedf22092787) @@ -97,6 +97,9 @@ + + + Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -rcabd1e5deca9e19bb9739e37e823195a38f512a6 -raee0c08639547cfdf353db8f22c4aedf22092787 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision cabd1e5deca9e19bb9739e37e823195a38f512a6) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision aee0c08639547cfdf353db8f22c4aedf22092787) @@ -108,6 +108,7 @@ import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.util.audit.IAuditService; /** * @@ -145,6 +146,8 @@ private ILamsToolService toolService; private ILearnerService learnerService; + + private IAuditService auditService; private IUserManagementService userManagementService; @@ -787,6 +790,10 @@ Integer userId = result.getUser().getUserId().intValue(); Long toolSessionId = result.getUser().getSession().getSessionId(); gradebookService.updateActivityMark(new Double(totalMark), null, userId, toolSessionId, true); + + //records mark change with audit service + auditService.logMarkChange(AssessmentConstants.TOOL_SIGNATURE, result.getUser().getUserId(), result.getUser() + .getLoginName(), "" + oldMark, "" + totalMark); } @Override @@ -937,6 +944,10 @@ // set methods for Spring Bean // ***************************************************************************** + public void setAuditService(IAuditService auditService) { + this.auditService = auditService; + } + public void setLearnerService(ILearnerService learnerService) { this.learnerService = learnerService; } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java =================================================================== diff -u -r2fb529d1dd3dae1d2a106eb701e3594e686da8c5 -raee0c08639547cfdf353db8f22c4aedf22092787 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision 2fb529d1dd3dae1d2a106eb701e3594e686da8c5) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision aee0c08639547cfdf353db8f22c4aedf22092787) @@ -879,6 +879,10 @@ // propagade changes to Gradebook int totalMark = (oldMark == null) ? oldTotalMark + newMark : oldTotalMark - oldMark + newMark; gradebookService.updateActivityMark(new Double(totalMark), null, userId, toolSessionId, true); + + //record mark change with audit service + auditService.logMarkChange(McAppConstants.MY_SIGNATURE, userAttempt.getMcQueUsr().getQueUsrId(), userAttempt + .getMcQueUsr().getUsername(), "" + oldMark, "" + totalMark); }