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;