Index: lams_tool_lamc/conf/language/lams/ApplicationResources.properties =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/conf/language/lams/ApplicationResources.properties,v diff -u -r1.45.2.7 -r1.45.2.8 --- lams_tool_lamc/conf/language/lams/ApplicationResources.properties 9 Mar 2017 00:07:28 -0000 1.45.2.7 +++ lams_tool_lamc/conf/language/lams/ApplicationResources.properties 9 Jun 2017 03:38:49 -0000 1.45.2.8 @@ -202,6 +202,15 @@ label.operation.failed =Operation failed answers.submitted.none =Select at least one answer for each of the questions. label.summary.downloaded =Marks file downloaded. +label.number.learners=Number of Learners +label.number.groups.finished=Number of Groups Finished +label.graph.help=In the graph(s) below, click on a bar in the graph and then use your mouse wheel to zoom in and out of the graph. Once you zoom in, the grey selection in the bottom graph can be dragged left or right to show a different set of marks. +label.lowest.mark=Lowest Mark: +label.highest.mark=Highest Mark: +label.question.marks =Marks +label.number.learners.in.mark.range=Number of Learners in Mark Range +label.number.groups.in.mark.range=Number of Groups in Mark Range +label.average.mark =Average mark #======= End labels: Exported 196 labels for en AU ===== Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McAppConstants.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McAppConstants.java,v diff -u -r1.112.2.11 -r1.112.2.12 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McAppConstants.java 26 May 2017 19:36:23 -0000 1.112.2.11 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McAppConstants.java 9 Jun 2017 03:38:49 -0000 1.112.2.12 @@ -46,6 +46,7 @@ public static final String REFLECTIONS_CONTAINER_DTO = "reflectionsContainerDTO"; public static final String LEARNER_NOTEBOOK = "learnerNotebook"; public static final String USER_MASTER_DETAIL = "userMasterDetail"; + public static final String STATISTICS = "statistic"; public static final String TOOL_CONTENT_ID = "toolContentID"; public static final String TOOL_SESSION_ID = "toolSessionID"; Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUserDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUserDAO.java,v diff -u -r1.18.2.4 -r1.18.2.5 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUserDAO.java 26 May 2017 19:36:24 -0000 1.18.2.4 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUserDAO.java 9 Jun 2017 03:38:49 -0000 1.18.2.5 @@ -71,11 +71,13 @@ */ void removeMcUser(McQueUsr mcUser); - /** Get the max, min and average mark (in that order) for a session */ - Integer[] getMarkStatisticsForSession(Long sessionUid); - List getPagedUsersBySession(Long sessionId, int page, int size, String sortBy, String sortOrder, String searchString); int getCountPagedUsersBySession(Long sessionId, String searchString); + + Object[] getStatsMarksBySession(Long sessionId); + Object[] getStatsMarksForLeaders(Long toolContentId); + List getRawUserMarksBySession(Long sessionId); + List getRawLeaderMarksByToolContentId(Long toolContentId); } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUserDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUserDAO.java,v diff -u -r1.24.2.7 -r1.24.2.8 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUserDAO.java 7 Jun 2017 13:46:17 -0000 1.24.2.7 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUserDAO.java 9 Jun 2017 03:38:50 -0000 1.24.2.8 @@ -26,6 +26,9 @@ import java.util.List; import org.hibernate.Query; +import org.hibernate.SQLQuery; +import org.hibernate.type.FloatType; +import org.hibernate.type.IntegerType; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; import org.lamsfoundation.lams.tool.mc.dao.IMcUserDAO; import org.lamsfoundation.lams.tool.mc.dto.McUserMarkDTO; @@ -41,16 +44,35 @@ @Repository public class McUserDAO extends LAMSBaseDAO implements IMcUserDAO { - private static final String CALC_MARK_STATS_FOR_SESSION = "select max(mu.lastAttemptTotalMark), min(mu.lastAttemptTotalMark), avg(mu.lastAttemptTotalMark)" - + " from McQueUsr mu where mu.mcSessionId = :mcSessionUid"; - private static final String GET_USER_BY_USER_ID_SESSION = "from mcQueUsr in class McQueUsr where mcQueUsr.queUsrId=:queUsrId and mcQueUsr.mcSessionId=:mcSessionUid"; + private static final String LOAD_MARKS_FOR_SESSION = "SELECT last_attempt_total_mark " + + " FROM tl_lamc11_que_usr usr " + + " JOIN tl_lamc11_session sess ON usr.mc_session_id = sess.uid " + + " WHERE responseFinalised = 1 AND sess.mc_session_id = :sessionId"; + private static final String FIND_MARK_STATS_FOR_SESSION = "SELECT MIN(last_attempt_total_mark) min_grade, AVG(last_attempt_total_mark) avg_grade, " + + " MAX(last_attempt_total_mark) max_grade FROM tl_lamc11_que_usr usr " + + " JOIN tl_lamc11_session sess ON usr.mc_session_id = sess.uid " + + " WHERE responseFinalised = 1 AND sess.mc_session_id = :sessionId"; + + private static final String LOAD_MARKS_FOR_LEADERS = "SELECT usr.last_attempt_total_mark " + + " FROM tl_lamc11_que_usr usr " + + " JOIN tl_lamc11_session sess ON usr.mc_session_id = sess.uid AND usr.uid = sess.mc_group_leader_uid " + + " JOIN tl_lamc11_content mcq ON sess.mc_content_id = mcq.uid " + + " WHERE responseFinalised = 1 AND mcq.content_id = :toolContentId"; + private static final String FIND_MARK_STATS_FOR_LEADERS = "SELECT MIN(usr.last_attempt_total_mark) min_grade, AVG(usr.last_attempt_total_mark) avg_grade, " + + " MAX(usr.last_attempt_total_mark) max_grade, COUNT(usr.last_attempt_total_mark) num_complete " + + " FROM tl_lamc11_que_usr usr " + + " JOIN tl_lamc11_session sess ON usr.mc_session_id = sess.uid AND usr.uid = sess.mc_group_leader_uid " + + " JOIN tl_lamc11_content mcq ON sess.mc_content_id = mcq.uid " + + " WHERE responseFinalised = 1 AND mcq.content_id = :toolContentId"; + @Override public McQueUsr getMcUserByUID(Long uid) { return (McQueUsr) this.getSession().get(McQueUsr.class, uid); } + @SuppressWarnings("rawtypes") @Override public McQueUsr getMcUserBySession(final Long queUsrId, final Long mcSessionUid) { @@ -79,27 +101,8 @@ this.getSession().delete(mcUser); } - /** Get the max, min and average mark (in that order) for a session */ + @SuppressWarnings("unchecked") @Override - public Integer[] getMarkStatisticsForSession(Long sessionUid) { - Object[] stats = (Object[]) getSessionFactory().getCurrentSession().createQuery(CALC_MARK_STATS_FOR_SESSION) - .setLong("mcSessionUid", sessionUid.longValue()).uniqueResult(); - - if (stats != null) { - if (stats[2] instanceof Float) { - return new Integer[] { (Integer) stats[0], (Integer) stats[1], - new Integer(((Float) stats[2]).intValue()) }; - } else if (stats[2] instanceof Double) { - return new Integer[] { (Integer) stats[0], (Integer) stats[1], - new Integer(((Double) stats[2]).intValue()) }; - } - } - - return null; - - } - - @Override public List getPagedUsersBySession(Long sessionId, int page, int size, String sortBy, String sortOrder, String searchString) { @@ -139,6 +142,7 @@ return userDtos; } + @SuppressWarnings("rawtypes") @Override public int getCountPagedUsersBySession(Long sessionId, String searchString) { @@ -160,4 +164,59 @@ } } + @SuppressWarnings("rawtypes") + @Override + public Object[] getStatsMarksBySession(Long sessionId) { + + Query query = getSession().createSQLQuery(FIND_MARK_STATS_FOR_SESSION) + .addScalar("min_grade", FloatType.INSTANCE) + .addScalar("avg_grade", FloatType.INSTANCE) + .addScalar("max_grade", FloatType.INSTANCE); + query.setLong("sessionId", sessionId); + List list = query.list(); + if ((list == null) || (list.size() == 0)) { + return null; + } else { + return (Object[]) list.get(0); + } + } + + @SuppressWarnings("rawtypes") + @Override + public Object[] getStatsMarksForLeaders(Long toolContentId) { + + Query query = getSession().createSQLQuery(FIND_MARK_STATS_FOR_LEADERS) + .addScalar("min_grade", FloatType.INSTANCE) + .addScalar("avg_grade", FloatType.INSTANCE) + .addScalar("max_grade", FloatType.INSTANCE) + .addScalar("num_complete", IntegerType.INSTANCE); + query.setLong("toolContentId", toolContentId); + List list = query.list(); + if ((list == null) || (list.size() == 0)) { + return null; + } else { + return (Object[]) list.get(0); + } + } + + @SuppressWarnings("unchecked") + @Override + public List getRawUserMarksBySession(Long sessionId) { + + SQLQuery query = getSession().createSQLQuery(LOAD_MARKS_FOR_SESSION); + query.setLong("sessionId", sessionId); + List list = query.list(); + return list; + } + + @SuppressWarnings("unchecked") + @Override + public List getRawLeaderMarksByToolContentId(Long toolContentId) { + + SQLQuery query = getSession().createSQLQuery(LOAD_MARKS_FOR_LEADERS); + query.setLong("toolContentId", toolContentId); + List list = query.list(); + return list; + } + } Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dto/LeaderResultsDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dto/SessionDTO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dto/SessionDTO.java,v diff -u -r1.1.2.3 -r1.1.2.4 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dto/SessionDTO.java 5 May 2016 08:08:44 -0000 1.1.2.3 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dto/SessionDTO.java 9 Jun 2017 03:38:49 -0000 1.1.2.4 @@ -5,6 +5,12 @@ private Long sessionId; private String sessionName; + // Used for statistics wanted calls + private int numberLearners; + private String minMark; + private String maxMark; + private String avgMark; + public SessionDTO() { } @@ -23,4 +29,36 @@ public void setSessionName(String sessionName) { this.sessionName = sessionName; } + + public int getNumberLearners() { + return numberLearners; + } + + public void setNumberLearners(int numberLearners) { + this.numberLearners = numberLearners; + } + + public String getMinMark() { + return minMark; + } + + public void setMinMark(String minMark) { + this.minMark = minMark; + } + + public String getMaxMark() { + return maxMark; + } + + public void setMaxMark(String maxMark) { + this.maxMark = maxMark; + } + + public String getAvgMark() { + return avgMark; + } + + public void setAvgMark(String avgMark) { + this.avgMark = avgMark; + } } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java,v diff -u -r1.77.2.13 -r1.77.2.14 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java 26 May 2017 19:36:22 -0000 1.77.2.13 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java 9 Jun 2017 03:38:49 -0000 1.77.2.14 @@ -24,6 +24,7 @@ import java.io.IOException; import java.util.List; +import java.util.Locale; import java.util.Set; import org.lamsfoundation.lams.notebook.model.NotebookEntry; @@ -32,18 +33,21 @@ import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.tool.mc.dto.AnswerDTO; +import org.lamsfoundation.lams.tool.mc.dto.LeaderResultsDTO; import org.lamsfoundation.lams.tool.mc.dto.McOptionDTO; import org.lamsfoundation.lams.tool.mc.dto.McQuestionDTO; import org.lamsfoundation.lams.tool.mc.dto.McSessionMarkDTO; import org.lamsfoundation.lams.tool.mc.dto.McUserMarkDTO; import org.lamsfoundation.lams.tool.mc.dto.ReflectionDTO; +import org.lamsfoundation.lams.tool.mc.dto.SessionDTO; import org.lamsfoundation.lams.tool.mc.dto.ToolOutputDTO; import org.lamsfoundation.lams.tool.mc.pojos.McContent; import org.lamsfoundation.lams.tool.mc.pojos.McOptsContent; import org.lamsfoundation.lams.tool.mc.pojos.McQueContent; import org.lamsfoundation.lams.tool.mc.pojos.McQueUsr; import org.lamsfoundation.lams.tool.mc.pojos.McSession; import org.lamsfoundation.lams.tool.mc.pojos.McUsrAttempt; +import org.lamsfoundation.lams.util.NumberUtil; /** * Interface that defines the contract that all MCQ service provider must follow. @@ -161,9 +165,9 @@ * Return the top, lowest and average mark for all learners for one particular tool session. * * @param request - * @return top mark, lowest mark, average mark in that order + * @return lowest mark, average mark, top mark in that order */ - Integer[] getMarkStatistics(McSession mcSession); + Object[] getMarkStatistics(McSession mcSession); /** * Returns whether activity is grouped and therefore it is expected more than one tool session. @@ -235,5 +239,36 @@ * @return */ List getReflectionList(McContent mcContent, Long userID); + + /** + * Gets the basic statistics for the grades for the Leaders when an Assessment is done using + * Group Leaders. So the averages, etc are for the whole Assessment, not for a Group. + * @param contentId + * @return + */ + LeaderResultsDTO getLeaderResultsDTOForLeaders(Long contentId); + + /** + * Prepares data for the marks summary graph on the statistics page + * @param assessment + * @param sessionDtos + * @return + */ + List getMarksArray(Long sessionId); + /** + * Prepares data for the marks summary graph on the statistics page, using the grades for the Leaders + * when an Assessment is done using Group Leaders. So the grades are for the whole Assessment, not for a Group. + * @param assessment + * @param sessionDtos + * @return + */ + List getMarksArrayForLeaders(Long contentId); + + /** + * Contains the session id and name for a session. If includeStatistics is true also includes the number of + * learners, max min and average of marks for the session. + */ + List getSessionDtos(Long contentId, boolean includeStatistics); + } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java,v diff -u -r1.128.2.21 -r1.128.2.22 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java 26 May 2017 19:36:22 -0000 1.128.2.21 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java 9 Jun 2017 03:38:49 -0000 1.128.2.22 @@ -32,6 +32,7 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.SortedMap; @@ -81,11 +82,13 @@ import org.lamsfoundation.lams.tool.mc.dao.IMcUserDAO; import org.lamsfoundation.lams.tool.mc.dao.IMcUsrAttemptDAO; import org.lamsfoundation.lams.tool.mc.dto.AnswerDTO; +import org.lamsfoundation.lams.tool.mc.dto.LeaderResultsDTO; import org.lamsfoundation.lams.tool.mc.dto.McOptionDTO; import org.lamsfoundation.lams.tool.mc.dto.McQuestionDTO; import org.lamsfoundation.lams.tool.mc.dto.McSessionMarkDTO; import org.lamsfoundation.lams.tool.mc.dto.McUserMarkDTO; import org.lamsfoundation.lams.tool.mc.dto.ReflectionDTO; +import org.lamsfoundation.lams.tool.mc.dto.SessionDTO; import org.lamsfoundation.lams.tool.mc.dto.ToolOutputDTO; import org.lamsfoundation.lams.tool.mc.pojos.McContent; import org.lamsfoundation.lams.tool.mc.pojos.McOptsContent; @@ -102,6 +105,7 @@ import org.lamsfoundation.lams.util.ExcelUtil; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.util.NumberUtil; import org.lamsfoundation.lams.util.audit.IAuditService; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; @@ -730,8 +734,8 @@ } @Override - public Integer[] getMarkStatistics(McSession mcSession) { - return mcUserDAO.getMarkStatisticsForSession(mcSession.getUid()); + public Object[] getMarkStatistics(McSession mcSession) { + return mcUserDAO.getStatsMarksBySession(mcSession.getMcSessionId()); } @Override @@ -1835,6 +1839,65 @@ return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); } + @Override + public LeaderResultsDTO getLeaderResultsDTOForLeaders(Long contentId) { + LeaderResultsDTO newDto = new LeaderResultsDTO(contentId); + Object[] markStats = mcUserDAO.getStatsMarksForLeaders(contentId); + if ( markStats != null ) { + newDto.setMinMark(markStats[0] != null ? NumberUtil.formatLocalisedNumber((Float)markStats[0], (Locale)null, 2) : "0.00"); + newDto.setAvgMark(markStats[1] != null ? NumberUtil.formatLocalisedNumber((Float)markStats[1], (Locale)null, 2) : "0.00"); + newDto.setMaxMark(markStats[2] != null ? NumberUtil.formatLocalisedNumber((Float)markStats[2], (Locale)null, 2) : "0.00"); + newDto.setNumberGroupsLeaderFinished((Integer)markStats[3]); + } + return newDto; + } + + @SuppressWarnings("unchecked") + @Override + public List getSessionDtos(Long contentId, boolean includeStatistics) { + List sessionDtos = new ArrayList(); + + McContent mcContent = getMcContent(contentId); + if (mcContent != null) { + Set sessions = new TreeSet(new McSessionComparator()); + sessions.addAll(mcContent.getMcSessions()); + for (McSession session : sessions) { + SessionDTO sessionDto = new SessionDTO(); + sessionDto.setSessionId(session.getMcSessionId()); + sessionDto.setSessionName(session.getSession_name()); + //for statistics tab + if (includeStatistics) { + int countUsers = mcUserDAO.getCountPagedUsersBySession(session.getMcSessionId(), ""); + sessionDto.setNumberLearners(countUsers); + Object[] markStats = mcUserDAO.getStatsMarksBySession(session.getMcSessionId()); + if (markStats != null) { + sessionDto.setMinMark(markStats[0] != null + ? NumberUtil.formatLocalisedNumber((Float) markStats[0], (Locale) null, 2) : "0.00"); + sessionDto.setAvgMark(markStats[1] != null + ? NumberUtil.formatLocalisedNumber((Float) markStats[1], (Locale) null, 2) : "0.00"); + sessionDto.setMaxMark(markStats[2] != null + ? NumberUtil.formatLocalisedNumber((Float) markStats[2], (Locale) null, 2) : "0.00"); + } + } + + sessionDtos.add(sessionDto); + } + } + return sessionDtos; + } + + @Override + public List getMarksArray(Long sessionId) { + return mcUserDAO.getRawUserMarksBySession(sessionId); + } + + @Override + public List getMarksArrayForLeaders(Long toolContentId) { + return mcUserDAO.getRawLeaderMarksByToolContentId(toolContentId); + } + + + // ****************** REST methods ************************* /** Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java,v diff -u -r1.82.2.9 -r1.82.2.10 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java 26 May 2017 19:36:23 -0000 1.82.2.9 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java 9 Jun 2017 03:38:50 -0000 1.82.2.10 @@ -487,16 +487,18 @@ mcGeneralLearnerFlowDTO.setDisplayAnswers(new Boolean(mcContent.isDisplayAnswers()).toString()); mcGeneralLearnerFlowDTO.setLearnerMark(user.getLastAttemptTotalMark()); + Object[] markStatistics = null; if (mcContent.isShowMarks()) { - Integer[] markStatistics = mcService.getMarkStatistics(mcSession); - mcGeneralLearnerFlowDTO.setTopMark(markStatistics[0]); - mcGeneralLearnerFlowDTO.setLowestMark(markStatistics[1]); - mcGeneralLearnerFlowDTO.setAverageMark(markStatistics[2]); - + markStatistics = mcService.getMarkStatistics(mcSession); + } + if (markStatistics != null) { + mcGeneralLearnerFlowDTO.setLowestMark(markStatistics[0] != null ? ((Float)markStatistics[0]).intValue() : 0); + mcGeneralLearnerFlowDTO.setAverageMark(markStatistics[1] != null ? ((Float)markStatistics[1]).intValue() : 0); + mcGeneralLearnerFlowDTO.setTopMark(markStatistics[2] != null ? ((Float)markStatistics[2]).intValue() : 0); } else { - mcGeneralLearnerFlowDTO.setTopMark(0); mcGeneralLearnerFlowDTO.setLowestMark(0); mcGeneralLearnerFlowDTO.setAverageMark(0); + mcGeneralLearnerFlowDTO.setTopMark(0); } request.setAttribute(McAppConstants.MC_GENERAL_LEARNER_FLOW_DTO, mcGeneralLearnerFlowDTO); Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringAction.java,v diff -u -r1.58.2.11 -r1.58.2.12 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringAction.java 26 May 2017 19:36:23 -0000 1.58.2.11 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringAction.java 9 Jun 2017 03:38:50 -0000 1.58.2.12 @@ -24,6 +24,7 @@ import java.io.IOException; import java.io.OutputStream; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.TimeZone; @@ -48,8 +49,10 @@ import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.tool.mc.McAppConstants; +import org.lamsfoundation.lams.tool.mc.dto.LeaderResultsDTO; import org.lamsfoundation.lams.tool.mc.dto.McGeneralLearnerFlowDTO; import org.lamsfoundation.lams.tool.mc.dto.McUserMarkDTO; +import org.lamsfoundation.lams.tool.mc.dto.SessionDTO; import org.lamsfoundation.lams.tool.mc.pojos.McContent; import org.lamsfoundation.lams.tool.mc.pojos.McOptsContent; import org.lamsfoundation.lams.tool.mc.pojos.McQueContent; @@ -340,4 +343,67 @@ return null; } + + /** + * Get the mark summary with data arranged in bands. Can be displayed graphically or in a table. + */ + public ActionForward getMarkChartData(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse res) throws IOException, ServletException, JSONException { + + IMcService mcService = McServiceProxy.getMcService(getServlet().getServletContext()); + Long contentID = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); + McContent mcContent = mcService.getMcContent(contentID); + List results = null; + + if ( mcContent != null ) { + if ( mcContent.isUseSelectLeaderToolOuput() ) { + results = mcService.getMarksArrayForLeaders(contentID); + } else { + Long sessionID = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_SESSION_ID); + results = mcService.getMarksArray(sessionID); + } + } + + JSONObject responseJSON = new JSONObject(); + if ( results != null ) + responseJSON.put("data", results); + else + responseJSON.put("data", new Float[0]); + + res.setContentType("application/json;charset=utf-8"); + res.getWriter().write(responseJSON.toString()); + return null; + + } + + public ActionForward statistic(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) { + + IMcService mcService = McServiceProxy.getMcService(getServlet().getServletContext()); + Long contentID = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); + request.setAttribute(AttributeNames.PARAM_TOOL_CONTENT_ID, contentID); + McContent mcContent = mcService.getMcContent(contentID); + if ( mcContent != null ) { + if ( mcContent.isUseSelectLeaderToolOuput() ) { + LeaderResultsDTO leaderDto = mcService.getLeaderResultsDTOForLeaders(contentID); + request.setAttribute("leaderDto", leaderDto); + } else { + List sessionDtos = mcService.getSessionDtos(contentID, true); + request.setAttribute("sessionDtos", sessionDtos); + } + request.setAttribute("useSelectLeaderToolOutput", mcContent.isUseSelectLeaderToolOuput()); + } + + // prepare toolOutputDefinitions and activityEvaluation + List toolOutputDefinitions = new ArrayList(); + toolOutputDefinitions.add(McAppConstants.OUTPUT_NAME_LEARNER_MARK); + toolOutputDefinitions.add(McAppConstants.OUTPUT_NAME_LEARNER_ALL_CORRECT); + String activityEvaluation = mcService.getActivityEvaluation(contentID); + request.setAttribute(McAppConstants.ATTR_TOOL_OUTPUT_DEFINITIONS, toolOutputDefinitions); + request.setAttribute(McAppConstants.ATTR_ACTIVITY_EVALUATION, activityEvaluation); + + return mapping.findForward(McAppConstants.STATISTICS); + } + + } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringStarterAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringStarterAction.java,v diff -u -r1.52.2.6 -r1.52.2.7 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringStarterAction.java 26 May 2017 19:36:23 -0000 1.52.2.6 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringStarterAction.java 9 Jun 2017 03:38:50 -0000 1.52.2.7 @@ -132,14 +132,6 @@ DateUtil.convertToStringForJSON(submissionDeadline, request.getLocale())); } - //prepare toolOutputDefinitions and activityEvaluation - List toolOutputDefinitions = new ArrayList(); - toolOutputDefinitions.add(McAppConstants.OUTPUT_NAME_LEARNER_MARK); - toolOutputDefinitions.add(McAppConstants.OUTPUT_NAME_LEARNER_ALL_CORRECT); - String activityEvaluation = service.getActivityEvaluation(mcContent.getMcContentId()); - request.setAttribute(McAppConstants.ATTR_TOOL_OUTPUT_DEFINITIONS, toolOutputDefinitions); - request.setAttribute(McAppConstants.ATTR_ACTIVITY_EVALUATION, activityEvaluation); - boolean isGroupedActivity = service.isGroupedActivity(new Long(mcContent.getMcContentId())); request.setAttribute("isGroupedActivity", isGroupedActivity); Index: lams_tool_lamc/web/WEB-INF/struts-config.xml =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/web/WEB-INF/struts-config.xml,v diff -u -r1.68.2.5 -r1.68.2.6 --- lams_tool_lamc/web/WEB-INF/struts-config.xml 26 May 2017 19:36:23 -0000 1.68.2.5 +++ lams_tool_lamc/web/WEB-INF/struts-config.xml 9 Jun 2017 03:38:50 -0000 1.68.2.6 @@ -294,6 +294,12 @@ path="/monitoringStarter.do" redirect="true" /> + + Index: lams_tool_lamc/web/common/monitoringheader.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/web/common/Attic/monitoringheader.jsp,v diff -u -r1.1.2.3 -r1.1.2.4 --- lams_tool_lamc/web/common/monitoringheader.jsp 8 Mar 2017 12:05:20 -0000 1.1.2.3 +++ lams_tool_lamc/web/common/monitoringheader.jsp 9 Jun 2017 03:38:50 -0000 1.1.2.4 @@ -24,4 +24,7 @@ - + + + + Index: lams_tool_lamc/web/monitoring/MonitoringMaincontent.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/web/monitoring/MonitoringMaincontent.jsp,v diff -u -r1.47.2.6 -r1.47.2.7 --- lams_tool_lamc/web/monitoring/MonitoringMaincontent.jsp 26 May 2017 19:36:24 -0000 1.47.2.6 +++ lams_tool_lamc/web/monitoring/MonitoringMaincontent.jsp 9 Jun 2017 03:38:49 -0000 1.47.2.7 @@ -8,6 +8,8 @@ <fmt:message key="label.monitoring"/> <%@ include file="/common/monitoringheader.jsp"%> + + - - - - - - - - - - - -
- - - -
- - - -
- -<%@ include file="parts/toolOutput.jsp"%> +
+<%-- Do not include anything to start with as we do not want to display the charts yet. +--%> +
\ No newline at end of file Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_tool_lamc/web/monitoring/parts/statsPart.jsp'. Fisheye: No comparison available. Pass `N' to diff?