Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java,v diff -u -r1.12 -r1.13 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java 24 Jul 2015 10:16:50 -0000 1.12 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java 7 Dec 2015 22:21:26 -0000 1.13 @@ -30,37 +30,37 @@ public class AssessmentResultDAOHibernate extends BaseDAOHibernate implements AssessmentResultDAO { - private static final String FIND_BY_ASSESSMENT_AND_USER = "FROM " + AssessmentResult.class.getName() - + " AS r WHERE r.user.userId = ? AND r.assessment.uid=? ORDER BY r.startDate DESC LIMIT 1"; + private static final String FIND_LAST_BY_ASSESSMENT_AND_USER = "FROM " + AssessmentResult.class.getName() + + " AS r WHERE r.user.userId = ? AND r.assessment.uid=? AND r.latest=1"; private static final String FIND_BY_ASSESSMENT_AND_USER_AND_FINISHED = "FROM " + AssessmentResult.class.getName() + " AS r WHERE r.user.userId = ? AND r.assessment.uid=? AND (r.finishDate != null) ORDER BY r.startDate ASC"; - private static final String FIND_BY_ASSESSMENT_AND_USER_AND_FINISHED_LIMIT1 = "FROM " + private static final String FIND_LAST_FINISHED_BY_ASSESSMENT_AND_USER = "FROM " + AssessmentResult.class.getName() - + " AS r WHERE r.user.userId = ? AND r.assessment.uid=? AND (r.finishDate != null) ORDER BY r.startDate DESC LIMIT 1"; + + " AS r WHERE r.user.userId = ? AND r.assessment.uid=? AND (r.finishDate != null) AND r.latest=1"; private static final String FIND_BY_SESSION_AND_USER = "FROM " + AssessmentResult.class.getName() + " AS r WHERE r.user.userId = ? AND r.sessionId=?"; private static final String FIND_BY_SESSION_AND_USER_AND_FINISHED = "FROM " + AssessmentResult.class.getName() + " AS r WHERE r.user.userId = ? AND r.sessionId=? AND (r.finishDate != null) ORDER BY r.startDate ASC"; - private static final String FIND_BY_SESSION_AND_USER_AND_FINISHED_LIMIT1 = "FROM " + private static final String FIND_LAST_FINISHED_BY_SESSION_AND_USER = "FROM " + AssessmentResult.class.getName() - + " AS r WHERE r.user.userId = ? AND r.sessionId=? AND (r.finishDate != null) ORDER BY r.startDate DESC LIMIT 1"; + + " AS r WHERE r.user.userId = ? AND r.sessionId=? AND (r.finishDate != null) AND r.latest=1"; private static final String FIND_ASSESSMENT_RESULT_COUNT_BY_ASSESSMENT_AND_USER = "select COUNT(*) FROM " + AssessmentResult.class.getName() + " AS r WHERE r.user.userId=? AND r.assessment.uid=? AND (r.finishDate != null)"; private static final String FIND_LAST_ASSESSMENT_RESULT_GRADE = "select r.grade FROM " + AssessmentResult.class.getName() - + " AS r WHERE r.user.userId=? AND r.assessment.uid=? AND (r.finishDate != null) ORDER BY r.startDate DESC LIMIT 1"; + + " AS r WHERE r.user.userId=? AND r.assessment.uid=? AND (r.finishDate != null) AND r.latest=1"; - private static final String FIND_ASSESSMENT_RESULT_TIME_TAKEN = "select r.finishDate - r.startDate FROM " + private static final String FIND_LAST_ASSESSMENT_RESULT_TIME_TAKEN = "select UNIX_TIMESTAMP(r.finishDate) - UNIX_TIMESTAMP(r.startDate) FROM " + AssessmentResult.class.getName() - + " AS r WHERE r.user.userId=? AND r.assessment.uid=? AND (r.finishDate != null)"; + + " AS r WHERE r.user.userId=? AND r.assessment.uid=? AND (r.finishDate != null) AND r.latest=1"; private static final String FIND_BY_UID = "FROM " + AssessmentResult.class.getName() + " AS r WHERE r.uid = ?"; @@ -84,7 +84,7 @@ @Override public AssessmentResult getLastAssessmentResult(Long assessmentUid, Long userId) { - List list = getHibernateTemplate().find(AssessmentResultDAOHibernate.FIND_BY_ASSESSMENT_AND_USER, + List list = getHibernateTemplate().find(AssessmentResultDAOHibernate.FIND_LAST_BY_ASSESSMENT_AND_USER, new Object[] { userId, assessmentUid }); if ((list == null) || (list.size() == 0)) { return null; @@ -96,7 +96,7 @@ @Override public AssessmentResult getLastFinishedAssessmentResult(Long assessmentUid, Long userId) { List list = getHibernateTemplate().find( - AssessmentResultDAOHibernate.FIND_BY_ASSESSMENT_AND_USER_AND_FINISHED_LIMIT1, + AssessmentResultDAOHibernate.FIND_LAST_FINISHED_BY_ASSESSMENT_AND_USER, new Object[] { userId, assessmentUid }); if ((list == null) || (list.size() == 0)) { return null; @@ -119,11 +119,7 @@ @Override public Integer getLastFinishedAssessmentResultTimeTaken(Long assessmentUid, Long userId) { - String FIND_ASSESSMENT_RESULT_TIME_TAKEN = "select UNIX_TIMESTAMP(r.finishDate) - UNIX_TIMESTAMP(r.startDate) FROM " - + AssessmentResult.class.getName() - + " AS r WHERE r.user.userId=? AND r.assessment.uid=? AND (r.finishDate != null)"; - - List list = getHibernateTemplate().find(FIND_ASSESSMENT_RESULT_TIME_TAKEN, + List list = getHibernateTemplate().find(FIND_LAST_ASSESSMENT_RESULT_TIME_TAKEN, new Object[] { userId, assessmentUid }); if ((list == null) || (list.size() == 0)) { return null; @@ -135,7 +131,7 @@ @Override public AssessmentResult getLastFinishedAssessmentResultBySessionId(Long sessionId, Long userId) { List list = getHibernateTemplate().find( - AssessmentResultDAOHibernate.FIND_BY_SESSION_AND_USER_AND_FINISHED_LIMIT1, + AssessmentResultDAOHibernate.FIND_LAST_FINISHED_BY_SESSION_AND_USER, new Object[] { userId, sessionId }); if ((list == null) || (list.size() == 0)) { return null; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java,v diff -u -r1.3 -r1.4 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java 4 Dec 2015 15:00:41 -0000 1.3 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java 7 Dec 2015 22:21:26 -0000 1.4 @@ -67,14 +67,10 @@ " FROM tl_laasse10_user user" + " INNER JOIN tl_laasse10_session session" + " ON user.session_uid=session.uid" + - " LEFT OUTER JOIN (" + - " SELECT * FROM ( " + - " SELECT res.user_uid, res.grade " + - " FROM tl_laasse10_assessment_result res" + - " WHERE (res.finish_date IS NOT NULL) ORDER BY res.start_date DESC" + - " ) latest_res GROUP BY latest_res.user_uid" + - " ) result" + + " LEFT OUTER JOIN tl_laasse10_assessment_result result " + " ON result.user_uid = user.uid" + + " AND result.finish_date IS NOT NULL" + + " AND result.latest = 1" + " WHERE session.session_id = :sessionId " + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) " + " ORDER BY " + @@ -145,21 +141,14 @@ " INNER JOIN tl_laasse10_session session" + " ON user.session_uid=session.uid" + - " LEFT OUTER JOIN (" + - " SELECT * FROM ( " + - " SELECT res.uid, res.user_uid " + - " FROM tl_laasse10_assessment_result res" + - " WHERE (res.finish_date IS NOT NULL) ORDER BY res.start_date DESC" + - " ) latest_res GROUP BY latest_res.user_uid" + - " ) result" + + " LEFT OUTER JOIN tl_laasse10_assessment_result result " + " ON result.user_uid = user.uid" + + " AND result.finish_date IS NOT NULL" + + " AND result.latest = 1" + - " INNER JOIN (" + - " SELECT question_res.uid, question_res.result_uid, question_res.mark " + - " FROM tl_laasse10_question_result question_res" + - " WHERE question_res.assessment_question_uid =:questionUid" + - " ) question_result" + + " INNER JOIN tl_laasse10_question_result question_result " + " ON result.uid=question_result.result_uid" + + " AND question_result.assessment_question_uid = :questionUid" + " WHERE session.session_id = :sessionId " + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) " + Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20151204.sql =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20151204.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20151204.sql 7 Dec 2015 22:21:26 -0000 1.1 @@ -0,0 +1,25 @@ +-- Turn off autocommit, so nothing is committed if there is an error +SET AUTOCOMMIT = 0; +SET FOREIGN_KEY_CHECKS=0; +----------------------Put all sql statements below here------------------------- + +-- LDEV-3627 Improve Assessment tool's monitor paging +ALTER TABLE tl_laasse10_assessment_result ADD COLUMN latest TINYINT(1) DEFAULT 0; + +UPDATE tl_laasse10_assessment_result result + JOIN + ( SELECT user_uid, MAX(start_date) AS max_date + FROM tl_laasse10_assessment_result + GROUP BY user_uid + ) AS c + ON result.user_uid = c.user_uid + AND result.start_date = c.max_date +SET + result.latest = 1; + +----------------------Put all sql statements above here------------------------- + +-- If there were no errors, commit and restore autocommit to on +COMMIT; +SET AUTOCOMMIT = 1; +SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java,v diff -u -r1.4 -r1.5 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java 7 Dec 2011 19:23:59 -0000 1.4 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java 7 Dec 2015 22:21:26 -0000 1.5 @@ -42,6 +42,8 @@ private Long uid; private Assessment assessment; private Date startDate; + //indicates the latest retry + private boolean isLatest; private Date finishDate; private AssessmentUser user; private Long sessionId; @@ -106,6 +108,18 @@ } /** + * @hibernate.property column="latest" + * @return + */ + public boolean isLatest() { + return isLatest; + } + + public void setLatest(boolean isLatest) { + this.isLatest = isLatest; + } + + /** * @hibernate.property column="finish_date" * @return */ Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java,v diff -u -r1.65 -r1.66 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java 17 Nov 2015 19:18:56 -0000 1.65 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java 7 Dec 2015 22:21:26 -0000 1.66 @@ -249,6 +249,7 @@ // copy results from leader to user in both cases (when there is no userResult yet and when if it's been changed // by the leader) userResult.setStartDate(leaderResult.getStartDate()); + userResult.setLatest(leaderResult.isLatest()); userResult.setFinishDate(leaderResult.getFinishDate()); userResult.setMaximumGrade(leaderResult.getMaximumGrade()); userResult.setGrade(leaderResult.getGrade()); @@ -426,16 +427,25 @@ @Override public void setAttemptStarted(Assessment assessment, AssessmentUser assessmentUser, Long toolSessionId) { AssessmentResult lastResult = getLastAssessmentResult(assessment.getUid(), assessmentUser.getUserId()); - // don't instantiate new attempt if the previous one wasn't finished and thus continue working with it - if ((lastResult != null) && (lastResult.getFinishDate() == null)) { - return; + if (lastResult != null) { + + // don't instantiate new attempt if the previous one wasn't finished and thus continue working with it + if (lastResult.getFinishDate() == null) { + return; + + // mark previous attempt as not the latest anymore + } else { + lastResult.setLatest(false); + assessmentResultDao.saveObject(lastResult); + } } AssessmentResult result = new AssessmentResult(); result.setAssessment(assessment); result.setUser(assessmentUser); result.setSessionId(toolSessionId); result.setStartDate(new Timestamp(new Date().getTime())); + result.setLatest(true); assessmentResultDao.saveObject(result); } Index: lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp,v diff -u -r1.19 -r1.20 --- lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp 13 Nov 2015 14:21:46 -0000 1.19 +++ lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp 7 Dec 2015 22:21:26 -0000 1.20 @@ -41,7 +41,6 @@ rowList:[10,20,30,40,50,100], rowNum:10, viewrecords:true, - recordpos: 'left', colNames:['questionResultUid', 'maxMark', "", @@ -105,7 +104,7 @@ searchOnEnter: false }) - .navGrid("#pager${sessionDto.sessionId}", {edit:false,add:false,del:false,search:false, refresh:false}); + .navGrid("#pager${sessionDto.sessionId}", {edit:false,add:false,del:false,search:false, refresh:true});