Index: lams_tool_assessment/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rec05d1ee8615ffb69e594e5551e5f93d692bccb4 -rff8c13adfeaacdee873b39fedc822e304e1f4cff --- lams_tool_assessment/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision ec05d1ee8615ffb69e594e5551e5f93d692bccb4) +++ lams_tool_assessment/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision ff8c13adfeaacdee873b39fedc822e304e1f4cff) @@ -80,6 +80,7 @@ label.authoring.advance.questions.per.page = Questions per page label.authoring.advance.all.in.one.page = All in one page label.authoring.advance.shuffle.questions = Shuffle questions +label.authoring.advance.shuffle.answers = Shuffle answers label.authoring.advance.attempts.allowed = Attempts allowed label.authoring.advance.unlimited = Unlimited label.authoring.advance.allow.students.question.feedback = Allow learners to see question feedback after each question @@ -457,4 +458,4 @@ label.authoring.advance.question.distribution = Question distribution label.monitoring.user.summary.marker.comment = Comment label.monitoring.user.summary.marker = Marker -label.activity.monitoring = Activity details +label.activity.monitoring = Activity details \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20231220.sql =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20231220.sql (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20231220.sql (revision ff8c13adfeaacdee873b39fedc822e304e1f4cff) @@ -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-5430 Add option to shuffle answers +ALTER TABLE tl_laasse10_assessment ADD COLUMN shuffled_answers TINYINT NOT NULL DEFAULT '0' AFTER shuffled; + +-- 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/Assessment.java =================================================================== diff -u -r0083f3733489a25a89db5cfa6810303c015acd8f -rff8c13adfeaacdee873b39fedc822e304e1f4cff --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Assessment.java (.../Assessment.java) (revision 0083f3733489a25a89db5cfa6810303c015acd8f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/Assessment.java (.../Assessment.java) (revision ff8c13adfeaacdee873b39fedc822e304e1f4cff) @@ -23,14 +23,13 @@ package org.lamsfoundation.lams.tool.assessment.model; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.log4j.Logger; +import org.hibernate.annotations.Cascade; +import org.hibernate.annotations.SortComparator; +import org.lamsfoundation.lams.qb.model.QbToolQuestion; +import org.lamsfoundation.lams.tool.assessment.util.SequencableComparator; import javax.persistence.CascadeType; import javax.persistence.CollectionTable; @@ -47,15 +46,15 @@ import javax.persistence.OneToMany; import javax.persistence.OrderBy; import javax.persistence.Table; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; -import org.apache.log4j.Logger; -import org.hibernate.annotations.Cascade; -import org.hibernate.annotations.SortComparator; -import org.lamsfoundation.lams.qb.model.QbToolQuestion; -import org.lamsfoundation.lams.tool.assessment.util.SequencableComparator; - /** * Assessment * @@ -118,6 +117,9 @@ @Column private boolean shuffled; + @Column(name = "shuffled_answers") + private boolean shuffledAnswers; + @Column private boolean numbered; @@ -727,6 +729,14 @@ this.shuffled = shuffled; } + public boolean isShuffledAnswers() { + return shuffledAnswers; + } + + public void setShuffledAnswers(boolean shuffledAnswers) { + this.shuffledAnswers = shuffledAnswers; + } + /** * If this is checked, then in learner we display the numbering for learners. */ Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/LearningController.java =================================================================== diff -u -r193e1ddf0d23bb2d90636908378b8dbe4a089dbc -rff8c13adfeaacdee873b39fedc822e304e1f4cff --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/LearningController.java (.../LearningController.java) (revision 193e1ddf0d23bb2d90636908378b8dbe4a089dbc) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/LearningController.java (.../LearningController.java) (revision ff8c13adfeaacdee873b39fedc822e304e1f4cff) @@ -23,33 +23,9 @@ package org.lamsfoundation.lams.tool.assessment.web.controller; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.SortedSet; -import java.util.TimeZone; -import java.util.TreeSet; -import java.util.function.Function; -import java.util.stream.Collectors; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.lamsfoundation.lams.flux.FluxRegistry; @@ -108,9 +84,31 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.JsonNodeFactory; -import com.fasterxml.jackson.databind.node.ObjectNode; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import java.util.SortedSet; +import java.util.TimeZone; +import java.util.TreeSet; +import java.util.function.Function; +import java.util.stream.Collectors; /** * @author Andrey Balan @@ -375,7 +373,8 @@ questionDtos = new LinkedList<>(shuffledList); } for (QuestionDTO questionDto : questionDtos) { - if (questionDto.isShuffle() || (questionDto.getType() == QbQuestion.TYPE_ORDERING)) { + if (assessment.isShuffledAnswers() || questionDto.isShuffle() || (questionDto.getType() + == QbQuestion.TYPE_ORDERING)) { ArrayList shuffledList = new ArrayList<>(questionDto.getOptionDtos()); Collections.shuffle(shuffledList); questionDto.setOptionDtos(new LinkedHashSet<>(shuffledList)); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/form/AssessmentForm.java =================================================================== diff -u -r09cb8620b7ebc847ae6a700d11ba7c24435a279a -rff8c13adfeaacdee873b39fedc822e304e1f4cff --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/form/AssessmentForm.java (.../AssessmentForm.java) (revision 09cb8620b7ebc847ae6a700d11ba7c24435a279a) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/form/AssessmentForm.java (.../AssessmentForm.java) (revision ff8c13adfeaacdee873b39fedc822e304e1f4cff) @@ -23,10 +23,10 @@ package org.lamsfoundation.lams.tool.assessment.web.form; -import javax.servlet.http.HttpServletRequest; - import org.lamsfoundation.lams.tool.assessment.model.Assessment; +import javax.servlet.http.HttpServletRequest; + /** * Assessment Form. * @@ -61,6 +61,7 @@ assessment.setAllowWrongAnswersAfterQuestion(false); assessment.setDefineLater(false); assessment.setShuffled(false); + assessment.setShuffledAnswers(false); assessment.setNumbered(false); assessment.setDisplaySummary(false); assessment.setReflectOnActivity(false); Index: lams_tool_assessment/web/pages/authoring/advance.jsp =================================================================== diff -u -r2bc8f0c2f65f02cb65aa7e90d0bbb612494a4588 -rff8c13adfeaacdee873b39fedc822e304e1f4cff --- lams_tool_assessment/web/pages/authoring/advance.jsp (.../advance.jsp) (revision 2bc8f0c2f65f02cb65aa7e90d0bbb612494a4588) +++ lams_tool_assessment/web/pages/authoring/advance.jsp (.../advance.jsp) (revision ff8c13adfeaacdee873b39fedc822e304e1f4cff) @@ -165,6 +165,13 @@
+ +
+ +