Index: lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties,v diff -u -r1.67 -r1.68 --- lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties 10 Nov 2015 15:00:18 -0000 1.67 +++ lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties 11 Nov 2015 01:16:44 -0000 1.68 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/conf/xdoclet/struts-actions.xml,v diff -u -r1.24 -r1.25 --- lams_tool_assessment/conf/xdoclet/struts-actions.xml 2 Jul 2015 21:39:04 -0000 1.24 +++ lams_tool_assessment/conf/xdoclet/struts-actions.xml 11 Nov 2015 01:16:44 -0000 1.25 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java,v diff -u -r1.1 -r1.2 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java 29 Jan 2009 05:59:04 -0000 1.1 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java 11 Nov 2015 01:16:44 -0000 1.2 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/AssessmentUserDTO.java,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/AssessmentUserDTO.java 11 Nov 2015 01:16:44 -0000 1.1 @@ -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: AssessmentUserDTO.java,v 1.1 2015/11/11 01:16:44 andreyb Exp $ */ +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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/SessionDTO.java,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/SessionDTO.java 11 Nov 2015 01:16:44 -0000 1.1 @@ -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: SessionDTO.java,v 1.1 2015/11/11 01:16:44 andreyb Exp $ */ +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 1.4 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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java,v diff -u -r1.12 -r1.13 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java 2 Jul 2015 21:39:04 -0000 1.12 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java 11 Nov 2015 01:16:45 -0000 1.13 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java,v diff -u -r1.9 -r1.10 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java 5 Sep 2014 21:30:05 -0000 1.9 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java 11 Nov 2015 01:16:44 -0000 1.10 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java,v diff -u -r1.62 -r1.63 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java 28 Aug 2015 06:05:35 -0000 1.62 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java 11 Nov 2015 01:16:44 -0000 1.63 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java,v diff -u -r1.29 -r1.30 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java 2 Jul 2015 21:39:04 -0000 1.29 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java 11 Nov 2015 01:16:44 -0000 1.30 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java,v diff -u -r1.26 -r1.27 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java 2 Jul 2015 21:39:04 -0000 1.26 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java 11 Nov 2015 01:16:44 -0000 1.27 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/ExportServlet.java,v diff -u -r1.10 -r1.11 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/ExportServlet.java 10 Apr 2014 21:10:52 -0000 1.10 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/ExportServlet.java 11 Nov 2015 01:16:45 -0000 1.11 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/Attic/PopulateMarksServlet.java,v diff -u -r1.1 -r1.2 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/PopulateMarksServlet.java 8 Jan 2014 17:47:02 -0000 1.1 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/PopulateMarksServlet.java 11 Nov 2015 01:16:45 -0000 1.2 @@ -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/statistic.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/web/pages/monitoring/statistic.jsp,v diff -u -r1.5 -r1.6 --- lams_tool_assessment/web/pages/monitoring/statistic.jsp 6 Apr 2014 20:52:16 -0000 1.5 +++ lams_tool_assessment/web/pages/monitoring/statistic.jsp 11 Nov 2015 01:16:45 -0000 1.6 @@ -1,46 +1,41 @@ <%@ include file="/common/taglibs.jsp"%> - + +

+ +

- -
- -
-
+ + + +
+ +
+
+ + +
+ + + + - - - - - - - - - + - - - - - - - + + + + +
+ + + +
- ${summary.sessionName} -
- # - - - - -
- ${status.index + 1} - - - - -
+ ${sessionDto.sessionName} + + ${sessionDto.numberLearners} +
- Index: lams_tool_assessment/web/pages/monitoring/summary.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/web/pages/monitoring/summary.jsp,v diff -u -r1.28 -r1.29 --- lams_tool_assessment/web/pages/monitoring/summary.jsp 14 Oct 2015 23:10:57 -0000 1.28 +++ lams_tool_assessment/web/pages/monitoring/summary.jsp 11 Nov 2015 01:16:45 -0000 1.29 @@ -1,38 +1,41 @@ <%@ include file="/common/taglibs.jsp"%> - +