Index: lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r9dcdc46408a8664a0fb27f09ae58a340c15f5764 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 9dcdc46408a8664a0fb27f09ae58a340c15f5764) +++ lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -273,5 +273,6 @@ label.refresh =Refresh label.display.name.column =Display name column - +label.authoring.answer.required =Required to answer +warn.answers.required =Please, answer highlighted questions in order to continue. #======= End labels: Exported 266 labels for en AU ===== Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java =================================================================== diff -u -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java (.../AssessmentConstants.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java (.../AssessmentConstants.java) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -23,6 +23,8 @@ /* $Id$ */ package org.lamsfoundation.lams.tool.assessment; +import org.lamsfoundation.lams.tool.assessment.dto.RequiredQuestionsDTO; + public class AssessmentConstants { public static final String TOOL_SIGNATURE = "laasse10"; @@ -200,6 +202,8 @@ public static final String ATTR_IS_USER_FAILED = "isUserFailed"; + public static final String ATTR_REQUIRED_QUESTIONS_DTO = "requiredQuestionsDTO"; + public static final String ATTR_FINISHED_LOCK = "finishedLock"; public static final String ATTR_USER_FINISHED = "userFinished"; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20140707.sql =================================================================== diff -u -rac48fd0f080c920174cce3d8b957ea1c63d965f4 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20140707.sql (.../patch20140707.sql) (revision ac48fd0f080c920174cce3d8b957ea1c63d965f4) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/patch20140707.sql (.../patch20140707.sql) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -3,6 +3,9 @@ SET FOREIGN_KEY_CHECKS=0; ----------------------Put all sql statements below here------------------------- +-- LDEV-3265 Ability to set questions required to be answered +ALTER TABLE tl_laasse10_assessment_question ADD COLUMN answer_required TINYINT(1) NOT NULL DEFAULT 1; + -- LDEV-3263 Add support for renaming field names on sequence import UPDATE lams_tool SET tool_version='20140707' WHERE tool_signature='laasse10'; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/RequiredQuestionsDTO.java =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/RequiredQuestionsDTO.java (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/RequiredQuestionsDTO.java (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -0,0 +1,56 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.tool.assessment.dto; + +import java.util.List; + +public class RequiredQuestionsDTO { + private boolean isRequiredAnswerMissed; + private int pageNumber; + private List missingRequiredQuestions; + + public boolean isRequiredAnswerMissed() { + return isRequiredAnswerMissed; + } + + public void setRequiredAnswerMissed(boolean isRequiredAnswerMissed) { + this.isRequiredAnswerMissed = isRequiredAnswerMissed; + } + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int userUid) { + this.pageNumber = userUid; + } + + public List getMissingRequiredQuestions() { + return missingRequiredQuestions; + } + + public void setMissingRequiredQuestions(List fullName) { + this.missingRequiredQuestions = fullName; + } +} Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java =================================================================== diff -u -r2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java (.../AssessmentQuestion.java) (revision 2a68a250e3ae88b708a9a2a91e9f3439a4b6d7a9) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java (.../AssessmentQuestion.java) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -41,7 +41,6 @@ * @author Andrey Balan * * @hibernate.class table="tl_laasse10_assessment_question" - * */ public class AssessmentQuestion implements Cloneable, Sequencable, Comparable { private static final Logger log = Logger.getLogger(AssessmentQuestion.class); @@ -63,6 +62,8 @@ private float penaltyFactor; + private boolean answerRequired; + private String generalFeedback; private String feedback; @@ -294,7 +295,19 @@ public void setPenaltyFactor(float penaltyFactor) { this.penaltyFactor = penaltyFactor; } + + /** + * @hibernate.property column="answer_required" + * @return + */ + public boolean isAnswerRequired() { + return answerRequired; + } + public void setAnswerRequired(boolean answerRequired) { + this.answerRequired = answerRequired; + } + /** * @hibernate.property column="general_feedback" type="text" * @return Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentImportContentVersionFilter.java =================================================================== diff -u -rac48fd0f080c920174cce3d8b957ea1c63d965f4 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentImportContentVersionFilter.java (.../AssessmentImportContentVersionFilter.java) (revision ac48fd0f080c920174cce3d8b957ea1c63d965f4) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentImportContentVersionFilter.java (.../AssessmentImportContentVersionFilter.java) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -50,9 +50,10 @@ } /** - * Import 20140102 version content to 20140428 version tool server. + * Import 20140428 version content to 20140707 version tool server. */ public void up20140428To20140707() { this.renameField(AssessmentQuestion.class, "questionOptions", "options"); + this.addField(AssessmentQuestion.class, "answerRequired", true); } } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/AuthoringAction.java =================================================================== diff -u -r495a38a55b249f3b65031de0ac76ecbd9b86ce09 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision 495a38a55b249f3b65031de0ac76ecbd9b86ce09) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -465,6 +465,7 @@ questionForm.setContentFolderID(contentFolderID); questionForm.setDefaultGrade("1"); questionForm.setPenaltyFactor("0"); + questionForm.setAnswerRequired(true); List optionList = new ArrayList(); for (int i = 0; i < AssessmentConstants.INITIAL_OPTIONS_NUMBER; i++) { @@ -1662,6 +1663,7 @@ form.setQuestion(question.getQuestion()); form.setDefaultGrade(String.valueOf(question.getDefaultGrade())); form.setPenaltyFactor(String.valueOf(question.getPenaltyFactor())); + form.setAnswerRequired(question.isAnswerRequired()); form.setGeneralFeedback(question.getGeneralFeedback()); form.setFeedback(question.getFeedback()); form.setMultipleAnswersAllowed(question.isMultipleAnswersAllowed()); @@ -1733,6 +1735,7 @@ question.setDefaultGrade(Integer.parseInt(questionForm.getDefaultGrade())); question.setGeneralFeedback(questionForm.getGeneralFeedback()); + question.setAnswerRequired(questionForm.isAnswerRequired()); if (type == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE) { question.setMultipleAnswersAllowed(questionForm.isMultipleAnswersAllowed()); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java =================================================================== diff -u -r470bccfbbff0b31c242b99313c76456a1bdf1462 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 470bccfbbff0b31c242b99313c76456a1bdf1462) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -60,6 +60,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.tool.ToolAccessMode; import org.lamsfoundation.lams.tool.assessment.AssessmentConstants; +import org.lamsfoundation.lams.tool.assessment.dto.RequiredQuestionsDTO; import org.lamsfoundation.lams.tool.assessment.model.Assessment; import org.lamsfoundation.lams.tool.assessment.model.AssessmentOptionAnswer; import org.lamsfoundation.lams.tool.assessment.model.AssessmentOverallFeedback; @@ -402,7 +403,14 @@ request.getParameter(AssessmentConstants.PARAM_SECONDS_LEFT)); } - int pageNumber = WebUtil.readIntParam(request, AssessmentConstants.ATTR_PAGE_NUMBER); + //get pageNumber as request parameter in normal case and as attribute in case of submitAll returned it back + int pageNumber; + if ((request.getAttribute(AssessmentConstants.ATTR_PAGE_NUMBER) == null)) { + pageNumber = WebUtil.readIntParam(request, AssessmentConstants.ATTR_PAGE_NUMBER); + } else { + pageNumber = (Integer) request.getAttribute(AssessmentConstants.ATTR_PAGE_NUMBER); + } + int questionNumberingOffset = 0; ArrayList> pagedQuestions = (ArrayList>) sessionMap.get(AssessmentConstants.ATTR_PAGED_QUESTIONS); for (int i = 0; i < pageNumber-1; i++) { @@ -423,8 +431,20 @@ HttpServletResponse response) throws ServletException { String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + //get user answers from request and store them into sessionMap storeUserAnswersIntoSessionMap(request); + + //check all required questions got answered + RequiredQuestionsDTO requiredQuestionsDTO = checkAllRequiredQuestionsAnswered(sessionMap); + //if not then forward to nextPage() + if (requiredQuestionsDTO.isRequiredAnswerMissed()) { + request.setAttribute(AssessmentConstants.ATTR_PAGE_NUMBER, requiredQuestionsDTO.getPageNumber()); + request.setAttribute(AssessmentConstants.ATTR_REQUIRED_QUESTIONS_DTO, requiredQuestionsDTO); + + return nextPage(mapping, form, request, response); + } + //store results from sessionMap into DB storeUserAnswersIntoDatabase(sessionMap, false); @@ -707,6 +727,73 @@ } /** + * Get back user answers from request and store it into sessionMap. + * + * @param request + */ + private RequiredQuestionsDTO checkAllRequiredQuestionsAnswered(SessionMap sessionMap){ + + ArrayList> pagedQuestions = (ArrayList>) sessionMap.get(AssessmentConstants.ATTR_PAGED_QUESTIONS); + + //array of missing required questions + List missingRequiredQuestions = new ArrayList(); + + //iterate through all pages to find first that contains missing required questions + int pageCount; + for (pageCount = 0; pageCount < pagedQuestions.size(); pageCount++) { + LinkedHashSet questionsForOnePage = pagedQuestions.get(pageCount); + + int questionCount = 0; + for (AssessmentQuestion question : questionsForOnePage) { + if (question.isAnswerRequired()) { + + boolean isAnswered = false; + + int questionType = question.getType(); + if (questionType == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE) { + + for (AssessmentQuestionOption option : question.getOptions()) { + isAnswered |= option.getAnswerBoolean(); + } + + } else if (questionType == AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS) { + for (AssessmentQuestionOption option : question.getOptions()) { + isAnswered |= option.getAnswerInt() != 0; + } + + } else if ((questionType == AssessmentConstants.QUESTION_TYPE_SHORT_ANSWER) + || (questionType == AssessmentConstants.QUESTION_TYPE_NUMERICAL) + || (questionType == AssessmentConstants.QUESTION_TYPE_TRUE_FALSE) + || (questionType == AssessmentConstants.QUESTION_TYPE_ESSAY)) { + isAnswered |= StringUtils.isNotBlank(question.getAnswerString()); + + } else if (questionType == AssessmentConstants.QUESTION_TYPE_ORDERING) { + isAnswered = true; + } + + // required question was not answered, so store its sequence id + if (!isAnswered) { + missingRequiredQuestions.add(questionCount); + } + + } + + questionCount++; + } + + if (!missingRequiredQuestions.isEmpty()) { + break; + } + } + + RequiredQuestionsDTO requiredQuestionsDTO = new RequiredQuestionsDTO(); + requiredQuestionsDTO.setRequiredAnswerMissed(!missingRequiredQuestions.isEmpty()); + requiredQuestionsDTO.setPageNumber(pageCount + 1); + requiredQuestionsDTO.setMissingRequiredQuestions(missingRequiredQuestions); + return requiredQuestionsDTO; + } + + /** * Prepare data for displaying results page */ private void prepareResultsPageData(SessionMap sessionMap){ Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/form/AssessmentQuestionForm.java =================================================================== diff -u -r0913693693b87a26905b6b8057969e18d7c15d8f -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/form/AssessmentQuestionForm.java (.../AssessmentQuestionForm.java) (revision 0913693693b87a26905b6b8057969e18d7c15d8f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/form/AssessmentQuestionForm.java (.../AssessmentQuestionForm.java) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -46,6 +46,7 @@ private String question; private String defaultGrade; private String penaltyFactor; + private boolean answerRequired; private String generalFeedback; private String feedback; private boolean multipleAnswersAllowed; @@ -128,7 +129,15 @@ public void setPenaltyFactor(String penaltyFactor) { this.penaltyFactor = penaltyFactor; } + + public boolean isAnswerRequired() { + return answerRequired; + } + public void setAnswerRequired(boolean answerRequired) { + this.answerRequired = answerRequired; + } + public String getGeneralFeedback() { return generalFeedback; } Index: lams_tool_assessment/web/includes/css/assessment.css =================================================================== diff -u -r1e33f64c06430834c80a2b01d42bcdf844c5d958 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/web/includes/css/assessment.css (.../assessment.css) (revision 1e33f64c06430834c80a2b01d42bcdf844c5d958) +++ lams_tool_assessment/web/includes/css/assessment.css (.../assessment.css) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -141,3 +141,12 @@ color: red; } +.warning-answer-required { + background-color: bisque !important; + background-image: none !important; + border-bottom: 1px solid white !important; +} + +#warning-answers-required { + display: none; +} Index: lams_tool_assessment/web/pages/authoring/parts/addessay.jsp =================================================================== diff -u -raf7b155293a91f6d9bf32b74a09add86bd797f82 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/web/pages/authoring/parts/addessay.jsp (.../addessay.jsp) (revision af7b155293a91f6d9bf32b74a09add86bd797f82) +++ lams_tool_assessment/web/pages/authoring/parts/addessay.jsp (.../addessay.jsp) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -104,6 +104,11 @@
+ +
+ + +
Index: lams_tool_assessment/web/pages/authoring/parts/addmatchingpairs.jsp =================================================================== diff -u -raf7b155293a91f6d9bf32b74a09add86bd797f82 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/web/pages/authoring/parts/addmatchingpairs.jsp (.../addmatchingpairs.jsp) (revision af7b155293a91f6d9bf32b74a09add86bd797f82) +++ lams_tool_assessment/web/pages/authoring/parts/addmatchingpairs.jsp (.../addmatchingpairs.jsp) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -140,6 +140,11 @@ +
+ +
+ +
@@ -150,7 +155,7 @@
- +

