Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java =================================================================== diff -u -refbaf6ddcc506fed7b594bc9b663b81a03b1283f -r7d0d609b844ea5e9c41f46d209825ce5bd4fb83a --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java (.../IQaService.java) (revision efbaf6ddcc506fed7b594bc9b663b81a03b1283f) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java (.../IQaService.java) (revision 7d0d609b844ea5e9c41f46d209825ce5bd4fb83a) @@ -42,6 +42,7 @@ import org.lamsfoundation.lams.tool.qa.QaUsrResp; import org.lamsfoundation.lams.tool.qa.QaWizardCategory; import org.lamsfoundation.lams.tool.qa.dto.AverageRatingDTO; +import org.lamsfoundation.lams.tool.qa.dto.GroupDTO; import org.lamsfoundation.lams.tool.qa.dto.QaQuestionDTO; import org.lamsfoundation.lams.tool.qa.dto.ReflectionDTO; import org.lamsfoundation.lams.util.audit.IAuditService; @@ -333,6 +334,17 @@ * @return */ List getReflectList(QaContent content, String userID); + + /** + * ends up populating the attempt history for all the users of all the tool sessions for a content + * + * User id is needed if isUserNamesVisible is false && is learnerRequest = true, as it is required to work out if + * the data being analysed is the current user. + */ + List exportLearner(QaContent qaContent, boolean isUserNamesVisible, boolean isLearnerRequest, String sessionId, + String userId); + + List exportTeacher(QaContent qaContent); /** * notifyTeachersOnResponseSubmit Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java =================================================================== diff -u -refbaf6ddcc506fed7b594bc9b663b81a03b1283f -r7d0d609b844ea5e9c41f46d209825ce5bd4fb83a --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision efbaf6ddcc506fed7b594bc9b663b81a03b1283f) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision 7d0d609b844ea5e9c41f46d209825ce5bd4fb83a) @@ -36,6 +36,7 @@ import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; +import java.util.TreeMap; import java.util.TreeSet; import javax.servlet.http.HttpSession; @@ -79,10 +80,14 @@ import org.lamsfoundation.lams.tool.qa.dao.IQaWizardDAO; import org.lamsfoundation.lams.tool.qa.dao.IResponseRatingDAO; import org.lamsfoundation.lams.tool.qa.dto.AverageRatingDTO; +import org.lamsfoundation.lams.tool.qa.dto.GroupDTO; +import org.lamsfoundation.lams.tool.qa.dto.QaMonitoredAnswersDTO; +import org.lamsfoundation.lams.tool.qa.dto.QaMonitoredUserDTO; import org.lamsfoundation.lams.tool.qa.dto.QaQuestionDTO; import org.lamsfoundation.lams.tool.qa.dto.ReflectionDTO; import org.lamsfoundation.lams.tool.qa.util.QaApplicationException; import org.lamsfoundation.lams.tool.qa.util.QaSessionComparator; +import org.lamsfoundation.lams.tool.qa.util.QaStringComparator; import org.lamsfoundation.lams.tool.service.ILamsToolService; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; @@ -689,8 +694,191 @@ return reflectionDTOs; } + + @Override + public List exportLearner(QaContent qaContent, boolean isUserNamesVisible, boolean isLearnerRequest, + String sessionId, String userId) { + List listQuestions = getAllQuestionEntries(qaContent.getUid()); + List listMonitoredAnswersContainerDTO = new LinkedList(); + + Iterator itListQuestions = listQuestions.iterator(); + while (itListQuestions.hasNext()) { + QaQueContent qaQuestion = (QaQueContent) itListQuestions.next(); + + if (qaQuestion != null) { + QaMonitoredAnswersDTO qaMonitoredAnswersDTO = new QaMonitoredAnswersDTO(); + qaMonitoredAnswersDTO.setQuestionUid(qaQuestion.getUid().toString()); + qaMonitoredAnswersDTO.setQuestion(qaQuestion.getQuestion()); + qaMonitoredAnswersDTO.setFeedback(qaQuestion.getFeedback()); + + Map questionAttemptData = exportGroupsAttemptData(qaContent, qaQuestion.getUid().toString(), + isUserNamesVisible, isLearnerRequest, sessionId, userId); + qaMonitoredAnswersDTO.setQuestionAttempts(questionAttemptData); + listMonitoredAnswersContainerDTO.add(qaMonitoredAnswersDTO); + + } + } + return listMonitoredAnswersContainerDTO; + } + @Override + public List exportTeacher(QaContent qaContent) { + List questions = getAllQuestionEntries(qaContent.getUid()); + List groupDTOs = new LinkedList(); + Set sessions = new TreeSet(new QaSessionComparator()); + sessions.addAll(qaContent.getQaSessions()); + for (QaSession session : sessions) { + String sessionId = session.getQaSessionId().toString(); + String sessionName = session.getSession_name(); + + GroupDTO groupDTO = new GroupDTO(); + List qaMonitoredAnswersDTOs = new LinkedList(); + + if (session != null) { + Iterator itQuestions = questions.iterator(); + while (itQuestions.hasNext()) { + QaQueContent question = itQuestions.next(); + + QaMonitoredAnswersDTO qaMonitoredAnswersDTO = new QaMonitoredAnswersDTO(); + qaMonitoredAnswersDTO.setQuestionUid(question.getUid().toString()); + qaMonitoredAnswersDTO.setQuestion(question.getQuestion()); + qaMonitoredAnswersDTO.setFeedback(question.getFeedback()); + qaMonitoredAnswersDTO.setSessionId(sessionId); + qaMonitoredAnswersDTO.setSessionName(sessionName); + + Map questionAttemptData = exportGroupsAttemptData(qaContent, question.getUid() + .toString(), true, false, sessionId, null); + qaMonitoredAnswersDTO.setQuestionAttempts(questionAttemptData); + qaMonitoredAnswersDTOs.add(qaMonitoredAnswersDTO); + } + } + + groupDTO.setGroupData(qaMonitoredAnswersDTOs); + groupDTO.setSessionName(sessionName); + groupDTO.setSessionId(sessionId); + groupDTOs.add(groupDTO); + } + return groupDTOs; + } + + /** + * User id is needed if learnerRequest = true, as it is required to work out if the data being analysed is the + * current user (for not show other names) or to work out which is the user's answers (for not show all answers). + */ + private Map exportGroupsAttemptData(QaContent qaContent, String questionUid, boolean isUserNamesVisible, + boolean isLearnerRequest, String sessionId, String userId) { + List> listMonitoredAttemptsContainerDTO = new LinkedList>(); + + Map mapResponseIdToAverageRating = getAverageRatingDTOByQuestionAndSession(new Long( + questionUid), new Long(sessionId)); + + List responses = new ArrayList(); + if (!isLearnerRequest) { + /* request is for monitoring summary */ + + if (qaContent.isUseSelectLeaderToolOuput()) { + QaSession session = getSessionById(new Long(sessionId).longValue()); + QaQueUsr groupLeader = session.getGroupLeader(); + if (groupLeader != null) { + QaUsrResp response = getResponseByUserAndQuestion(groupLeader.getQueUsrId(), new Long( + questionUid)); + if (response != null) { + responses.add(response); + } + } + + } else { + responses = getResponseBySessionAndQuestion(new Long(sessionId), new Long(questionUid)); + } + + } else { + if (qaContent.isShowOtherAnswers()) { + responses = getResponseBySessionAndQuestion(new Long(sessionId), new Long(questionUid)); + + } else { + QaUsrResp response = getResponseByUserAndQuestion(new Long(userId), new Long(questionUid)); + if (response != null) { + responses.add(response); + } + } + } + + /** + * Populates all the user's attempt data of a particular tool session. User id is needed if isUserNamesVisible + * is false && is learnerRequest = true, as it is required to work out if the data being analysed is the current + * user. + */ + List qaMonitoredUserDTOs = new LinkedList(); + for (QaUsrResp response : responses) { + QaQueUsr user = response.getQaQueUser(); + if (response != null) { + QaMonitoredUserDTO qaMonitoredUserDTO = new QaMonitoredUserDTO(); + qaMonitoredUserDTO.setAttemptTime(response.getAttemptTime()); + qaMonitoredUserDTO.setTimeZone(response.getTimezone()); + qaMonitoredUserDTO.setUid(response.getResponseId().toString()); + + if (!isUserNamesVisible && isLearnerRequest && !userId.equals(user.getQueUsrId().toString())) { + // this is not current user, put his name as blank + qaMonitoredUserDTO.setUserName(" "); + } else { + // this is current user, put his name normally + qaMonitoredUserDTO.setUserName(user.getFullname()); + } + + qaMonitoredUserDTO.setQueUsrId(user.getQueUsrId().toString()); + qaMonitoredUserDTO.setSessionId(sessionId.toString()); + qaMonitoredUserDTO.setResponse(response.getAnswer()); + + // String responsePresentable = QaUtils.replaceNewLines(response.getAnswer()); + qaMonitoredUserDTO.setResponsePresentable(response.getAnswer()); + + qaMonitoredUserDTO.setQuestionUid(questionUid); + qaMonitoredUserDTO.setVisible(new Boolean(response.isVisible()).toString()); + + // set averageRating + if (qaContent.isAllowRateAnswers()) { + + AverageRatingDTO averageRating = mapResponseIdToAverageRating.get(response.getResponseId()); + // AverageRatingDTO averageRating = + // qaService.getAverageRatingDTOByResponse(response.getResponseId()); + if (averageRating == null) { + qaMonitoredUserDTO.setAverageRating("0"); + qaMonitoredUserDTO.setNumberOfVotes("0"); + } else { + qaMonitoredUserDTO.setAverageRating(averageRating.getRating()); + qaMonitoredUserDTO.setNumberOfVotes(averageRating.getNumberOfVotes()); + } + + } + + qaMonitoredUserDTOs.add(qaMonitoredUserDTO); + } + } + + // convert To McMonitoredUserDTOMap + Map sessionUsersAttempts = new TreeMap( + new QaStringComparator()); + Long mapIndex = new Long(1); + for (QaMonitoredUserDTO data : qaMonitoredUserDTOs) { + sessionUsersAttempts.put(mapIndex.toString(), data); + mapIndex = mapIndex + 1; + } + listMonitoredAttemptsContainerDTO.add(sessionUsersAttempts); + + // convertToMap + Map map = new TreeMap(new QaStringComparator()); + Iterator listIterator = listMonitoredAttemptsContainerDTO.iterator(); + Long mapIndex2 = new Long(1); + while (listIterator.hasNext()) { + Map data = (Map) listIterator.next(); + map.put(mapIndex2.toString(), data); + mapIndex2 = new Long(mapIndex2.longValue() + 1); + } + return map; + } + + @Override public void notifyTeachersOnResponseSubmit(Long sessionId) { final String NEW_LINE_CHARACTER = "
"; Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/ExportServlet.java =================================================================== diff -u -ra7661f206a3f21114f1c05f9a29f56e20f5e35f0 -r7d0d609b844ea5e9c41f46d209825ce5bd4fb83a --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/ExportServlet.java (.../ExportServlet.java) (revision a7661f206a3f21114f1c05f9a29f56e20f5e35f0) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/ExportServlet.java (.../ExportServlet.java) (revision 7d0d609b844ea5e9c41f46d209825ce5bd4fb83a) @@ -37,6 +37,7 @@ import org.lamsfoundation.lams.tool.qa.QaQueUsr; import org.lamsfoundation.lams.tool.qa.QaSession; import org.lamsfoundation.lams.tool.qa.dto.GeneralLearnerFlowDTO; +import org.lamsfoundation.lams.tool.qa.dto.GroupDTO; import org.lamsfoundation.lams.tool.qa.dto.ReflectionDTO; import org.lamsfoundation.lams.tool.qa.service.IQaService; import org.lamsfoundation.lams.tool.qa.service.QaServiceProxy; @@ -52,7 +53,6 @@ * * @author Ozgur Demirtas */ - public class ExportServlet extends AbstractExportPortfolioServlet implements QaAppConstants { static Logger logger = Logger.getLogger(ExportServlet.class.getName()); private static final long serialVersionUID = -1779093489007108143L; @@ -111,17 +111,17 @@ request.getSession().setAttribute(QaAppConstants.IS_TOOL_SESSION_AVAILABLE, isNoToolSessions); GeneralLearnerFlowDTO generalLearnerFlowDTO = LearningUtil.buildGeneralLearnerFlowDTO(content); - List listMonitoredAnswersContainerDTO = MonitoringUtil.buildGroupsQuestionData(request, content, qaService, - content.isUsernameVisible(), true, toolSessionID.toString(), userID.toString()); + List listMonitoredAnswersContainerDTO = qaService.exportLearner(content, content.isUsernameVisible(), true, + toolSessionID.toString(), userID.toString()); generalLearnerFlowDTO.setListMonitoredAnswersContainerDTO(listMonitoredAnswersContainerDTO); generalLearnerFlowDTO.setRequestLearningReportProgress(new Boolean(true).toString()); generalLearnerFlowDTO.setUserUid(userID.toString()); request.getSession().setAttribute(GENERAL_LEARNER_FLOW_DTO, generalLearnerFlowDTO); - MonitoringUtil.setUpMonitoring(request, qaService, content); - - List reflectionDTOs = qaService.getReflectList(content, userID.toString()); - request.getSession().setAttribute(QaAppConstants.REFLECTIONS_CONTAINER_DTO, reflectionDTOs); + if (content.isReflect()) { + List reflectionDTOs = qaService.getReflectList(content, userID.toString()); + request.getSession().setAttribute(QaAppConstants.REFLECTIONS_CONTAINER_DTO, reflectionDTOs); + } } request.getSession().setAttribute(PORTFOLIO_EXPORT_MODE, "learner"); @@ -150,15 +150,15 @@ GeneralLearnerFlowDTO generalLearnerFlowDTO = LearningUtil.buildGeneralLearnerFlowDTO(content); request.getSession().setAttribute(GENERAL_LEARNER_FLOW_DTO, generalLearnerFlowDTO); - MonitoringUtil.setUpMonitoring(request, qaService, content); - request.getSession().setAttribute(PORTFOLIO_EXPORT_MODE, "teacher"); - List reflectionDTOs = qaService.getReflectList(content, userID.toString()); - request.getSession().setAttribute(QaAppConstants.REFLECTIONS_CONTAINER_DTO, reflectionDTOs); + if (content.isReflect()) { + List reflectionDTOs = qaService.getReflectList(content, null); + request.getSession().setAttribute(QaAppConstants.REFLECTIONS_CONTAINER_DTO, reflectionDTOs); + } // generateGroupsSessionData - List listAllGroupsDTO = MonitoringUtil.buildGroupBasedSessionData(request, content, qaService); + List listAllGroupsDTO = qaService.exportTeacher(content); request.setAttribute(LIST_ALL_GROUPS_DTO, listAllGroupsDTO); request.getSession().setAttribute(LIST_ALL_GROUPS_DTO, listAllGroupsDTO); } Fisheye: Tag 7d0d609b844ea5e9c41f46d209825ce5bd4fb83a refers to a dead (removed) revision in file `lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/MonitoringUtil.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaLearningAction.java =================================================================== diff -u -raa23416ad623b838b1bc6b1a425ff3da67550240 -r7d0d609b844ea5e9c41f46d209825ce5bd4fb83a --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaLearningAction.java (.../QaLearningAction.java) (revision aa23416ad623b838b1bc6b1a425ff3da67550240) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaLearningAction.java (.../QaLearningAction.java) (revision 7d0d609b844ea5e9c41f46d209825ce5bd4fb83a) @@ -999,7 +999,12 @@ Long questionUid = WebUtil.readLongParam(request, "questionUid"); Long qaSessionId = WebUtil.readLongParam(request, "qaSessionId"); - Long userId = WebUtil.readLongParam(request, "userId"); + + //in case of monitoring we show all results. in case of learning - don't show results from the current user + boolean isMonitoring = WebUtil.readBooleanParam(request, "isMonitoring", false); + Long excludeUserId = isMonitoring ? -1 : WebUtil.readLongParam(request, "userId"); + + //paging parameters of tablesorter int size = WebUtil.readIntParam(request, "size"); int page = WebUtil.readIntParam(request, "page"); Integer isSort1 = WebUtil.readIntParam(request, "column[0]", true); @@ -1016,13 +1021,13 @@ sorting = QaAppConstants.SORT_BY_AVG_RATING_DESC; } - List responses = qaService.getResponsesForTablesorter(qaSessionId, questionUid, userId, page, size, + List responses = qaService.getResponsesForTablesorter(qaSessionId, questionUid, excludeUserId, page, size, sorting); JSONArray rows = new JSONArray(); JSONObject responcedata = new JSONObject(); - responcedata.put("total_rows", qaService.getCountResponsesBySessionAndQuestion(qaSessionId, questionUid, userId)); + responcedata.put("total_rows", qaService.getCountResponsesBySessionAndQuestion(qaSessionId, questionUid, excludeUserId)); for (QaUsrResp response : responses) { QaQueUsr user = response.getQaQueUser(); @@ -1031,8 +1036,8 @@ JSONObject responseRow = new JSONObject(); responseRow.put("responseUid", response.getResponseId().toString()); - responseRow.put("answer", StringEscapeUtils.escapeJava(response.getAnswer())); - responseRow.put("userName", StringEscapeUtils.escapeJavaScript(user.getFullname())); + responseRow.put("answer", StringEscapeUtils.escapeCsv(response.getAnswer())); + responseRow.put("userName", StringEscapeUtils.escapeCsv(user.getFullname())); responseRow.put("visible", new Boolean(response.isVisible()).toString()); responseRow.put("attemptTime", response.getAttemptTime()); Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringStarterAction.java =================================================================== diff -u -ra7661f206a3f21114f1c05f9a29f56e20f5e35f0 -r7d0d609b844ea5e9c41f46d209825ce5bd4fb83a --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringStarterAction.java (.../QaMonitoringStarterAction.java) (revision a7661f206a3f21114f1c05f9a29f56e20f5e35f0) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringStarterAction.java (.../QaMonitoringStarterAction.java) (revision 7d0d609b844ea5e9c41f46d209825ce5bd4fb83a) @@ -25,15 +25,20 @@ package org.lamsfoundation.lams.tool.qa.web; import java.io.IOException; +import java.util.Date; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.SortedSet; +import java.util.TimeZone; import java.util.TreeSet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; import org.apache.struts.Globals; @@ -48,13 +53,23 @@ import org.lamsfoundation.lams.tool.qa.QaCondition; import org.lamsfoundation.lams.tool.qa.QaContent; import org.lamsfoundation.lams.tool.qa.QaQueContent; +import org.lamsfoundation.lams.tool.qa.QaQueUsr; +import org.lamsfoundation.lams.tool.qa.QaSession; +import org.lamsfoundation.lams.tool.qa.dto.GroupDTO; +import org.lamsfoundation.lams.tool.qa.dto.QaMonitoredAnswersDTO; import org.lamsfoundation.lams.tool.qa.dto.QaQuestionDTO; +import org.lamsfoundation.lams.tool.qa.dto.QaStatsDTO; +import org.lamsfoundation.lams.tool.qa.dto.ReflectionDTO; import org.lamsfoundation.lams.tool.qa.service.IQaService; import org.lamsfoundation.lams.tool.qa.service.QaServiceProxy; import org.lamsfoundation.lams.tool.qa.util.QaApplicationException; +import org.lamsfoundation.lams.tool.qa.util.QaSessionComparator; import org.lamsfoundation.lams.tool.qa.util.QaUtils; import org.lamsfoundation.lams.tool.qa.web.form.QaMonitoringForm; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.DateUtil; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; import org.lamsfoundation.lams.web.util.SessionMap; @@ -73,14 +88,11 @@ QaMonitoringForm qaMonitoringForm = (QaMonitoringForm) form; IQaService qaService = QaServiceProxy.getQaService(getServlet().getServletContext()); - - qaMonitoringForm.setQaService(qaService); String contentFolderID = WebUtil.readStrParam(request, AttributeNames.PARAM_CONTENT_FOLDER_ID); qaMonitoringForm.setContentFolderID(contentFolderID); ActionForward validateParameters = validateParameters(request, mapping, qaMonitoringForm); - if (validateParameters != null) { return validateParameters; } @@ -92,49 +104,97 @@ throw new ServletException("Data not initialised in Monitoring"); } - MonitoringUtil.setUpMonitoring(request, qaService, qaContent); - qaMonitoringForm.setCurrentTab("1"); String strToolContentID = request.getParameter(AttributeNames.PARAM_TOOL_CONTENT_ID); qaMonitoringForm.setToolContentID(strToolContentID); - /* this section is related to summary tab. Starts here. */ +// SessionMap sessionMap = new SessionMap(); +// sessionMap.put(ACTIVITY_TITLE_KEY, qaContent.getTitle()); +// sessionMap.put(ACTIVITY_INSTRUCTIONS_KEY, qaContent.getInstructions()); +// +// qaMonitoringForm.setHttpSessionID(sessionMap.getSessionID()); +// request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); - SessionMap sessionMap = new SessionMap(); - sessionMap.put(ACTIVITY_TITLE_KEY, qaContent.getTitle()); - sessionMap.put(ACTIVITY_INSTRUCTIONS_KEY, qaContent.getInstructions()); + List questionDTOs = new LinkedList(); + for (QaQueContent question : qaContent.getQaQueContents()) { + QaQuestionDTO questionDTO = new QaQuestionDTO(question); + questionDTOs.add(questionDTO); + } + request.setAttribute(LIST_QUESTION_DTOS, questionDTOs); +// sessionMap.put(LIST_QUESTION_DTOS, questionDTOs); +// request.setAttribute(TOTAL_QUESTION_COUNT, new Integer(questionDTOs.size())); - qaMonitoringForm.setHttpSessionID(sessionMap.getSessionID()); - request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); + //session dto list + List groupDTOs = new LinkedList(); + Set sessions = new TreeSet(new QaSessionComparator()); + sessions.addAll(qaContent.getQaSessions()); + for (QaSession session : sessions) { + String sessionId = session.getQaSessionId().toString(); + String sessionName = session.getSession_name(); - List questionDTOs = new LinkedList(); - Iterator queIterator = qaContent.getQaQueContents().iterator(); - while (queIterator.hasNext()) { - QaQueContent qaQuestion = (QaQueContent) queIterator.next(); - if (qaQuestion != null) { - QaQuestionDTO qaQuestionDTO = new QaQuestionDTO(qaQuestion); - questionDTOs.add(qaQuestionDTO); + GroupDTO groupDTO = new GroupDTO(); + groupDTO.setSessionName(sessionName); + groupDTO.setSessionId(sessionId); + groupDTOs.add(groupDTO); + } + request.setAttribute(LIST_ALL_GROUPS_DTO, groupDTOs); + + if (qaContent.isReflect()) { + List reflectionDTOs = qaService.getReflectList(qaContent, null); + request.setAttribute(QaAppConstants.REFLECTIONS_CONTAINER_DTO, reflectionDTOs); + } + + // setting up the advanced summary for LDEV-1662 + request.setAttribute(QaAppConstants.ATTR_CONTENT, qaContent); + + boolean isGroupedActivity = qaService.isGroupedActivity(qaContent.getQaContentId()); + request.setAttribute("isGroupedActivity", isGroupedActivity); + + //buildQaStatsDTO + QaStatsDTO qaStatsDTO = new QaStatsDTO(); + int countSessionComplete = 0; + int countAllUsers = 0; + Iterator iteratorSession = qaContent.getQaSessions().iterator(); + while (iteratorSession.hasNext()) { + QaSession qaSession = (QaSession) iteratorSession.next(); + + if (qaSession != null) { + + if (qaSession.getSession_status().equals(COMPLETED)) { + ++countSessionComplete; + } + + Iterator iteratorUser = qaSession.getQaQueUsers().iterator(); + while (iteratorUser.hasNext()) { + QaQueUsr qaQueUsr = (QaQueUsr) iteratorUser.next(); + + if (qaQueUsr != null) { + ++countAllUsers; + } + } } } - request.setAttribute(LIST_QUESTION_DTOS, questionDTOs); - sessionMap.put(LIST_QUESTION_DTOS, questionDTOs); - request.setAttribute(TOTAL_QUESTION_COUNT, new Integer(questionDTOs.size())); + qaStatsDTO.setCountAllUsers(new Integer(countAllUsers).toString()); + qaStatsDTO.setCountSessionComplete(new Integer(countSessionComplete).toString()); + request.setAttribute(QA_STATS_DTO, qaStatsDTO); - // preserve conditions into sessionMap - SortedSet conditionSet = new TreeSet(new TextSearchConditionComparator()); - conditionSet.addAll(qaContent.getConditions()); - sessionMap.put(QaAppConstants.ATTR_CONDITION_SET, conditionSet); + // set SubmissionDeadline, if any + if (qaContent.getSubmissionDeadline() != null) { + Date submissionDeadline = qaContent.getSubmissionDeadline(); + HttpSession ss = SessionManager.getSession(); + UserDTO teacher = (UserDTO) ss.getAttribute(AttributeNames.USER); + TimeZone teacherTimeZone = teacher.getTimeZone(); + Date tzSubmissionDeadline = DateUtil.convertToTimeZoneFromDefault(teacherTimeZone, submissionDeadline); + request.setAttribute(QaAppConstants.ATTR_SUBMISSION_DEADLINE, tzSubmissionDeadline.getTime()); + } - MonitoringUtil.setUpMonitoring(request, qaService, qaContent); - return (mapping.findForward(LOAD_MONITORING)); } /** * validates request paramaters based on tool contract - * validateParameters(HttpServletRequest request, ActionMapping mapping) * * @param request * @param mapping @@ -161,16 +221,4 @@ } return null; } - - /** - * persists error messages to request scope - * - * @param request - * @param message - */ - public void persistError(HttpServletRequest request, String message) { - ActionMessages errors = new ActionMessages(); - errors.add(Globals.ERROR_KEY, new ActionMessage(message)); - saveErrors(request, errors); - } } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/form/QaMonitoringForm.java =================================================================== diff -u -r9fbb7ff85ea238ebc8699e9ec116eb0cd782ff90 -r7d0d609b844ea5e9c41f46d209825ce5bd4fb83a --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/form/QaMonitoringForm.java (.../QaMonitoringForm.java) (revision 9fbb7ff85ea238ebc8699e9ec116eb0cd782ff90) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/form/QaMonitoringForm.java (.../QaMonitoringForm.java) (revision 7d0d609b844ea5e9c41f46d209825ce5bd4fb83a) @@ -43,24 +43,7 @@ protected String sessionId; - protected IQaService qaService; - /** - * @return Returns the qaService. - */ - public IQaService getQaService() { - return qaService; - } - - /** - * @param qaService - * The qaService to set. - */ - public void setQaService(IQaService qaService) { - this.qaService = qaService; - } - - /** * @return Returns the currentUid. */ public String getCurrentUid() { Index: lams_tool_laqa/web/learning/LearnerRep.jsp =================================================================== diff -u -raa23416ad623b838b1bc6b1a425ff3da67550240 -r7d0d609b844ea5e9c41f46d209825ce5bd4fb83a --- lams_tool_laqa/web/learning/LearnerRep.jsp (.../LearnerRep.jsp) (revision aa23416ad623b838b1bc6b1a425ff3da67550240) +++ lams_tool_laqa/web/learning/LearnerRep.jsp (.../LearnerRep.jsp) (revision 7d0d609b844ea5e9c41f46d209825ce5bd4fb83a) @@ -61,18 +61,7 @@ // {sortList:col} adds the sortList to the url into a "col" array, and {filterList:fcol} adds // the filterList to the url into an "fcol" array. // So a sortList = [[2,0],[3,0]] becomes "&col[2]=0&col[3]=0" in the url - // and a filterList = [[2,Blue],[3,13]] becomes "&fcol[2]=Blue&fcol[3]=13" in the url ajaxUrl : "?method=getResponses&page={page}&size={size}&{sortList:column}&qaSessionId=" + $("#toolSessionID").val() + "&questionUid=" + $(this).attr('data-question-uid') + "&userId=" + $("#userID").val(), - - // modify the url after all processing has been applied - // customAjaxUrl: function(table, url) { - // manipulate the url string as you desire - // url += '&cPage=' + window.location.pathname; - // trigger my custom event - //$(table).trigger('changingUrl', url); - // send the server the current page - // return url; - // }, ajaxProcessing: function (data) { if (data && data.hasOwnProperty('rows')) { var rows = [], @@ -155,19 +144,27 @@ // bind to pager events .bind('pagerInitialized pagerComplete', function(event, options){ - $(".rating-stars").jRating({ - phpPath : "?method=rateResponse&toolSessionID=" + $("#toolSessionID").val(), - rateMax : 5, - decimalLength : 1, - onSuccess : function(data, responseUid){ - $("#averageRating" + responseUid).html(data.averageRating); - $("#numberOfVotes" + responseUid).html(data.numberOfVotes); - $("#averageRating" + responseUid).parents(".tablesorter").trigger("update"); - }, - onError : function(){ - jError('Error : please retry'); - } - }); + $(".rating-stars").each(function() { + //make sure jRating gets applied only once + if ($(this)[0].innerHTML.indexOf("jRatingColor") > -1) { + return; + } + + $(this).jRating({ + phpPath : "?method=rateResponse&toolSessionID=" + $("#toolSessionID").val(), + rateMax : 5, + decimalLength : 1, + onSuccess : function(data, responseUid){ + $("#averageRating" + responseUid).html(data.averageRating); + $("#numberOfVotes" + responseUid).html(data.numberOfVotes); + $("#averageRating" + responseUid).parents(".tablesorter").trigger("update"); + }, + onError : function(){ + jError('Error : please retry'); + } + }) + }) + }); }); Index: lams_tool_laqa/web/learning/RevisitedLearnerRep.jsp =================================================================== diff -u -raa23416ad623b838b1bc6b1a425ff3da67550240 -r7d0d609b844ea5e9c41f46d209825ce5bd4fb83a --- lams_tool_laqa/web/learning/RevisitedLearnerRep.jsp (.../RevisitedLearnerRep.jsp) (revision aa23416ad623b838b1bc6b1a425ff3da67550240) +++ lams_tool_laqa/web/learning/RevisitedLearnerRep.jsp (.../RevisitedLearnerRep.jsp) (revision 7d0d609b844ea5e9c41f46d209825ce5bd4fb83a) @@ -65,15 +65,6 @@ // and a filterList = [[2,Blue],[3,13]] becomes "&fcol[2]=Blue&fcol[3]=13" in the url ajaxUrl : "?method=getResponses&page={page}&size={size}&{sortList:column}&qaSessionId=" + $("#toolSessionID").val() + "&questionUid=" + $(this).attr('data-question-uid') + "&userId=" + $("#userID").val(), - // modify the url after all processing has been applied - // customAjaxUrl: function(table, url) { - // manipulate the url string as you desire - // url += '&cPage=' + window.location.pathname; - // trigger my custom event - //$(table).trigger('changingUrl', url); - // send the server the current page - // return url; - // }, ajaxProcessing: function (data) { if (data && data.hasOwnProperty('rows')) { var rows = [], @@ -156,19 +147,26 @@ // bind to pager events .bind('pagerInitialized pagerComplete', function(event, options){ - $(".rating-stars").jRating({ - phpPath : "?method=rateResponse&toolSessionID=" + $("#toolSessionID").val(), - rateMax : 5, - decimalLength : 1, - onSuccess : function(data, responseUid){ - $("#averageRating" + responseUid).html(data.averageRating); - $("#numberOfVotes" + responseUid).html(data.numberOfVotes); - $("#averageRating" + responseUid).parents(".tablesorter").trigger("update"); - }, - onError : function(){ - jError('Error : please retry'); - } - }); + $(".rating-stars").each(function() { + //make sure jRating gets applied only once + if ($(this)[0].innerHTML.indexOf("jRatingColor") > -1) { + return; + } + + $(this).jRating({ + phpPath : "?method=rateResponse&toolSessionID=" + $("#toolSessionID").val(), + rateMax : 5, + decimalLength : 1, + onSuccess : function(data, responseUid){ + $("#averageRating" + responseUid).html(data.averageRating); + $("#numberOfVotes" + responseUid).html(data.numberOfVotes); + $("#averageRating" + responseUid).parents(".tablesorter").trigger("update"); + }, + onError : function(){ + jError('Error : please retry'); + } + }) + }) }); }); Index: lams_tool_laqa/web/learning/mobile/LearnerRep.jsp =================================================================== diff -u -raa23416ad623b838b1bc6b1a425ff3da67550240 -r7d0d609b844ea5e9c41f46d209825ce5bd4fb83a --- lams_tool_laqa/web/learning/mobile/LearnerRep.jsp (.../LearnerRep.jsp) (revision aa23416ad623b838b1bc6b1a425ff3da67550240) +++ lams_tool_laqa/web/learning/mobile/LearnerRep.jsp (.../LearnerRep.jsp) (revision 7d0d609b844ea5e9c41f46d209825ce5bd4fb83a) @@ -66,15 +66,6 @@ // and a filterList = [[2,Blue],[3,13]] becomes "&fcol[2]=Blue&fcol[3]=13" in the url ajaxUrl : "?method=getResponses&page={page}&size={size}&{sortList:column}&qaSessionId=" + $("#toolSessionID").val() + "&questionUid=" + $(this).attr('data-question-uid') + "&userId=" + $("#userID").val(), - // modify the url after all processing has been applied - // customAjaxUrl: function(table, url) { - // manipulate the url string as you desire - // url += '&cPage=' + window.location.pathname; - // trigger my custom event - //$(table).trigger('changingUrl', url); - // send the server the current page - // return url; - // }, ajaxProcessing: function (data) { if (data && data.hasOwnProperty('rows')) { var rows = [], @@ -157,18 +148,25 @@ // bind to pager events .bind('pagerInitialized pagerComplete', function(event, options){ - $(".rating-stars").jRating({ - phpPath : "?method=rateResponse&toolSessionID=" + $("#toolSessionID").val(), - rateMax : 5, - decimalLength : 1, - onSuccess : function(data, responseUid){ - $("#averageRating" + responseUid).html(data.averageRating); - $("#numberOfVotes" + responseUid).html(data.numberOfVotes); - $("#averageRating" + responseUid).parents(".tablesorter").trigger("update"); - }, - onError : function(){ - jError('Error : please retry'); - } + $(".rating-stars").each(function() { + //make sure jRating gets applied only once + if ($(this)[0].innerHTML.indexOf("jRatingColor") > -1) { + return; + } + + $(this).jRating({ + phpPath : "?method=rateResponse&toolSessionID=" + $("#toolSessionID").val(), + rateMax : 5, + decimalLength : 1, + onSuccess : function(data, responseUid){ + $("#averageRating" + responseUid).html(data.averageRating); + $("#numberOfVotes" + responseUid).html(data.numberOfVotes); + $("#averageRating" + responseUid).parents(".tablesorter").trigger("update"); + }, + onError : function(){ + jError('Error : please retry'); + } + }) }); }); }); Index: lams_tool_laqa/web/learning/mobile/RevisitedLearnerRep.jsp =================================================================== diff -u -raa23416ad623b838b1bc6b1a425ff3da67550240 -r7d0d609b844ea5e9c41f46d209825ce5bd4fb83a --- lams_tool_laqa/web/learning/mobile/RevisitedLearnerRep.jsp (.../RevisitedLearnerRep.jsp) (revision aa23416ad623b838b1bc6b1a425ff3da67550240) +++ lams_tool_laqa/web/learning/mobile/RevisitedLearnerRep.jsp (.../RevisitedLearnerRep.jsp) (revision 7d0d609b844ea5e9c41f46d209825ce5bd4fb83a) @@ -67,15 +67,6 @@ // and a filterList = [[2,Blue],[3,13]] becomes "&fcol[2]=Blue&fcol[3]=13" in the url ajaxUrl : "?method=getResponses&page={page}&size={size}&{sortList:column}&qaSessionId=" + $("#toolSessionID").val() + "&questionUid=" + $(this).attr('data-question-uid') + "&userId=" + $("#userID").val(), - // modify the url after all processing has been applied - // customAjaxUrl: function(table, url) { - // manipulate the url string as you desire - // url += '&cPage=' + window.location.pathname; - // trigger my custom event - //$(table).trigger('changingUrl', url); - // send the server the current page - // return url; - // }, ajaxProcessing: function (data) { if (data && data.hasOwnProperty('rows')) { var rows = [], @@ -158,18 +149,25 @@ // bind to pager events .bind('pagerInitialized pagerComplete', function(event, options){ - $(".rating-stars").jRating({ - phpPath : "?method=rateResponse&toolSessionID=" + $("#toolSessionID").val(), - rateMax : 5, - decimalLength : 1, - onSuccess : function(data, responseUid){ - $("#averageRating" + responseUid).html(data.averageRating); - $("#numberOfVotes" + responseUid).html(data.numberOfVotes); - $("#averageRating" + responseUid).parents(".tablesorter").trigger("update"); - }, - onError : function(){ - jError('Error : please retry'); - } + $(".rating-stars").each(function() { + //make sure jRating gets applied only once + if ($(this)[0].innerHTML.indexOf("jRatingColor") > -1) { + return; + } + + $(this).jRating({ + phpPath : "?method=rateResponse&toolSessionID=" + $("#toolSessionID").val(), + rateMax : 5, + decimalLength : 1, + onSuccess : function(data, responseUid){ + $("#averageRating" + responseUid).html(data.averageRating); + $("#numberOfVotes" + responseUid).html(data.numberOfVotes); + $("#averageRating" + responseUid).parents(".tablesorter").trigger("update"); + }, + onError : function(){ + jError('Error : please retry'); + } + }) }); }); }); Index: lams_tool_laqa/web/monitoring/MonitoringMaincontent.jsp =================================================================== diff -u -ra7661f206a3f21114f1c05f9a29f56e20f5e35f0 -r7d0d609b844ea5e9c41f46d209825ce5bd4fb83a --- lams_tool_laqa/web/monitoring/MonitoringMaincontent.jsp (.../MonitoringMaincontent.jsp) (revision a7661f206a3f21114f1c05f9a29f56e20f5e35f0) +++ lams_tool_laqa/web/monitoring/MonitoringMaincontent.jsp (.../MonitoringMaincontent.jsp) (revision 7d0d609b844ea5e9c41f46d209825ce5bd4fb83a) @@ -120,10 +120,6 @@