Index: lams_tool_lamc/.classpath =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/.classpath,v diff -u -r1.10 -r1.11 --- lams_tool_lamc/.classpath 12 Dec 2012 13:50:04 -0000 1.10 +++ lams_tool_lamc/.classpath 4 Sep 2013 17:29:57 -0000 1.11 @@ -19,5 +19,6 @@ + Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/mcApplicationContext.xml =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/mcApplicationContext.xml,v diff -u -r1.19 -r1.20 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/mcApplicationContext.xml 26 Mar 2009 10:00:38 -0000 1.19 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/mcApplicationContext.xml 4 Sep 2013 17:29:57 -0000 1.20 @@ -81,7 +81,8 @@ - + + Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUsrAttemptDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUsrAttemptDAO.java,v diff -u -r1.23 -r1.24 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUsrAttemptDAO.java 3 Sep 2013 16:56:41 -0000 1.23 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUsrAttemptDAO.java 4 Sep 2013 17:29:57 -0000 1.24 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUsrAttemptDAO.java,v diff -u -r1.27 -r1.28 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUsrAttemptDAO.java 3 Sep 2013 16:56:42 -0000 1.27 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUsrAttemptDAO.java 4 Sep 2013 17:29:57 -0000 1.28 @@ -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/service/McServicePOJO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java,v diff -u -r1.114 -r1.115 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java 4 Sep 2013 08:06:38 -0000 1.114 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java 4 Sep 2013 17:29:57 -0000 1.115 @@ -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;