Index: lams_tool_lamc/conf/hibernate/mappings/org/lamsfoundation/lams/tool/mc/McUsrAttempt.hbm.xml =================================================================== diff -u -rc1e9ee48a9fd7b643af1e4eae6b9806b9aae18d1 -r7d9590c15a0ee3175f63dec067d4b5191a8a6e4d --- lams_tool_lamc/conf/hibernate/mappings/org/lamsfoundation/lams/tool/mc/McUsrAttempt.hbm.xml (.../McUsrAttempt.hbm.xml) (revision c1e9ee48a9fd7b643af1e4eae6b9806b9aae18d1) +++ lams_tool_lamc/conf/hibernate/mappings/org/lamsfoundation/lams/tool/mc/McUsrAttempt.hbm.xml (.../McUsrAttempt.hbm.xml) (revision 7d9590c15a0ee3175f63dec067d4b5191a8a6e4d) @@ -35,6 +35,22 @@ > + + + + + - + @@ -662,6 +662,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -700,8 +720,8 @@ - + @@ -720,8 +740,8 @@ - + Index: lams_tool_lamc/db/sql/create_lams_tool_lamc.sql =================================================================== diff -u -r3df81dc2e2e2f813fca6da1baf53c3e5ab43cfec -r7d9590c15a0ee3175f63dec067d4b5191a8a6e4d --- lams_tool_lamc/db/sql/create_lams_tool_lamc.sql (.../create_lams_tool_lamc.sql) (revision 3df81dc2e2e2f813fca6da1baf53c3e5ab43cfec) +++ lams_tool_lamc/db/sql/create_lams_tool_lamc.sql (.../create_lams_tool_lamc.sql) (revision 7d9590c15a0ee3175f63dec067d4b5191a8a6e4d) @@ -85,6 +85,8 @@ , mc_que_option_id BIGINT(20) NOT NULL , attempt_time DATETIME , time_zone VARCHAR(255) + , mark VARCHAR(255) NOT NULL DEFAULT '0' + , passed TINYINT(1) NOT NULL DEFAULT 0 , PRIMARY KEY (uid) , INDEX (que_usr_id) , CONSTRAINT FK_tl_lamc11_usr_attempt_1 FOREIGN KEY (que_usr_id) @@ -109,5 +111,3 @@ REFERENCES lams.tl_lamc11_content (uid) )TYPE=InnoDB; - - Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McAppConstants.java =================================================================== diff -u -rb6978e19e4e5ab95fdd7ab3f353f34be5cefa2e6 -r7d9590c15a0ee3175f63dec067d4b5191a8a6e4d --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McAppConstants.java (.../McAppConstants.java) (revision b6978e19e4e5ab95fdd7ab3f353f34be5cefa2e6) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McAppConstants.java (.../McAppConstants.java) (revision 7d9590c15a0ee3175f63dec067d4b5191a8a6e4d) @@ -154,9 +154,9 @@ public static final String MAP_LEARNER_ASSESSMENT_RESULTS ="mapLearnerAssessmentResults"; public static final String MAP_LEARNER_FEEDBACK_INCORRECT ="mapLeanerFeedbackIncorrect"; public static final String MAP_LEARNER_FEEDBACK_CORRECT ="mapLeanerFeedbackCorrect"; + public static final String MAP_QUESTION_WEIGHTS ="mapQuestionWeights"; + - - public static final String MAP_WEIGHTS ="mapWeights"; public static final String MAP_CHECKBOX_STATES ="mapCheckBoxStates"; public static final String MAP_SELECTED_OPTIONS ="mapSelectedOptions"; @@ -183,6 +183,7 @@ public static final String RETRIES ="retries"; public static final String PASSMARK ="passMark"; public static final String SHOW_FEEDBACK ="showFeedback"; + public static final String USER_PASSED ="userPassed"; public static final String ONLINE_INSTRUCTIONS ="onlineInstructions"; public static final String OFFLINE_INSTRUCTIONS ="offlineInstructions"; @@ -284,6 +285,8 @@ public static final String MAP_QUESTION_CONTENT_LEARNER ="mapQuestionContentLearner"; public static final String CURRENT_QUESTION_INDEX ="currentQuestionIndex"; public static final String TOTAL_QUESTION_COUNT ="totalQuestionCount"; + public static final String LEARNER_MARK ="learnerMark"; + public static final String LEARNER_MARK_ATLEAST ="learnerMarkAtLeast"; public static final String MAP_ANSWERS ="mapAnswers"; public static final String CURRENT_ANSWER ="currentAnswer"; public static final String USER_FEEDBACK ="userFeedback"; Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McResources.properties =================================================================== diff -u -rb6978e19e4e5ab95fdd7ab3f353f34be5cefa2e6 -r7d9590c15a0ee3175f63dec067d4b5191a8a6e4d --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McResources.properties (.../McResources.properties) (revision b6978e19e4e5ab95fdd7ab3f353f34be5cefa2e6) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McResources.properties (.../McResources.properties) (revision 7d9590c15a0ee3175f63dec067d4b5191a8a6e4d) @@ -90,6 +90,8 @@ label.learner.redo =Are you sure you want to answer the questions again? label.learner.bestMark =Your best mark so far is label.outof =out of +label.mustGet =Must get at least +label.toFinish =to finish feedback =Please address the following issues before submit.
Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McUsrAttempt.java =================================================================== diff -u -r5e1d707c3adf190cd76bb2459b89a60d511e7077 -r7d9590c15a0ee3175f63dec067d4b5191a8a6e4d --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McUsrAttempt.java (.../McUsrAttempt.java) (revision 5e1d707c3adf190cd76bb2459b89a60d511e7077) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McUsrAttempt.java (.../McUsrAttempt.java) (revision 7d9590c15a0ee3175f63dec067d4b5191a8a6e4d) @@ -48,6 +48,11 @@ /** nullable persistent field */ private String timeZone; + + private Integer mark; + + private boolean passed; + /** persistent field */ private org.lamsfoundation.lams.tool.mc.McQueContent mcQueContent; @@ -78,6 +83,16 @@ this.mcOptionsContent = mcOptionsContent; } + public McUsrAttempt(Date attemptTime, String timeZone, org.lamsfoundation.lams.tool.mc.McQueContent mcQueContent, + org.lamsfoundation.lams.tool.mc.McQueUsr mcQueUsr, org.lamsfoundation.lams.tool.mc.McOptsContent mcOptionsContent, Integer mark, boolean passed) { + this.attemptTime = attemptTime; + this.timeZone = timeZone; + this.mcQueContent = mcQueContent; + this.mcQueUsr = mcQueUsr; + this.mcOptionsContent = mcOptionsContent; + this.mark = mark; + this.passed = passed; + } @@ -155,4 +170,28 @@ .toString(); } + /** + * @return Returns the mark. + */ + public Integer getMark() { + return mark; + } + /** + * @param mark The mark to set. + */ + public void setMark(Integer mark) { + this.mark = mark; + } + /** + * @return Returns the passed. + */ + public boolean isPassed() { + return passed; + } + /** + * @param passed The passed to set. + */ + public void setPassed(boolean passed) { + this.passed = passed; + } } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/LearningUtil.java =================================================================== diff -u -r5e1d707c3adf190cd76bb2459b89a60d511e7077 -r7d9590c15a0ee3175f63dec067d4b5191a8a6e4d --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/LearningUtil.java (.../LearningUtil.java) (revision 5e1d707c3adf190cd76bb2459b89a60d511e7077) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/LearningUtil.java (.../LearningUtil.java) (revision 7d9590c15a0ee3175f63dec067d4b5191a8a6e4d) @@ -216,7 +216,7 @@ * @param request * @param mapGeneralCheckedOptionsContent */ - public static void assess(HttpServletRequest request, Map mapGeneralCheckedOptionsContent, Long toolContentId) + public static Map assess(HttpServletRequest request, Map mapGeneralCheckedOptionsContent, Long toolContentId) { Map mapGeneralCorrectOptions= new TreeMap(new McComparator()); @@ -243,9 +243,70 @@ Map mapLeanerAssessmentResults=compare(mapGeneralCorrectOptions,mapGeneralCheckedOptionsContent); logger.debug("mapLeanerAssessmentResults : " + mapLeanerAssessmentResults); request.getSession().setAttribute(MAP_LEARNER_ASSESSMENT_RESULTS, mapLeanerAssessmentResults); + + return mapLeanerAssessmentResults; + } + public static int calculateWeights(Map mapLeanerAssessmentResults, Map mapQuestionWeights) + { + logger.debug("starting calculate weights..."); + logger.debug("mapLeanerAssessmentResults : " + mapLeanerAssessmentResults); + logger.debug("mapQuestionWeights : " + mapQuestionWeights); + + int totalUserWeight=0; + Iterator itLearnerAssessmentMap = mapLeanerAssessmentResults.entrySet().iterator(); + while (itLearnerAssessmentMap.hasNext()) + { + Map.Entry pairs = (Map.Entry)itLearnerAssessmentMap.next(); + logger.debug("using the pair: " + pairs.getKey() + " = " + pairs.getValue()); + + Iterator itWeightsMap = mapQuestionWeights.entrySet().iterator(); + while (itWeightsMap.hasNext()) + { + Map.Entry pairsWeight = (Map.Entry)itWeightsMap.next(); + logger.debug("using the weight pair: " + pairsWeight.getKey() + " = " + pairsWeight.getValue()); + if (pairs.getKey().toString().equals(pairsWeight.getKey().toString())) + { + logger.debug("equal question found " + pairsWeight.getKey() + " = " + pairsWeight.getValue() + " and " + pairs.getValue()); + + if (pairs.getValue().toString().equalsIgnoreCase("true")) + { + logger.debug("equal question found " + pairsWeight.getKey() + " is a correct answer."); + int weight= new Integer(pairsWeight.getValue().toString()).intValue(); + logger.debug("weight: " + weight); + + totalUserWeight=totalUserWeight + weight; + } + } + } + } + logger.debug("totalUserWeight: " + totalUserWeight); + return totalUserWeight; + } + + + public static int getMark(Map mapLeanerAssessmentResults) + { + int totalUserWeight=0; + Iterator itLearnerAssessmentMap = mapLeanerAssessmentResults.entrySet().iterator(); + int correctAnswerCount=0; + while (itLearnerAssessmentMap.hasNext()) + { + Map.Entry pairs = (Map.Entry)itLearnerAssessmentMap.next(); + logger.debug("using the pair: " + pairs.getKey() + " = " + pairs.getValue()); + if (pairs.getValue().toString().equalsIgnoreCase("true")) + { + logger.debug("correct response"); + ++correctAnswerCount; + } + } + return correctAnswerCount; + } + + + public static Map buildMapCorrectOptions(List correctOptions) { Map mapCorrectOptions= new TreeMap(new McComparator()); @@ -444,7 +505,7 @@ * * @param request */ - public static void createAttempt(HttpServletRequest request, McQueUsr mcQueUsr, Map mapGeneralCheckedOptionsContent) + public static void createAttempt(HttpServletRequest request, McQueUsr mcQueUsr, Map mapGeneralCheckedOptionsContent, int mark, boolean passed) { IMcService mcService =McUtils.getToolService(request); Date attempTime=McUtils.getGMTDateTime(); @@ -469,28 +530,58 @@ McQueContent mcQueContent=mcService.getQuestionContentByDisplayOrder(questionDisplayOrder, toolContentUID); logger.debug("mcQueContent:" + mcQueContent); - createIndividualOptions(request, mapCheckedOptions, mcQueContent, mcQueUsr, attempTime, timeZone); + createIndividualOptions(request, mapCheckedOptions, mcQueContent, mcQueUsr, attempTime, timeZone, mark, passed); } } - public static void createIndividualOptions(HttpServletRequest request, Map mapCheckedOptions, McQueContent mcQueContent, McQueUsr mcQueUsr, Date attempTime, String timeZone) + public static void createIndividualOptions(HttpServletRequest request, Map mapCheckedOptions, McQueContent mcQueContent, McQueUsr mcQueUsr, Date attempTime, String timeZone, int mark, boolean passed) { IMcService mcService =McUtils.getToolService(request); + Integer IntegerMark= new Integer(mark); + logger.debug("IntegerMark: " + IntegerMark); + + logger.debug("passed: " + passed); + Iterator itCheckedMap = mapCheckedOptions.entrySet().iterator(); while (itCheckedMap.hasNext()) { Map.Entry checkedPairs = (Map.Entry)itCheckedMap.next(); logger.debug("option value :" + checkedPairs.getValue()); McOptsContent mcOptsContent= mcService.getOptionContentByOptionText(checkedPairs.getValue().toString(), mcQueContent.getUid()); logger.debug("mcOptsContent :" + mcOptsContent); - McUsrAttempt mcUsrAttempt=new McUsrAttempt(attempTime, timeZone, mcQueContent, mcQueUsr, mcOptsContent); + McUsrAttempt mcUsrAttempt=new McUsrAttempt(attempTime, timeZone, mcQueContent, mcQueUsr, mcOptsContent, IntegerMark, passed); logger.debug("mcUsrAttempt :" + mcUsrAttempt); mcService.createMcUsrAttempt(mcUsrAttempt); logger.debug("created mcUsrAttempt in the db :" + mcUsrAttempt); } } + public static Map buildWeightsMap(HttpServletRequest request, Long toolContentId) + { + IMcService mcService =McUtils.getToolService(request); + Map mapWeights= new TreeMap(new McComparator()); + + McContent mcContent=mcService.retrieveMc(toolContentId); + logger.debug("mcContent:" + mcContent); + + List questionsContent=mcService.refreshQuestionContent(mcContent.getUid()); + logger.debug("questionsContent:" + questionsContent); + + Iterator listIterator=questionsContent.iterator(); + Long mapIndex=new Long(1); + while (listIterator.hasNext()) + { + McQueContent mcQueContent=(McQueContent)listIterator.next(); + logger.debug("mcQueContent:" + mcQueContent); + mapWeights.put(mapIndex.toString(),mcQueContent.getWeight().toString()); + mapIndex=new Long(mapIndex.longValue()+1); + } + + return mapWeights; + } + + } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McAction.java =================================================================== diff -u -rb6978e19e4e5ab95fdd7ab3f353f34be5cefa2e6 -r7d9590c15a0ee3175f63dec067d4b5191a8a6e4d --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McAction.java (.../McAction.java) (revision b6978e19e4e5ab95fdd7ab3f353f34be5cefa2e6) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McAction.java (.../McAction.java) (revision 7d9590c15a0ee3175f63dec067d4b5191a8a6e4d) @@ -2113,9 +2113,42 @@ logger.debug("toolContentId: " + toolContentId); logger.debug("will assess"); - LearningUtil.assess(request, mapGeneralCheckedOptionsContent, toolContentId); + Integer passMark=(Integer) request.getSession().getAttribute(PASSMARK); + logger.debug("passMark: " + passMark); + + Map mapLeanerAssessmentResults=LearningUtil.assess(request, mapGeneralCheckedOptionsContent, toolContentId); + logger.debug("mapLeanerAssessmentResults: " + mapLeanerAssessmentResults); logger.debug("assesment complete"); + int mark=LearningUtil.getMark(mapLeanerAssessmentResults); + logger.debug("mark: " + mark); + request.getSession().setAttribute(LEARNER_MARK, new Integer(mark).toString()); + request.getSession().setAttribute(LEARNER_MARK_ATLEAST, new Integer(mark+1).toString()); + + Map mapQuestionWeights =(Map) request.getSession().getAttribute(MAP_QUESTION_WEIGHTS); + logger.debug("mapQuestionWeights: " + mapQuestionWeights); + + boolean passed=false; + if ((passMark != null) && (passMark.intValue() != 0)) + { + int totalUserWeight=LearningUtil.calculateWeights(mapLeanerAssessmentResults, mapQuestionWeights); + logger.debug("totalUserWeight: " + totalUserWeight); + + if (totalUserWeight < passMark.intValue()) + { + logger.debug("USER FAILED"); + request.getSession().setAttribute(USER_PASSED, new Boolean(false).toString()); + logger.debug("totalUserWeight is less than passmark: " + totalUserWeight + " < " + passMark.intValue()); + passed=false; + } + else + { + logger.debug("USER PASSED"); + request.getSession().setAttribute(USER_PASSED, new Boolean(true).toString()); + passed=true; + } + } + boolean isUserDefined=LearningUtil.doesUserExists(request); logger.debug("isUserDefined"); if (isUserDefined == false) @@ -2125,7 +2158,9 @@ } McQueUsr mcQueUsr=LearningUtil.getUser(request); logger.debug("mcQueUsr: " + mcQueUsr); - LearningUtil.createAttempt(request, mcQueUsr, mapGeneralCheckedOptionsContent); + + logger.debug("passed: " + passed); + LearningUtil.createAttempt(request, mcQueUsr, mapGeneralCheckedOptionsContent, mark, passed); logger.debug("created user attempt in the db"); mcLearningForm.resetCommands(); @@ -2150,11 +2185,8 @@ request.getSession().setAttribute(TOTAL_COUNT_REACHED, new Boolean(true).toString()); } - mcLearningForm.resetCommands(); - //return getNextOptions(request, mcLearningForm, mapping); - - + int newQuestionIndex=new Integer(currentQuestionIndex).intValue() + 1; request.getSession().setAttribute(CURRENT_QUESTION_INDEX, new Integer(newQuestionIndex).toString()); logger.debug("updated questionIndex:" + request.getSession().getAttribute(CURRENT_QUESTION_INDEX)); Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningStarterAction.java =================================================================== diff -u -r5e1d707c3adf190cd76bb2459b89a60d511e7077 -r7d9590c15a0ee3175f63dec067d4b5191a8a6e4d --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningStarterAction.java (.../McLearningStarterAction.java) (revision 5e1d707c3adf190cd76bb2459b89a60d511e7077) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningStarterAction.java (.../McLearningStarterAction.java) (revision 7d9590c15a0ee3175f63dec067d4b5191a8a6e4d) @@ -348,6 +348,9 @@ request.getSession().setAttribute(MAP_LEARNER_FEEDBACK_CORRECT, mapLeanerFeedbackCorrect); logger.debug("MAP_LEARNER_FEEDBACK_CORRECT: " + mapLeanerFeedbackCorrect); + Map mapQuestionWeights=LearningUtil.buildWeightsMap(request, mcContent.getMcContentId()); + request.getSession().setAttribute(MAP_QUESTION_WEIGHTS, mapQuestionWeights); + logger.debug("MAP_QUESTION_WEIGHTS: " + mapQuestionWeights); /* .. till here */ } Index: lams_tool_lamc/web/IndividualLearnerResults.jsp =================================================================== diff -u -r5e1d707c3adf190cd76bb2459b89a60d511e7077 -r7d9590c15a0ee3175f63dec067d4b5191a8a6e4d --- lams_tool_lamc/web/IndividualLearnerResults.jsp (.../IndividualLearnerResults.jsp) (revision 5e1d707c3adf190cd76bb2459b89a60d511e7077) +++ lams_tool_lamc/web/IndividualLearnerResults.jsp (.../IndividualLearnerResults.jsp) (revision 7d9590c15a0ee3175f63dec067d4b5191a8a6e4d) @@ -20,7 +20,7 @@ - +
@@ -41,6 +45,20 @@ + + + + + + + @@ -158,17 +176,30 @@ - - - + + + + + + + + + + + +
@@ -31,7 +31,11 @@
- + +   +   + +
+   +   +   + + + +
- - - -       - - - -
+ + + +       + + + +
+ + + +
Index: lams_tool_lamc/web/SingleQuestionAnswersContent.jsp =================================================================== diff -u -rb6978e19e4e5ab95fdd7ab3f353f34be5cefa2e6 -r7d9590c15a0ee3175f63dec067d4b5191a8a6e4d --- lams_tool_lamc/web/SingleQuestionAnswersContent.jsp (.../SingleQuestionAnswersContent.jsp) (revision b6978e19e4e5ab95fdd7ab3f353f34be5cefa2e6) +++ lams_tool_lamc/web/SingleQuestionAnswersContent.jsp (.../SingleQuestionAnswersContent.jsp) (revision 7d9590c15a0ee3175f63dec067d4b5191a8a6e4d) @@ -21,7 +21,7 @@ - +