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 @@