From c07d9a26ed36d9533cfc431e2853ee240453ce02 Mon Sep 17 00:00:00 2001 From: Gaurav Narula Date: Sat, 14 Jan 2012 09:03:24 +0000 Subject: [PATCH] Commit for GCI task #7241213 New Feature: Create new label sets or replace old ones from subquestions or answers git-svn-id: file:///Users/Shitiz/Downloads/lssvn/source/limesurvey_yii@12044 b72ed6b6-b9f8-46b5-92b4-906544132732 --- application/controllers/admin/labels.php | 55 +++++ .../survey/Question/answerOptions_view.php | 33 ++- .../survey/Question/subQuestion_view.php | 29 ++- scripts/admin/answers.js | 162 ++++++++++++++ scripts/admin/subquestions.js | 200 ++++++++++++++++-- 5 files changed, 458 insertions(+), 21 deletions(-) diff --git a/application/controllers/admin/labels.php b/application/controllers/admin/labels.php index b3159227b07..1d4548cbc9a 100644 --- a/application/controllers/admin/labels.php +++ b/application/controllers/admin/labels.php @@ -363,6 +363,61 @@ public function exportmulti() $this->_renderWrappedTemplate('exportmulti_view'); } + public function getAllSets() + { + $results = Labelsets::model()->findAll(); + + $output = array(); + + foreach($results as $row) + { + $output[$row->lid] = $row->getAttribute('label_name'); + } + + echo json_encode($output); + } + + public function ajaxSets() + { + $lid = CHttpRequest::getPost('lid'); + $answers = CHttpRequest::getPost('answers'); + $code = CHttpRequest::getPost('code'); + //Create new label set + $language = ""; + foreach ($answers as $lang => $answer) { + $language .= $lang." "; + } + $language = trim($language); + if ($lid == 0) + { + $lset = new Labelsets; + $lset->label_name = sanitize_xss_string(CHttpRequest::getPost('laname')); + $lset->languages = sanitize_xss_string($language); + $lset->save(); + + $lid = Yii::app()->db->getLastInsertID(); + } + else + { + Label::model()->deleteAll('lid = :lid', array(':lid' => $lid)); + } + $res = 'ok'; //optimistic + foreach($answers as $lang => $answer) { + foreach ($answer as $key => $ans) + { + $label = new Label; + $label->lid = $lid; + $label->code = $code[$key]; + $label->title = $ans; + $label->sortorder = $key; + $label->language = $lang; + if(!$label->save()) + $res = 'fail'; + } + } + echo json_encode($res); + } + /** * Renders template(s) wrapped in header and footer * diff --git a/application/views/admin/survey/Question/answerOptions_view.php b/application/views/admin/survey/Question/answerOptions_view.php index cf82c0b9083..48f99de04d9 100644 --- a/application/views/admin/survey/Question/answerOptions_view.php +++ b/application/views/admin/survey/Question/answerOptions_view.php @@ -23,6 +23,14 @@ var duplicateanswercode='eT('Error: You are trying to use duplicate answer codes.','js'); ?>'; var langs=''; var ci_path="getConfig('imageurl'); ?>"; + var saveaslabletitle = 'eT('Save as Label','js'); ?>'; + var lanameurl = 'createUrl('/admin/labels/getAllSets'); ?>'; + var lasaveurl = 'createUrl('/admin/labels/ajaxSets'); ?>'; + var check = true; + var lasuccess = 'eT('The records have been saved successfully!'); ?>'; + var lafail = 'eT('Sorry, the request failed!'); ?>'; + var ok = 'eT('Ok'); ?>'; + var cancel = 'eT('Cancel'); ?>';
-
+
+ + + + + + + + +

diff --git a/application/views/admin/survey/Question/subQuestion_view.php b/application/views/admin/survey/Question/subQuestion_view.php index 31fa514bb11..6cd8e522f95 100644 --- a/application/views/admin/survey/Question/subQuestion_view.php +++ b/application/views/admin/survey/Question/subQuestion_view.php @@ -9,6 +9,14 @@ var duplicateanswercode='eT('Error: You are trying to use duplicate subquestion codes.','js'); ?>'; var langs=''; var ci_path='getConfig('imageurl'); ?>'; + var saveaslabletitle = 'eT('Save as Label','js'); ?>'; + var lanameurl = 'createUrl('/admin/labels/getAllSets'); ?>'; + var lasaveurl = 'createUrl('/admin/labels/ajaxSets'); ?>'; + var check = true; + var lasuccess = 'eT('The records have been saved successfully!'); ?>'; + var lafail = 'eT('Sorry, the request failed!'); ?>'; + var ok = 'eT('Ok'); ?>'; + var cancel = 'eT('Cancel'); ?>';

