Skip to content

Commit

Permalink
Commit for GCI task #7241213 New Feature: Create new label sets or re…
Browse files Browse the repository at this point in the history
…place old ones from subquestions or answers

git-svn-id: file:///Users/Shitiz/Downloads/lssvn/source/limesurvey_yii@12044 b72ed6b6-b9f8-46b5-92b4-906544132732
  • Loading branch information
Gaurav Narula committed Jan 14, 2012
1 parent 9864085 commit c07d9a2
Show file tree
Hide file tree
Showing 5 changed files with 458 additions and 21 deletions.
55 changes: 55 additions & 0 deletions application/controllers/admin/labels.php
Expand Up @@ -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
*
Expand Down
33 changes: 30 additions & 3 deletions application/views/admin/survey/Question/answerOptions_view.php
Expand Up @@ -23,6 +23,14 @@
var duplicateanswercode='<?php $clang->eT('Error: You are trying to use duplicate answer codes.','js'); ?>';
var langs='<?php echo implode(';',$anslangs); ?>';
var ci_path="<?php echo Yii::app()->getConfig('imageurl'); ?>";
var saveaslabletitle = '<?php $clang->eT('Save as Label','js'); ?>';
var lanameurl = '<?php echo Yii::app()->createUrl('/admin/labels/getAllSets'); ?>';
var lasaveurl = '<?php echo Yii::app()->createUrl('/admin/labels/ajaxSets'); ?>';
var check = true;
var lasuccess = '<?php $clang->eT('The records have been saved successfully!'); ?>';
var lafail = '<?php $clang->eT('Sorry, the request failed!'); ?>';
var ok = '<?php $clang->eT('Ok'); ?>';
var cancel = '<?php $clang->eT('Cancel'); ?>';
</script>
<div id='tabs'>
<ul>
Expand Down Expand Up @@ -140,7 +148,7 @@
<button id='btnlsbrowser_<?php echo $anslang; ?>_<?php echo $scale_id; ?>' class='btnlsbrowser' type='button'><?php $clang->eT('Predefined label sets...'); ?></button>
<button id='btnquickadd_<?php echo $anslang; ?>_<?php echo $scale_id; ?>' class='btnquickadd' type='button'><?php $clang->eT('Quick add...'); ?></button>

<?php if(false) { //Yii::app()->session['USER_RIGHT_SUPERADMIN'] == 1 || Yii::app()->session['USER_RIGHT_MANAGE_LABEL'] == 1){ ?>
<?php if(Yii::app()->session['USER_RIGHT_SUPERADMIN'] == 1 || Yii::app()->session['USER_RIGHT_MANAGE_LABEL'] == 1) { //){ ?>
<button class='bthsaveaslabel' id='bthsaveaslabel_<?php echo $scale_id; ?>' type='button'><?php $clang->eT('Save as label set'); ?></button>

<?php }
Expand All @@ -158,14 +166,33 @@
<button id='btnlsinsert' type='button'><?php $clang->eT('Add'); ?></button>
<button id='btncancel' type='button'><?php $clang->eT('Cancel'); ?></button></div>

<div id='labelsetpreview' style='float:right;width:500px;'></div></div>
<div id='labelsetpreview' style='float:right;width:500px;'></div>
</div>
<div id='quickadd' style='display:none;'><div style='float:left;'>
<label for='quickadd'><?php $clang->eT('Enter your answers:'); ?></label>
<br /><textarea id='quickaddarea' class='tipme' title='<?php $clang->eT('Enter one answer per line. You can provide a code by separating code and answer text with a semikolon or tab. For multilingual surveys you add the translation(s) on the same line separated with a semikolon or space.'); ?>' cols='100' rows='30' style='width:570px;'></textarea>
<br /><button id='btnqareplace' type='button'><?php $clang->eT('Replace'); ?></button>
<button id='btnqainsert' type='button'><?php $clang->eT('Add'); ?></button>
<button id='btnqacancel' type='button'><?php $clang->eT('Cancel'); ?></button></div>
</div>
</div>
<div id="saveaslabel" style='display:none;'>
<input type="radio" name="savelabeloption" id="newlabel"> <label for="newlabel"><?php $clang->eT('New Label Set'); ?></label><br /><br />
<input type="radio" name="savelabeloption" id="replacelabel"> <label for="replacelabel"><?php $clang->eT('Replace Existing Label'); ?></label><br /><br />
<button id='btnsave' type='button'><?php $clang->eT('Save'); ?></button>
<button id='btnlacancel' type='button'><?php $clang->eT('Cancel'); ?></button>
</div>

<div id="dialog-confirm-replace" title="Replace Label Set?" style='display:none;'>
<p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span><?php $clang->eT('You are about to replace a given label set with the current answer options. Continue?'); ?></p>
</div>

<div id="dialog-duplicate" title="Duplicate Label Set Name" style='display:none;'>
<p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span><?php $clang->eT('Sorry, the name you entered for the label set is already in the database. Please select a different name.'); ?></p>
</div>

<div id="dialog-result" title="Query Result" style='display:none;'>

</div>

<p><input type='submit' id='saveallbtn_<?php echo $anslang; ?>' name='method' value='<?php $clang->eT("Save changes"); ?>' />
</div></form>
29 changes: 27 additions & 2 deletions application/views/admin/survey/Question/subQuestion_view.php
Expand Up @@ -9,6 +9,14 @@
var duplicateanswercode='<?php $clang->eT('Error: You are trying to use duplicate subquestion codes.','js'); ?>';
var langs='<?php echo implode(';',$anslangs); ?>';
var ci_path='<?php echo Yii::app()->getConfig('imageurl'); ?>';
var saveaslabletitle = '<?php $clang->eT('Save as Label','js'); ?>';
var lanameurl = '<?php echo Yii::app()->createUrl('/admin/labels/getAllSets'); ?>';
var lasaveurl = '<?php echo Yii::app()->createUrl('/admin/labels/ajaxSets'); ?>';
var check = true;
var lasuccess = '<?php $clang->eT('The records have been saved successfully!'); ?>';
var lafail = '<?php $clang->eT('Sorry, the request failed!'); ?>';
var ok = '<?php $clang->eT('Ok'); ?>';
var cancel = '<?php $clang->eT('Cancel'); ?>';
</script>
<?php echo PrepareEditorScript(); ?>
<div class='header ui-widget-header'>
Expand Down Expand Up @@ -109,7 +117,7 @@ class="highlight"
<?php } ?>

