Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20150706.sql =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20150706.sql (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20150706.sql (revision b65ddbfc914cafd2a6c682dce8faafd9f7de7747) @@ -0,0 +1,14 @@ +-- Turn off autocommit, so nothing is committed if there is an error +SET AUTOCOMMIT = 0; +SET FOREIGN_KEY_CHECKS=0; +----------------------Put all sql statements below here------------------------- + +-- LDEV-3492 Change behaviour results in MCQ question type with multiple answers in assessment +ALTER TABLE tl_laasse10_assessment_question ADD COLUMN incorrect_answer_nullifies_mark TINYINT(1) NOT NULL DEFAULT 0; + +----------------------Put all sql statements above here------------------------- + +-- If there were no errors, commit and restore autocommit to on +COMMIT; +SET AUTOCOMMIT = 1; +SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java =================================================================== diff -u -r11d6b3d1391ab1d1aa42453aa0347a6b85fcfeaa -rb65ddbfc914cafd2a6c682dce8faafd9f7de7747 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java (.../AssessmentQuestion.java) (revision 11d6b3d1391ab1d1aa42453aa0347a6b85fcfeaa) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java (.../AssessmentQuestion.java) (revision b65ddbfc914cafd2a6c682dce8faafd9f7de7747) @@ -70,6 +70,8 @@ private boolean multipleAnswersAllowed; + private boolean incorrectAnswerNullifiesMark; + private String feedbackOnCorrect; private String feedbackOnPartiallyCorrect; @@ -350,7 +352,19 @@ public void setMultipleAnswersAllowed(boolean multipleAnswersAllowed) { this.multipleAnswersAllowed = multipleAnswersAllowed; } + + /** + * @hibernate.property column="incorrect_answer_nullifies_mark" + * @return + */ + public boolean isIncorrectAnswerNullifiesMark() { + return incorrectAnswerNullifiesMark; + } + public void setIncorrectAnswerNullifiesMark(boolean incorrectAnswerNullifiesMark) { + this.incorrectAnswerNullifiesMark = incorrectAnswerNullifiesMark; + } + /** * @hibernate.property column="feedback_on_correct" type="text" * @return Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -ra0bce7961a19548c58f5b0025160f124785f9951 -rb65ddbfc914cafd2a6c682dce8faafd9f7de7747 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision b65ddbfc914cafd2a6c682dce8faafd9f7de7747) @@ -542,12 +542,22 @@ float mark = 0; float maxMark = question.getGrade(); if (question.getType() == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE) { + boolean isMarkNullified = false; for (AssessmentQuestionOption option : question.getOptions()) { if (option.getAnswerBoolean()) { mark += option.getGrade() * maxMark; + + //if option of "incorrect answer nullifies mark" is ON check if selected answer has a zero grade and if so nullify question's mark + if (question.isIncorrectAnswerNullifiesMark() && option.getGrade() == 0) { + isMarkNullified = true; + } } } + if (isMarkNullified) { + mark = 0; + } + } else if (question.getType() == AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS) { float maxMarkForCorrectAnswer = maxMark / question.getOptions().size(); for (AssessmentQuestionOption option : question.getOptions()) { @@ -2018,6 +2028,7 @@ question.setMaxWordsLimit(JsonUtil.opt(questionJSONData, "maxWordsLimit", 0)); question.setMinWordsLimit(JsonUtil.opt(questionJSONData, "minWordsLimit", 0)); question.setMultipleAnswersAllowed(JsonUtil.opt(questionJSONData, "multipleAnswersAllowed", Boolean.FALSE)); + question.setIncorrectAnswerNullifiesMark(JsonUtil.opt(questionJSONData, "incorrectAnswerNullifiesMark", Boolean.FALSE)); question.setPenaltyFactor(Float.parseFloat(JsonUtil.opt(questionJSONData, "penaltyFactor", "0.0"))); // question.setUnits(units); Needed for numerical type question Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/AuthoringAction.java =================================================================== diff -u -r11d6b3d1391ab1d1aa42453aa0347a6b85fcfeaa -rb65ddbfc914cafd2a6c682dce8faafd9f7de7747 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision 11d6b3d1391ab1d1aa42453aa0347a6b85fcfeaa) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision b65ddbfc914cafd2a6c682dce8faafd9f7de7747) @@ -1748,6 +1748,7 @@ form.setGeneralFeedback(question.getGeneralFeedback()); form.setFeedback(question.getFeedback()); form.setMultipleAnswersAllowed(question.isMultipleAnswersAllowed()); + form.setIncorrectAnswerNullifiesMark(question.isIncorrectAnswerNullifiesMark()); form.setFeedbackOnCorrect(question.getFeedbackOnCorrect()); form.setFeedbackOnPartiallyCorrect(question.getFeedbackOnPartiallyCorrect()); form.setFeedbackOnIncorrect(question.getFeedbackOnIncorrect()); @@ -1823,6 +1824,9 @@ if (type == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE) { question.setMultipleAnswersAllowed(questionForm.isMultipleAnswersAllowed()); + boolean incorrectAnswerNullifiesMark = questionForm.isMultipleAnswersAllowed() ? questionForm + .isIncorrectAnswerNullifiesMark() : false; + question.setIncorrectAnswerNullifiesMark(incorrectAnswerNullifiesMark); question.setPenaltyFactor(Float.parseFloat(questionForm.getPenaltyFactor())); question.setShuffle(questionForm.isShuffle()); question.setFeedbackOnCorrect(questionForm.getFeedbackOnCorrect()); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/form/AssessmentQuestionForm.java =================================================================== diff -u -r1668e000b0959071785e5cdd21732af39bd1505f -rb65ddbfc914cafd2a6c682dce8faafd9f7de7747 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/form/AssessmentQuestionForm.java (.../AssessmentQuestionForm.java) (revision 1668e000b0959071785e5cdd21732af39bd1505f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/form/AssessmentQuestionForm.java (.../AssessmentQuestionForm.java) (revision b65ddbfc914cafd2a6c682dce8faafd9f7de7747) @@ -50,6 +50,7 @@ private String generalFeedback; private String feedback; private boolean multipleAnswersAllowed; + private boolean incorrectAnswerNullifiesMark; private String feedbackOnCorrect; private String feedbackOnPartiallyCorrect; private String feedbackOnIncorrect; @@ -163,7 +164,15 @@ public void setMultipleAnswersAllowed(boolean multipleAnswersAllowed) { this.multipleAnswersAllowed = multipleAnswersAllowed; } + + public boolean isIncorrectAnswerNullifiesMark() { + return incorrectAnswerNullifiesMark; + } + public void setIncorrectAnswerNullifiesMark(boolean incorrectAnswerNullifiesMark) { + this.incorrectAnswerNullifiesMark = incorrectAnswerNullifiesMark; + } + public String getFeedbackOnCorrect() { return feedbackOnCorrect; } Index: lams_tool_assessment/web/pages/authoring/parts/addmultiplechoice.jsp =================================================================== diff -u -r724afbcc75966e8132c8793ccbd17121491e2cc2 -rb65ddbfc914cafd2a6c682dce8faafd9f7de7747 --- lams_tool_assessment/web/pages/authoring/parts/addmultiplechoice.jsp (.../addmultiplechoice.jsp) (revision 724afbcc75966e8132c8793ccbd17121491e2cc2) +++ lams_tool_assessment/web/pages/authoring/parts/addmultiplechoice.jsp (.../addmultiplechoice.jsp) (revision b65ddbfc914cafd2a6c682dce8faafd9f7de7747) @@ -100,7 +100,10 @@ } }); - + $("#multipleAnswersAllowed").on('change', function() { + $("#incorrect-answer-nullifies-mark-area").toggle(eval($(this).val())); + }).trigger("change"); + }); // post-submit callback function afterRatingSubmit(responseText, statusText) { @@ -186,6 +189,13 @@ + +
+ + +
Index: lams_tool_assessment/web/pages/learning/parts/markandpenaltyarea.jsp =================================================================== diff -u -r1e33f64c06430834c80a2b01d42bcdf844c5d958 -rb65ddbfc914cafd2a6c682dce8faafd9f7de7747 --- lams_tool_assessment/web/pages/learning/parts/markandpenaltyarea.jsp (.../markandpenaltyarea.jsp) (revision 1e33f64c06430834c80a2b01d42bcdf844c5d958) +++ lams_tool_assessment/web/pages/learning/parts/markandpenaltyarea.jsp (.../markandpenaltyarea.jsp) (revision b65ddbfc914cafd2a6c682dce8faafd9f7de7747) @@ -12,7 +12,7 @@
- ${question.defaultGrade} + ${question.grade} Index: lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp =================================================================== diff -u -r194323a1e149e104344c35f77754fdb9ad4698f3 -rb65ddbfc914cafd2a6c682dce8faafd9f7de7747 --- lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp (.../questionsummary.jsp) (revision 194323a1e149e104344c35f77754fdb9ad4698f3) +++ lams_tool_assessment/web/pages/monitoring/parts/questionsummary.jsp (.../questionsummary.jsp) (revision b65ddbfc914cafd2a6c682dce8faafd9f7de7747) @@ -179,6 +179,17 @@ + + + + + + + + + + +