Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java =================================================================== diff -u -r0d5b1b50fe6fe0f20f48982e924cc72a2910eb07 -r9995a2c37bd1ca5cafa9e41d6d30a8872bba0a80 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java (.../IMcService.java) (revision 0d5b1b50fe6fe0f20f48982e924cc72a2910eb07) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java (.../IMcService.java) (revision 9995a2c37bd1ca5cafa9e41d6d30a8872bba0a80) @@ -103,6 +103,8 @@ public void removeMcQueContentByUID(Long uid) throws McApplicationException; + public McQueUsr getMcUserByUID(Long uid) throws McApplicationException; + public List getCorrectOption(Long mcQueContentId); public List getAllQuestionEntries(final Long mcContentId) throws McApplicationException; @@ -117,6 +119,8 @@ public List getMcUserBySessionOnly(final McSession mcSession) throws McApplicationException; + public McSession getMcSessionByUID(Long uid) throws McApplicationException; + public void deleteMc(McContent mc) throws McApplicationException; public void deleteMcById(Long mcId) throws McApplicationException; Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java =================================================================== diff -u -r09269276584f800f82533cb9238da1bb6b67bbf3 -r9995a2c37bd1ca5cafa9e41d6d30a8872bba0a80 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision 09269276584f800f82533cb9238da1bb6b67bbf3) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision 9995a2c37bd1ca5cafa9e41d6d30a8872bba0a80) @@ -311,6 +311,22 @@ } } + + public McSession getMcSessionByUID(Long uid) throws McApplicationException + { + try + { + return mcSessionDAO.getMcSessionByUID(uid); + } + catch (DataAccessException e) + { + throw new McApplicationException("Exception occured when lams is getting mcSession my uid: " + + e.getMessage(), + e); + } + } + + public void createMcQueUsr(McQueUsr mcQueUsr) throws McApplicationException { try @@ -325,7 +341,19 @@ } } - + public McQueUsr getMcUserByUID(Long uid) throws McApplicationException + { + try + { + return mcUserDAO.getMcUserByUID(uid); + } + catch (DataAccessException e) + { + throw new McApplicationException("Exception occured when lams is getting the mc QueUsr by uid." + + e.getMessage(), + e); + } + } public McQueUsr retrieveMcQueUsr(Long userId) throws McApplicationException { Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java =================================================================== diff -u -r9e93874763aa8af8bab0529c3e82b084a58a8b08 -r9995a2c37bd1ca5cafa9e41d6d30a8872bba0a80 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java (.../McLearningAction.java) (revision 9e93874763aa8af8bab0529c3e82b084a58a8b08) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java (.../McLearningAction.java) (revision 9995a2c37bd1ca5cafa9e41d6d30a8872bba0a80) @@ -551,15 +551,30 @@ logger.debug("final learnerProgressOn:" + learnerProgressOn); /*..till here*/ + McQueUsr mcQueUsr=null; + Long queUsrId=null; + if (learnerProgressOn == false) + { + mcQueUsr=LearningUtil.getUser(request); + logger.debug("mcQueUsr: " + mcQueUsr); + + queUsrId=mcQueUsr.getUid(); + logger.debug("queUsrId: " + queUsrId); + } + else + { + mcQueUsr=mcService.retrieveMcQueUsr(new Long(learnerProgressUserId)); + logger.debug("mcQueUsr: " + mcQueUsr); + + queUsrId=mcQueUsr.getUid(); + logger.debug("queUsrId: " + queUsrId); + } + logger.debug("final mcQueUsr: " + mcQueUsr); + logger.debug("final queUsrId: " + queUsrId); + Long toolContentUID= (Long) request.getSession().getAttribute(TOOL_CONTENT_UID); logger.debug("toolContentUID: " + toolContentUID); - McQueUsr mcQueUsr=LearningUtil.getUser(request); - logger.debug("mcQueUsr: " + mcQueUsr); - - Long queUsrId=mcQueUsr.getUid(); - logger.debug("queUsrId: " + queUsrId); - Map mapQueAttempts= new TreeMap(new McComparator()); Map mapQueCorrectAttempts= new TreeMap(new McComparator()); Map mapQueIncorrectAttempts= new TreeMap(new McComparator()); @@ -574,6 +589,7 @@ Map mapAttemptOrderIncorrectAttempts= new TreeMap(new McComparator()); for (int j=1; j <= MAX_ATTEMPT_HISTORY ; j++ ) { + logger.debug("getting list for queUsrId: " + queUsrId); List attemptsByAttemptOrder=mcService.getAttemptByAttemptOrder(queUsrId, mcQueContent.getUid(), new Integer(j)); logger.debug("attemptsByAttemptOrder: " + j + " is: " + attemptsByAttemptOrder); @@ -596,12 +612,20 @@ { mapAttemptsIncorrect.put(mapIndex.toString(), mcUsrAttempt.getMcOptionsContent().getMcQueOptionText()); } + mapAttempts.put(mapIndex.toString(), mcUsrAttempt.getMcOptionsContent().getMcQueOptionText()); + logger.debug("added attempt with order: " + mcUsrAttempt.getAttemptOrder() + " , option text is: " + mcUsrAttempt.getMcOptionsContent().getMcQueOptionText()); + mapIndex=new Long(mapIndex.longValue()+1); + } else { /* this section is needed to separate learner progress view from standard attempts list. */ logger.debug("learnerProgressOn is true, populating map based on the learner id: " + learnerProgressUserId); - if (mcUsrAttempt.getQueUsrId().toString().equals(learnerProgressUserId)) + logger.debug("retrieve user based on uid in the attempt: " + mcUsrAttempt.getQueUsrId()); + McQueUsr mcQueUsrLocal=mcService.getMcUserByUID(mcUsrAttempt.getQueUsrId()); + logger.debug("mcQueUsrLocal: " + mcQueUsrLocal); + + if (mcQueUsrLocal.getQueUsrId().toString().equals(learnerProgressUserId)) { logger.debug("found learner progress user: " + learnerProgressUserId); if (mcUsrAttempt.isAttemptCorrect()) @@ -612,13 +636,12 @@ { mapAttemptsIncorrect.put(mapIndex.toString(), mcUsrAttempt.getMcOptionsContent().getMcQueOptionText()); } + mapAttempts.put(mapIndex.toString(), mcUsrAttempt.getMcOptionsContent().getMcQueOptionText()); + logger.debug("added attempt with order: " + mcUsrAttempt.getAttemptOrder() + " , option text is: " + mcUsrAttempt.getMcOptionsContent().getMcQueOptionText()); + mapIndex=new Long(mapIndex.longValue()+1); } } - mapAttempts.put(mapIndex.toString(), mcUsrAttempt.getMcOptionsContent().getMcQueOptionText()); - - logger.debug("added attempt with order: " + mcUsrAttempt.getAttemptOrder() + " , option text is: " + mcUsrAttempt.getMcOptionsContent().getMcQueOptionText()); - mapIndex=new Long(mapIndex.longValue()+1); } logger.debug("final mapAttempts is: " + mapAttempts); Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningStarterAction.java =================================================================== diff -u -r9e93874763aa8af8bab0529c3e82b084a58a8b08 -r9995a2c37bd1ca5cafa9e41d6d30a8872bba0a80 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningStarterAction.java (.../McLearningStarterAction.java) (revision 9e93874763aa8af8bab0529c3e82b084a58a8b08) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningStarterAction.java (.../McLearningStarterAction.java) (revision 9995a2c37bd1ca5cafa9e41d6d30a8872bba0a80) @@ -329,10 +329,24 @@ if (mcQueUsr == null) { persistError(request, "error.learner.required"); - request.setAttribute(USER_EXCEPTION_LEARNER_REQUIRED, new Boolean(true)); McUtils.cleanUpSessionAbsolute(request); return (mapping.findForward(ERROR_LIST)); } + + /* check whether the user's session really referrs to the session id passed to the url*/ + Long sessionUid=mcQueUsr.getMcSessionId(); + logger.debug("sessionUid" + sessionUid); + McSession mcSessionLocal=mcService.getMcSessionByUID(sessionUid); + logger.debug("checking mcSessionLocal" + mcSessionLocal); + Long toolSessionId=(Long)request.getSession().getAttribute(TOOL_SESSION_ID); + logger.debug("toolSessionId: " + toolSessionId + " versus" + mcSessionLocal); + if ((mcSessionLocal == null) || + (mcSessionLocal.getMcSessionId().longValue() != toolSessionId.longValue())) + { + persistError(request, "error.learner.sessionId.inconsistent"); + McUtils.cleanUpSessionAbsolute(request); + return (mapping.findForward(ERROR_LIST)); + } return mcLearningAction.viewAnswers(mapping, form, request, response); }