Index: lams_tool_lamc/.classpath =================================================================== diff -u -re59bc835a5ec91886980d67af70c0f05a0f7ae73 -r050e8bf3043b7af4904debfe4b75ed40e1340dcb --- lams_tool_lamc/.classpath (.../.classpath) (revision e59bc835a5ec91886980d67af70c0f05a0f7ae73) +++ lams_tool_lamc/.classpath (.../.classpath) (revision 050e8bf3043b7af4904debfe4b75ed40e1340dcb) @@ -19,5 +19,6 @@ + Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUsrAttemptDAO.java =================================================================== diff -u -r3f7d82f8f5d0c6881eb83f9ce8c36720e9756649 -r050e8bf3043b7af4904debfe4b75ed40e1340dcb --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUsrAttemptDAO.java (.../IMcUsrAttemptDAO.java) (revision 3f7d82f8f5d0c6881eb83f9ce8c36720e9756649) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUsrAttemptDAO.java (.../IMcUsrAttemptDAO.java) (revision 050e8bf3043b7af4904debfe4b75ed40e1340dcb) @@ -90,6 +90,14 @@ */ int getAttemptsCountPerOption(Long optionUid); + /** + * Calculate what is the total mark scored by user in this activity. Only responseFinalised is taken into account. + * + * @param userUid + * @return + */ + int getUserTotalMark(final Long userUid); + McUsrAttempt getUserAttemptByUid(Long uid); } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUsrAttemptDAO.java =================================================================== diff -u -r3f7d82f8f5d0c6881eb83f9ce8c36720e9756649 -r050e8bf3043b7af4904debfe4b75ed40e1340dcb --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUsrAttemptDAO.java (.../McUsrAttemptDAO.java) (revision 3f7d82f8f5d0c6881eb83f9ce8c36720e9756649) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUsrAttemptDAO.java (.../McUsrAttemptDAO.java) (revision 050e8bf3043b7af4904debfe4b75ed40e1340dcb) @@ -26,7 +26,6 @@ import org.hibernate.FlushMode; import org.lamsfoundation.lams.tool.mc.dao.IMcUsrAttemptDAO; -import org.lamsfoundation.lams.tool.mc.pojos.McQueUsr; import org.lamsfoundation.lams.tool.mc.pojos.McUsrAttempt; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; @@ -56,6 +55,10 @@ + McUsrAttempt.class.getName() + " as attempt where attempt.mcOptionsContent.uid=? AND attempt.mcQueUsr.responseFinalised = true"; + private static final String FIND_USER_TOTAL_MARK = "select SUM(attempt.mark) from " + + McUsrAttempt.class.getName() + + " as attempt where attempt.mcQueUsr.uid=:userUid AND attempt.mcQueUsr.responseFinalised = true"; + @Override public McUsrAttempt getUserAttemptByUid(Long uid) { return (McUsrAttempt) this.getHibernateTemplate().get(McUsrAttempt.class, uid); @@ -67,10 +70,21 @@ } @Override - public List getUserAttempts(final Long queUserUid) { + public List getUserAttempts(final Long userUid) { return (List) getSession().createQuery(LOAD_ALL_QUESTION_ATTEMPTS) - .setLong("queUsrUid", queUserUid.longValue()).list(); + .setLong("queUsrUid", userUid.longValue()).list(); } + + @Override + public int getUserTotalMark(final Long userUid) { + List list = getSession().createQuery(FIND_USER_TOTAL_MARK).setLong("userUid", userUid.longValue()).list(); + + if (list == null || list.size() == 0) { + return 0; + } + + return ((Number) list.get(0)).intValue(); + } @SuppressWarnings("unchecked") public McUsrAttempt getUserAttemptByQuestion(final Long queUsrUid, final Long mcQueContentId) { Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/mcApplicationContext.xml =================================================================== diff -u -r126d84999e520648cb187e465cb4aaa3baad222e -r050e8bf3043b7af4904debfe4b75ed40e1340dcb --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/mcApplicationContext.xml (.../mcApplicationContext.xml) (revision 126d84999e520648cb187e465cb4aaa3baad222e) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/mcApplicationContext.xml (.../mcApplicationContext.xml) (revision 050e8bf3043b7af4904debfe4b75ed40e1340dcb) @@ -81,7 +81,8 @@ - + + Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java =================================================================== diff -u -rab8fc22488ee451542732a76b27e6b85f55702cd -r050e8bf3043b7af4904debfe4b75ed40e1340dcb --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision ab8fc22488ee451542732a76b27e6b85f55702cd) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision 050e8bf3043b7af4904debfe4b75ed40e1340dcb) @@ -64,6 +64,7 @@ import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler; import org.lamsfoundation.lams.contentrepository.service.IRepositoryService; import org.lamsfoundation.lams.contentrepository.service.SimpleCredentials; +import org.lamsfoundation.lams.gradebook.service.IGradebookService; import org.lamsfoundation.lams.learning.service.ILearnerService; import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException; import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService; @@ -148,6 +149,7 @@ private ILamsToolService toolService; private IToolContentHandler mcToolContentHandler = null; private IExportToolContentService exportContentService; + private IGradebookService gradebookService; private ICoreNotebookService coreNotebookService; @@ -759,10 +761,24 @@ @Override public void changeUserAttemptMark(Long userAttemptUid, Integer newMark) { + if (newMark == null) { + return; + } + McUsrAttempt userAttempt = mcUsrAttemptDAO.getUserAttemptByUid(userAttemptUid); - float oldMark = userAttempt.getMark(); + Integer userId = userAttempt.getMcQueUsr().getQueUsrId().intValue(); + Long userUid = userAttempt.getMcQueUsr().getUid(); + Long toolSessionId = userAttempt.getMcQueUsr().getMcSession().getMcSessionId(); + Integer oldMark = userAttempt.getMark(); + int oldTotalMark = mcUsrAttemptDAO.getUserTotalMark(userUid); + userAttempt.setMark(newMark); mcUsrAttemptDAO.saveMcUsrAttempt(userAttempt); + + // propagade changes to Gradebook + int totalMark = (oldMark == null) ? oldTotalMark + newMark : oldTotalMark - oldMark + newMark; + gradebookService.updateActivityMark(new Double(totalMark), null, userId, toolSessionId, false); + } @Override @@ -1901,6 +1917,10 @@ public void setExportContentService(IExportToolContentService exportContentService) { this.exportContentService = exportContentService; } + + public void setGradebookService(IGradebookService gradebookService) { + this.gradebookService = gradebookService; + } public MCOutputFactory getMcOutputFactory() { return mcOutputFactory;