Rev 16906 | Rev 16929 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php$acl = $this->viewModel()->getRoot()->getVariable('acl');$currentUser = $this->currentUserHelper();$roleName = $currentUser->getUserTypeId();$routeAdd = $this->url('fast-survey/add');$routeDatatable = $this->url('fast-survey');$allowAdd = $acl->isAllowed($roleName, 'fast-survey/add') ? 1 : 0;$allowEdit = $acl->isAllowed($roleName, 'fast-survey/edit') ? 1 : 0;$allowDelete = $acl->isAllowed($roleName, 'fast-survey/delete') ? 1 : 0;$allowChart = $acl->isAllowed($roleName, 'fast-survey/chart') ? 1 : 0;$allowDownload = $acl->isAllowed($roleName, 'fast-survey/download') ? 1 : 0;$this->headLink()->appendStylesheet($this->basePath('assets/vendors/nprogress/nprogress.css'));$this->inlineScript()->appendFile($this->basePath('assets/vendors/nprogress/nprogress.js'));$this->inlineScript()->appendFile($this->basePath('assets/vendors/jquery-validation/jquery.validate.js'));$this->inlineScript()->appendFile($this->basePath('assets/vendors/jquery-validation/additional-methods.js'));$this->inlineScript()->appendFile($this->basePath('assets/vendors/jquery-validation/localization/messages_es.js'));$this->headLink()->appendStylesheet($this->basePath('assets/vendors/datatables.net-bs5/dataTables.bootstrap5.css'));$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net/jquery.dataTables.js'));$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net-bs5/dataTables.bootstrap5.js'));$this->inlineScript()->appendFile($this->basePath('assets/vendors/jquery-input-number/input-number-format.jquery.js'));$this->inlineScript()->appendFile($this->basePath('assets/vendors/chart.js/chart.js'));$this->inlineScript()->appendFile($this->basePath('assets/vendors/chartjs-plugin-datalabels/chartjs-plugin-datalabels.js'));$this->inlineScript()->captureStart();echo <<<JSvar ctxChartResult = document.getElementById("chartResult").getContext("2d");var chartResult = new Chart(ctxChartResult, {type: 'bar',data: {labels: [],datasets: [{label : 'LABEL_VOTES',backgroundColor: '#E69090',borderColor: '#E69090',borderWidth: 1,fill: false,data : []},]},options: {indexAxis: 'y',tooltips: {mode: 'index',intersect: false},scales: {xAxes: [{ticks: {beginAtZero:true}}]}}});jQuery( document ).ready(function( $ ) {$.validator.setDefaults({debug: true,highlight: function(element) {$(element).addClass('is-invalid');},unhighlight: function(element) {$(element).removeClass('is-invalid');},errorElement: 'span',errorClass: 'error invalid-feedback',errorPlacement: function(error, element) {if(element.parent('.form-group').length) {error.insertAfter(element);} else if(element.parent('.toggle').length) {error.insertAfter(element.parent().parent());} else {error.insertAfter(element.parent());}}});$.fn.showFormErrorValidator = function(fieldname, errors) {var field = $(fieldname);if(field) {$(field).addClass('is-invalid');var error = $('<span id="' + fieldname +'-error" class="error invalid-feedback">' + errors + '</div>');if(field.parent('.form-group').length) {error.insertAfter(field);} else if(field.parent('.toggle').length) {error.insertAfter(field.parent().parent());} else {error.insertAfter(field.parent());}}};var allowEdit = $allowEdit;var allowDelete = $allowDelete;var allowChart = $allowChart;var allowDownload = $allowDownload;var gridTable = $('#gridTable').dataTable( {'processing': true,'serverSide': true,'searching': true,'order': [[ 0, 'asc' ]],'ordering': true,'ordenable' : true,'responsive': true,'select' : false,'paging': true,'pagingType': 'simple_numbers','ajax': {'url' : '$routeDatatable','type' : 'get','beforeSend': function (request) {NProgress.start();},'dataFilter': function(response) {var response = jQuery.parseJSON( response );var json = {};json.recordsTotal = 0;json.recordsFiltered = 0;json.data = [];if(response.success) {json.recordsTotal = response.data.total;json.recordsFiltered = response.data.total;json.data = response.data.items;} else {$.fn.showError(response.data)}return JSON.stringify( json );}},'language' : {'sProcessing': 'LABEL_DATATABLE_SPROCESSING','sLengthMenu': 'LABEL_DATATABLE_SLENGTHMENU','sZeroRecords': 'LABEL_DATATABLE_SZERORECORDS','sEmptyTable': 'LABEL_DATATABLE_SEMPTYTABLE','sInfo': 'LABEL_DATATABLE_SINFO','sInfoEmpty': 'LABEL_DATATABLE_SINFOEMPTY','sInfoFiltered': 'LABEL_DATATABLE_SINFOFILTERED','sInfoPostFix': '','sSearch': 'LABEL_DATATABLE_SSEARCH','sUrl': '','sInfoThousands': ',','sLoadingRecords': 'LABEL_DATATABLE_SLOADINGRECORDS','oPaginate': {'sFirst': 'LABEL_DATATABLE_SFIRST','sLast': 'LABEL_DATATABLE_SLAST','sNext': 'LABEL_DATATABLE_SNEXT','sPrevious': 'LABEL_DATATABLE_SPREVIOUS'},'oAria': {'sSortAscending': ': LABEL_DATATABLE_SSORTASCENDING','sSortDescending': ':LABEL_DATATABLE_SSORTDESCENDING'},},'drawCallback': function( settings ) {NProgress.done();},'aoColumns': [{ 'mDataProp': 'question' },{ 'mDataProp': 'details' },{ 'mDataProp': 'votes' },{ 'mDataProp': 'actions' },],'columnDefs': [{'targets': 0,'className' : 'text-vertical-middle',},{'targets': 1,'orderable': false,'render' : function ( data, type, row ) {var s = 'LABEL_DURATION_FROM : ' + data['added_on'] + '<br>';s = s + 'LABEL_DURATION_UNTIL : ' + data['expire_on'] + '<br>';return s;}},{'targets': 2,'className' : 'text-vertical-middle','orderable': false,},{'targets': -1,'orderable': false,'render' : function ( data, type, row ) {s = '';if(allowEdit && data['link_edit']) {s = s + '<button class="btn btn-primary btn-edit" data-href="' + data['link_edit']+ '" data-toggle="tooltip" title="LABEL_EDIT"><i class="fa fa-pen"></i> LABEL_EDIT </button> ';}if(allowDelete && data['link_delete']) {s = s + '<button class="btn btn-danger btn-delete" data-href="' + data['link_delete']+ '" data-toggle="tooltip" title="LABEL_DELETE"><i class="fa fa-trash"></i> LABEL_DELETE </button> ';}if(allowChart && data['link_chart']) {s = s + '<button class="btn btn-danger btn-chart" data-href="' + data['link_chart']+ '" data-toggle="tooltip" title="LABEL_CHART"><i class="fa fa-line-chart"></i> LABEL_CHART </button> ';}if(allowDownload && data['link_download']) {s = s + '<button class="btn btn-danger btn-download" data-href="' + data['link_download']+ '" data-toggle="tooltip" title="LABEL_DOWNLOAD"><i class="fa fa-download"></i> LABEL_DOWNLOAD </button> ';}return s;}}],});var validator = $('#form').validate({debug: true,onclick: false,onkeyup: false,ignore: [],rules: {'question': {required: true,maxlength: 1024,},'number_of_answers' : {required: true,digits: true,min: 2,max: 5},'answer1': {required: true,maxlength: 100,},'answer2': {required: true,maxlength: 100,},'answer3': {required: function (element) {return $('#form #number_of_answers').val() >= 3 ? true : false;} ,maxlength: 100,},'answer4': {required: function (element) {return $('#form #number_of_answers').val() >= 4 ? true : false;} ,maxlength: 100,},'answer5': {required: function (element) {return $('#form #number_of_answers').val() >= 5 ? true : false;} ,maxlength: 100,},'privacy': {required: true,},'result_type': {required: false,},'duration_days' : {required: true,digits: true,min: 1,max: 29},'duration_hours' : {required: true,digits: true,min: 0,max: 23},'duration_minutes' : {required: true,digits: true,min: 0,max: 59},},submitHandler: function(form){$.ajax({'dataType' : 'json','accept' : 'application/json','method' : 'post','url' : $('#form').attr('action'),'data' : $('#form').serialize(),}).done(function(response) {NProgress.start();if(response['success']) {$.fn.showSuccess(response['data']);$('#row-form').hide();$('#row-listing').show();gridTable.api().ajax.reload(null, false);} else {validator.resetForm();if(jQuery.type(response['data']) == 'string') {$.fn.showError(response['data']);} else {$.each(response['data'], function( fieldname, errors ) {$.fn.showFormErrorValidator('#form #' + fieldname, errors);});}}}).fail(function( jqXHR, textStatus, errorThrown) {$.fn.showError(textStatus);}).always(function() {NProgress.done();});return false;},invalidHandler: function(form, validator) {}});$('body').on('click', 'button.btn-add', function(e) {e.preventDefault();$('#card-form-title').html('LABEL_ADD');$('#form').attr('action', '$routeAdd');$('#form #question').val('');$('#form #number_of_answers').val('2');$('#form #answer1').val('');$('#form #answer2').val('');$('#form #answer3').val('');$('#form #answer4').val('');$('#form #answer5').val('');$('#form #privacy').val($("#form #privacy option:first").val());$('#form #result_type').val($("#form #result_type option:first").val());$('#form #duration_days').val('1');$('#form #duration_hours').val('0');$('#form #duration_minutes').val('0');$('#form-group-answer3').hide();$('#form-group-answer4').hide();$('#form-group-answer5').hide();validator.resetForm();$('#row-listing').hide();$('#row-form').show();});$('body').on('click', 'button.btn-edit', function(e) {e.preventDefault();NProgress.start();var action = $(this).data('href');$.ajax({'dataType' : 'json','method' : 'get','url' : action,}).done(function(response) {if(response['success']) {$('#card-form-title').html('LABEL_EDIT');$('#form').attr('action', action);$('#form #question').val(response['data']['question']);$('#form #number_of_answers').val(response['data']['number_of_answers']);$('#form #answer1').val(response['data']['answer1']);$('#form #answer2').val(response['data']['answer2']);$('#form #answer3').val(response['data']['answer3']);$('#form #answer4').val(response['data']['answer4']);$('#form #answer5').val(response['data']['answer5']);$('#form #privacy').val(response['data']['privacy']);$('#form #result_type').val(response['data']['result_type']);$('#form #duration_days').val(response['data']['duration_days']);$('#form #duration_hours').val(response['data']['duration_hours']);$('#form #duration_minutes').val(response['data']['duration_minutes']);switch(response['data']['number_of_answers']){case 3 :$('#form-group-answer3').show();$('#form-group-answer4').hide();$('#form-group-answer5').hide();break;case 4 :$('#form-group-answer3').show();$('#form-group-answer4').show();$('#form-group-answer5').hide();break;case 5 :$('#form-group-answer3').show();$('#form-group-answer4').show();$('#form-group-answer5').show();break;default :$('#form-group-answer3').hide();$('#form-group-answer4').hide();$('#form-group-answer5').hide();break;}validator.resetForm();$('#row-listing').hide();$('#row-form').show();} else {$.fn.showError(response['data']);}}).fail(function( jqXHR, textStatus, errorThrown) {$.fn.showError(textStatus);}).always(function() {NProgress.done();});});$('body').on('click', 'button.btn-chart', function(e) {e.preventDefault();NProgress.start();var action = $(this).data('href');$.ajax({'dataType' : 'json','method' : 'get','url' : action,}).done(function(response) {if(response['success']) {$('#chart-question').html(response['data']['question']);chartResult.data.labels = response['data']['labels'];chartResult.data.datasets[0].data = response['data']['values'];chartResult.update();$('#row-listing').hide();$('#row-chart').show();} else {$.fn.showError(response['data']);}}).fail(function( jqXHR, textStatus, errorThrown) {$.fn.showError(textStatus);}).always(function() {NProgress.done();});});$('body').on('click', 'button.btn-download', function(e) {e.preventDefault();NProgress.start();var action = $(this).data('href');$.ajax({'dataType' : 'json','method' : 'get','url' : action,}).done(function(response) {if(response['success']) {var anchor = window.document.createElement("a");anchor.href = 'data:application/octet-stream;charset=utf-8;base64,' + response['data']['content'] ;anchor.download = response['data']['basename'];document.body.appendChild(anchor);anchor.click(); // IE: "Access is denied"; see: https://connect.microsoft.com/IE/feedback/details/797361/ie-10-treats-blob-url-as-cross-origin-and-denies-accessdocument.body.removeChild(anchor);} else {$.fn.showError(response['data']);}}).fail(function( jqXHR, textStatus, errorThrown) {$.fn.showError(textStatus);}).always(function() {NProgress.done();});});$('body').on('click', 'button.btn-refresh', function(e) {e.preventDefault();gridTable.api().ajax.reload(null, false);});$('body').on('click', 'button.btn-cancel', function(e) {e.preventDefault();$('#row-chart').hide();$('#row-form').hide();$('#row-listing').show();});$('body').on('click', 'button.btn-delete', function(e) {e.preventDefault();var action = $(this).data('href');swal.fire({title: 'LABEL_ARE_YOU_SURE',icon: 'question',cancelButtonText: 'LABEL_NO',showCancelButton: true,confirmButtonText: 'LABEL_YES'}).then((result) => {if (result.isConfirmed) {NProgress.start();$.ajax({'dataType' : 'json','accept' : 'application/json','method' : 'post','url' : action,}).done(function(response) {if(response['success']) {$.fn.showSuccess(response['data']);gridTable.api().ajax.reload(null, false);} else {$.fn.showError(response['data']);}}).fail(function( jqXHR, textStatus, errorThrown) {$.fn.showError(textStatus);}).always(function() {NProgress.done();});}});});$('#form #number_of_answers').change(function(e) {e.preventDefault();switch(parseInt($(this).val())){case 3 :$('#form-group-answer3').show();$('#form-group-answer4').hide();$('#form-group-answer5').hide();break;case 4 :$('#form-group-answer3').show();$('#form-group-answer4').show();$('#form-group-answer5').hide();break;case 5 :$('#form-group-answer3').show();$('#form-group-answer4').show();$('#form-group-answer5').show();break;default :$('#form-group-answer3').hide();$('#form-group-answer4').hide();$('#form-group-answer5').hide();break;}});$('#form #duration_days').inputNumberFormat({decimal: 0});$('#form #duration_hours').inputNumberFormat({decimal: 0});$('#form #duration_minutes').inputNumberFormat({decimal: 0});});JS;$this->inlineScript()->captureEnd();?><div class="container"><div class="card" id="row-listing"><div class="card-header"><h6 class="card-title">LABEL_FAST_SURVEYS</h6></div><div class="card-body"><div class="row"><div class="col-12 mt-3"><table id="gridTable" class="table table-bordered"><thead><tr><th>LABEL_QUESTION</th><th>LABEL_DETAILS</th><th>LABEL_VOTES</th><th>LABEL_ACTIONS</th></tr></thead><tbody></tbody></table></div></div></div><div class="card-footer text-right"><button type="button" class="btn btn-info btn-refresh"><i class="fa fa-refresh"></i> LABEL_REFRESH </button><?php if ($allowAdd) : ?><button type="button" class="btn btn-primary btn-add"><i class="fa fa-plus"></i> LABEL_ADD </button><?php endif; ?></div></div><div class="card" id="row-form" style="display: none"><div class="card-header"><h6 class="card-title" id="card-form-title"></h6></div><?php$form = $this->form;$form->setAttributes(['method' => 'post','name' => 'form','id' => 'form',]);$form->prepare();echo $this->form()->openTag($form);?><div class="card-body"><div class="row"><div class="col-12 mt-3"><?php$element = $form->get('question');$element->setOptions(['label' => 'LABEL_QUESTION']);$element->setAttributes(['class' => 'form-control']);echo $this->formLabel($element);echo $this->formText($element);?></div></div><div class="row"><div class="col-12 mt-3"><?php$element = $form->get('number_of_answers');$element->setOptions(['label' => 'LABEL_NUMBER_OF_ANSWERS']);$element->setAttributes(['class' => 'form-control']);echo $this->formLabel($element);echo $this->formSelect($element);?></div></div><div class="row"><div class="col-12 mt-3"><?php$element = $form->get('answer1');$element->setOptions(['label' => 'LABEL_ANSWER1']);$element->setAttributes(['class' => 'form-control']);echo $this->formLabel($element);echo $this->formText($element);?></div></div><div class="row"><div class="col-12 mt-3"><?php$element = $form->get('answer2');$element->setOptions(['label' => 'LABEL_ANSWER2']);$element->setAttributes(['class' => 'form-control']);echo $this->formLabel($element);echo $this->formText($element);?></div></div><div class="row" id="form-group-answer3"><div class="col-12 mt-3"><?php$element = $form->get('answer3');$element->setOptions(['label' => 'LABEL_ANSWER3']);$element->setAttributes(['class' => 'form-control']);echo $this->formLabel($element);echo $this->formText($element);?></div></div><div class="row" id="form-group-answer4"><div class="col-12 mt-3"><?php$element = $form->get('answer4');$element->setOptions(['label' => 'LABEL_ANSWER4']);$element->setAttributes(['class' => 'form-control']);echo $this->formLabel($element);echo $this->formText($element);?></div></div><div class="row" id="form-group-answer5"><div class="col-12 mt-3"><?php$element = $form->get('answer5');$element->setOptions(['label' => 'LABEL_ANSWER5']);$element->setAttributes(['class' => 'form-control']);echo $this->formLabel($element);echo $this->formText($element);?></div></div><div class="row"><div class="col-12 mt-3"><?php$element = $form->get('privacy');$element->setOptions(['label' => 'LABEL_PRIVACY']);$element->setAttributes(['class' => 'form-control']);echo $this->formLabel($element);echo $this->formSelect($element);?></div></div><div class="row"><div class="col-12 mt-3"><?php$element = $form->get('result_type');$element->setOptions(['label' => 'LABEL_RESULT_TYPE']);$element->setAttributes(['class' => 'form-control']);echo $this->formLabel($element);echo $this->formSelect($element);?></div></div><div class="row"><div class="col-12 mt-3"><?php$element = $form->get('duration_days');$element->setOptions(['label' => 'LABEL_DURATION_DAYS']);$element->setAttributes(['class' => 'form-control']);echo $this->formLabel($element);echo $this->formNumber($element);?></div></div><div class="row"><div class="col-12 mt-3"><?php$element = $form->get('duration_hours');$element->setOptions(['label' => 'LABEL_DURATION_HOURS']);$element->setAttributes(['class' => 'form-control']);echo $this->formLabel($element);echo $this->formNumber($element);?></div></div><div class="row"><div class="col-12 mt-3"><?php$element = $form->get('duration_minutes');$element->setOptions(['label' => 'LABEL_DURATION_MINUTES']);$element->setAttributes(['class' => 'form-control']);echo $this->formLabel($element);echo $this->formNumber($element);?></div></div></div><div class="card-footer text-right"><button type="submit" class="btn btn-primary">LABEL_SAVE</button><button type="button" class="btn btn-light btn-cancel">LABEL_CANCEL</button></div><?php echo $this->form()->closeTag($form); ?></div><div class="card" id="row-chart" style="display: none"><div class="card-header"><h6 class="card-title" id="chart-question"></h6></div><div class="card-body"><div class="row"><div class="col-12 mt-3"><div class="col-lg-12 col-12 chart"><canvas id="chartResult" style="min-height: 250px; height: 250px; max-height: 250px; max-width: 100%;"></canvas></div></div></div></div><div class="card-footer text-right"><button type="button" class="btn btn-light btn-cancel">LABEL_CANCEL</button></div></div></div>