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.38 -r1.39 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java 26 Jan 2006 12:27:30 -0000 1.38 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java 31 Jan 2006 19:06:58 -0000 1.39 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java,v diff -u -r1.47 -r1.48 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java 29 Jan 2006 13:47:24 -0000 1.47 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java 31 Jan 2006 19:06:58 -0000 1.48 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java,v diff -u -r1.9 -r1.10 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java 31 Jan 2006 16:27:04 -0000 1.9 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java 31 Jan 2006 19:06:58 -0000 1.10 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningStarterAction.java,v diff -u -r1.29 -r1.30 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningStarterAction.java 31 Jan 2006 16:27:04 -0000 1.29 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningStarterAction.java 31 Jan 2006 19:06:58 -0000 1.30 @@ -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); }