Index: lams_tool_assessment/web/pages/authoring/parts/addmultiplechoice.jsp =================================================================== diff -u -raf7b155293a91f6d9bf32b74a09add86bd797f82 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/web/pages/authoring/parts/addmultiplechoice.jsp (.../addmultiplechoice.jsp) (revision af7b155293a91f6d9bf32b74a09add86bd797f82) +++ lams_tool_assessment/web/pages/authoring/parts/addmultiplechoice.jsp (.../addmultiplechoice.jsp) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -158,6 +158,11 @@ +
+ +
+ +
@@ -176,7 +181,7 @@
- +

Index: lams_tool_assessment/web/pages/authoring/parts/addnumerical.jsp =================================================================== diff -u -raf7b155293a91f6d9bf32b74a09add86bd797f82 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/web/pages/authoring/parts/addnumerical.jsp (.../addnumerical.jsp) (revision af7b155293a91f6d9bf32b74a09add86bd797f82) +++ lams_tool_assessment/web/pages/authoring/parts/addnumerical.jsp (.../addnumerical.jsp) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -204,6 +204,11 @@ +
+ +
+ +
Index: lams_tool_assessment/web/pages/authoring/parts/addordering.jsp =================================================================== diff -u -raf7b155293a91f6d9bf32b74a09add86bd797f82 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/web/pages/authoring/parts/addordering.jsp (.../addordering.jsp) (revision af7b155293a91f6d9bf32b74a09add86bd797f82) +++ lams_tool_assessment/web/pages/authoring/parts/addordering.jsp (.../addordering.jsp) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -144,6 +144,11 @@ +
+ +
+ +
Index: lams_tool_assessment/web/pages/authoring/parts/addshortanswer.jsp =================================================================== diff -u -r0a5c3ad1b814856b9ea78efb941e46a52a7a0de6 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/web/pages/authoring/parts/addshortanswer.jsp (.../addshortanswer.jsp) (revision 0a5c3ad1b814856b9ea78efb941e46a52a7a0de6) +++ lams_tool_assessment/web/pages/authoring/parts/addshortanswer.jsp (.../addshortanswer.jsp) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -151,6 +151,11 @@ +
+ +
+ +
Index: lams_tool_assessment/web/pages/authoring/parts/addtruefalse.jsp =================================================================== diff -u -raf7b155293a91f6d9bf32b74a09add86bd797f82 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/web/pages/authoring/parts/addtruefalse.jsp (.../addtruefalse.jsp) (revision af7b155293a91f6d9bf32b74a09add86bd797f82) +++ lams_tool_assessment/web/pages/authoring/parts/addtruefalse.jsp (.../addtruefalse.jsp) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -84,7 +84,7 @@ + @@ -121,6 +121,11 @@ +
+ +
+ +
Index: lams_tool_assessment/web/pages/learning/learning.jsp =================================================================== diff -u -r1e33f64c06430834c80a2b01d42bcdf844c5d958 -r3e771e28271a0ef14f3989fe84231546420df296 --- lams_tool_assessment/web/pages/learning/learning.jsp (.../learning.jsp) (revision 1e33f64c06430834c80a2b01d42bcdf844c5d958) +++ lams_tool_assessment/web/pages/learning/learning.jsp (.../learning.jsp) (revision 3e771e28271a0ef14f3989fe84231546420df296) @@ -10,6 +10,7 @@ <fmt:message key="label.learning.title" /> <%@ include file="/common/header.jsp"%> + <%-- param has higher level for request attribute --%> @@ -127,14 +128,33 @@ ); + //check if we came back due to missing required question's answer + $(document).ready(function(){ + if (${requiredQuestionsDTO != null}) { + validateAnswers(); + } + }); + function finishSession(){ + if (!validateAnswers()) { + return; + } + document.location.href =''; return false; } function continueReflect(){ + if (!validateAnswers()) { + return; + } + document.location.href=''; } function nextPage(pageNumber){ + if (!validateAnswers()) { + return; + } + var secondsLeft = 0; if (${not finishedLock && assessment.timeLimit > 0}) { var times = $("#countdown").countdown('getTimes'); @@ -145,8 +165,17 @@ myForm.submit(); } function submitAll(){ + if (!validateAnswers()) { + return; + } + + var secondsLeft = 0; + if (${not finishedLock && assessment.timeLimit > 0}) { + var times = $("#countdown").countdown('getTimes'); + secondsLeft = times[4]*3600 + times[5]*60 + times[6]; + } var myForm = $("#answers"); - myForm.attr("action", ""); + myForm.attr("action", "&secondsLeft=" + secondsLeft); myForm.submit(); } function resubmit(){ @@ -199,6 +228,89 @@ }); } + function validateAnswers() { + + if (${finishedLock || !hasEditRight}) { + return true; + } + + var missingRequiredQuestions = []; + + + + + + //multiplechoice + if ($("input[name^=question${status.index}]:checked").length == 0) { + missingRequiredQuestions.push("${status.index}"); + } + + + + //matchingpairs + + var eachSelectHasBeenAnswered = true; + $("select[name^=question${status.index}_]").each(function() { + eachSelectHasBeenAnswered &= this.value != -1; + }); + + if (!eachSelectHasBeenAnswered) { + missingRequiredQuestions.push("${status.index}"); + } + + + + + //shortanswer or numerical or essay without ckeditor + var inputText = $("input[name=question${status.index}]")[0]; + if($.trim(inputText.value).length == 0) { + missingRequiredQuestions.push("${status.index}"); + } + + + + //truefalse + if ($("input[name=question${status.index}]:checked").length == 0) { + missingRequiredQuestions.push("${status.index}"); + } + + + + //essay with ckeditor + var ckeditorData = CKEDITOR.instances["question${status.index}"].getData(); + //can't be null and empty value + if((ckeditorData == null) || (ckeditorData.replace(/ | |
|\s|

|<\/p>|\xa0/g, "").length == 0)) { + missingRequiredQuestions.push("${status.index}"); + } + + + + //ordering - do nothing + + + + + + //return true in case all required questions were answered, false otherwise + if (missingRequiredQuestions.length == 0) { + return true; + + } else { + //remove .warning-answer-required from all questions + $('[id^=question-area-]').removeClass('warning-answer-required'); + + //add .warning-answer-required class to those needs to be filled + for (i = 0; i < missingRequiredQuestions.length; i++) { + $("#question-area-" + missingRequiredQuestions[i]).addClass('warning-answer-required'); + } + + //show alert message as well + $("#warning-answers-required").show(); + $("html, body").animate({ scrollTop: 0 }, "slow");//window.scrollTo(0, 0); + return false; + } + } + @@ -238,6 +350,10 @@

+
+ +
+