Index: lams_tool_survey/conf/language/ApplicationResources.properties =================================================================== diff -u -rc856a18bf4731ff3a9ba197b01e278b65549acb0 -r103eacc68afe9e0df0c7bae49c482eb34873165a --- lams_tool_survey/conf/language/ApplicationResources.properties (.../ApplicationResources.properties) (revision c856a18bf4731ff3a9ba197b01e278b65549acb0) +++ lams_tool_survey/conf/language/ApplicationResources.properties (.../ApplicationResources.properties) (revision 103eacc68afe9e0df0c7bae49c482eb34873165a) @@ -163,5 +163,6 @@ error.chart.gen=Error occurs during generating chart, please try again. error.single.choice.over=Only one option or open text can be chosen. title.chart.report=Report of Individual Question -label.learner=Learner -label.answer=Answer \ No newline at end of file +label.answer=Answer +label.session.name=Session Name +label.number.learners=# of learners Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/SurveyConstants.java =================================================================== diff -u -rc856a18bf4731ff3a9ba197b01e278b65549acb0 -r103eacc68afe9e0df0c7bae49c482eb34873165a --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/SurveyConstants.java (.../SurveyConstants.java) (revision c856a18bf4731ff3a9ba197b01e278b65549acb0) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/SurveyConstants.java (.../SurveyConstants.java) (revision 103eacc68afe9e0df0c7bae49c482eb34873165a) @@ -77,6 +77,7 @@ public static final String PAGE_EDITABLE = "isPageEditable"; public static final String ATTR_FILE_TYPE_FLAG = "fileTypeFlag"; public static final String ATTR_SURVEY_FORM = "surveyForm"; + public static final String ATTR_STATISTIC_LIST = "statistic"; public static final String ATTR_INSTRUCTION_LIST = "instructionList"; public static final String ATT_ATTACHMENT_LIST = "instructionAttachmentList"; Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dto/AnswerDTO.java =================================================================== diff -u -rc856a18bf4731ff3a9ba197b01e278b65549acb0 -r103eacc68afe9e0df0c7bae49c482eb34873165a --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dto/AnswerDTO.java (.../AnswerDTO.java) (revision c856a18bf4731ff3a9ba197b01e278b65549acb0) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/dto/AnswerDTO.java (.../AnswerDTO.java) (revision 103eacc68afe9e0df0c7bae49c482eb34873165a) @@ -32,8 +32,8 @@ import org.lamsfoundation.lams.tool.survey.model.SurveyAnswer; import org.lamsfoundation.lams.tool.survey.model.SurveyOption; import org.lamsfoundation.lams.tool.survey.model.SurveyQuestion; +import org.lamsfoundation.lams.tool.survey.model.SurveyUser; import org.lamsfoundation.lams.tool.survey.util.SurveyOptionComparator; -import org.lamsfoundation.lams.tool.survey.util.SurveyWebUtils; @@ -50,6 +50,9 @@ private String openResponseFormatStr; private int openResponseCount; + //this field could have value even this user does not reply this question (the answer is null) + private SurveyUser replier; + static Logger logger = Logger.getLogger(AnswerDTO.class.getName()); public AnswerDTO(SurveyQuestion question){ try { @@ -103,5 +106,12 @@ public void setOpenResponseFormatStr(String openResponseFormatStr) { this.openResponseFormatStr = openResponseFormatStr; } + + public SurveyUser getReplier() { + return replier; + } + public void setReplier(SurveyUser replier) { + this.replier = replier; + } } Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/ISurveyService.java =================================================================== diff -u -rc856a18bf4731ff3a9ba197b01e278b65549acb0 -r103eacc68afe9e0df0c7bae49c482eb34873165a --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/ISurveyService.java (.../ISurveyService.java) (revision c856a18bf4731ff3a9ba197b01e278b65549acb0) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/ISurveyService.java (.../ISurveyService.java) (revision 103eacc68afe9e0df0c7bae49c482eb34873165a) @@ -108,7 +108,7 @@ */ void deleteQuestion(Long uid); /** - * Get question and its answer list by session and user. + * Get a learner's all answers in a survey. * @param sessionId * @param userUid * @return @@ -206,12 +206,17 @@ */ SortedMap> getSummary(Long contentId); - + /** + * Return a map which sorted by SurveySesson and a list of total user count in this session. + * @param contentId + * @return + */ + SortedMap getStatistic(Long contentId); //****************************************************************************************** // Export portfolio methods //****************************************************************************************** - SortedMap>> exportByLeaner(SurveyUser learner); - SortedMap>> exportByContentId(Long toolContentID); + SortedMap>> exportByLeaner(SurveyUser learner); + SortedMap>> exportByContentId(Long toolContentID); //****************************************************************************************** // NOTEBOOK Functions @@ -243,5 +248,6 @@ */ Map> getReflectList(Long contentId); + } Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java =================================================================== diff -u -rc856a18bf4731ff3a9ba197b01e278b65549acb0 -r103eacc68afe9e0df0c7bae49c482eb34873165a --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java (.../SurveyServiceImpl.java) (revision c856a18bf4731ff3a9ba197b01e278b65549acb0) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java (.../SurveyServiceImpl.java) (revision 103eacc68afe9e0df0c7bae49c482eb34873165a) @@ -83,6 +83,7 @@ import org.lamsfoundation.lams.tool.survey.model.SurveyQuestion; import org.lamsfoundation.lams.tool.survey.model.SurveySession; import org.lamsfoundation.lams.tool.survey.model.SurveyUser; +import org.lamsfoundation.lams.tool.survey.util.QuestionsComparator; import org.lamsfoundation.lams.tool.survey.util.SurveySessionComparator; import org.lamsfoundation.lams.tool.survey.util.SurveyToolContentHandler; import org.lamsfoundation.lams.tool.survey.util.SurveyUserComparator; @@ -326,6 +327,7 @@ if(answer != null) answer.setChoices(SurveyWebUtils.getChoiceList(answer.getAnswerChoices())); answerDTO.setAnswer(answer); + answerDTO.setReplier((SurveyUser) surveyUserDao.getObject(SurveyUser.class, userUid)); answers.add(answerDTO); } return answers; @@ -426,15 +428,30 @@ return summary; } + public SortedMap getStatistic(Long contentId){ + SortedMap result = new TreeMap(new SurveySessionComparator()); + List sessionList = surveySessionDao.getByContentId(contentId); + if(sessionList == null) + return result; + + for (SurveySession session : sessionList) { + List users = getSessionUsers(session.getSessionId()); + result.put(session, users != null?users.size():0); + } + + return result; + + } public SurveyQuestion getQuestion(Long questionUid) { return surveyQuestionDao.getByUid(questionUid); } - public SortedMap>> exportByContentId(Long toolContentID) { - SortedMap>> summary = - new TreeMap>>(new SurveySessionComparator()); + public SortedMap>> exportByContentId(Long toolContentID) { + + SortedMap>> summary = + new TreeMap>>(new SurveySessionComparator()); //get all tool sessions in this content List sessions = surveySessionDao.getByContentId(toolContentID); @@ -444,41 +461,70 @@ List users = surveyUserDao.getBySessionID(session.getSessionId()); //container for this user's answers - SortedMap> learnerAnswers = - new TreeMap>(new SurveyUserComparator()); + List> learnerAnswers = new ArrayList>(); if(users != null){ //for every user, get answers of all questions. for (SurveyUser user : users) { List answers = getQuestionAnswers(user.getSession().getSessionId(), user.getUid()); - learnerAnswers.put(user, answers); + learnerAnswers.add(answers); } } - summary.put(session, learnerAnswers); + toQuestionMap(summary, session, learnerAnswers); } } return summary; } - public SortedMap>> exportByLeaner(SurveyUser learner) { - SortedMap>> summary = - new TreeMap>>(new SurveySessionComparator()); + + public SortedMap>> exportByLeaner(SurveyUser learner) { + SortedMap>> summary = + new TreeMap>>(new SurveySessionComparator()); + SurveySession session = learner.getSession(); + List answers = getQuestionAnswers(session.getSessionId(), learner.getUid()); + List> learnerAnswers = new ArrayList>(); + learnerAnswers.add(answers); - List answers = getQuestionAnswers(learner.getSession().getSessionId(), learner.getUid()); - SortedMap> learnerAnswers = new TreeMap>(new SurveyUserComparator()); - learnerAnswers.put(learner, answers); + toQuestionMap(summary, session, learnerAnswers); - summary.put(learner.getSession(), learnerAnswers); - return summary; } //***************************************************************************** // private methods //***************************************************************************** + /** + * Convert all user's answers to another map sorted by SurveyQuestion, rather than old sorted by user. + */ + private void toQuestionMap(SortedMap>> summary + , SurveySession session, List> learnerAnswers) { + //after get all users' all answers, then sort them by SurveyQuestion + SortedMap> questionMap = new TreeMap>(new QuestionsComparator()); + Survey survey = getSurveyBySessionId(session.getSessionId()); + Set questionList = survey.getQuestions(); + if(questionList != null){ + for (SurveyQuestion question : questionList) { + List queAnsList = new ArrayList(); + questionMap.put(question, queAnsList); + for (List listAns : learnerAnswers) { + for (AnswerDTO answerDTO : listAns) { + //get a user's answer for this question + if(answerDTO.getUid().equals(question.getUid())){ + queAnsList.add(answerDTO); + break; + } + } + //find another user's answer + } + }//for this question, get all users answer, the continue next + } + + summary.put(session, questionMap); + } + private Survey getDefaultSurvey() throws SurveyApplicationException { Long defaultSurveyId = getToolDefaultContentIdBySignature(SurveyConstants.TOOL_SIGNATURE); Survey defaultSurvey = getSurveyByContentId(defaultSurveyId); Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/action/MonitoringAction.java =================================================================== diff -u -rc856a18bf4731ff3a9ba197b01e278b65549acb0 -r103eacc68afe9e0df0c7bae49c482eb34873165a --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision c856a18bf4731ff3a9ba197b01e278b65549acb0) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 103eacc68afe9e0df0c7bae49c482eb34873165a) @@ -111,12 +111,21 @@ Long contentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); ISurveyService service = getSurveyService(); + //get summary SortedMap> summary = service.getSummary(contentId); + + //get survey Survey survey = service.getSurveyByContentId(contentId); + //get statistic + SortedMap statis = service.getStatistic(contentId); + + //get refection list Map >relectList = service.getReflectList(contentId); + //cache into sessionMap sessionMap.put(SurveyConstants.ATTR_SUMMARY_LIST, summary); + sessionMap.put(SurveyConstants.ATTR_STATISTIC_LIST, statis); sessionMap.put(SurveyConstants.PAGE_EDITABLE, new Boolean(SurveyWebUtils.isSurveyEditable(survey))); sessionMap.put(SurveyConstants.ATTR_SURVEY, survey); sessionMap.put(AttributeNames.PARAM_TOOL_CONTENT_ID, contentId); @@ -159,7 +168,7 @@ //get user list ISurveyService service = getSurveyService(); - SortedMap userAnswerMap = new TreeMap(new SurveyUserComparator()); + SortedMap userAnswerMap = new TreeMap(new SurveyUserComparator()); // get all users with their answers whatever they answer or not List users = service.getSessionUsers(sessionId); for (SurveyUser user : users) { Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/servlet/ExportServlet.java =================================================================== diff -u -rc856a18bf4731ff3a9ba197b01e278b65549acb0 -r103eacc68afe9e0df0c7bae49c482eb34873165a --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/servlet/ExportServlet.java (.../ExportServlet.java) (revision c856a18bf4731ff3a9ba197b01e278b65549acb0) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/web/servlet/ExportServlet.java (.../ExportServlet.java) (revision 103eacc68afe9e0df0c7bae49c482eb34873165a) @@ -40,6 +40,7 @@ import org.lamsfoundation.lams.tool.survey.SurveyConstants; import org.lamsfoundation.lams.tool.survey.dto.AnswerDTO; import org.lamsfoundation.lams.tool.survey.model.Survey; +import org.lamsfoundation.lams.tool.survey.model.SurveyQuestion; import org.lamsfoundation.lams.tool.survey.model.SurveySession; import org.lamsfoundation.lams.tool.survey.model.SurveyUser; import org.lamsfoundation.lams.tool.survey.service.ISurveyService; @@ -118,7 +119,7 @@ } - SortedMap>> groupList = service.exportByLeaner(learner); + SortedMap>> groupList = service.exportByLeaner(learner); sessionMap.put(SurveyConstants.ATTR_TITLE, content.getTitle()); sessionMap.put(SurveyConstants.ATTR_SUMMARY_LIST, groupList); } @@ -141,7 +142,7 @@ logger.error(error); throw new SurveyApplicationException(error); } - SortedMap>> groupList = service.exportByContentId(toolContentID); + SortedMap>> groupList = service.exportByContentId(toolContentID); // put it into HTTPSession sessionMap.put(SurveyConstants.ATTR_TITLE, content.getTitle()); Index: lams_tool_survey/web/pages/export/exportportfolio.jsp =================================================================== diff -u -rc856a18bf4731ff3a9ba197b01e278b65549acb0 -r103eacc68afe9e0df0c7bae49c482eb34873165a --- lams_tool_survey/web/pages/export/exportportfolio.jsp (.../exportportfolio.jsp) (revision c856a18bf4731ff3a9ba197b01e278b65549acb0) +++ lams_tool_survey/web/pages/export/exportportfolio.jsp (.../exportportfolio.jsp) (revision 103eacc68afe9e0df0c7bae49c482eb34873165a) @@ -3,84 +3,86 @@ <%@ include file="/common/taglibs.jsp"%> - <%@ page import="org.lamsfoundation.lams.tool.survey.SurveyConstants"%> + + + <%@ include file="/common/header.jsp" %>

