Index: lams_tool_laqa/conf/hibernate/mappings/org/lamsfoundation/lams/tool/qa/QaContent.hbm.xml =================================================================== diff -u -rdd4087c8c38ddcf2e97af7fc2dda25a8c948bcf0 -rc625cc6ab9f7ecf8b52d200e78e865d4eddb257e --- lams_tool_laqa/conf/hibernate/mappings/org/lamsfoundation/lams/tool/qa/QaContent.hbm.xml (.../QaContent.hbm.xml) (revision dd4087c8c38ddcf2e97af7fc2dda25a8c948bcf0) +++ lams_tool_laqa/conf/hibernate/mappings/org/lamsfoundation/lams/tool/qa/QaContent.hbm.xml (.../QaContent.hbm.xml) (revision c625cc6ab9f7ecf8b52d200e78e865d4eddb257e) @@ -138,6 +138,14 @@ length="1" /> + + qaQueContents, Set qaSessions, Set conditions, boolean allowRichEditor, boolean useSelectLeaderToolOuput, int maximumRates, int minimumRates, @@ -143,6 +145,7 @@ this.allowRateAnswers = allowRateAnswers; this.notifyTeachersOnResponseSubmit = notifyTeachersOnResponseSubmit; this.lockWhenFinished = lockWhenFinished; + this.noReeditAllowed = noReeditAllowed; this.showOtherAnswers = showOtherAnswers; this.reflect = reflect; this.reflectionSubject = reflectionSubject; @@ -172,7 +175,7 @@ QaContent newContent = new QaContent(newContentId, qa.getContent(), qa.getTitle(), qa.getInstructions(), qa.getReportTitle(), qa.getMonitoringReportTitle(), qa.getCreatedBy(), qa.isQuestionsSequenced(), qa.isUsernameVisible(), qa.isAllowRateAnswers(), qa.isNotifyTeachersOnResponseSubmit(), - qa.isLockWhenFinished(), qa.isShowOtherAnswers(), qa.isReflect(), qa.getReflectionSubject(), + qa.isLockWhenFinished(), qa.isNoReeditAllowed(), qa.isShowOtherAnswers(), qa.isReflect(), qa.getReflectionSubject(), qa.getCreationDate(), qa.getUpdateDate(), new TreeSet(), new TreeSet(), new TreeSet( new TextSearchConditionComparator()), qa.isAllowRichEditor(), qa.isUseSelectLeaderToolOuput(), qa.maximumRates, qa.minimumRates, new TreeSet()); @@ -548,7 +551,22 @@ public void setLockWhenFinished(boolean lockWhenFinished) { this.lockWhenFinished = lockWhenFinished; } + + /** + * @return Returns the noReeditAllowed. + */ + public boolean isNoReeditAllowed() { + return noReeditAllowed; + } + /** + * @param noReeditAllowed + * The noReeditAllowed to set. + */ + public void setNoReeditAllowed(boolean noReeditAllowed) { + this.noReeditAllowed = noReeditAllowed; + } + public boolean isAllowRichEditor() { return allowRichEditor; } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dbupdates/patch20150619.sql =================================================================== diff -u --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dbupdates/patch20150619.sql (revision 0) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dbupdates/patch20150619.sql (revision c625cc6ab9f7ecf8b52d200e78e865d4eddb257e) @@ -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-3487 Don't allow question redos +ALTER TABLE tl_laqa11_content ADD COLUMN no_reedit_allowed 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_laqa/src/java/org/lamsfoundation/lams/tool/qa/dto/GeneralLearnerFlowDTO.java =================================================================== diff -u -refbaf6ddcc506fed7b594bc9b663b81a03b1283f -rc625cc6ab9f7ecf8b52d200e78e865d4eddb257e --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dto/GeneralLearnerFlowDTO.java (.../GeneralLearnerFlowDTO.java) (revision efbaf6ddcc506fed7b594bc9b663b81a03b1283f) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dto/GeneralLearnerFlowDTO.java (.../GeneralLearnerFlowDTO.java) (revision c625cc6ab9f7ecf8b52d200e78e865d4eddb257e) @@ -106,6 +106,8 @@ protected String initialScreen; protected String lockWhenFinished; + + protected boolean noReeditAllowed; protected String userUid; @@ -656,8 +658,23 @@ public void setLockWhenFinished(String lockWhenFinished) { this.lockWhenFinished = lockWhenFinished; } + + /** + * @return Returns the noReeditAllowed. + */ + public boolean getNoReeditAllowed() { + return noReeditAllowed; + } /** + * @param noReeditAllowed + * The noReeditAllowed to set. + */ + public void setNoReeditAllowed(boolean noReeditAllowed) { + this.noReeditAllowed = noReeditAllowed; + } + + /** * @return Returns the showOtherAnswers. */ public String getShowOtherAnswers() { Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java =================================================================== diff -u -ra207bdecc16a704428826dbf402a97de2e35458b -rc625cc6ab9f7ecf8b52d200e78e865d4eddb257e --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision a207bdecc16a704428826dbf402a97de2e35458b) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision c625cc6ab9f7ecf8b52d200e78e865d4eddb257e) @@ -1254,6 +1254,7 @@ toolContentObj.setMonitoringReportTitle(null); // in LAMS 2.0 toolContentObj.setLockWhenFinished(true); + toolContentObj.setNoReeditAllowed(false); toolContentObj.setShowOtherAnswers(true); toolContentObj.setAllowRateAnswers(false); toolContentObj.setNotifyTeachersOnResponseSubmit(false); @@ -1473,6 +1474,7 @@ qa.setDefineLater(false); qa.setLockWhenFinished(JsonUtil.opt(toolContentJSON, RestTags.LOCK_WHEN_FINISHED, Boolean.FALSE)); + qa.setNoReeditAllowed(JsonUtil.opt(toolContentJSON, "noReeditAllowed", Boolean.FALSE)); qa.setAllowRichEditor(JsonUtil.opt(toolContentJSON, RestTags.ALLOW_RICH_TEXT_EDITOR, Boolean.FALSE)); qa.setUseSelectLeaderToolOuput(JsonUtil.opt(toolContentJSON, RestTags.USE_SELECT_LEADER_TOOL_OUTPUT, Boolean.FALSE)); qa.setMinimumRates(JsonUtil.opt(toolContentJSON, RestTags.MINIMUM_RATES, 0)); Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaAction.java =================================================================== diff -u -r8a6392348f5cedfa186ea7f17eaee50b50e679bb -rc625cc6ab9f7ecf8b52d200e78e865d4eddb257e --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaAction.java (.../QaAction.java) (revision 8a6392348f5cedfa186ea7f17eaee50b50e679bb) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaAction.java (.../QaAction.java) (revision c625cc6ab9f7ecf8b52d200e78e865d4eddb257e) @@ -225,6 +225,7 @@ String showOtherAnswers = request.getParameter("showOtherAnswers"); String questionsSequenced = request.getParameter(QaAppConstants.QUESTIONS_SEQUENCED); String lockWhenFinished = request.getParameter("lockWhenFinished"); + String noReeditAllowed = request.getParameter("noReeditAllowed"); String allowRichEditor = request.getParameter("allowRichEditor"); String useSelectLeaderToolOuput = request.getParameter("useSelectLeaderToolOuput"); String reflect = request.getParameter(QaAppConstants.REFLECT); @@ -234,6 +235,7 @@ boolean questionsSequencedBoolean = false; boolean lockWhenFinishedBoolean = false; + boolean noReeditAllowedBoolean = false; boolean usernameVisibleBoolean = false; boolean allowRateQuestionsBoolean = false; boolean notifyTeachersOnResponseSubmitBoolean = false; @@ -249,6 +251,11 @@ if (lockWhenFinished != null && lockWhenFinished.equalsIgnoreCase("1")) { lockWhenFinishedBoolean = true; } + + if (noReeditAllowed != null && noReeditAllowed.equalsIgnoreCase("1")) { + noReeditAllowedBoolean = true; + lockWhenFinishedBoolean = true; + } if (usernameVisible != null && usernameVisible.equalsIgnoreCase("1")) { usernameVisibleBoolean = true; @@ -310,6 +317,7 @@ qaContent.setShowOtherAnswers(showOtherAnswersBoolean); qaContent.setQuestionsSequenced(questionsSequencedBoolean); qaContent.setLockWhenFinished(lockWhenFinishedBoolean); + qaContent.setNoReeditAllowed(noReeditAllowedBoolean); qaContent.setReflect(reflectBoolean); qaContent.setReflectionSubject(reflectionSubject); qaContent.setAllowRichEditor(allowRichEditorBoolean); Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaLearningAction.java =================================================================== diff -u -r3a8781497ba5a90b5dd63a364582dad5d0823d8b -rc625cc6ab9f7ecf8b52d200e78e865d4eddb257e --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaLearningAction.java (.../QaLearningAction.java) (revision 3a8781497ba5a90b5dd63a364582dad5d0823d8b) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaLearningAction.java (.../QaLearningAction.java) (revision c625cc6ab9f7ecf8b52d200e78e865d4eddb257e) @@ -176,6 +176,13 @@ forwardName = QaAppConstants.LOAD_LEARNER; } } + + //in case noReeditAllowed finalize response so user can't refresh the page and post answers again + if (errors.isEmpty() && qaContent.isNoReeditAllowed()) { + QaQueUsr qaQueUsr = getCurrentUser(toolSessionID); + qaQueUsr.setResponseFinalized(true); + QaLearningAction.qaService.updateUser(qaQueUsr); + } generalLearnerFlowDTO.setMapAnswers(mapAnswers); generalLearnerFlowDTO.setMapAnswersPresentable(mapAnswersPresentable); @@ -193,6 +200,7 @@ boolean lockWhenFinished = qaContent.isLockWhenFinished(); generalLearnerFlowDTO.setLockWhenFinished(new Boolean(lockWhenFinished).toString()); + generalLearnerFlowDTO.setNoReeditAllowed(qaContent.isNoReeditAllowed()); generalLearnerFlowDTO.setReflection(new Boolean(qaContent.isReflect()).toString()); request.setAttribute(QaAppConstants.GENERAL_LEARNER_FLOW_DTO, generalLearnerFlowDTO); @@ -366,6 +374,7 @@ boolean lockWhenFinished = qaContent.isLockWhenFinished(); generalLearnerFlowDTO.setLockWhenFinished(new Boolean(lockWhenFinished).toString()); + generalLearnerFlowDTO.setNoReeditAllowed(qaContent.isNoReeditAllowed()); boolean useSelectLeaderToolOuput = qaContent.isUseSelectLeaderToolOuput(); generalLearnerFlowDTO.setUseSelectLeaderToolOuput(new Boolean(useSelectLeaderToolOuput).toString()); @@ -460,6 +469,7 @@ boolean lockWhenFinished = qaContent.isLockWhenFinished(); generalLearnerFlowDTO.setLockWhenFinished(new Boolean(lockWhenFinished).toString()); + generalLearnerFlowDTO.setNoReeditAllowed(qaContent.isNoReeditAllowed()); boolean allowRichEditor = qaContent.isAllowRichEditor(); generalLearnerFlowDTO.setAllowRichEditor(new Boolean(allowRichEditor).toString()); Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaLearningStarterAction.java =================================================================== diff -u -r3a8781497ba5a90b5dd63a364582dad5d0823d8b -rc625cc6ab9f7ecf8b52d200e78e865d4eddb257e --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaLearningStarterAction.java (.../QaLearningStarterAction.java) (revision 3a8781497ba5a90b5dd63a364582dad5d0823d8b) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaLearningStarterAction.java (.../QaLearningStarterAction.java) (revision c625cc6ab9f7ecf8b52d200e78e865d4eddb257e) @@ -329,6 +329,7 @@ // the learner is in the same session and has already responsed to this content generalLearnerFlowDTO.setLockWhenFinished(new Boolean(qaContent.isLockWhenFinished()).toString()); + generalLearnerFlowDTO.setNoReeditAllowed(qaContent.isNoReeditAllowed()); /* * the report should have all the users' entries OR the report should have only the current * session's entries Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaStarterAction.java =================================================================== diff -u -rdd4087c8c38ddcf2e97af7fc2dda25a8c948bcf0 -rc625cc6ab9f7ecf8b52d200e78e865d4eddb257e --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaStarterAction.java (.../QaStarterAction.java) (revision dd4087c8c38ddcf2e97af7fc2dda25a8c948bcf0) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaStarterAction.java (.../QaStarterAction.java) (revision c625cc6ab9f7ecf8b52d200e78e865d4eddb257e) @@ -179,6 +179,7 @@ qaAuthoringForm.setShowOtherAnswers(qaContent.isShowOtherAnswers() ? "1" : "0"); qaAuthoringForm.setQuestionsSequenced(qaContent.isQuestionsSequenced() ? "1" : "0"); qaAuthoringForm.setLockWhenFinished(qaContent.isLockWhenFinished() ? "1" : "0"); + qaAuthoringForm.setNoReeditAllowed(qaContent.isNoReeditAllowed() ? "1" : "0"); qaAuthoringForm.setMaximumRates(qaContent.getMaximumRates()); qaAuthoringForm.setMinimumRates(qaContent.getMinimumRates()); Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/form/QaAuthoringForm.java =================================================================== diff -u -rdd4087c8c38ddcf2e97af7fc2dda25a8c948bcf0 -rc625cc6ab9f7ecf8b52d200e78e865d4eddb257e --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/form/QaAuthoringForm.java (.../QaAuthoringForm.java) (revision dd4087c8c38ddcf2e97af7fc2dda25a8c948bcf0) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/form/QaAuthoringForm.java (.../QaAuthoringForm.java) (revision c625cc6ab9f7ecf8b52d200e78e865d4eddb257e) @@ -61,6 +61,7 @@ protected String showOtherAnswers; protected String questionsSequenced; protected String lockWhenFinished; + protected String noReeditAllowed; protected String reflect; protected String reflectionSubject; protected int maximumRates; @@ -124,6 +125,7 @@ this.monitoringReportTitle = null; this.questionsSequenced = null; this.lockWhenFinished = null; + this.noReeditAllowed = null; this.reflect = null; this.allowRichEditor = false; this.useSelectLeaderToolOuput = false; @@ -143,6 +145,7 @@ this.notifyTeachersOnResponseSubmit = OPTION_OFF; this.questionsSequenced = OPTION_OFF; this.lockWhenFinished = OPTION_OFF; + this.noReeditAllowed = OPTION_OFF; this.reflect = OPTION_OFF; this.allowRichEditor = false; this.required = false; @@ -725,8 +728,23 @@ public void setLockWhenFinished(String lockWhenFinished) { this.lockWhenFinished = lockWhenFinished; } + + /** + * @return Returns the noReeditAllowed. + */ + public String getNoReeditAllowed() { + return noReeditAllowed; + } /** + * @param noReeditAllowed + * The noReeditAllowed to set. + */ + public void setNoReeditAllowed(String noReeditAllowed) { + this.noReeditAllowed = noReeditAllowed; + } + + /** * @return Returns the showOtherAnswers. */ public String getShowOtherAnswers() { Index: lams_tool_laqa/web/authoring/AdvancedContent.jsp =================================================================== diff -u -rdd4087c8c38ddcf2e97af7fc2dda25a8c948bcf0 -rc625cc6ab9f7ecf8b52d200e78e865d4eddb257e --- lams_tool_laqa/web/authoring/AdvancedContent.jsp (.../AdvancedContent.jsp) (revision dd4087c8c38ddcf2e97af7fc2dda25a8c948bcf0) +++ lams_tool_laqa/web/authoring/AdvancedContent.jsp (.../AdvancedContent.jsp) (revision c625cc6ab9f7ecf8b52d200e78e865d4eddb257e) @@ -34,14 +34,20 @@ $('#allow-rate-answers').click(function() { $("#criterias-holder").toggle("slow"); }); + + $('#no-reedit-allowed').click(function() { + if ($(this).is(':checked')) { + $("#lockWhenFinished").prop('checked', true); + } + $("#lockWhenFinished").prop("disabled", $(this).is(':checked')); + }); });

- + @@ -119,24 +125,29 @@

- +

- + + +

+ +

+

- + Index: lams_tool_laqa/web/learning/IndividualLearnerResults.jsp =================================================================== diff -u -r55acfa2355b842ad87bac70171e366e088daad3c -rc625cc6ab9f7ecf8b52d200e78e865d4eddb257e --- lams_tool_laqa/web/learning/IndividualLearnerResults.jsp (.../IndividualLearnerResults.jsp) (revision 55acfa2355b842ad87bac70171e366e088daad3c) +++ lams_tool_laqa/web/learning/IndividualLearnerResults.jsp (.../IndividualLearnerResults.jsp) (revision c625cc6ab9f7ecf8b52d200e78e865d4eddb257e) @@ -41,7 +41,7 @@ - +

@@ -96,10 +96,12 @@
- - - + + + + + - +
@@ -116,9 +116,11 @@
- + + +