Index: lams_tool_assessment/conf/xdoclet/struts-actions.xml =================================================================== diff -u -r11d6b3d1391ab1d1aa42453aa0347a6b85fcfeaa -r45466cdcb65a2b45fa8e24d23a40b986d902cede --- lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision 11d6b3d1391ab1d1aa42453aa0347a6b85fcfeaa) +++ lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -288,6 +288,14 @@ + + + + getBySessionID(Long sessionId); + + List getPagedUsersBySession(Long sessionId, int page, int size, String sortBy, String sortOrder, + String searchString); + + int getCountUsersBySession(Long sessionId, String searchString); + + List getPagedUsersBySessionAndQuestion(Long sessionId, Long questionUid, int page, int size, + String sortBy, String sortOrder, String searchString); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java =================================================================== diff -u -r1803940d4b4ae2d25b8ae9fe5ded7dc93c2f6071 -r45466cdcb65a2b45fa8e24d23a40b986d902cede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java (.../AssessmentQuestionResultDAOHibernate.java) (revision 1803940d4b4ae2d25b8ae9fe5ded7dc93c2f6071) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java (.../AssessmentQuestionResultDAOHibernate.java) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -35,65 +35,64 @@ @Repository public class AssessmentQuestionResultDAOHibernate extends LAMSBaseDAO implements AssessmentQuestionResultDAO { - private static final String FIND_BY_UID = "FROM " + AssessmentQuestionResult.class.getName() - + " AS r WHERE r.uid = ?"; + private static final String FIND_BY_UID = "FROM " + AssessmentQuestionResult.class.getName() + + " AS r WHERE r.uid = ?"; - private static final String FIND_BY_ASSESSMENT_QUESTION_AND_USER = "FROM " - + AssessmentQuestionResult.class.getName() - + " AS q, " - + AssessmentResult.class.getName() - + " AS r " - + " WHERE q.assessmentResult.uid = r.uid and r.assessment.uid = ? AND r.user.userId =? AND q.assessmentQuestion.uid =? ORDER BY r.startDate ASC"; + private static final String FIND_BY_ASSESSMENT_QUESTION_AND_USER = "FROM " + + AssessmentQuestionResult.class.getName() + + " AS q, " + + AssessmentResult.class.getName() + + " AS r " + + " WHERE q.assessmentResult.uid = r.uid and r.assessment.uid = ? AND r.user.userId =? AND q.assessmentQuestion.uid =? ORDER BY r.startDate ASC"; - private static final String FIND_WRONG_ANSWERS_NUMBER = "SELECT COUNT(q) FROM " - + AssessmentQuestionResult.class.getName() - + " AS q, " - + AssessmentResult.class.getName() - + " AS r " - + " WHERE q.assessmentResult.uid = r.uid AND r.assessment.uid = ? AND r.user.userId =? AND q.assessmentQuestion.uid =? AND (ROUND(q.mark + q.penalty) < q.maxMark) AND (r.finishDate != null)"; + private static final String FIND_WRONG_ANSWERS_NUMBER = "SELECT COUNT(q) FROM " + + AssessmentQuestionResult.class.getName() + + " AS q, " + + AssessmentResult.class.getName() + + " AS r " + + " WHERE q.assessmentResult.uid = r.uid AND r.assessment.uid = ? AND r.user.userId =? AND q.assessmentQuestion.uid =? AND (ROUND(q.mark + q.penalty) < q.maxMark) AND (r.finishDate != null)"; - private static final String GET_ANSWER_MARK = "SELECT q.mark FROM " - + AssessmentQuestionResult.class.getName() - + " AS q, " - + AssessmentResult.class.getName() - + " AS r " - + " WHERE q.assessmentResult.uid = r.uid AND r.assessment.uid = ? AND (r.finishDate != null) AND r.user.userId =? AND q.assessmentQuestion.sequenceId =? ORDER BY r.startDate DESC"; + private static final String GET_ANSWER_MARK = "SELECT q.mark FROM " + + AssessmentQuestionResult.class.getName() + + " AS q, " + + AssessmentResult.class.getName() + + " AS r " + + " WHERE q.assessmentResult.uid = r.uid AND r.assessment.uid = ? AND (r.finishDate != null) AND r.user.userId =? AND q.assessmentQuestion.sequenceId =? ORDER BY r.startDate DESC"; - @Override - public int getNumberWrongAnswersDoneBefore(Long assessmentUid, Long userId, Long questionUid) { - List list = doFind(FIND_WRONG_ANSWERS_NUMBER, - new Object[] { assessmentUid, userId, questionUid }); - if (list == null || list.size() == 0) { - return 0; - } else { - return ((Number) list.get(0)).intValue(); - } + @Override + public int getNumberWrongAnswersDoneBefore(Long assessmentUid, Long userId, Long questionUid) { + List list = doFind(FIND_WRONG_ANSWERS_NUMBER, new Object[] { assessmentUid, userId, questionUid }); + if (list == null || list.size() == 0) { + return 0; + } else { + return ((Number) list.get(0)).intValue(); } + } - @Override - @SuppressWarnings("unchecked") - public List getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid) { - return (List) doFind(FIND_BY_ASSESSMENT_QUESTION_AND_USER, - new Object[] { assessmentUid, userId, questionUid }); - } + @Override + @SuppressWarnings("unchecked") + public List getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid) { + return (List) doFind(FIND_BY_ASSESSMENT_QUESTION_AND_USER, new Object[] { assessmentUid, userId, + questionUid }); + } - @Override - public AssessmentQuestionResult getAssessmentQuestionResultByUid(Long questionResultUid) { - List list = doFind(FIND_BY_UID, new Object[] { questionResultUid }); - if (list == null || list.size() == 0) - return null; - return (AssessmentQuestionResult) list.get(0); - } + @Override + public AssessmentQuestionResult getAssessmentQuestionResultByUid(Long questionResultUid) { + List list = doFind(FIND_BY_UID, new Object[] { questionResultUid }); + if (list == null || list.size() == 0) + return null; + return (AssessmentQuestionResult) list.get(0); + } - @Override - public Float getQuestionResultMark(Long assessmentUid, Long userId, int questionSequenceId) { - Query q = getSession().createQuery(GET_ANSWER_MARK); - q.setParameter(0, assessmentUid); - q.setParameter(1, userId); - q.setParameter(2, questionSequenceId); - q.setMaxResults(1); - Object result = q.uniqueResult(); - return result != null ? ((Number) result).floatValue() : null; + @Override + public Float getQuestionResultMark(Long assessmentUid, Long userId, int questionSequenceId) { + Query q = getSession().createQuery(GET_ANSWER_MARK); + q.setParameter(0, assessmentUid); + q.setParameter(1, userId); + q.setParameter(2, questionSequenceId); + q.setMaxResults(1); + Object result = q.uniqueResult(); + return result != null ? ((Number) result).floatValue() : null; - } + } } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java =================================================================== diff -u -r5e401a92b56d95be748a1e74e37b4c0e64e9b316 -r45466cdcb65a2b45fa8e24d23a40b986d902cede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision 5e401a92b56d95be748a1e74e37b4c0e64e9b316) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -37,7 +37,8 @@ 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"; - private static final String FIND_BY_ASSESSMENT_AND_USER_AND_FINISHED = "FROM " + AssessmentResult.class.getName() + 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 " @@ -58,7 +59,8 @@ + AssessmentResult.class.getName() + " AS r WHERE r.user.userId=? AND r.assessment.uid=? AND (r.finishDate != null)"; - private static final String FIND_ASSESSMENT_RESULT_GRADE = "select r.grade FROM " + AssessmentResult.class.getName() + private static final String FIND_ASSESSMENT_RESULT_GRADE = "select r.grade FROM " + + AssessmentResult.class.getName() + " AS r WHERE r.user.userId=? AND r.assessment.uid=? AND (r.finishDate != null)"; private static final String FIND_ASSESSMENT_RESULT_TIME_TAKEN = "select r.finishDate - r.startDate FROM " @@ -82,8 +84,8 @@ @Override public List getAssessmentResultsBySession(Long sessionId, Long userId) { - return (List) doFind(AssessmentResultDAOHibernate.FIND_BY_SESSION_AND_USER, - new Object[] { userId, sessionId }); + return (List) doFind(AssessmentResultDAOHibernate.FIND_BY_SESSION_AND_USER, new Object[] { + userId, sessionId }); } @Override @@ -108,8 +110,8 @@ @Override public Float getLastFinishedAssessmentResultGrade(Long assessmentUid, Long userId) { - List list = doFind(AssessmentResultDAOHibernate.FIND_ASSESSMENT_RESULT_GRADE, - new Object[] { userId, assessmentUid }); + List list = doFind(AssessmentResultDAOHibernate.FIND_ASSESSMENT_RESULT_GRADE, new Object[] { userId, + assessmentUid }); if ((list == null) || (list.size() == 0)) { return null; } else { Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java =================================================================== diff -u -r4b2ee37c3271b4bbfd17604063031fff036ade22 -r45466cdcb65a2b45fa8e24d23a40b986d902cede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java (.../AssessmentUserDAOHibernate.java) (revision 4b2ee37c3271b4bbfd17604063031fff036ade22) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java (.../AssessmentUserDAOHibernate.java) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -23,10 +23,14 @@ /* $$Id$$ */ package org.lamsfoundation.lams.tool.assessment.dao.hibernate; +import java.util.ArrayList; import java.util.List; +import org.hibernate.Query; +import org.hibernate.SQLQuery; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; import org.lamsfoundation.lams.tool.assessment.dao.AssessmentUserDAO; +import org.lamsfoundation.lams.tool.assessment.dto.AssessmentUserDTO; import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; import org.springframework.stereotype.Repository; @@ -40,23 +44,166 @@ private static final String FIND_BY_SESSION_ID = "from " + AssessmentUser.class.getName() + " as u where u.session.sessionId=?"; - public AssessmentUser getUserByUserIDAndSessionID(Long userID, Long sessionId) { - List list = doFind(FIND_BY_USER_ID_SESSION_ID, new Object[] { userID, sessionId }); - if (list == null || list.size() == 0) - return null; - return (AssessmentUser) list.get(0); + public AssessmentUser getUserByUserIDAndSessionID(Long userID, Long sessionId) { + List list = doFind(FIND_BY_USER_ID_SESSION_ID, new Object[] { userID, sessionId }); + if (list == null || list.size() == 0) + return null; + return (AssessmentUser) list.get(0); + } + + public AssessmentUser getUserByUserIDAndContentID(Long userId, Long contentId) { + List list = doFind(FIND_BY_USER_ID_CONTENT_ID, new Object[] { userId, contentId }); + if (list == null || list.size() == 0) + return null; + return (AssessmentUser) list.get(0); + } + + @SuppressWarnings("unchecked") + public List getBySessionID(Long sessionId) { + return (List) this.doFind(FIND_BY_SESSION_ID, sessionId); + } + + @Override + public List getPagedUsersBySession(Long sessionId, int page, int size, String sortBy, String sortOrder, + String searchString) { + + String LOAD_USERS_ORDERED_BY_NAME = "SELECT DISTINCT user.user_id, user.last_name, user.first_name, result.grade" + + " 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" + + " ON result.user_uid = user.uid" + + " WHERE session.session_id = :sessionId " + + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) " + + " ORDER BY " + + " CASE " + + " WHEN :sortBy='userName' THEN CONCAT(user.last_name, ' ', user.first_name) " + + " WHEN :sortBy='total' THEN result.grade " + + " END " + sortOrder; + + SQLQuery query = getSession().createSQLQuery(LOAD_USERS_ORDERED_BY_NAME); + query.setLong("sessionId", sessionId); + // support for custom search from a toolbar + searchString = searchString == null ? "" : searchString; + query.setString("searchString", searchString); + query.setString("sortBy", sortBy); + query.setFirstResult(page * size); + query.setMaxResults(size); + List list = query.list(); + + ArrayList userDtos = new ArrayList(); + if (list != null && list.size() > 0) { + for (Object[] element : list) { + + Long userId = ((Number) element[0]).longValue(); + String firstName = (String) element[1]; + String lastName = (String) element[2]; + float grade = ((Number) element[3]).floatValue(); + + AssessmentUserDTO userDto = new AssessmentUserDTO(); + userDto.setUserId(userId); + userDto.setFirstName(firstName); + userDto.setLastName(lastName); + userDto.setGrade(grade); + userDtos.add(userDto); + } + } - public AssessmentUser getUserByUserIDAndContentID(Long userId, Long contentId) { - List list = doFind(FIND_BY_USER_ID_CONTENT_ID, new Object[] { userId, contentId }); - if (list == null || list.size() == 0) - return null; - return (AssessmentUser) list.get(0); + return userDtos; + } + + @Override + public int getCountUsersBySession(Long sessionId, String searchString) { + + String LOAD_USERS_ORDERED_BY_NAME = "SELECT COUNT(*) FROM " + AssessmentUser.class.getName() +" user" + + " WHERE user.session.sessionId = :sessionId " + + " AND (CONCAT(user.lastName, ' ', user.firstName) LIKE CONCAT('%', :searchString, '%')) "; + + Query query = getSession().createQuery(LOAD_USERS_ORDERED_BY_NAME); + query.setLong("sessionId", sessionId); + // support for custom search from a toolbar + searchString = searchString == null ? "" : searchString; + query.setString("searchString", searchString); + List list = query.list(); + + if ((list == null) || (list.size() == 0)) { + return 0; + } else { + return ((Number) list.get(0)).intValue(); } + } + + @Override + public List getPagedUsersBySessionAndQuestion(Long sessionId, Long questionUid, int page, int size, String sortBy, String sortOrder, + String searchString) { - @SuppressWarnings("unchecked") - public List getBySessionID(Long sessionId) { - return (List) this.doFind(FIND_BY_SESSION_ID, sessionId); + String LOAD_USERS_ORDERED_BY_NAME = "SELECT DISTINCT question_result.uid, user.last_name, user.first_name, question_result.mark" + + " FROM tl_laasse10_user user" + + " 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" + + " ON result.user_uid = user.uid" + + + " 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" + + " ON result.uid=question_result.result_uid" + + + " WHERE session.session_id = :sessionId " + + " AND (CONCAT(user.last_name, ' ', user.first_name) LIKE CONCAT('%', :searchString, '%')) " + + " ORDER BY " + + " CASE " + + " WHEN :sortBy='userName' THEN CONCAT(user.last_name, ' ', user.first_name) " + + " WHEN :sortBy='grade' THEN question_result.mark " + + " END " + sortOrder; + + SQLQuery query = getSession().createSQLQuery(LOAD_USERS_ORDERED_BY_NAME); + query.setLong("sessionId", sessionId); + query.setLong("questionUid", questionUid); + // support for custom search from a toolbar + searchString = searchString == null ? "" : searchString; + query.setString("searchString", searchString); + query.setString("sortBy", sortBy); + query.setFirstResult(page * size); + query.setMaxResults(size); + List list = query.list(); + + ArrayList userDtos = new ArrayList(); + if (list != null && list.size() > 0) { + for (Object[] element : list) { + + Long questionResultUid = ((Number) element[0]).longValue(); + String firstName = (String) element[1]; + String lastName = (String) element[2]; + float grade = ((Number) element[3]).floatValue(); + + AssessmentUserDTO userDto = new AssessmentUserDTO(); + userDto.setQuestionResultUid(questionResultUid);; + userDto.setFirstName(firstName); + userDto.setLastName(lastName); + userDto.setGrade(grade); + userDtos.add(userDto); + } + } + return userDtos; + } + } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/AssessmentUserDTO.java =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/AssessmentUserDTO.java (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/AssessmentUserDTO.java (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -0,0 +1,74 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.tool.assessment.dto; + +public class AssessmentUserDTO { + private Long userId; + private String firstName; + private String lastName; + private float grade; + + private Long questionResultUid; + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String userId) { + this.firstName = userId; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public float getGrade() { + return grade; + } + + public void setGrade(float grade) { + this.grade = grade; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getQuestionResultUid() { + return questionResultUid; + } + + public void setQuestionResultUid(Long questionResultUid) { + this.questionResultUid = questionResultUid; + } + +} Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/SessionDTO.java =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/SessionDTO.java (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/SessionDTO.java (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -0,0 +1,94 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.tool.assessment.dto; + +import java.util.List; + +import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult; + +/** + * + * + * @author Andrey Balan + */ +public class SessionDTO { + + private Long sessionId; + private String sessionName; + private int numberLearners; + + //used for export purposes only + private List assessmentResults; + + public SessionDTO() { + } + + /** + * Contruction method for monitoring summary function. + * + * Don't not set isInitGroup and viewNumber fields + * + * @param sessionName + * @param question + * @param isInitGroup + */ + public SessionDTO(Long sessionId, String sessionName) { + this.sessionId = sessionId; + this.sessionName = sessionName; + } + + public Long getSessionId() { + return sessionId; + } + + public void setSessionId(Long sessionId) { + this.sessionId = sessionId; + } + + public String getSessionName() { + return sessionName; + } + + public void setSessionName(String sessionName) { + this.sessionName = sessionName; + } + + public List getAssessmentResults() { + return assessmentResults; + } + + public void setAssessmentResults(List assessmentResults) { + this.assessmentResults = assessmentResults; + } + + public int getNumberLearners() { + return numberLearners; + } + + public void setNumberLearners(int numberLearners) { + this.numberLearners = numberLearners; + } + +} Fisheye: Tag 45466cdcb65a2b45fa8e24d23a40b986d902cede refers to a dead (removed) revision in file `lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/Summary.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java =================================================================== diff -u -r11d6b3d1391ab1d1aa42453aa0347a6b85fcfeaa -r45466cdcb65a2b45fa8e24d23a40b986d902cede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java (.../AssessmentQuestionResult.java) (revision 11d6b3d1391ab1d1aa42453aa0347a6b85fcfeaa) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java (.../AssessmentQuestionResult.java) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -30,7 +30,6 @@ import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; -import org.apache.commons.lang.builder.ToStringBuilder; /** * Assessment Question Result Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java =================================================================== diff -u -r39f26ae59d9865f852b62d5f1759b4c9fe6efb24 -r45466cdcb65a2b45fa8e24d23a40b986d902cede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java (.../AssessmentOutputFactory.java) (revision 39f26ae59d9865f852b62d5f1759b4c9fe6efb24) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java (.../AssessmentOutputFactory.java) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -34,8 +34,6 @@ import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.assessment.model.Assessment; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestion; -import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult; -import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult; import org.lamsfoundation.lams.tool.assessment.model.AssessmentSession; import org.lamsfoundation.lams.tool.assessment.model.QuestionReference; import org.lamsfoundation.lams.tool.assessment.util.SequencableComparator; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r0aae4208886026f429f05b458b79c14f8d7030d4 -r45466cdcb65a2b45fa8e24d23a40b986d902cede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 0aae4208886026f429f05b458b79c14f8d7030d4) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -77,9 +77,10 @@ import org.lamsfoundation.lams.tool.assessment.dao.AssessmentResultDAO; import org.lamsfoundation.lams.tool.assessment.dao.AssessmentSessionDAO; import org.lamsfoundation.lams.tool.assessment.dao.AssessmentUserDAO; +import org.lamsfoundation.lams.tool.assessment.dto.AssessmentUserDTO; import org.lamsfoundation.lams.tool.assessment.dto.QuestionSummary; import org.lamsfoundation.lams.tool.assessment.dto.ReflectDTO; -import org.lamsfoundation.lams.tool.assessment.dto.Summary; +import org.lamsfoundation.lams.tool.assessment.dto.SessionDTO; import org.lamsfoundation.lams.tool.assessment.dto.UserSummary; import org.lamsfoundation.lams.tool.assessment.dto.UserSummaryItem; import org.lamsfoundation.lams.tool.assessment.model.Assessment; @@ -92,6 +93,7 @@ import org.lamsfoundation.lams.tool.assessment.model.AssessmentUnit; import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; import org.lamsfoundation.lams.tool.assessment.model.QuestionReference; +import org.lamsfoundation.lams.tool.assessment.util.AssessmentEscapeUtils; import org.lamsfoundation.lams.tool.assessment.util.AssessmentQuestionResultComparator; import org.lamsfoundation.lams.tool.assessment.util.AssessmentSessionComparator; import org.lamsfoundation.lams.tool.assessment.util.AssessmentToolContentHandler; @@ -290,6 +292,24 @@ public List getUsersBySession(Long toolSessionID) { return assessmentUserDao.getBySessionID(toolSessionID); } + + @Override + public List getPagedUsersBySession(Long sessionId, int page, int size, String sortBy, String sortOrder, + String searchString) { + return assessmentUserDao.getPagedUsersBySession(sessionId, page, size, sortBy, sortOrder, searchString); + } + + @Override + public int getCountUsersBySession(Long sessionId, String searchString) { + return assessmentUserDao.getCountUsersBySession(sessionId, searchString); + } + + @Override + public List getPagedUsersBySessionAndQuestion(Long sessionId, Long questionUid, int page, + int size, String sortBy, String sortOrder, String searchString) { + return assessmentUserDao.getPagedUsersBySessionAndQuestion(sessionId, questionUid, page, size, sortBy, + sortOrder, searchString); + } @Override public Assessment getAssessmentByContentId(Long contentId) { @@ -743,6 +763,11 @@ public int getAssessmentResultCount(Long assessmentUid, Long userId) { return assessmentResultDao.getAssessmentResultCount(assessmentUid, userId); } + + @Override + public AssessmentQuestionResult getAssessmentQuestionResultByUid(Long questionResultUid) { + return assessmentQuestionResultDao.getAssessmentQuestionResultByUid(questionResultUid); + } @Override public List getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid) { @@ -824,17 +849,36 @@ public AssessmentQuestion getAssessmentQuestionByUid(Long questionUid) { return assessmentQuestionDao.getByUid(questionUid); } + + @Override + public List getSessionDtos(Long contentId) { + List sessionDtos = new ArrayList(); + List sessionList = assessmentSessionDao.getByContentId(contentId); + for (AssessmentSession session : sessionList) { + Long sessionId = session.getSessionId(); + SessionDTO sessionDto = new SessionDTO(sessionId, session.getSessionName()); + + //for statistics tab + int countUsers = assessmentUserDao.getCountUsersBySession(sessionId, ""); + sessionDto.setNumberLearners(countUsers); + + sessionDtos.add(sessionDto); + } + + return sessionDtos; + } + @Override - public List getSummaryList(Long contentId) { - List summaryList = new ArrayList(); + public List getSessionDataForExport(Long contentId) { + List sessionDtos = new ArrayList(); List sessionList = assessmentSessionDao.getByContentId(contentId); for (AssessmentSession session : sessionList) { Long sessionId = session.getSessionId(); Assessment assessment = session.getAssessment(); // one new summary for one session. - Summary summary = new Summary(sessionId, session.getSessionName()); + SessionDTO sessionDTO = new SessionDTO(sessionId, session.getSessionName()); List users = new LinkedList(); if (assessment.isUseSelectLeaderToolOuput()) { @@ -861,13 +905,13 @@ } assessmentResults.add(assessmentResult); } - summary.setAssessmentResults(assessmentResults); - summaryList.add(summary); + sessionDTO.setAssessmentResults(assessmentResults); + sessionDtos.add(sessionDTO); } - AssessmentServiceImpl.escapeQuotes(summaryList); + AssessmentEscapeUtils.escapeQuotes(sessionDtos); - return summaryList; + return sessionDtos; } @Override @@ -879,7 +923,7 @@ new AssessmentQuestionResultComparator()); questionResults.addAll(lastFinishedResult.getQuestionResults()); lastFinishedResult.setQuestionResults(questionResults); - AssessmentServiceImpl.escapeQuotes(lastFinishedResult); + AssessmentEscapeUtils.escapeQuotes(lastFinishedResult); } return lastFinishedResult; @@ -932,17 +976,26 @@ } userSummary.setUserSummaryItems(userSummaryItems); - AssessmentServiceImpl.escapeQuotes(userSummary); + AssessmentEscapeUtils.escapeQuotes(userSummary); return userSummary; } - + @Override public QuestionSummary getQuestionSummary(Long contentId, Long questionUid) { QuestionSummary questionSummary = new QuestionSummary(); AssessmentQuestion question = assessmentQuestionDao.getByUid(questionUid); questionSummary.setQuestion(question); + + return questionSummary; + } + @Override + public QuestionSummary getQuestionDataForExport(Long contentId, Long questionUid) { + QuestionSummary questionSummary = new QuestionSummary(); + AssessmentQuestion question = assessmentQuestionDao.getByUid(questionUid); + questionSummary.setQuestion(question); + List> questionResults = new ArrayList>(); SortedSet sessionList = new TreeSet(new AssessmentSessionComparator()); sessionList.addAll(assessmentSessionDao.getByContentId(contentId)); @@ -1002,7 +1055,7 @@ float averageMark = (count == 0) ? 0 : total / count; questionSummary.setAverageMark(averageMark); - AssessmentServiceImpl.escapeQuotes(questionSummary); + AssessmentEscapeUtils.escapeQuotes(questionSummary); return questionSummary; } @@ -1445,75 +1498,6 @@ // private methods // ***************************************************************************** - /** - * Escapes all characters that may brake JS code on assigning Java value to JS String variable (particularly escapes - * all quotes in the following way \"). - */ - private static void escapeQuotes(Object object) { - if (object instanceof UserSummary) { - UserSummary userSummary = (UserSummary) object; - for (UserSummaryItem userSummaryItem : userSummary.getUserSummaryItems()) { - for (AssessmentQuestionResult questionResult : userSummaryItem.getQuestionResults()) { - AssessmentServiceImpl.escapeQuotesInQuestionResult(questionResult); - } - } - } else if (object instanceof QuestionSummary) { - QuestionSummary questionSummary = (QuestionSummary) object; - - for (List sessionQuestionResults : questionSummary - .getQuestionResultsPerSession()) { - for (AssessmentQuestionResult questionResult : sessionQuestionResults) { - AssessmentServiceImpl.escapeQuotesInQuestionResult(questionResult); - } - } - } else if (object instanceof List) { - List summaryList = (List) object; - - for (Summary summary : summaryList) { - for (AssessmentResult result : summary.getAssessmentResults()) { - for (AssessmentQuestionResult questionResult : result.getQuestionResults()) { - AssessmentServiceImpl.escapeQuotesInQuestionResult(questionResult); - } - } - } - } else if (object instanceof AssessmentResult) { - AssessmentResult assessmentResult = (AssessmentResult) object; - - for (AssessmentQuestionResult questionResult : assessmentResult.getQuestionResults()) { - AssessmentServiceImpl.escapeQuotesInQuestionResult(questionResult); - } - } - } - - private static void escapeQuotesInQuestionResult(AssessmentQuestionResult questionResult) { - String answerString = questionResult.getAnswerString(); - if (answerString != null) { - String answerStringEscaped = StringEscapeUtils.escapeJavaScript(answerString); - questionResult.setAnswerStringEscaped(answerStringEscaped); - } - - AssessmentQuestion question = questionResult.getAssessmentQuestion(); - String title = question.getTitle(); - if (title != null) { - String titleEscaped = StringEscapeUtils.escapeJavaScript(title); - question.setTitleEscaped(titleEscaped); - } - - for (AssessmentQuestionOption option : question.getOptions()) { - String questionStr = option.getQuestion(); - if (questionStr != null) { - String questionEscaped = StringEscapeUtils.escapeJavaScript(questionStr); - option.setQuestionEscaped(questionEscaped); - } - - String optionStr = option.getOptionString(); - if (optionStr != null) { - String optionEscaped = StringEscapeUtils.escapeJavaScript(optionStr); - option.setOptionStringEscaped(optionEscaped); - } - } - } - private Assessment getDefaultAssessment() throws AssessmentApplicationException { Long defaultAssessmentId = getToolDefaultContentIdBySignature(AssessmentConstants.TOOL_SIGNATURE); Assessment defaultAssessment = getAssessmentByContentId(defaultAssessmentId); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -rdacc22919fbce0447cf7850bdfb602d446354050 -r45466cdcb65a2b45fa8e24d23a40b986d902cede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision dacc22919fbce0447cf7850bdfb602d446354050) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -27,22 +27,21 @@ import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; -import java.util.Map; import java.util.Set; -import org.lamsfoundation.lams.events.IEventNotificationService; import org.lamsfoundation.lams.notebook.model.NotebookEntry; +import org.lamsfoundation.lams.tool.assessment.dto.AssessmentUserDTO; import org.lamsfoundation.lams.tool.assessment.dto.QuestionSummary; import org.lamsfoundation.lams.tool.assessment.dto.ReflectDTO; -import org.lamsfoundation.lams.tool.assessment.dto.Summary; +import org.lamsfoundation.lams.tool.assessment.dto.SessionDTO; import org.lamsfoundation.lams.tool.assessment.dto.UserSummary; import org.lamsfoundation.lams.tool.assessment.model.Assessment; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestion; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult; import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult; import org.lamsfoundation.lams.tool.assessment.model.AssessmentSession; import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; import org.lamsfoundation.lams.tool.assessment.model.QuestionReference; -import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; /** @@ -87,6 +86,14 @@ */ List getUsersBySession(Long toolSessionID); + List getPagedUsersBySession(Long sessionId, int page, int size, String sortBy, String sortOrder, + String searchString); + + int getCountUsersBySession(Long sessionId, String searchString); + + List getPagedUsersBySessionAndQuestion(Long sessionId, Long questionUid, int page, int size, + String sortBy, String sortOrder, String searchString); + /** * Get Assessment by toolContentID. * @@ -260,6 +267,8 @@ */ int getAssessmentResultCount(Long assessmentUid, Long userId); + AssessmentQuestionResult getAssessmentQuestionResultByUid(Long questionResultUid); + List getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid); /** @@ -290,14 +299,22 @@ String finishToolSession(Long toolSessionId, Long userId) throws AssessmentApplicationException; AssessmentQuestion getAssessmentQuestionByUid(Long questionUid); + + /** + * Returns sessionDtos containing only session ids and session names. + * + * @param contentId + * @return + */ + List getSessionDtos(Long contentId); /** * Return monitoring summary list. The return value is list of assessment summaries for each groups. * * @param contentId * @return */ - List getSummaryList(Long contentId); + List getSessionDataForExport(Long contentId); AssessmentResult getUserMasterDetail(Long sessionId, Long userId); @@ -310,8 +327,24 @@ */ UserSummary getUserSummary(Long contentId, Long userId, Long sessionId); + /** + * For summary tab + * + * @param contentId + * @param questionUid + * @return + */ QuestionSummary getQuestionSummary(Long contentId, Long questionUid); + /** + * For export purposes + * + * @param contentId + * @param questionUid + * @return + */ + QuestionSummary getQuestionDataForExport(Long contentId, Long questionUid); + void changeQuestionResultMark(Long questionResultUid, float newMark); /** Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/util/AssessmentEscapeUtils.java =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/util/AssessmentEscapeUtils.java (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/util/AssessmentEscapeUtils.java (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -0,0 +1,343 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.tool.assessment.util; + +import java.util.List; +import java.util.Set; + +import org.apache.commons.lang.StringEscapeUtils; +import org.lamsfoundation.lams.tool.assessment.AssessmentConstants; +import org.lamsfoundation.lams.tool.assessment.dto.QuestionSummary; +import org.lamsfoundation.lams.tool.assessment.dto.SessionDTO; +import org.lamsfoundation.lams.tool.assessment.dto.UserSummary; +import org.lamsfoundation.lams.tool.assessment.dto.UserSummaryItem; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentOptionAnswer; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestion; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionOption; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult; + +public class AssessmentEscapeUtils { + + /** + * Escapes all characters that may brake JS code on assigning Java value to JS String variable (particularly escapes + * all quotes in the following way \"). + */ + public static void escapeQuotes(Object object) { + if (object instanceof UserSummary) { + UserSummary userSummary = (UserSummary) object; + for (UserSummaryItem userSummaryItem : userSummary.getUserSummaryItems()) { + for (AssessmentQuestionResult questionResult : userSummaryItem.getQuestionResults()) { + AssessmentEscapeUtils.escapeQuotesInQuestionResult(questionResult); + } + } + } else if (object instanceof QuestionSummary) { + QuestionSummary questionSummary = (QuestionSummary) object; + + for (List sessionQuestionResults : questionSummary + .getQuestionResultsPerSession()) { + for (AssessmentQuestionResult questionResult : sessionQuestionResults) { + AssessmentEscapeUtils.escapeQuotesInQuestionResult(questionResult); + } + } + } else if (object instanceof List) { + List sessionDtos = (List) object; + + for (SessionDTO sessionDTO : sessionDtos) { + for (AssessmentResult result : sessionDTO.getAssessmentResults()) { + for (AssessmentQuestionResult questionResult : result.getQuestionResults()) { + AssessmentEscapeUtils.escapeQuotesInQuestionResult(questionResult); + } + } + } + } else if (object instanceof AssessmentResult) { + AssessmentResult assessmentResult = (AssessmentResult) object; + + for (AssessmentQuestionResult questionResult : assessmentResult.getQuestionResults()) { + AssessmentEscapeUtils.escapeQuotesInQuestionResult(questionResult); + } + } + } + + public static void escapeQuotesInQuestionResult(AssessmentQuestionResult questionResult) { + String answerString = questionResult.getAnswerString(); + if (answerString != null) { + String answerStringEscaped = StringEscapeUtils.escapeJavaScript(answerString); + questionResult.setAnswerStringEscaped(answerStringEscaped); + } + + AssessmentQuestion question = questionResult.getAssessmentQuestion(); + String title = question.getTitle(); + if (title != null) { + String titleEscaped = StringEscapeUtils.escapeJavaScript(title); + question.setTitleEscaped(titleEscaped); + } + + for (AssessmentQuestionOption option : question.getOptions()) { + String questionStr = option.getQuestion(); + if (questionStr != null) { + String questionEscaped = StringEscapeUtils.escapeJavaScript(questionStr); + option.setQuestionEscaped(questionEscaped); + } + + String optionStr = option.getOptionString(); + if (optionStr != null) { + String optionEscaped = StringEscapeUtils.escapeJavaScript(optionStr); + option.setOptionStringEscaped(optionEscaped); + } + } + } + + public static String printResponsesForJqgrid(AssessmentQuestionResult questionResult) { + StringBuilder responseStr = new StringBuilder(); + final String DELIMITER = "
"; + + if (questionResult != null) { + + Set options = questionResult.getAssessmentQuestion().getOptions(); + Set optionAnswers = questionResult.getOptionAnswers(); + + switch (questionResult.getAssessmentQuestion().getType()) { + case AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS: + String str = ""; + if (optionAnswers != null) { + for (AssessmentQuestionOption option : options) { + str += "
"; + str += "
"; + str += option.getQuestion(); + str += "
"; + str += "
"; + str += " - "; + + for (AssessmentOptionAnswer optionAnswer : optionAnswers) { + if (option.getUid().equals(optionAnswer.getOptionUid())) { + for (AssessmentQuestionOption option2 : options) { + if (option2.getUid() == optionAnswer.getAnswerInt()) { + str += option2.getOptionString(); + } + } + } + } + + str += "
"; + str += "
"; + str += DELIMITER; + + } + } + return str; + + case AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE: + + if (optionAnswers != null) { + for (AssessmentOptionAnswer optionAnswer : optionAnswers) { + if (optionAnswer.getAnswerBoolean()) { + for (AssessmentQuestionOption option : options) { + if (option.getUid().equals(optionAnswer.getOptionUid())) { + responseStr.append(option.getOptionString() + DELIMITER); + } + } + } + } + } + break; + + case AssessmentConstants.QUESTION_TYPE_NUMERICAL: + case AssessmentConstants.QUESTION_TYPE_SHORT_ANSWER: + case AssessmentConstants.QUESTION_TYPE_ESSAY: + responseStr.append(questionResult.getAnswerString()); + break; + + case AssessmentConstants.QUESTION_TYPE_ORDERING: + if (optionAnswers != null) { + for (int i = 0; i < optionAnswers.size(); i++) { + for (AssessmentOptionAnswer optionAnswer : optionAnswers) { + if (optionAnswer.getAnswerInt() == i) { + for (AssessmentQuestionOption option : options) { + if (option.getUid().equals(optionAnswer.getOptionUid())) { + responseStr.append(option.getOptionString()); + } + } + } + } + } + } + break; + + case AssessmentConstants.QUESTION_TYPE_TRUE_FALSE: + if (questionResult.getAnswerString() != null) { + responseStr.append(questionResult.getAnswerBoolean()); + } + break; + + case AssessmentConstants.QUESTION_TYPE_MARK_HEDGING: + + if (optionAnswers != null) { + for (AssessmentQuestionOption option : options) { + responseStr.append("
"); + responseStr.append("
"); + responseStr.append( option.getOptionString()); + responseStr.append("
"); + + responseStr.append("
"); + responseStr.append(" - "); + for (AssessmentOptionAnswer optionAnswer : optionAnswers) { + if (option.getUid().equals(optionAnswer.getOptionUid())) { + responseStr.append(optionAnswer.getAnswerInt()); + } + } + responseStr.append("
"); + + responseStr.append("
"); + responseStr.append(DELIMITER); + + } + + if (questionResult.getAssessmentQuestion().isHedgingJustificationEnabled()) { + responseStr.append(questionResult.getAnswerString()); + responseStr.append(DELIMITER); + } + } + break; + + default: + return null; + } + } + return responseStr.toString(); + } + + /** + * Used only for excell export (for getUserSummaryData() method). + */ + public static Object printResponsesForExcelExport(AssessmentQuestionResult questionResult) { + Object ret = null; + + if (questionResult != null) { + switch (questionResult.getAssessmentQuestion().getType()) { + case AssessmentConstants.QUESTION_TYPE_ESSAY: + String answerString = questionResult.getAnswerString(); + return (answerString == null) ? "" : answerString.replaceAll("\\<.*?>", "").replaceAll(" ", " "); + case AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS: + return getOptionResponse(questionResult, AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS); + case AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE: + return getOptionResponse(questionResult, AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE); + case AssessmentConstants.QUESTION_TYPE_NUMERICAL: + return questionResult.getAnswerString(); + case AssessmentConstants.QUESTION_TYPE_ORDERING: + return getOptionResponse(questionResult, AssessmentConstants.QUESTION_TYPE_ORDERING); + case AssessmentConstants.QUESTION_TYPE_SHORT_ANSWER: + return questionResult.getAnswerString(); + case AssessmentConstants.QUESTION_TYPE_TRUE_FALSE: + return questionResult.getAnswerBoolean(); + case AssessmentConstants.QUESTION_TYPE_MARK_HEDGING: + return getOptionResponse(questionResult, AssessmentConstants.QUESTION_TYPE_MARK_HEDGING); + default: + return null; + } + } + return ret; + } + + /** + * Used only for excell export (for getUserSummaryData() method). + */ + private static String getOptionResponse(AssessmentQuestionResult questionResult, short type) { + + StringBuilder sb = new StringBuilder(); + //whether there is a need to remove last comma + boolean trimLastComma = false; + + Set options = questionResult.getAssessmentQuestion().getOptions(); + Set optionAnswers = questionResult.getOptionAnswers(); + if (optionAnswers != null) { + + if (type == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE) { + for (AssessmentOptionAnswer optionAnswer : optionAnswers) { + if (optionAnswer.getAnswerBoolean()) { + for (AssessmentQuestionOption option : options) { + if (option.getUid().equals(optionAnswer.getOptionUid())) { + sb.append(option.getOptionString() + ", "); + trimLastComma = true; + } + } + } + } + + } else if (type == AssessmentConstants.QUESTION_TYPE_ORDERING) { + for (int i = 0; i < optionAnswers.size(); i++) { + for (AssessmentOptionAnswer optionAnswer : optionAnswers) { + if (optionAnswer.getAnswerInt() == i) { + for (AssessmentQuestionOption option : options) { + if (option.getUid().equals(optionAnswer.getOptionUid())) { + sb.append(option.getOptionString() + ", "); + trimLastComma = true; + } + } + } + } + } + + } else if (type == AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS) { + + for (AssessmentQuestionOption option : options) { + sb.append("[" + option.getOptionString() + ", "); + + for (AssessmentOptionAnswer optionAnswer : optionAnswers) { + if (option.getUid().equals(optionAnswer.getOptionUid())) { + for (AssessmentQuestionOption option2 : options) { + if (option2.getUid() == optionAnswer.getAnswerInt()) { + sb.append(option2.getOptionString() + "] "); + } + } + } + } + + } + + } else if (type == AssessmentConstants.QUESTION_TYPE_MARK_HEDGING) { + + for (AssessmentQuestionOption option : options) { + sb.append("[" + option.getOptionString() + ", "); + + for (AssessmentOptionAnswer optionAnswer : optionAnswers) { + if (option.getUid().equals(optionAnswer.getOptionUid())) { + sb.append(optionAnswer.getAnswerInt() + "] "); + } + } + + } + } + + } + String ret = sb.toString().replaceAll("\\<.*?\\>", ""); + + if (trimLastComma) { + ret = ret.substring(0, ret.lastIndexOf(",")); + } + + return ret; + } + +} Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java =================================================================== diff -u -r11d6b3d1391ab1d1aa42453aa0347a6b85fcfeaa -r45466cdcb65a2b45fa8e24d23a40b986d902cede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 11d6b3d1391ab1d1aa42453aa0347a6b85fcfeaa) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -39,16 +39,22 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import org.apache.tomcat.util.json.JSONArray; +import org.apache.tomcat.util.json.JSONException; +import org.apache.tomcat.util.json.JSONObject; +import org.lamsfoundation.lams.gradebook.util.GradebookConstants; import org.lamsfoundation.lams.tool.assessment.AssessmentConstants; +import org.lamsfoundation.lams.tool.assessment.dto.AssessmentUserDTO; import org.lamsfoundation.lams.tool.assessment.dto.QuestionSummary; import org.lamsfoundation.lams.tool.assessment.dto.ReflectDTO; -import org.lamsfoundation.lams.tool.assessment.dto.Summary; +import org.lamsfoundation.lams.tool.assessment.dto.SessionDTO; import org.lamsfoundation.lams.tool.assessment.dto.UserSummary; import org.lamsfoundation.lams.tool.assessment.model.Assessment; import org.lamsfoundation.lams.tool.assessment.model.AssessmentOptionAnswer; @@ -59,7 +65,9 @@ import org.lamsfoundation.lams.tool.assessment.model.AssessmentSession; import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; import org.lamsfoundation.lams.tool.assessment.model.QuestionReference; +import org.lamsfoundation.lams.tool.assessment.service.AssessmentServiceImpl; import org.lamsfoundation.lams.tool.assessment.service.IAssessmentService; +import org.lamsfoundation.lams.tool.assessment.util.AssessmentEscapeUtils; import org.lamsfoundation.lams.tool.assessment.util.SequencableComparator; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.DateUtil; @@ -81,7 +89,7 @@ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, - HttpServletResponse response) throws IOException, ServletException { + HttpServletResponse response) throws IOException, ServletException, JSONException { request.setAttribute("initialTabId", WebUtil.readLongParam(request, AttributeNames.PARAM_CURRENT_TAB, true)); String param = mapping.getParameter(); @@ -102,7 +110,13 @@ } if (param.equals("setSubmissionDeadline")) { return setSubmissionDeadline(mapping, form, request, response); - } + } + if (param.equals("getUsers")) { + return getUsers(mapping, form, request, response); + } + if (param.equals("getUsersByQuestion")) { + return getUsersByQuestion(mapping, form, request, response); + } if (param.equals("exportSummary")) { return exportSummary(mapping, form, request, response); } @@ -112,14 +126,15 @@ private ActionForward summary(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + initAssessmentService(); + // initialize Session Map SessionMap sessionMap = new SessionMap(); request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); Long contentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); - service = getAssessmentService(); - List summaryList = service.getSummaryList(contentId); + List sessionDtos = service.getSessionDtos(contentId); Assessment assessment = service.getAssessmentByContentId(contentId); @@ -160,7 +175,7 @@ // cache into sessionMap boolean isGroupedActivity = service.isGroupedActivity(contentId); sessionMap.put(AssessmentConstants.ATTR_IS_GROUPED_ACTIVITY, isGroupedActivity); - sessionMap.put(AssessmentConstants.ATTR_SUMMARY_LIST, summaryList); + sessionMap.put("sessionDtos", sessionDtos); sessionMap.put(AssessmentConstants.ATTR_ASSESSMENT, assessment); sessionMap.put(AssessmentConstants.ATTR_QUESTION_LIST, questionList); sessionMap.put(AssessmentConstants.ATTR_TOOL_CONTENT_ID, contentId); @@ -171,9 +186,9 @@ private ActionForward userMasterDetail(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + initAssessmentService(); Long userId = WebUtil.readLongParam(request, AttributeNames.PARAM_USER_ID); Long sessionId = WebUtil.readLongParam(request, AssessmentConstants.PARAM_SESSION_ID); - service = getAssessmentService(); AssessmentResult result = service.getUserMasterDetail(sessionId, userId); request.setAttribute(AssessmentConstants.ATTR_ASSESSMENT_RESULT, result); @@ -182,6 +197,7 @@ private ActionForward questionSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + initAssessmentService(); String sessionMapID = request.getParameter(AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); @@ -191,7 +207,6 @@ return null; } Long contentId = (Long) sessionMap.get(AssessmentConstants.ATTR_TOOL_CONTENT_ID); - service = getAssessmentService(); QuestionSummary questionSummary = service.getQuestionSummary(contentId, questionUid); request.setAttribute(AssessmentConstants.ATTR_QUESTION_SUMMARY, questionSummary); @@ -200,14 +215,14 @@ private ActionForward userSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { + initAssessmentService(); String sessionMapID = request.getParameter(AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); Long userId = WebUtil.readLongParam(request, AttributeNames.PARAM_USER_ID); Long sessionId = WebUtil.readLongParam(request, AssessmentConstants.PARAM_SESSION_ID); Long contentId = (Long) sessionMap.get(AssessmentConstants.ATTR_TOOL_CONTENT_ID); - service = getAssessmentService(); UserSummary userSummary = service.getUserSummary(contentId, userId, sessionId); request.setAttribute(AssessmentConstants.ATTR_USER_SUMMARY, userSummary); @@ -219,9 +234,9 @@ if ((request.getParameter(AssessmentConstants.PARAM_NOT_A_NUMBER) == null) && !StringUtils.isEmpty(request.getParameter(AssessmentConstants.PARAM_QUESTION_RESULT_UID))) { + initAssessmentService(); Long questionResultUid = WebUtil.readLongParam(request, AssessmentConstants.PARAM_QUESTION_RESULT_UID); float newGrade = Float.valueOf(request.getParameter(AssessmentConstants.PARAM_GRADE)); - service = getAssessmentService(); service.changeQuestionResultMark(questionResultUid, newGrade); } @@ -239,7 +254,7 @@ */ private ActionForward setSubmissionDeadline(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { - service = getAssessmentService(); + initAssessmentService(); Long contentID = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); Assessment assessment = service.getAssessmentByContentId(contentID); @@ -258,8 +273,198 @@ return null; } + + /** + * Refreshes user list. + */ + public ActionForward getUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse res) throws IOException, ServletException, JSONException { + initAssessmentService(); + String sessionMapID = request.getParameter(AssessmentConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + Assessment assessment = (Assessment) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT); + + Long sessionId = WebUtil.readLongParam(request, "sessionId"); + + // Getting the params passed in from the jqGrid + int page = WebUtil.readIntParam(request, GradebookConstants.PARAM_PAGE); + int rowLimit = WebUtil.readIntParam(request, GradebookConstants.PARAM_ROWS); + String sortOrder = WebUtil.readStrParam(request, GradebookConstants.PARAM_SORD); + String sortBy = WebUtil.readStrParam(request, GradebookConstants.PARAM_SIDX, true); + if (sortBy == "") { + sortBy = "userName"; + } + String searchString = WebUtil.readStrParam(request, "userName", true); + + List userDtos = new ArrayList(); + int countSessionUsers = 0; + //in case of UseSelectLeaderToolOuput - display only one user + if (assessment.isUseSelectLeaderToolOuput()) { + + AssessmentSession session = service.getAssessmentSessionBySessionId(sessionId); + AssessmentUser groupLeader = session.getGroupLeader(); + + if (groupLeader != null) { + float assessmentResult = service.getLastFinishedAssessmentResultGrade(assessment.getUid(), + groupLeader.getUserId()); + + AssessmentUserDTO userDto = new AssessmentUserDTO(); + userDto.setUserId(groupLeader.getUserId()); + userDto.setFirstName(groupLeader.getFirstName()); + userDto.setLastName(groupLeader.getLastName()); + userDto.setGrade(assessmentResult); + userDtos.add(userDto); + countSessionUsers = 1; + } + + } else { + // Get the user list from the db + userDtos = service.getPagedUsersBySession(sessionId, page - 1, rowLimit, sortBy, sortOrder, searchString); + countSessionUsers = service.getCountUsersBySession(sessionId, searchString); + } + + int totalPages = new Double(Math.ceil(new Integer(countSessionUsers).doubleValue() + / new Integer(rowLimit).doubleValue())).intValue(); + + JSONArray rows = new JSONArray(); + int i = 1; + for (AssessmentUserDTO userDto : userDtos) { + + JSONArray userData = new JSONArray(); + userData.put(i); + userData.put(userDto.getUserId()); + userData.put(sessionId); + String fullName = StringEscapeUtils.escapeHtml(userDto.getFirstName() + " " + + userDto.getLastName()); + userData.put(fullName); + userData.put(userDto.getGrade()); + + JSONObject userRow = new JSONObject(); + userRow.put("id", i++); + userRow.put("cell", userData); + + rows.put(userRow); + } + + JSONObject responseJSON = new JSONObject(); + responseJSON.put("total", totalPages); + responseJSON.put("page", page); + responseJSON.put("records", countSessionUsers); + responseJSON.put("rows", rows); + + res.setContentType("application/json;charset=utf-8"); + res.getWriter().print(new String(responseJSON.toString())); + return null; + } + /** + * Refreshes user list. + */ + public ActionForward getUsersByQuestion(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse res) throws IOException, ServletException, JSONException { + initAssessmentService(); + String sessionMapID = request.getParameter(AssessmentConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + Assessment assessment = (Assessment) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT); + + Long sessionId = WebUtil.readLongParam(request, "sessionId"); + Long questionUid = WebUtil.readLongParam(request, "questionUid"); + + // Getting the params passed in from the jqGrid + int page = WebUtil.readIntParam(request, GradebookConstants.PARAM_PAGE); + int rowLimit = WebUtil.readIntParam(request, GradebookConstants.PARAM_ROWS); + String sortOrder = WebUtil.readStrParam(request, GradebookConstants.PARAM_SORD); + String sortBy = WebUtil.readStrParam(request, GradebookConstants.PARAM_SIDX, true); + if (sortBy == "") { + sortBy = "userName"; + } + String searchString = WebUtil.readStrParam(request, "userName", true); + + List userDtos = new ArrayList(); + int countSessionUsers = 0; + //in case of UseSelectLeaderToolOuput - display only one user + if (assessment.isUseSelectLeaderToolOuput()) { + + AssessmentSession session = service.getAssessmentSessionBySessionId(sessionId); + AssessmentUser groupLeader = session.getGroupLeader(); + + if (groupLeader != null) { + + AssessmentResult assessmentResult = service.getLastFinishedAssessmentResult(assessment.getUid(), + groupLeader.getUserId()); + Long questionResultUid = null; + if (assessmentResult != null) { + for (AssessmentQuestionResult dbQuestionResult : assessmentResult.getQuestionResults()) { + if (dbQuestionResult.getAssessmentQuestion().getUid().equals(questionUid)) { + questionResultUid = dbQuestionResult.getUid(); + break; + } + } + } + + AssessmentUserDTO userDto = new AssessmentUserDTO(); + userDto.setQuestionResultUid(questionResultUid); + userDto.setFirstName(groupLeader.getFirstName()); + userDto.setLastName(groupLeader.getLastName()); + userDtos.add(userDto); + countSessionUsers = 1; + } + + } else { + // Get the user list from the db + userDtos = service.getPagedUsersBySessionAndQuestion(sessionId, questionUid, page - 1, rowLimit, sortBy, sortOrder, searchString); + countSessionUsers = service.getCountUsersBySession(sessionId, searchString); + } + + int totalPages = new Double(Math.ceil(new Integer(countSessionUsers).doubleValue() + / new Integer(rowLimit).doubleValue())).intValue(); + + JSONArray rows = new JSONArray(); + int i = 1; + for (AssessmentUserDTO userDto : userDtos) { + + Long questionResultUid = userDto.getQuestionResultUid(); + String fullName = StringEscapeUtils.escapeHtml(userDto.getFirstName() + " " + + userDto.getLastName()); + + JSONArray userData = new JSONArray(); + if (questionResultUid != null) { + AssessmentQuestionResult questionResult = service.getAssessmentQuestionResultByUid(questionResultUid); + + userData.put(questionResultUid); + userData.put(questionResult.getMaxMark()); + userData.put(fullName); + userData.put(AssessmentEscapeUtils.printResponsesForJqgrid(questionResult)); + userData.put(questionResult.getMark()); + + } else { + userData.put(""); + userData.put(""); + userData.put(fullName); + userData.put("-"); + userData.put("-"); + } + + JSONObject userRow = new JSONObject(); + userRow.put("id", i++); + userRow.put("cell", userData); + + rows.put(userRow); + } + + JSONObject responseJSON = new JSONObject(); + responseJSON.put("total", totalPages); + responseJSON.put("page", page); + responseJSON.put("records", countSessionUsers); + responseJSON.put("rows", rows); + + res.setContentType("application/json;charset=utf-8"); + res.getWriter().print(new String(responseJSON.toString())); + return null; + } + + /** * Export Excel format survey data. * * @param mapping @@ -271,6 +476,7 @@ */ private ActionForward exportSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException { + initAssessmentService(); String sessionMapID = request.getParameter(AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); String fileName = null; @@ -287,7 +493,6 @@ showUserNames = false; } - service = getAssessmentService(); Assessment assessment = service.getAssessmentByContentId(contentId); if (assessment != null) { @@ -317,8 +522,8 @@ @SuppressWarnings("unchecked") private ExcelCell[][] getUserSummaryData(Assessment assessment, boolean showUserNames) { + initAssessmentService(); ArrayList data = new ArrayList(); - service = getAssessmentService(); if (assessment != null) { // Create the question summary @@ -363,7 +568,7 @@ questionType = getQuestionTypeLanguageLabel(question.getType()); penaltyFactor = question.getPenaltyFactor(); - QuestionSummary questionSummary = service.getQuestionSummary(assessment.getContentId(), + QuestionSummary questionSummary = service.getQuestionDataForExport(assessment.getContentId(), question.getUid()); if (questionSummary != null) { averageMark = questionSummary.getAverageMark(); @@ -398,19 +603,19 @@ // Adding the user results/marks summary --------------------------- - List summaryList = service.getSummaryList(assessment.getContentId()); + List summaryList = service.getSessionDataForExport(assessment.getContentId()); if (summaryList != null) { - for (Summary summary : summaryList) { + for (SessionDTO sessionDTO : summaryList) { data.add(EMPTY_ROW); ExcelCell[] sessionTitle = new ExcelCell[1]; - sessionTitle[0] = new ExcelCell(summary.getSessionName(), true); + sessionTitle[0] = new ExcelCell(sessionDTO.getSessionName(), true); data.add(sessionTitle); //List assessmentResults = summary.getAssessmentResults(); - AssessmentSession assessmentSession = service.getAssessmentSessionBySessionId(summary + AssessmentSession assessmentSession = service.getAssessmentSessionBySessionId(sessionDTO .getSessionId()); Set assessmentUsers = assessmentSession.getAssessmentUsers(); @@ -461,7 +666,7 @@ userResultRow[2] = new ExcelCell(assessmentResult.getStartDate(), false); userResultRow[3] = new ExcelCell(questionResult .getAssessmentQuestion().getTitle(), false); - userResultRow[4] = new ExcelCell(getAnswerObject(questionResult), + userResultRow[4] = new ExcelCell(AssessmentEscapeUtils.printResponsesForExcelExport(questionResult), false); userResultRow[5] = new ExcelCell(questionResult.getMark(), false); data.add(userResultRow); @@ -471,7 +676,7 @@ userResultRow[1] = new ExcelCell(assessmentResult.getStartDate(), false); userResultRow[2] = new ExcelCell(questionResult .getAssessmentQuestion().getTitle(), false); - userResultRow[3] = new ExcelCell(getAnswerObject(questionResult), + userResultRow[3] = new ExcelCell(AssessmentEscapeUtils.printResponsesForExcelExport(questionResult), false); userResultRow[4] = new ExcelCell(questionResult.getMark(), false); data.add(userResultRow); @@ -509,8 +714,8 @@ @SuppressWarnings("unchecked") private ExcelCell[][] getQuestionSummaryData(Assessment assessment, boolean showUserNames) { + initAssessmentService(); ArrayList data = new ArrayList(); - service = getAssessmentService(); if (assessment != null) { // Create the question summary @@ -562,7 +767,7 @@ data.add(summaryRowTitle); } - QuestionSummary questionSummary = service.getQuestionSummary(assessment.getContentId(), question + QuestionSummary questionSummary = service.getQuestionDataForExport(assessment.getContentId(), question .getUid()); List> allResultsForQuestion = questionSummary @@ -589,7 +794,7 @@ userResultRow[4] = new ExcelCell(questionResult.getUser().getUserId(), false); userResultRow[5] = new ExcelCell(questionResult.getUser().getFullName(), false); userResultRow[6] = new ExcelCell(questionResult.getFinishDate(), false); - userResultRow[7] = new ExcelCell(getAnswerObject(questionResult), false); + userResultRow[7] = new ExcelCell(AssessmentEscapeUtils.printResponsesForExcelExport(questionResult), false); AssessmentResult assessmentResult = questionResult.getAssessmentResult(); Date finishDate = questionResult.getFinishDate(); @@ -624,7 +829,7 @@ userResultRow[3] = new ExcelCell(maxMark, false); userResultRow[4] = new ExcelCell(questionResult.getUser().getUserId(), false); userResultRow[5] = new ExcelCell(questionResult.getFinishDate(), false); - userResultRow[6] = new ExcelCell(getAnswerObject(questionResult), false); + userResultRow[6] = new ExcelCell(AssessmentEscapeUtils.printResponsesForExcelExport(questionResult), false); if (questionResult.getAssessmentResult() != null) { Date startDate = questionResult.getAssessmentResult().getStartDate(); @@ -718,121 +923,10 @@ } } - /** - * Used only for excell export (for getUserSummaryData() method). - */ - private Object getAnswerObject(AssessmentQuestionResult questionResult) { - Object ret = null; - - if (questionResult != null) { - switch (questionResult.getAssessmentQuestion().getType()) { - case AssessmentConstants.QUESTION_TYPE_ESSAY: - return removeHTMLTags(questionResult.getAnswerString()); - case AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS: - return getOptionResponse(questionResult, AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS); - case AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE: - return getOptionResponse(questionResult, AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE); - case AssessmentConstants.QUESTION_TYPE_NUMERICAL: - return questionResult.getAnswerString(); - case AssessmentConstants.QUESTION_TYPE_ORDERING: - return getOptionResponse(questionResult, AssessmentConstants.QUESTION_TYPE_ORDERING); - case AssessmentConstants.QUESTION_TYPE_SHORT_ANSWER: - return questionResult.getAnswerString(); - case AssessmentConstants.QUESTION_TYPE_TRUE_FALSE: - return questionResult.getAnswerBoolean(); - case AssessmentConstants.QUESTION_TYPE_MARK_HEDGING: - return getOptionResponse(questionResult, AssessmentConstants.QUESTION_TYPE_MARK_HEDGING); - default: - return null; - } - } - return ret; - } - - /** - * Used only for excell export (for getUserSummaryData() method). - */ - private String getOptionResponse(AssessmentQuestionResult questionResult, short type) { - - StringBuilder sb = new StringBuilder(); - //whether there is a need to remove last comma - boolean trimLastComma = false; - - Set options = questionResult.getAssessmentQuestion().getOptions(); - Set optionAnswers = questionResult.getOptionAnswers(); - if (optionAnswers != null) { - - if (type == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE) { - for (AssessmentOptionAnswer optionAnswer : optionAnswers) { - if (optionAnswer.getAnswerBoolean()) { - for (AssessmentQuestionOption option : options) { - if (option.getUid().equals(optionAnswer.getOptionUid())) { - sb.append(option.getOptionString() + ", "); - trimLastComma = true; - } - } - } - } - - } else if (type == AssessmentConstants.QUESTION_TYPE_ORDERING) { - for (int i = 0; i < optionAnswers.size(); i++) { - for (AssessmentOptionAnswer optionAnswer : optionAnswers) { - if (optionAnswer.getAnswerInt() == i) { - for (AssessmentQuestionOption option : options) { - if (option.getUid().equals(optionAnswer.getOptionUid())) { - sb.append(option.getOptionString() + ", "); - trimLastComma = true; - } - } - } - } - } - - } else if (type == AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS) { - - for (AssessmentQuestionOption option : options) { - sb.append("[" + option.getOptionString() + ", "); - - for (AssessmentOptionAnswer optionAnswer : optionAnswers) { - if (option.getUid().equals(optionAnswer.getOptionUid())) { - for (AssessmentQuestionOption option2 : options) { - if (option2.getUid() == optionAnswer.getAnswerInt()) { - sb.append(option2.getOptionString() + "] "); - } - } - } - } - - } - - } else if (type == AssessmentConstants.QUESTION_TYPE_MARK_HEDGING) { - - for (AssessmentQuestionOption option : options) { - sb.append("[" + option.getOptionString() + ", "); - - for (AssessmentOptionAnswer optionAnswer : optionAnswers) { - if (option.getUid().equals(optionAnswer.getOptionUid())) { - sb.append(optionAnswer.getAnswerInt() + "] "); - } - } - - } - } - - } - String ret = sb.toString().replaceAll("\\<.*?\\>", ""); - - if (trimLastComma) { - ret = ret.substring(0, ret.lastIndexOf(",")); - } - - return ret; - } - // ************************************************************************************* // Private method // ************************************************************************************* - private IAssessmentService getAssessmentService() { + private IAssessmentService initAssessmentService() { if (service == null) { WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() .getServletContext()); @@ -841,14 +935,4 @@ return service; } - /** - * Removes all the html tags from a string - * - * @param string - * @return - */ - private String removeHTMLTags(String string) { - return (string == null) ? "" : string.replaceAll("\\<.*?>", "").replaceAll(" ", " "); - } - } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/ExportServlet.java =================================================================== diff -u -r405cf90d2646e8f7dc1aa032b28c820279e50930 -r45466cdcb65a2b45fa8e24d23a40b986d902cede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/ExportServlet.java (.../ExportServlet.java) (revision 405cf90d2646e8f7dc1aa032b28c820279e50930) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/ExportServlet.java (.../ExportServlet.java) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -28,7 +28,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Set; import javax.servlet.ServletException; @@ -43,7 +42,7 @@ import org.lamsfoundation.lams.tool.assessment.AssessmentConstants; import org.lamsfoundation.lams.tool.assessment.dto.QuestionSummary; import org.lamsfoundation.lams.tool.assessment.dto.ReflectDTO; -import org.lamsfoundation.lams.tool.assessment.dto.Summary; +import org.lamsfoundation.lams.tool.assessment.dto.SessionDTO; import org.lamsfoundation.lams.tool.assessment.dto.UserSummary; import org.lamsfoundation.lams.tool.assessment.model.Assessment; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestion; @@ -181,12 +180,12 @@ throw new AssessmentApplicationException(error); } - List summaryList = service.getSummaryList(toolContentID); + List summaryList = service.getSessionDataForExport(toolContentID); ArrayList questionSummaryList = new ArrayList(); Set questions = content.getQuestions(); for (AssessmentQuestion question : questions) { - QuestionSummary questionSummary = service.getQuestionSummary(toolContentID, question.getUid()); + QuestionSummary questionSummary = service.getQuestionDataForExport(toolContentID, question.getUid()); questionSummaryList.add(questionSummary); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/PopulateMarksServlet.java =================================================================== diff -u -r6c5d0c6b8ff17d661580df2c265f2dcabfe7d76c -r45466cdcb65a2b45fa8e24d23a40b986d902cede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/PopulateMarksServlet.java (.../PopulateMarksServlet.java) (revision 6c5d0c6b8ff17d661580df2c265f2dcabfe7d76c) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/PopulateMarksServlet.java (.../PopulateMarksServlet.java) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -33,7 +33,6 @@ import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; -import org.lamsfoundation.lams.tool.assessment.model.AssessmentSession; import org.lamsfoundation.lams.tool.assessment.service.AssessmentServiceProxy; import org.lamsfoundation.lams.tool.assessment.service.IAssessmentService; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; Index: lams_tool_assessment/web/pages/monitoring/monitoring.jsp =================================================================== diff -u -r732f77a31113c5838d0704829b99418d90053471 -r45466cdcb65a2b45fa8e24d23a40b986d902cede --- lams_tool_assessment/web/pages/monitoring/monitoring.jsp (.../monitoring.jsp) (revision 732f77a31113c5838d0704829b99418d90053471) +++ lams_tool_assessment/web/pages/monitoring/monitoring.jsp (.../monitoring.jsp) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -20,6 +20,18 @@ vertical-align:text-top; padding-top:2px; } + + .session-container { + padding-left: 30px; + width:99%; + } + .session-header { + padding-bottom: 5px; + font-size: small; + } + div[id^="gbox_userSummary"] { + margin-top: 5px; + } Index: lams_tool_assessment/web/pages/monitoring/parts/masterDetailLoadUp.jsp =================================================================== diff -u -r0db48a90dde9c1543cf5d752955592ffb6dca5ee -r45466cdcb65a2b45fa8e24d23a40b986d902cede --- lams_tool_assessment/web/pages/monitoring/parts/masterDetailLoadUp.jsp (.../masterDetailLoadUp.jsp) (revision 0db48a90dde9c1543cf5d752955592ffb6dca5ee) +++ lams_tool_assessment/web/pages/monitoring/parts/masterDetailLoadUp.jsp (.../masterDetailLoadUp.jsp) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -19,8 +19,7 @@ title:"${fn:escapeXml(title)}", response:responseStr, grade:"" - }); - + }); // set maxGrade attribute to cell DOM element table.setCell(${i.index + 1}, "grade", "", null, {"maxGrade" : ${questionResult.maxMark}}); Index: lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp =================================================================== diff -u -rf26c6f4d1349866eb9b5962e04863ef5052dad55 -r45466cdcb65a2b45fa8e24d23a40b986d902cede --- lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp (.../questionsummary.jsp) (revision f26c6f4d1349866eb9b5962e04863ef5052dad55) +++ lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp (.../questionsummary.jsp) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) @@ -9,6 +9,7 @@ + @@ -26,33 +27,36 @@