Survey maker prevent duplicate vars

Added check in survey maker to prevent saving a question that uses a variable that is already in use.
This commit is contained in:
Jared Tabor
2014-12-19 14:28:38 -05:00
parent 54465d4b31
commit b0c9845bc3
2 changed files with 52 additions and 46 deletions

View File

@@ -62,7 +62,8 @@ angular.module('SurveyQuestionFormDefinition', [])
'data-placement="right" data-container="body" data-title="Answer Variable Name" class="help-link" data-original-title="" title="" tabindex="-1"><i class="fa fa-question-circle"></i></a> </label>'+
'<div><input type="text" ng-model="variable" name="variable" id="survey_question_variable" class="form-control ng-pristine ng-invalid ng-invalid-required" required="" aw-survey-variable-name>'+
'<div class="error ng-hide" id="survey_question-variable-required-error" ng-show="survey_question_form.variable.$dirty &amp;&amp; survey_question_form.variable.$error.required">A value is required!</div>'+
'<div class="error ng-hide" id="survey_question-variable-required-error" ng-show="survey_question_form.variable.$dirty &amp;&amp; survey_question_form.variable.$error.variable">The value contains an illegal character!</div>'+
'<div class="error ng-hide" id="survey_question-variable-variable-error" ng-show="survey_question_form.variable.$dirty &amp;&amp; survey_question_form.variable.$error.variable">The value contains an illegal character!</div>'+
'<div class="error ng-hide" id=survey_question-variable-duplicate-error" ng-show="duplicate">This variable is already in use.</div>' +
'<div class="error api-error ng-binding" id="survey_question-variable-api-error" ng-bind="variable_api_error"></div>'+
'</div>',
addRequired: true,

View File

@@ -521,6 +521,7 @@ angular.module('SurveyHelper', [ 'Utilities', 'RestServices', 'SchedulesHelper',
scope.addNewQuestion = function(){
// $('#add_question_btn').on("click" , function(){
scope.duplicate = false;
scope.addQuestion();
$('#survey_question_question_name').focus();
$('#add_question_btn').attr('disabled', 'disabled');
@@ -529,6 +530,7 @@ angular.module('SurveyHelper', [ 'Utilities', 'RestServices', 'SchedulesHelper',
// });
};
scope.editQuestion = function(index){
scope.duplicate = false;
EditQuestion({
index: index,
scope: scope,
@@ -708,15 +710,57 @@ angular.module('SurveyHelper', [ 'Utilities', 'RestServices', 'SchedulesHelper',
scope.submitQuestion = function(){
var data = {},
//form = SurveyQuestionForm,
// labels={},
// min= "min",
// max = "max",
// fld,
fld,
key, elementID;
//generator.clearApiErrors();
Wait('start');
// validate that there aren't any questions using this var name.
if(GenerateForm.mode === 'add'){
if(scope.mode === 'add'){
for(fld in questions){
if(questions[fld].variable === scope.variable){
scope.duplicate = true;
Wait('stop');
return;
}
}
}
else if (scope.mode === 'edit'){
for(fld in scope.survey_questions){
if(scope.survey_questions[fld].variable === scope.variable){
scope.duplicate = true;
Wait('stop');
return;
}
}
}
}
if(GenerateForm.mode === 'edit'){
elementID = event.target.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.id;
key = elementID.split('_')[1];
if(scope.mode==='add'){
for(fld in questions){
if(questions[fld].variable === scope.variable && fld!==key){
scope.duplicate = true;
Wait('stop');
return;
}
}
}
else if(scope.mode === 'edit'){
for(fld in scope.survey_questions){
if(scope.survey_questions[fld].variable === scope.variable && fld!==key){
scope.duplicate = true;
Wait('stop');
return;
}
}
}
}
try {
//create data object for each submitted question
data.question_name = scope.question_name;
@@ -729,45 +773,6 @@ angular.module('SurveyHelper', [ 'Utilities', 'RestServices', 'SchedulesHelper',
data.default = (scope.type.type === 'textarea') ? scope.default_textarea : (scope.type.type === "float") ? scope.default_float : (scope.type.type==="integer") ? scope.default_int : (scope.type.type === "multiselect") ? scope.default_multiselect : (scope.default) ? scope.default : "" ;
data.choices = (scope.type.type === "multiplechoice") ? scope.choices : (scope.type.type === 'multiselect') ? scope.choices : "" ;
// for (fld in form.fields) {
// if(fld==='required'){
// data[fld] = (scope[fld]===true) ? true : false;
// }
// if(scope[fld]){
// if(fld === "type"){
// data[fld] = scope[fld].type;
// if(scope[fld].type === 'text'){
// data.min = scope.text_min;
// data.max = scope.text_max;
// // data.default = scope.default_text;
// }
// if(scope[fld].type === 'textarea'){
// data.min = scope.textarea_min;
// data.max = scope.textarea_max;
// // data.default = scope.default_textarea;
// }
// if(scope[fld].type === 'float'){
// data.min = scope.float_min;
// data.max = scope.float_max;
// data.default = scope.default_float;
// }
// if(scope[fld].type==="integer" ){
// data.min = scope.int_min;
// data.max = scope.int_max;
// data.default = scope.default_int;
// }
// }
// else if(fld==='default_multiselect'){
// data.default = scope.default_multiselect;
// }
// else{
// data[fld] = scope[fld];
// }
// }
// }
Wait('stop');
if(scope.mode === 'add' || scope.mode==="edit" && scope.can_edit === true){
$('#survey-save-button').removeAttr('disabled');