Index: lams_tool_assessment/conf/xdoclet/struts-actions.xml =================================================================== diff -u -rd4022a5f15973e49528bcc3872b6ef4038dc4181 -r7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649 --- lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision d4022a5f15973e49528bcc3872b6ef4038dc4181) +++ lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision 7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649) @@ -240,16 +240,6 @@ - - - - - - PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception + PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception - PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentQuestionResultDAO.java =================================================================== diff -u -r95a8036ef190595474c3bac650ecd8e004434fd2 -r7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentQuestionResultDAO.java (.../AssessmentQuestionResultDAO.java) (revision 95a8036ef190595474c3bac650ecd8e004434fd2) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentQuestionResultDAO.java (.../AssessmentQuestionResultDAO.java) (revision 7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649) @@ -33,17 +33,7 @@ int getNumberWrongAnswersDoneBefore(Long assessmentUid, Long userId, Long questionUid); List getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid); + + AssessmentQuestionResult getAssessmentQuestionResultByUid(Long questionResultUid); -// public AssessmentQuestionResult getAssessmentQuestionResult(Long questionUid, Long userId); -// -// /** -// * Return list which contains key pair which key is assessment question uid, value is number view. -// * -// * @param contentId -// * @return -// */ -// public Map getSummary(Long contentId); -// -// public List getAssessmentQuestionResultBySession(Long sessionId, Long questionUid); - } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java =================================================================== diff -u -rd4022a5f15973e49528bcc3872b6ef4038dc4181 -r7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java (.../AssessmentResultDAO.java) (revision d4022a5f15973e49528bcc3872b6ef4038dc4181) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java (.../AssessmentResultDAO.java) (revision 7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649) @@ -36,16 +36,8 @@ AssessmentResult getLastFinishedAssessmentResult(Long assessmentUid, Long userId); int getAssessmentResultCount(Long assessmentUid, Long userId); + + AssessmentResult getAssessmentResultByUid(Long assessmentResultUid); -// /** -// * Return list which contains key pair which key is assessment question uid, value is number view. -// * -// * @param contentId -// * @return -// */ -// Map getSummary(Long contentId); - -// List getAssessmentResultBySession(Long sessionId, Long questionUid); - } \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java =================================================================== diff -u -r95a8036ef190595474c3bac650ecd8e004434fd2 -r7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java (.../AssessmentQuestionResultDAOHibernate.java) (revision 95a8036ef190595474c3bac650ecd8e004434fd2) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java (.../AssessmentQuestionResultDAOHibernate.java) (revision 7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649) @@ -31,63 +31,22 @@ public class AssessmentQuestionResultDAOHibernate extends BaseDAOHibernate implements AssessmentQuestionResultDAO { -// private static final String FIND_BY_QUESTION_AND_USER = "from " + AssessmentQuestionResult.class.getName() -// + " as r where r.user.userId = ? and r.assessmentQuestion.uid=?"; -// + private static final String FIND_BY_UID = "from " + AssessmentQuestionResult.class.getName() + + " as r where r.uid = ?"; + private static final String FIND_BY_ASSESSMENT_QUESTION_AND_USER = "from " + AssessmentQuestionResult.class.getName() + " as q, " + AssessmentResult.class.getName() + " as r " + " where q.resultUid = r.uid and r.assessment.uid = ? and r.user.userId =? and q.assessmentQuestion.uid =? order by r.startDate asc"; -//// private static final String FIND_VIEW_COUNT_BY_USER = "select count(*) from " -//// + AssessmentQuestionResult.class.getName() + " as r where r.sessionId=? and r.user.userId =?"; -// -// private static final String FIND_WRONG_ANSWERS_NUMBER = "select v.assessmentQuestion.uid, count(v.assessmentQuestion) from " -// + AssessmentQuestionResult.class.getName() + " as v , " + AssessmentSession.class.getName() + " as s, " -// + Assessment.class.getName() + " as r " + " where v.sessionId = s.sessionId " -// + " and s.assessment.uid = r.uid " + " and r.contentId =? " -// + " group by v.sessionId, v.assessmentQuestion.uid "; - private static final String FIND_WRONG_ANSWERS_NUMBER = "select count(q) from " + AssessmentQuestionResult.class.getName() + " as q, " + AssessmentResult.class.getName() + " as r " + " where q.resultUid = r.uid and r.assessment.uid = ? and r.user.userId =? and q.assessmentQuestion.uid =? and q.mark < q.assessmentQuestion.defaultGrade"; - -// public AssessmentQuestionResult getAssessmentQuestionResult(Long questionUid, Long userId) { -// List list = getHibernateTemplate().find(FIND_BY_QUESTION_AND_USER, new Object[] { userId, questionUid }); -// if (list == null || list.size() == 0) -// return null; -// return (AssessmentQuestionResult) list.get(0); -// } -// -// public int getUserViewLogCount(Long toolSessionId, Long userUid) { -// List list = getHibernateTemplate().find(FIND_VIEW_COUNT_BY_USER, new Object[] { toolSessionId, userUid }); -// if (list == null || list.size() == 0) -// return 0; -// return ((Number) list.get(0)).intValue(); -// } -// -// public Map getSummary(Long contentId) { -// -// // Note: Hibernate 3.1 query.uniqueResult() returns Integer, Hibernate 3.2 query.uniqueResult() returns Long -// List result = getHibernateTemplate().find(FIND_WRONG_ANSWERS_NUMBER, contentId); -// Map summaryList = new HashMap(result.size()); -// for (Object[] list : result) { -// if (list[1] != null) { -// summaryList.put((Long) list[0], new Integer(((Number) list[1]).intValue())); -// } -// } -// return summaryList; -// -// } -// -// public List getAssessmentQuestionResultBySession(Long sessionId, Long questionUid) { -// return getHibernateTemplate().find(FIND_BY_ASSESSMENT_QUESTION_AND_USER, new Object[] { sessionId, questionUid }); -// } public int getNumberWrongAnswersDoneBefore(Long assessmentUid, Long userId, Long questionUid) { List list = getHibernateTemplate().find(FIND_WRONG_ANSWERS_NUMBER, new Object[] { assessmentUid, userId, questionUid }); @@ -101,5 +60,12 @@ public List getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid) { return getHibernateTemplate().find(FIND_BY_ASSESSMENT_QUESTION_AND_USER, new Object[] { assessmentUid, userId, questionUid }); } + + public AssessmentQuestionResult getAssessmentQuestionResultByUid(Long questionResultUid) { + List list = getHibernateTemplate().find(FIND_BY_UID, new Object[] { questionResultUid }); + if (list == null || list.size() == 0) + return null; + return (AssessmentQuestionResult) list.get(0); + } } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java =================================================================== diff -u -rd4022a5f15973e49528bcc3872b6ef4038dc4181 -r7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision d4022a5f15973e49528bcc3872b6ef4038dc4181) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision 7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649) @@ -26,10 +26,14 @@ import java.util.List; import org.lamsfoundation.lams.tool.assessment.dao.AssessmentResultDAO; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult; import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult; public class AssessmentResultDAOHibernate extends BaseDAOHibernate implements AssessmentResultDAO { + private static final String FIND_BY_UID = "from " + AssessmentResult.class.getName() + + " as r where r.uid = ?"; + private static final String FIND_BY_ASSESSMENT_AND_USER = "from " + AssessmentResult.class.getName() + " as r where r.user.userId = ? and r.assessment.uid=? order by r.startDate asc"; @@ -70,6 +74,13 @@ return ((Number) list.get(0)).intValue(); } } + + public AssessmentResult getAssessmentResultByUid(Long assessmentResultUid) { + List list = getHibernateTemplate().find(FIND_BY_UID, new Object[] { assessmentResultUid }); + if (list == null || list.size() == 0) + return null; + return (AssessmentResult) list.get(0); + } } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/QuestionSummary.java =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/QuestionSummary.java (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/QuestionSummary.java (revision 7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649) @@ -0,0 +1,71 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.tool.assessment.dto; + +import java.util.Date; +import java.util.List; + +import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestion; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; + +/** + * List contains following element:
+ * + *
  • session_id
  • session_name
  • AssessmentQuestion.uid
  • AssessmentQuestion.question_type
  • + * AssessmentQuestion.create_by_author
  • AssessmentQuestion.is_hide
  • AssessmentQuestion.title
  • + * User.login_name
  • count(assessment_question_uid)
  • + * + * @author Andrey Balan + */ +public class QuestionSummary { + + private AssessmentQuestion question; + private float averageMark; + + private List> questionResultsPerSession; + + public AssessmentQuestion getQuestion() { + return question; + } + public void setQuestion(AssessmentQuestion question) { + this.question = question; + } + + public float getAverageMark() { + return averageMark; + } + public void setAverageMark(float averageMark) { + this.averageMark = averageMark; + } + + public List> getQuestionResultsPerSession() { + return questionResultsPerSession; + } + public void setQuestionResultsPerSession(List> questionResultsPerSession) { + this.questionResultsPerSession = questionResultsPerSession; + } + +} + \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java =================================================================== diff -u -rd4022a5f15973e49528bcc3872b6ef4038dc4181 -r7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java (.../AssessmentQuestionResult.java) (revision d4022a5f15973e49528bcc3872b6ef4038dc4181) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java (.../AssessmentQuestionResult.java) (revision 7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649) @@ -51,6 +51,7 @@ // DTO fields: private Date finishDate; + private AssessmentUser user; public AssessmentQuestionResult() { optionAnswers = new LinkedHashSet(); @@ -196,5 +197,12 @@ public void setFinishDate(Date finishDate) { this.finishDate = finishDate; } + + public AssessmentUser getUser() { + return user; + } + public void setUser(AssessmentUser user) { + this.user = user; + } } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -rd4022a5f15973e49528bcc3872b6ef4038dc4181 -r7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision d4022a5f15973e49528bcc3872b6ef4038dc4181) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649) @@ -74,6 +74,7 @@ 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.QuestionSummary; import org.lamsfoundation.lams.tool.assessment.dto.Summary; import org.lamsfoundation.lams.tool.assessment.dto.UserSummary; import org.lamsfoundation.lams.tool.assessment.dto.UserSummaryItem; @@ -626,10 +627,9 @@ return summaryList; } - public UserSummary getUserSummary(Long contentId, Long userId) { + public UserSummary getUserSummary(Long contentId, Long userId, Long sessionId) { UserSummary userSummary = new UserSummary(); - - AssessmentUser user = assessmentUserDao.getUserByUserIDAndContentID(userId, contentId); + AssessmentUser user = assessmentUserDao.getUserByUserIDAndSessionID(userId, sessionId); userSummary.setUser(user); List results = assessmentResultDao.getAssessmentResults(contentId, userId); userSummary.setNumberOfAttempts(results.size()); @@ -665,38 +665,63 @@ return userSummary; } - -// public List getUserListBySessionQuestion(Long sessionId, Long questionUid) { -// List logList = assessmentQuestionResultDao.getAssessmentQuestionResultBySession( -// sessionId, questionUid); -// List userList = new ArrayList(logList.size()); -// for (AssessmentQuestionResult visit : logList) { -//// AssessmentUser user = visit.getUser(); -//// user.setAccessDate(visit.getStartDate()); -//// userList.add(user); -// } -// return userList; -// } - - public void setQuestionVisible(Long questionUid, boolean visible) { + + public QuestionSummary getQuestionSummary(Long contentId, Long questionUid) { + QuestionSummary questionSummary = new QuestionSummary(); AssessmentQuestion question = assessmentQuestionDao.getByUid(questionUid); - if (question != null) { - // createBy should be null for system default value. - Long userId = 0L; - String loginName = "No user"; - if (question.getCreateBy() != null) { - userId = question.getCreateBy().getUserId(); - loginName = question.getCreateBy().getLoginName(); + questionSummary.setQuestion(question); + + List> questionResults = new ArrayList>(); + List sessionList = assessmentSessionDao.getByContentId(contentId); + for (AssessmentSession session : sessionList) { + List users = assessmentUserDao.getBySessionID(session.getSessionId()); + // Set sessionQuestionResults = new TreeSet( + // new AssessmentQuestionResultComparator()); + ArrayList sessionQuestionResults = new ArrayList(); + for (AssessmentUser user : users) { + AssessmentResult assessmentResult = assessmentResultDao.getLastFinishedAssessmentResult(contentId, user.getUserId()); + AssessmentQuestionResult questionResult = null; + if (assessmentResult == null) { + questionResult = new AssessmentQuestionResult(); + } else { + for (AssessmentQuestionResult dbQuestionResult : assessmentResult.getQuestionResults()) { + if (dbQuestionResult.getAssessmentQuestion().getUid().equals(questionUid)) { + questionResult = dbQuestionResult; + break; + } + } + } + questionResult.setUser(user); + sessionQuestionResults.add(questionResult); } - if (visible) { - auditService.logShowEntry(AssessmentConstants.TOOL_SIGNATURE, userId, loginName, question.toString()); - } else { - auditService.logHideEntry(AssessmentConstants.TOOL_SIGNATURE, userId, loginName, question.toString()); + questionResults.add(sessionQuestionResults); + } + questionSummary.setQuestionResultsPerSession(questionResults); + + int count = 0; + float total = 0; + for(List sessionQuestionResults : questionResults) { + for (AssessmentQuestionResult questionResult : sessionQuestionResults) { + count++; + total+=questionResult.getMark(); } - question.setHide(!visible); - assessmentQuestionDao.saveObject(question); } + float averageMark = (count == 0) ? 0 : total/count; + questionSummary.setAverageMark(averageMark); + + return questionSummary; } + + public void changeQuestionResultMark(Long questionResultUid, float newMark) { + AssessmentQuestionResult questionResult = assessmentQuestionResultDao.getAssessmentQuestionResultByUid(questionResultUid); + float oldMark = questionResult.getMark(); + questionResult.setMark(newMark); + assessmentQuestionResultDao.saveObject(questionResult); + + AssessmentResult result = assessmentResultDao.getAssessmentResultByUid(questionResult.getResultUid()); + result.setGrade(result.getGrade() - oldMark + newMark); + assessmentResultDao.saveObject(result); + } public AssessmentUser getUser(Long uid) { return (AssessmentUser) assessmentUserDao.getObject(AssessmentUser.class, uid); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -rd4022a5f15973e49528bcc3872b6ef4038dc4181 -r7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision d4022a5f15973e49528bcc3872b6ef4038dc4181) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649) @@ -29,6 +29,7 @@ import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.events.IEventNotificationService; +import org.lamsfoundation.lams.tool.assessment.dto.QuestionSummary; import org.lamsfoundation.lams.tool.assessment.dto.Summary; import org.lamsfoundation.lams.tool.assessment.dto.UserSummary; import org.lamsfoundation.lams.tool.assessment.model.Assessment; @@ -206,18 +207,13 @@ * @param userId * @return */ - UserSummary getUserSummary(Long contentId, Long userId); + UserSummary getUserSummary(Long contentId, Long userId, Long sessionId); + + QuestionSummary getQuestionSummary(Long contentId, Long questionUid); + + void changeQuestionResultMark(Long questionResultUid, float newMark); /** - * Set a assessment question visible or not. - * - * @param questionUid - * @param visible - * true, question is visible. False, question is invisible. - */ - void setQuestionVisible(Long questionUid, boolean visible); - - /** * Get assessment question Summary list according to sessionId and skipHide flag. * * @param sessionId Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java =================================================================== diff -u -rd4022a5f15973e49528bcc3872b6ef4038dc4181 -r7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision d4022a5f15973e49528bcc3872b6ef4038dc4181) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649) @@ -37,9 +37,15 @@ import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.lamsfoundation.lams.tool.assessment.AssessmentConstants; +import org.lamsfoundation.lams.tool.assessment.dto.QuestionSummary; import org.lamsfoundation.lams.tool.assessment.dto.Summary; import org.lamsfoundation.lams.tool.assessment.dto.UserSummary; +import org.lamsfoundation.lams.tool.assessment.dto.UserSummaryItem; import org.lamsfoundation.lams.tool.assessment.model.Assessment; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestion; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionOption; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult; import org.lamsfoundation.lams.tool.assessment.service.IAssessmentService; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.util.AttributeNames; @@ -69,14 +75,6 @@ return saveUserGrade(mapping, form, request, response); } - // not using now - if (param.equals("showQuestion")) { - return showQuestion(mapping, form, request, response); - } - if (param.equals("hideQuestion")) { - return hideQuestion(mapping, form, request, response); - } - return mapping.findForward(AssessmentConstants.ERROR); } @@ -90,6 +88,14 @@ Long contentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); IAssessmentService service = getAssessmentService(); List summaryList = service.getSummaryList(contentId); + + for (Summary summary : summaryList) { + for (AssessmentResult result : summary.getAssessmentResults()) { + for (AssessmentQuestionResult questionResult : result.getQuestionResults()) { + escapeQuotesInQuestionResult(questionResult); + } + } + } Assessment assessment = service.getAssessmentByContentId(contentId); assessment.toDTO(); @@ -110,8 +116,18 @@ SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); - - + Long questionUid = WebUtil.readLongParam(request, AssessmentConstants.PARAM_QUESTION_UID); + Long contentId = (Long) sessionMap.get(AssessmentConstants.ATTR_TOOL_CONTENT_ID); + IAssessmentService service = getAssessmentService(); + QuestionSummary questionSummary = service.getQuestionSummary(contentId, questionUid); + + for (List sessionQuestionResults : questionSummary.getQuestionResultsPerSession()) { + for (AssessmentQuestionResult questionResult : sessionQuestionResults) { + escapeQuotesInQuestionResult(questionResult); + } + } + + request.setAttribute(AssessmentConstants.ATTR_QUESTION_SUMMARY, questionSummary); return mapping.findForward(AssessmentConstants.SUCCESS); } @@ -122,78 +138,33 @@ 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); IAssessmentService service = getAssessmentService(); - UserSummary userSummary = service.getUserSummary(contentId, userId); + UserSummary userSummary = service.getUserSummary(contentId, userId, sessionId); + + for (UserSummaryItem userSummaryItem : userSummary.getUserSummaryItems()) { + for (AssessmentQuestionResult questionResult : userSummaryItem.getQuestionResults()) { + escapeQuotesInQuestionResult(questionResult); + } + } + request.setAttribute(AssessmentConstants.ATTR_USER_SUMMARY, userSummary); return mapping.findForward(AssessmentConstants.SUCCESS); } private ActionForward saveUserGrade(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { - 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()); - - + if (request.getParameter(AssessmentConstants.PARAM_NOT_A_NUMBER) == null) { + Long questionResultUid = WebUtil.readLongParam(request, AssessmentConstants.PARAM_QUESTION_RESULT_UID); + float newGrade = Float.valueOf(request.getParameter(AssessmentConstants.PARAM_GRADE)); + IAssessmentService service = getAssessmentService(); + service.changeQuestionResultMark(questionResultUid, newGrade); + } - return mapping.findForward(AssessmentConstants.SUCCESS); + return null; } - private ActionForward hideQuestion(ActionMapping mapping, ActionForm form, HttpServletRequest request, - HttpServletResponse response) { - - Long itemUid = WebUtil.readLongParam(request, AssessmentConstants.PARAM_QUESTION_UID); - IAssessmentService service = getAssessmentService(); - service.setQuestionVisible(itemUid, false); - - // get back SessionMap - 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()); - -// // update session value -// List groupList = (List) sessionMap.get(AssessmentConstants.ATTR_SUMMARY_LIST); -// if (groupList != null) { -// for (List group : groupList) { -// for (Summary sum : group) { -// if (itemUid.equals(sum.getQuestionUid())) { -// sum.setQuestionHide(true); -// break; -// } -// } -// } -// } - - return mapping.findForward(AssessmentConstants.SUCCESS); - } - - private ActionForward showQuestion(ActionMapping mapping, ActionForm form, HttpServletRequest request, - HttpServletResponse response) { - Long itemUid = WebUtil.readLongParam(request, AssessmentConstants.PARAM_QUESTION_UID); - IAssessmentService service = getAssessmentService(); - service.setQuestionVisible(itemUid, true); - - // get back SessionMap - 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()); - -// // update session value -// List groupList = (List) sessionMap.get(AssessmentConstants.ATTR_SUMMARY_LIST); -// if (groupList != null) { -// for (List group : groupList) { -// for (Summary sum : group) { -// if (itemUid.equals(sum.getQuestionUid())) { -// sum.setQuestionHide(false); -// break; -// } -// } -// } -// } - return mapping.findForward(AssessmentConstants.SUCCESS); - } - // ************************************************************************************* // Private method // ************************************************************************************* @@ -202,4 +173,29 @@ .getServletContext()); return (IAssessmentService) wac.getBean(AssessmentConstants.ASSESSMENT_SERVICE); } + + private void escapeQuotesInQuestionResult(AssessmentQuestionResult questionResult) { + String answerString = questionResult.getAnswerString(); + if (answerString != null) { + questionResult.setAnswerString(answerString.replaceAll("[\"]", """)); + } + + AssessmentQuestion question = questionResult.getAssessmentQuestion(); + String title = question.getTitle(); + if (title != null) { + question.setTitle(title.replaceAll("[\"]", """)); + } + + for (AssessmentQuestionOption questionOption : question.getQuestionOptions()) { + String questionStr = questionOption.getQuestion(); + if (questionStr != null) { + questionOption.setQuestion(questionStr.replaceAll("[\"]", """)); + } + + String optionStr = questionOption.getOptionString(); + if (optionStr != null) { + questionOption.setOptionString(optionStr.replaceAll("[\"]", """)); + } + } + } } Index: lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp =================================================================== diff -u --- lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp (revision 0) +++ lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp (revision 7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649) @@ -0,0 +1,188 @@ + + +<%@ include file="/common/taglibs.jsp"%> + + + + <%@ include file="/common/header.jsp"%> + + + + + + + + + + + + + + + +
    + +

    + +

    +

    + <%@ include file="/common/messages.jsp"%> + + + + + + + + + + + + + + + + + + + + + +
    + + + ${userSummary.user.firstName} ${userSummary.user.lastName} +
    + + + ${userSummary.numberOfAttempts} +
    + + + + +
    + + + ${userSummary.lastAttemptGrade} +
    +

    + + +
    + + + + + + + + + +
    + + + ${userSummaryItem.question.title} +
    + + + ${userSummaryItem.question.question} +
    + +
    +
    +
    + + + + + + + + +
    + + + + + + +
    Index: lams_tool_assessment/web/pages/monitoring/parts/userresponse.jsp =================================================================== diff -u -rd4022a5f15973e49528bcc3872b6ef4038dc4181 -r7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649 --- lams_tool_assessment/web/pages/monitoring/parts/userresponse.jsp (.../userresponse.jsp) (revision d4022a5f15973e49528bcc3872b6ef4038dc4181) +++ lams_tool_assessment/web/pages/monitoring/parts/userresponse.jsp (.../userresponse.jsp) (revision 7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649) @@ -3,7 +3,7 @@ - responseStr += ${questionOption.optionString}+"
    "; + responseStr += "${questionOption.optionString}";
    @@ -13,15 +13,15 @@ responseStr +=''; responseStr +=''; - responseStr +='${questionOption.question}'; + responseStr +="${questionOption.question}"; responseStr +=''; responseStr +=''; responseStr +='-'; - responseStr +='${questionOption2.optionString}'; + responseStr +="${questionOption2.optionString}"; @@ -32,26 +32,26 @@ responseStr +=''; - responseStr +='${questionResult.answerString}'; + responseStr +="${questionResult.answerString}"; - responseStr +='${questionResult.answerString}'; + responseStr +="${questionResult.answerString}"; - responseStr +='${questionResult.answerBoolean}'; + responseStr +="${questionResult.answerBoolean}"; - responseStr +='${questionResult.answerString}'; + responseStr +="${questionResult.answerString}"; - responseStr +=${questionOption.optionString}+"
    "; + responseStr +="${questionOption.optionString}";
    Index: lams_tool_assessment/web/pages/monitoring/parts/usersummary.jsp =================================================================== diff -u -rb9e5cf0180e43a0827078d30cc1176b16dae66ee -r7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649 --- lams_tool_assessment/web/pages/monitoring/parts/usersummary.jsp (.../usersummary.jsp) (revision b9e5cf0180e43a0827078d30cc1176b16dae66ee) +++ lams_tool_assessment/web/pages/monitoring/parts/usersummary.jsp (.../usersummary.jsp) (revision 7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649) @@ -2,8 +2,6 @@ "http://www.w3.org/TR/html4/loose.dtd"> <%@ include file="/common/taglibs.jsp"%> -<% pageContext.setAttribute("doublequote", "\""); %> -<% pageContext.setAttribute("singlequote", "'"); %> @@ -47,9 +45,32 @@ imgpath: "" + "jqGrid.basic.theme", multiselect: false, - caption: "${fn:replace(question.title, doublequote, singlequote)}", + caption: "${question.title}", cellurl: '', - cellEdit: true + cellEdit: true, + afterSaveCell : function (rowid,name,val,iRow,iCol){ + if (isNaN(val)) { + jQuery("#user${question.uid}").restoreCell(iRow,iCol); + } + }, + beforeSubmitCell : function (rowid,name,val,iRow,iCol){ + if (isNaN(val)) { + return {nan:true}; + } else { + var questionResultUid = jQuery("#user${question.uid}").getCell(rowid, 'questionResultUid'); + return {questionResultUid:questionResultUid}; + } + } + /* resetSelection() doesn't work in this version + hope it'll be fixed in the next one + + , + onSelectRow: function (rowid){ + $("[id^='user']").resetSelection(); + }, + onCellSelect: function (rowid, iCol, cellcontent){ + jQuery("#user${question.uid+1}").resetSelection(); + }*/ }).hideCol("questionResultUid"); Index: lams_tool_assessment/web/pages/monitoring/summary.jsp =================================================================== diff -u -rb9e5cf0180e43a0827078d30cc1176b16dae66ee -r7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649 --- lams_tool_assessment/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision b9e5cf0180e43a0827078d30cc1176b16dae66ee) +++ lams_tool_assessment/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 7f0968bf243209b9fc78a0f8f4d4b3bdbc3b7649) @@ -1,6 +1,4 @@ <%@ include file="/common/taglibs.jsp"%> -<% pageContext.setAttribute("doublequote", "\""); %> -<% pageContext.setAttribute("singlequote", "'"); %> @@ -19,15 +17,17 @@ colNames:['#', 'userId', + 'sessionId', '', - "${fn:replace(question.title, doublequote, singlequote)}", + "${question.title}", ''], colModel:[ {name:'id',index:'id', width:20, sorttype:"int"}, {name:'userId',index:'userId', width:0}, + {name:'sessionId',index:'sessionId', width:0}, {name:'userName',index:'userName', width:100}, {name:'${question.uid}', index:'${question.uid}', width:60, align:"right", sorttype:"float"}, @@ -41,17 +41,19 @@ ondblClickRow: function(rowid) { var userId = jQuery("#list${summary.sessionId}").getCell(rowid, 'userId'); + var sessionId = jQuery("#list${summary.sessionId}").getCell(rowid, 'sessionId'); var userSummaryUrl = ''; - var newUserSummaryHref = userSummaryUrl + "&userID=" + userId + "&KeepThis=true&TB_iframe=true&height=540&width=650&modal=true"; + var newUserSummaryHref = userSummaryUrl + "&userID=" + userId + "&sessionId=" + sessionId + "&KeepThis=true&TB_iframe=true&height=540&width=650&modal=true"; $("#userSummaryHref").attr("href", newUserSummaryHref); $("#userSummaryHref").click(); } - }).hideCol("userId"); + }).hideCol("userId").hideCol("sessionId"); jQuery("#list${summary.sessionId}").addRowData(${i.index + 1}, { id:"${i.index + 1}", userId:"${assessmentResult.user.userId}", + sessionId:"${assessmentResult.user.session.sessionId}", userName:"${assessmentResult.user.loginName}", @@ -73,12 +75,13 @@ }); - function createNewQuestionInitHref() { - var questionTypeDropdown = document.getElementById("questionType"); - var questionType = questionTypeDropdown.selectedIndex + 1; - var newQuestionInitHref = "${newQuestionInitUrl}&questionType=" + questionType + "&KeepThis=true&TB_iframe=true&height=540&width=850&modal=true"; - $("#newQuestionInitHref").attr("href", newQuestionInitHref) + function createQuestionSummaryHref() { + var questionUid = $("#questionUid").val(); + var questionSummaryUrl = ''; + var questionSummaryHref = "${questionSummaryUrl}&questionUid=" + questionUid + "&KeepThis=true&TB_iframe=true&height=540&width=850&modal=true"; + $("#questionSummaryHref").attr("href", questionSummaryHref) }; + function refreshThickbox(){ tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox imgLoader = new Image();// preload image @@ -143,14 +146,14 @@ - + - + - +