- + ${sessionMap.title}

- - - - <%-- display question header --%> - -

- - - <%-- --%> - - - <%-- - - - - --%> - - - - - - - - - - - - - -
- <%= SurveyConstants.OPTION_SHORT_HEADER %>${optStatus.count} - - ${option.description} -
- -  
- <%-- End first check --%> -
- -

-
- - - - - + + + + <%-- only display question list once --%> + +

+ + +
- <%= SurveyConstants.OPTION_SHORT_HEADER %>${optStatus.count} -
+ + <%-- --%> + + + + + + + - - + + + + + - + +
${qeStatus.count} :
+ <%= SurveyConstants.OPTION_SHORT_HEADER %>${optTitleStatus.count} + + ${optionTitle.description} +
- -
+ +  
+ +

${toolSession.sessionName}

+ + + + <%-- only display session name once for each session group--%> + <%-- Display question header --%> + + + + + + + + + + + <%-- User answer list --%> - + - + <%-- End all answers for this question --%> +
${questionStatus.count} + <%= SurveyConstants.OPTION_SHORT_HEADER %>${optStatus.count} + + +
${user.loginName}${answer.replier.loginName} - + - + @@ -94,20 +96,20 @@ - - + +  
-
- <%-- End first check --%> -
-
-
+ <%-- End question table --%> + + <%-- End session table --%> +
Index: lams_tool_survey/web/pages/monitoring/statistic.jsp =================================================================== diff -u -r6a5d35ec57dde95eae93fb628d669af257d36949 -r103eacc68afe9e0df0c7bae49c482eb34873165a --- lams_tool_survey/web/pages/monitoring/statistic.jsp (.../statistic.jsp) (revision 6a5d35ec57dde95eae93fb628d669af257d36949) +++ lams_tool_survey/web/pages/monitoring/statistic.jsp (.../statistic.jsp) (revision 103eacc68afe9e0df0c7bae49c482eb34873165a) @@ -1,4 +1,25 @@ <%@ include file="/common/taglibs.jsp"%> + + + - +
+ + + + + + + + + + + + + +
+ + + +
${session.sessionName}
${usersInSession}