Index: lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -rf15861bbcad892a620c0af35e5c573ce0a13c9d4 -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 --- lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision f15861bbcad892a620c0af35e5c573ce0a13c9d4) +++ lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) @@ -291,5 +291,6 @@ warn.mark.hedging.wrong.total =In order to continue, all mark hedging questions should have all available marks assigned. label.incorrect.answer.nullifies.mark =Assigns full mark only when the correct answers are selected. +label.number.learners.per.session =Number of learners per session #======= End labels: Exported 284 labels for en AU ===== Index: lams_tool_assessment/conf/xdoclet/struts-actions.xml =================================================================== diff -u -r0340817df8d420d1feafa8ad9a43f667023515b2 -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 --- lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision 0340817df8d420d1feafa8ad9a43f667023515b2) +++ lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) @@ -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/AssessmentUserDAOHibernate.java =================================================================== diff -u -rc56857991e269aa7f5bd250a05b52c767a9957ad -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java (.../AssessmentUserDAOHibernate.java) (revision c56857991e269aa7f5bd250a05b52c767a9957ad) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java (.../AssessmentUserDAOHibernate.java) (revision 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) @@ -23,9 +23,13 @@ /* $$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.tool.assessment.dao.AssessmentUserDAO; +import org.lamsfoundation.lams.tool.assessment.dto.AssessmentUserDTO; import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; public class AssessmentUserDAOHibernate extends BaseDAOHibernate implements AssessmentUserDAO { @@ -54,5 +58,148 @@ public List getBySessionID(Long sessionId) { return this.getHibernateTemplate().find(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); + } + + } + + 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) { + + 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 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) @@ -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 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) @@ -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 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 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 -r0340817df8d420d1feafa8ad9a43f667023515b2 -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java (.../AssessmentQuestionResult.java) (revision 0340817df8d420d1feafa8ad9a43f667023515b2) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java (.../AssessmentQuestionResult.java) (revision 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) @@ -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 -rc500d9384f365fe8b4c2997a799c44f92e8c26e9 -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java (.../AssessmentOutputFactory.java) (revision c500d9384f365fe8b4c2997a799c44f92e8c26e9) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java (.../AssessmentOutputFactory.java) (revision 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) @@ -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 -rc93c1eaabb8c79d6f2bb3f31872e262e52e271af -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision c93c1eaabb8c79d6f2bb3f31872e262e52e271af) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) @@ -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; @@ -290,6 +291,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 +762,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 +848,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 +904,13 @@ } assessmentResults.add(assessmentResult); } - summary.setAssessmentResults(assessmentResults); - summaryList.add(summary); + sessionDTO.setAssessmentResults(assessmentResults); + sessionDtos.add(sessionDTO); } - AssessmentServiceImpl.escapeQuotes(summaryList); + AssessmentServiceImpl.escapeQuotes(sessionDtos); - return summaryList; + return sessionDtos; } @Override @@ -936,13 +979,26 @@ return userSummary; } - + @Override public QuestionSummary getQuestionSummary(Long contentId, Long questionUid) { QuestionSummary questionSummary = new QuestionSummary(); AssessmentQuestion question = assessmentQuestionDao.getByUid(questionUid); questionSummary.setQuestion(question); + + //TODO +// float averageMark = assessmentQuestionResultDao.getNumberWrongAnswersDoneBefore(assessmentUid, userId, questionUid); +// questionSummary.setAverageMark(averageMark); + + 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)); @@ -1467,10 +1523,10 @@ } } } else if (object instanceof List) { - List summaryList = (List) object; + List sessionDtos = (List) object; - for (Summary summary : summaryList) { - for (AssessmentResult result : summary.getAssessmentResults()) { + for (SessionDTO sessionDTO : sessionDtos) { + for (AssessmentResult result : sessionDTO.getAssessmentResults()) { for (AssessmentQuestionResult questionResult : result.getQuestionResults()) { AssessmentServiceImpl.escapeQuotesInQuestionResult(questionResult); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -r0340817df8d420d1feafa8ad9a43f667023515b2 -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 0340817df8d420d1feafa8ad9a43f667023515b2) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) @@ -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/web/action/MonitoringAction.java =================================================================== diff -u -r0340817df8d420d1feafa8ad9a43f667023515b2 -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 0340817df8d420d1feafa8ad9a43f667023515b2) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) @@ -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; @@ -81,7 +87,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 +108,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 +124,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 +173,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 +184,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 +195,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 +205,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 +213,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 +232,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 +252,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 +271,197 @@ 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(getAnswerObject(questionResult, true)); + 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 +473,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 +490,6 @@ showUserNames = false; } - service = getAssessmentService(); Assessment assessment = service.getAssessmentByContentId(contentId); if (assessment != null) { @@ -317,8 +519,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 +565,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 +600,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 +663,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(getAnswerObject(questionResult, false), false); userResultRow[5] = new ExcelCell(questionResult.getMark(), false); data.add(userResultRow); @@ -471,7 +673,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(getAnswerObject(questionResult, false), false); userResultRow[4] = new ExcelCell(questionResult.getMark(), false); data.add(userResultRow); @@ -509,8 +711,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 +764,7 @@ data.add(summaryRowTitle); } - QuestionSummary questionSummary = service.getQuestionSummary(assessment.getContentId(), question + QuestionSummary questionSummary = service.getQuestionDataForExport(assessment.getContentId(), question .getUid()); List> allResultsForQuestion = questionSummary @@ -589,7 +791,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(getAnswerObject(questionResult, false), false); AssessmentResult assessmentResult = questionResult.getAssessmentResult(); Date finishDate = questionResult.getFinishDate(); @@ -624,7 +826,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(getAnswerObject(questionResult, false), false); if (questionResult.getAssessmentResult() != null) { Date startDate = questionResult.getAssessmentResult().getStartDate(); @@ -721,27 +923,27 @@ /** * Used only for excell export (for getUserSummaryData() method). */ - private Object getAnswerObject(AssessmentQuestionResult questionResult) { + private Object getAnswerObject(AssessmentQuestionResult questionResult, boolean isMonitoring) { 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); + return getOptionResponse(questionResult, AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS, isMonitoring); case AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE: - return getOptionResponse(questionResult, AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE); + return getOptionResponse(questionResult, AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE, isMonitoring); case AssessmentConstants.QUESTION_TYPE_NUMERICAL: return questionResult.getAnswerString(); case AssessmentConstants.QUESTION_TYPE_ORDERING: - return getOptionResponse(questionResult, AssessmentConstants.QUESTION_TYPE_ORDERING); + return getOptionResponse(questionResult, AssessmentConstants.QUESTION_TYPE_ORDERING, isMonitoring); 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); + return getOptionResponse(questionResult, AssessmentConstants.QUESTION_TYPE_MARK_HEDGING, isMonitoring); default: return null; } @@ -752,11 +954,12 @@ /** * Used only for excell export (for getUserSummaryData() method). */ - private String getOptionResponse(AssessmentQuestionResult questionResult, short type) { + private String getOptionResponse(AssessmentQuestionResult questionResult, short type, boolean isMonitoring) { StringBuilder sb = new StringBuilder(); //whether there is a need to remove last comma boolean trimLastComma = false; + final String DELIMITER = isMonitoring ? "
" : ", "; Set options = questionResult.getAssessmentQuestion().getOptions(); Set optionAnswers = questionResult.getOptionAnswers(); @@ -767,7 +970,7 @@ if (optionAnswer.getAnswerBoolean()) { for (AssessmentQuestionOption option : options) { if (option.getUid().equals(optionAnswer.getOptionUid())) { - sb.append(option.getOptionString() + ", "); + sb.append(option.getOptionString() + DELIMITER); trimLastComma = true; } } @@ -780,7 +983,7 @@ if (optionAnswer.getAnswerInt() == i) { for (AssessmentQuestionOption option : options) { if (option.getUid().equals(optionAnswer.getOptionUid())) { - sb.append(option.getOptionString() + ", "); + sb.append(option.getOptionString() + DELIMITER); trimLastComma = true; } } @@ -791,48 +994,83 @@ } else if (type == AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS) { for (AssessmentQuestionOption option : options) { - sb.append("[" + option.getOptionString() + ", "); + if (isMonitoring) { + sb.append("
"); + sb.append("
"); + sb.append( option.getQuestion()); + sb.append("
"); + sb.append("
"); + sb.append(" - "); + + } else { + sb.append("[" + option.getQuestion() + ", "); + } for (AssessmentOptionAnswer optionAnswer : optionAnswers) { if (option.getUid().equals(optionAnswer.getOptionUid())) { for (AssessmentQuestionOption option2 : options) { if (option2.getUid() == optionAnswer.getAnswerInt()) { - sb.append(option2.getOptionString() + "] "); + sb.append(option2.getOptionString()); } } } } + + if (isMonitoring) { + sb.append("
"); + sb.append("
"); + sb.append(DELIMITER); + } else { + sb.append("] "); + } } } else if (type == AssessmentConstants.QUESTION_TYPE_MARK_HEDGING) { for (AssessmentQuestionOption option : options) { - sb.append("[" + option.getOptionString() + ", "); + if (isMonitoring) { + sb.append(option.getOptionString() + " - "); + } else { + sb.append("[" + option.getOptionString() + ", "); + } for (AssessmentOptionAnswer optionAnswer : optionAnswers) { if (option.getUid().equals(optionAnswer.getOptionUid())) { - sb.append(optionAnswer.getAnswerInt() + "] "); + sb.append(optionAnswer.getAnswerInt()); } } + + if (isMonitoring) { + sb.append(DELIMITER); + } else { + sb.append("] "); + } } } } - String ret = sb.toString().replaceAll("\\<.*?\\>", ""); + + String ret; + if (isMonitoring) { + ret = StringEscapeUtils.escapeCsv(sb.toString()); + + } else { + ret = sb.toString().replaceAll("\\<.*?\\>", ""); - if (trimLastComma) { - ret = ret.substring(0, ret.lastIndexOf(",")); + 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()); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/ExportServlet.java =================================================================== diff -u -r405cf90d2646e8f7dc1aa032b28c820279e50930 -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 --- 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 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) @@ -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 -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 --- 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 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) @@ -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/parts/questionsummary.jsp =================================================================== diff -u -r313f8d6b66048cd3257c069e73343bc92ff2cb02 -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 --- lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp (.../questionsummary.jsp) (revision 313f8d6b66048cd3257c069e73343bc92ff2cb02) +++ lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp (.../questionsummary.jsp) (revision 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) @@ -9,6 +9,7 @@ + @@ -26,33 +27,36 @@