@@ -109,7 +117,7 @@ class="highlight" - + language."_".$row->qid."_{$row->scale_id}", "[".$clang->gT("Subquestion:", "js")."](".$row->language.")",$surveyid,$gid,$qid,'editanswer'); ?> @@ -134,7 +142,7 @@ class="highlight" session['USER_RIGHT_SUPERADMIN'] == 1 || Yii::app()->session['USER_RIGHT_MANAGE_LABEL'] == 1){ ?> - + eT('Add'); ?>
+ + + + + + +

diff --git a/scripts/admin/answers.js b/scripts/admin/answers.js index 4aa2579b0ff..3599a223993 100644 --- a/scripts/admin/answers.js +++ b/scripts/admin/answers.js @@ -30,6 +30,18 @@ $(document).ready(function(){ $('#btnqareplace').click(quickaddlabels); $('#btnqainsert').click(quickaddlabels); $('.btnquickadd').click(quickadddialog); + $('#saveaslabel').dialog({ autoOpen: false, + modal: true, + width: 300, + title: saveaslabletitle}); + $('.bthsaveaslabel').click(getlabel); + $('#btnlacancel').click(function(){ + $('#saveaslabel').dialog('close'); + }); + $('input[name=savelabeloption]:radio').click(setlabel); + flag = [false, false]; + $('#btnsave').click(savelabel); + updaterowproperties(); }); @@ -619,12 +631,162 @@ function quickaddlabels() updaterowproperties(); } +function getlabel() +{ + var answer_table = $(this).parent().children().eq(0); + scale_id=removechars($(this).attr('id')); + + $('#saveaslabel').dialog('open'); + updaterowproperties(); +} + +function setlabel() +{ + switch($(this).attr('id')) + { + case 'newlabel': + if(!flag[0]){ + $('#lasets').remove(); + $($(this).next().next()).after(' ' + + ''); + flag[0] = true; + flag[1] = false; + } + break; + + case 'replacelabel': + if(!flag[1]){ + $('#laname').remove(); + $('[for=laname]').remove(); + $($(this).next().next()).after(''); + flag[1] = true; + flag[0] = false; + } + break; + } +} + +function savelabel() +{ + var lid = $('#lasets').val() ? $('#lasets').val() : 0; + if(lid == 0) + { + var response = ajaxcheckdup(); + response.complete(function() { + if(check) + { + ajaxreqsave(); + } + }) + } + else + { + $('#dialog-confirm-replace').dialog({ + resizable: false, + height: 160, + modal: true, + buttons: [{ + text: ok, + click: function() { + $(this).dialog("close"); + ajaxreqsave(); + }},{ + text: cancel, + click: function() { + check = false; + $(this).dialog("close"); + }} + ] + }); + } +} + +function ajaxcheckdup() +{ + check = true; //set check to true everytime on call + return jQuery.getJSON(lanameurl, function(data) { + $.each(data, function(key, val) { + if($('#laname').val() == val) + { + $("#dialog-duplicate").dialog({ + resizable: false, + height: 160, + modal: true, + buttons: [{ + text: ok, + click: function() { + $(this).dialog("close"); + } + }] + }); + check = false; + return false; + } + }); + }); +} +function ajaxreqsave() { + var lid = $('#lasets').val() ? $('#lasets').val() : 0; + // get code for the current scale + var code = new Array(); + $('.code').each(function(index) { + if($(this).attr('id').substr(-1) === scale_id) + code.push($(this).val()); + }); + answers = new Object(); + languages = langs.split(';'); + for(x in languages) + { + answers[languages[x]] = new Array(); + $('.answer').each(function(index) { + if($(this).attr('id').substr(-1) === scale_id && $(this).attr('id').indexOf(languages[x]) != -1) + answers[languages[x]].push($(this).val()); + }); + } + $.post(lasaveurl, { laname: $('#laname').val(), lid: lid, code: code, answers: answers }, function(data) { + $("#saveaslabel").dialog('close'); + if(jQuery.parseJSON(data) == "ok") + { + $("#dialog-result").html(lasuccess); + $('#dialog-result').dialog({ + height: 160, + width: 250, + buttons: [{ + text: ok, + click: function() { + $(this).dialog("close"); + } + }] + }); + } + else + { + $("#dialog-result").html(lafail); + $('#dialog-result').dialog({ + height: 160, + width: 250, + buttons: [{ + text: ok, + click: function() { + $(this).dialog("close"); + } + }] + }); + } + }); +} function quickadddialog() { diff --git a/scripts/admin/subquestions.js b/scripts/admin/subquestions.js index 3e162d3b1f4..1bf761e65ae 100644 --- a/scripts/admin/subquestions.js +++ b/scripts/admin/subquestions.js @@ -32,7 +32,18 @@ $(document).ready(function(){ $('#labelsets').click(lspreview); $('#languagefilter').click(lsbrowser); $('.btnquickadd').click(quickadddialog); - + $('#saveaslabel').dialog({ autoOpen: false, + modal: true, + width: 300, + title: saveaslabletitle}); + $('.bthsaveaslabel').click(getlabel); + $('#btnlacancel').click(function(){ + $('#saveaslabel').dialog('close'); + }); + $('input[name=savelabeloption]:radio').click(setlabel); + flag = [false, false]; + $('#btnsave').click(savelabel); + updaterowproperties(); }); @@ -78,10 +89,10 @@ function deleteinput() function addinput() { - var sID=$('input[name=sid]').val(); - var gID=$('input[name=gid]').val(); - var qID=$('input[name=qid]').val(); - + var sID=$('input[name=sid]').val(); + var gID=$('input[name=gid]').val(); + var qID=$('input[name=qid]').val(); + scale_id=removechars($(this).closest('table').attr('id')); newposition = Number($(this).closest('tr').parent().children().index($(this).closest('tr')))+1; languages=langs.split(';'); @@ -283,7 +294,7 @@ function lspreview() return; } - var lsid=$('#labelsets').val(); + var lsid=$('#labelsets').val(); surveyid=$('input[name=sid]').val(); // check if this label set is already cached if (!isset(labelcache[lsid])) @@ -373,10 +384,10 @@ function dump(arr,level) { function transferlabels() { - var sID=$('input[name=sid]').val(); - var gID=$('input[name=gid]').val(); - var qID=$('input[name=qid]').val(); - + var sID=$('input[name=sid]').val(); + var gID=$('input[name=gid]').val(); + var qID=$('input[name=qid]').val(); + surveyid=$('input[name=sid]').val(); if ($(this).attr('id')=='btnlsreplace') { @@ -395,7 +406,7 @@ function transferlabels() }); } - var lsid=$('#labelsets').val(); + var lsid=$('#labelsets').val(); $.ajax({ url: 'admin.php?action=ajaxlabelsetdetails', dataType: 'json', @@ -480,10 +491,10 @@ function transferlabels() function quickaddlabels() { - var sID=$('input[name=sid]').val(); - var gID=$('input[name=gid]').val(); - var qID=$('input[name=qid]').val(); - + var sID=$('input[name=sid]').val(); + var gID=$('input[name=gid]').val(); + var qID=$('input[name=qid]').val(); + if ($(this).attr('id')=='btnqareplace') { var lsreplace=true; @@ -563,10 +574,167 @@ function quickaddlabels() updaterowproperties(); } +function getlabel() +{ + var answer_table = $(this).parent().children().eq(0); + scale_id=removechars($(this).attr('id')); + + $('#saveaslabel').dialog('open'); + updaterowproperties(); +} + +function setlabel() +{ + switch($(this).attr('id')) + { + case 'newlabel': + if(!flag[0]){ + $('#lasets').remove(); + $($(this).next().next()).after(' ' + + ''); + flag[0] = true; + flag[1] = false; + } + break; + + case 'replacelabel': + if(!flag[1]){ + $('#laname').remove(); + $('[for=laname]').remove(); + $($(this).next().next()).after(''); + flag[1] = true; + flag[0] = false; + } + break; + } +} + +function savelabel() +{ + var lid = $('#lasets').val() ? $('#lasets').val() : 0; + if(lid == 0) + { + var response = ajaxcheckdup(); + response.complete(function() { + if(check) + { + ajaxreqsave(); + } + }) + } + else + { + $('#dialog-confirm-replace').dialog({ + resizable: false, + height: 160, + modal: true, + buttons: [{ + text: ok, + click: function() { + $(this).dialog("close"); + ajaxreqsave(); + }},{ + text: cancel, + click: function() { + check = false; + $(this).dialog("close"); + }} + ] + }); + } +} + +function ajaxcheckdup() +{ + check = true; //set check to true everytime on call + return jQuery.getJSON(lanameurl, function(data) { + $.each(data, function(key, val) { + if($('#laname').val() == val) + { + $("#dialog-duplicate").dialog({ + resizable: false, + height: 160, + modal: true, + buttons: [{ + text: ok, + click: function() { + $(this).dialog("close"); + } + }] + }); + check = false; + return false; + } + }); + }); +} + +function ajaxreqsave() { + var lid = $('#lasets').val() ? $('#lasets').val() : 0; + + // get code for the current scale + var code = new Array(); + $('.code').each(function(index) { + if($(this).attr('id').substr(-1) === scale_id) + code.push($(this).val()); + }); + + answers = new Object(); + languages = langs.split(';'); + + for(x in languages) + { + answers[languages[x]] = new Array(); + $('.answer').each(function(index) { + if($(this).attr('id').substr(-1) === scale_id && $(this).attr('id').indexOf(languages[x]) != -1) + answers[languages[x]].push($(this).val()); + }); + } + + + $.post(lasaveurl, { laname: $('#laname').val(), lid: lid, code: code, answers: answers }, function(data) { + $("#saveaslabel").dialog('close'); + if(jQuery.parseJSON(data) == "ok") + { + $("#dialog-result").html(lasuccess); + $('#dialog-result').dialog({ + height: 160, + width: 250, + buttons: [{ + text: ok, + click: function() { + $(this).dialog("close"); + } + }] + }); + } + else + { + $("#dialog-result").html('lafail'); + $('#dialog-result').dialog({ + height: 160, + width: 250, + buttons: [{ + text: ok, + click: function() { + $(this).dialog("close"); + } + }] + }); + } + }); +} + function quickadddialog() { - scale_id=removechars($(this).attr('id')); + scale_id=removechars($(this).attr('id')); $('#quickadd').dialog('open'); }