</td><td>
<input type='text' size='100' id='answer_<?php echo $row->language; ?>_<?php echo $row->qid; ?>_<?php echo $row->scale_id; ?>' name='answer_<?php echo $row->language; ?>_<?php echo $row->qid; ?>_<?php echo $row->scale_id; ?>' value="<?php echo $row->question; ?>" onkeypress=" if(event.keyCode==13) { if (event && event.preventDefault) event.preventDefault(); document.getElementById('saveallbtn_<?php echo $anslang; ?>').click(); return false;}" />
<input type='text' size='100' class='answer' id='answer_<?php echo $row->language; ?>_<?php echo $row->qid; ?>_<?php echo $row->scale_id; ?>' name='answer_<?php echo $row->language; ?>_<?php echo $row->qid; ?>_<?php echo $row->scale_id; ?>' value="<?php echo $row->question; ?>" onkeypress=" if(event.keyCode==13) { if (event && event.preventDefault) event.preventDefault(); document.getElementById('saveallbtn_<?php echo $anslang; ?>').click(); return false;}" />
<?php echo getEditor("editanswer","answer_".$row->language."_".$row->qid."_{$row->scale_id}", "[".$clang->gT("Subquestion:", "js")."](".$row->language.")",$surveyid,$gid,$qid,'editanswer'); ?>
</td>
<td>
Expand All @@ -134,7 +142,7 @@ class="highlight"
<button class='btnlsbrowser' id='btnlsbrowser_<?php echo $scale_id; ?>' <?php echo $disabled; ?> type='button'><?php $clang->eT('Predefined label sets...'); ?></button>
<button class='btnquickadd' id='btnquickadd_<?php echo $scale_id; ?>' <?php echo $disabled; ?> type='button'><?php $clang->eT('Quick add...'); ?></button>
<?php if(Yii::app()->session['USER_RIGHT_SUPERADMIN'] == 1 || Yii::app()->session['USER_RIGHT_MANAGE_LABEL'] == 1){ ?>
<button class='bthsaveaslabel' id='bthsaveaslabel_<?php echo $scale_id; ?>' <?php echo $disabled; ?> type='button'><?php $clang->eT('Save as label set'); ?></button>
<button class='bthsaveaslabel' id='bthsaveaslabel_<?php echo $scale_id; ?>' type='button'><?php $clang->eT('Save as label set'); ?></button>
<?php } ?>

<?php }
Expand All @@ -161,6 +169,23 @@ class="highlight"
<button id='btnqainsert' type='button'><?php $clang->eT('Add'); ?></button>
<button id='btnqacancel' type='button'><?php $clang->eT('Cancel'); ?></button>
</div>
</div>
<div id="saveaslabel" style='display:none;'>
<input type="radio" name="savelabeloption" id="newlabel"> <label for="newlabel"><?php $clang->eT('New Label Set'); ?></label><br /><br />
<input type="radio" name="savelabeloption" id="replacelabel"> <label for="replacelabel"><?php $clang->eT('Replace Existing Label'); ?></label><br /><br />
<button id='btnsave' type='button'><?php $clang->eT('Save'); ?></button>
<button id='btnlacancel' type='button'><?php $clang->eT('Cancel'); ?></button>
</div>
<div id="dialog-confirm-replace" title="Replace Label Set?" style='display:none;'>
<p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span><?php $clang->eT('You are about to replace a given label set with the current sub questions. Continue?'); ?></p>
</div>

<div id="dialog-duplicate" title="Duplicate Label Set Name" style='display:none;'>
<p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span><?php $clang->eT('Sorry, the name you entered for the label set is already in the database. Please select a different name.'); ?></p>
</div>

<div id="dialog-result" title="Query Result" style='display:none;'>

</div>
<p>
<input type='submit' id='saveallbtn_<?php echo $anslang; ?>' name='method' value='<?php $clang->eT("Save changes"); ?>' />
Expand Down
162 changes: 162 additions & 0 deletions scripts/admin/answers.js
Expand Up @@ -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();
});
Expand Down Expand Up @@ -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('<label for="laname">Label Set Name :</label> ' +
'<input type="text" name="laname" id="laname">');
flag[0] = true;
flag[1] = false;
}
break;

case 'replacelabel':
if(!flag[1]){
$('#laname').remove();
$('[for=laname]').remove();
$($(this).next().next()).after('<select name="laname" id="lasets">');
jQuery.getJSON(lanameurl, function(data) {
$.each(data, function(key, val) {
$('#lasets').append('<option value="' + key + '">' + val + '</option>');
});
});
$('#lasets').append('</select>');
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()
{
Expand Down

0 comments on commit c07d9a2

Please sign in to comment.