Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16971 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
15572 anderson 1
<?php
1 www 2
$acl            = $this->viewModel()->getRoot()->getVariable('acl');
3
$currentUser    = $this->currentUserHelper();
4
 
5
$roleName = $currentUser->getUserTypeId();
6
 
7
 
8
$routeAdd       = $this->url('publications/pages/add');
9
$routeDatatable = $this->url('publications/pages');
10
$routeDashboard = $this->url('dashboard');
11
 
12
$allowAdd               = $acl->isAllowed($roleName, 'publications/pages/add') ? 1 : 0;
13
$allowEdit              = $acl->isAllowed($roleName, 'publications/pages/edit') ? 1 : 0;
14
$allowDelete            = $acl->isAllowed($roleName, 'publications/pages/delete') ? 1 : 0;
15
 
15572 anderson 16
$typeURL = \LeadersLinked\Model\Page::TYPE_URL;
17
$typePAGE = \LeadersLinked\Model\Page::TYPE_PAGE;
1 www 18
 
16822 efrain 19
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/nprogress/nprogress.css'));
20
$this->inlineScript()->appendFile($this->basePath('assets/vendors/nprogress/nprogress.js'));
1 www 21
 
16822 efrain 22
$this->inlineScript()->appendFile($this->basePath('assets/vendors/ckeditor/ckeditor.js'));
1 www 23
 
24
 
25
 
16929 efrain 26
 
27
 
28
 
16822 efrain 29
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/datatables.net-bs5/dataTables.bootstrap5.css'));
30
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/datatables.net-bs5-responsive/responsive.bootstrap5.css'));
1 www 31
 
16822 efrain 32
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net/jquery.dataTables.js'));
33
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net-bs5/dataTables.bootstrap5.js'));
34
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net-bs5-responsive/dataTables.responsive.min.js'));
35
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net-bs5-responsive/responsive.bootstrap5.min.js'));
1 www 36
 
37
 
16822 efrain 38
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/bootstrap4-toggle/css/bootstrap4-toggle.min.css'));
39
$this->inlineScript()->appendFile($this->basePath('assets/vendors/bootstrap4-toggle/js/bootstrap4-toggle.min.js'));
1 www 40
 
41
 
42
 
43
 
16822 efrain 44
$this->inlineScript()->appendFile($this->basePath('assets/vendors/select2/js/select2.js'));
45
$this->inlineScript()->appendFile($this->basePath('assets/vendors/select2/js/i18n/es.js'));
46
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/select2/css/select2.css'));
1 www 47
 
16927 efrain 48
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/select2-bootstrap5-theme/select2-bootstrap-5-theme.css'));
1 www 49
 
50
 
16822 efrain 51
 
52
 
1 www 53
$status_active = \LeadersLinked\Model\Page::STATUS_ACTIVE;
54
 
55
$this->inlineScript()->captureStart();
56
echo <<<JS
57
    jQuery( document ).ready(function( $ ) {
58
        $.validator.addMethod('requiredContent', function (value, element, param) {
59
 
60
            if($(param).val() == '$typePAGE') {
61
                value = CKEDITOR.instances.content.getData();
62
 
63
 
64
                value = $.trim($.fn.stripHtml(value));
65
                return value.length > 0;
66
            } else {
67
                return true;
68
            }
69
        }, 'ERROR_REQUIRED');
70
 
71
        $.validator.addMethod('requiredURL', function (value, element, param) {
72
            if($(param).val() == '$typeURL') {
73
                value = $.trim(value);
74
 
75
                if(value.length > 0) {
76
                    return $.fn.isUrl(value);
77
                }
78
                 return false;
79
            } else {
80
                return true;
81
            }
82
 
83
        }, 'ERROR_URL');
84
 
85
 
86
 
87
 
88
 
89
 
90
 
91
        var allowEdit   = $allowEdit;
92
        var allowDelete = $allowDelete;
93
 
15573 anderson 94
        var gridTable = $('#gridTable').dataTable( {
95
            'processing': true,
96
            'serverSide': true,
97
            'searching': true,
98
            'order': [[ 0, 'asc' ]],
99
            'ordering':  true,
100
            'ordenable' : true,
101
            'responsive': true,
102
            'select' : false,
103
        	'paging': true,
104
            'pagingType': 'simple_numbers',
105
    		'ajax': {
106
    			'url' : '$routeDatatable',
107
    			'type' : 'get',
108
                'beforeSend': function (request) {
109
                  NProgress.start();
110
                },
111
                'dataFilter': function(response) {
112
                    var response = jQuery.parseJSON( response );
1 www 113
 
15573 anderson 114
                    var json                = {};
115
                    json.recordsTotal       = 0;
116
                    json.recordsFiltered    = 0;
117
                    json.data               = [];
1 www 118
 
119
 
15573 anderson 120
                    if(response.success) {
121
                        json.recordsTotal       = response.data.total;
122
                        json.recordsFiltered    = response.data.total;
123
                        json.data               = response.data.items;
124
                    } else {
125
                        $.fn.showError(response.data)
126
                    }
1 www 127
 
15573 anderson 128
                    return JSON.stringify( json );
129
                }
130
    		},
131
            'language' : {
132
                'sProcessing':     'LABEL_DATATABLE_SPROCESSING',
133
                'sLengthMenu':     'LABEL_DATATABLE_SLENGTHMENU',
134
                'sZeroRecords':    'LABEL_DATATABLE_SZERORECORDS',
135
                'sEmptyTable':     'LABEL_DATATABLE_SEMPTYTABLE',
136
                'sInfo':           'LABEL_DATATABLE_SINFO',
137
                'sInfoEmpty':      'LABEL_DATATABLE_SINFOEMPTY',
138
                'sInfoFiltered':   'LABEL_DATATABLE_SINFOFILTERED',
139
                'sInfoPostFix':    '',
140
                'sSearch':         'LABEL_DATATABLE_SSEARCH',
141
                'sUrl':            '',
142
                'sInfoThousands':  ',',
143
                'sLoadingRecords': 'LABEL_DATATABLE_SLOADINGRECORDS',
144
                'oPaginate': {
145
                    'sFirst':    'LABEL_DATATABLE_SFIRST',
146
                    'sLast':     'LABEL_DATATABLE_SLAST',
147
                    'sNext':     'LABEL_DATATABLE_SNEXT',
148
                    'sPrevious': 'LABEL_DATATABLE_SPREVIOUS'
149
                },
150
                'oAria': {
151
                    'sSortAscending':  ': LABEL_DATATABLE_SSORTASCENDING',
152
                    'sSortDescending': ':LABEL_DATATABLE_SSORTDESCENDING'
153
                },
154
            },
155
            'drawCallback': function( settings ) {
156
                NProgress.done();
16822 efrain 157
 
15573 anderson 158
            },
159
            'aoColumns': [
160
                { 'mDataProp': 'code' },
161
                { 'mDataProp': 'title' },
162
                { 'mDataProp': 'status' },
163
                { 'mDataProp': 'actions' },
164
    	    ],
165
            'columnDefs': [
166
                {
167
                    'targets': 0,
168
                    'className' : 'text-vertical-middle',
169
                },
170
                {
171
                    'targets': 1,
172
                    'className' : 'text-vertical-middle',
173
                },
174
                {
175
                    'targets': -2,
176
                    'orderable': false,
177
                    'className' : 'text-center',
178
                      'render' : function ( data, type, row ) {
1 www 179
 
16822 efrain 180
                        checked = data == 'a'  ? 'checked' : '';
181
                        return '<div class="form-check">' +
16971 efrain 182
                            '<input type="checkbox" class="form-check-input" disabled="" ' + checked + '>' +
16822 efrain 183
                            '<label class="form-check-label" for="checkCheckedDisabled"></label></div>' ;
15573 anderson 184
                    }
185
                },
186
                {
187
                    'targets': -1,
188
                    'orderable': false,
189
                    'render' : function ( data, type, row ) {
190
                        s = '';
1 www 191
 
15573 anderson 192
                        if(allowEdit &&  data['link_edit']) {
16906 efrain 193
                            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>&nbsp;';
15573 anderson 194
                        }
195
                        if(allowDelete && data['link_delete']) {
196
                            s = s + '<button class="btn btn-delete" data-href="' + data['link_delete']+ '" data-toggle="tooltip" title="LABEL_DELETE"><i class="fa fa-trash"></i> LABEL_DELETE </button>&nbsp;';
197
                        }
198
                        return s;
199
                    }
200
                }
201
              ],
202
        });
1 www 203
 
204
 
205
        var validator = $('#form').validate({
206
            debug: true,
207
            onclick: false,
208
            onkeyup: false,
209
            ignore: [],
210
            rules: {
15458 efrain 211
                'code': {
1 www 212
                    required: true,
213
                    maxlength: 64,
214
                },
215
                'title': {
216
                    required: true,
217
                    maxlength: 128,
218
                },
219
                'type' : {
220
                    required: true,
221
                },
222
                'content': {
223
                    requiredContent: '#type',
224
                },
225
                'url': {
226
                    requiredURL: '#type',
227
 
228
                },
229
                'status': {
230
                    required: false,
231
 
232
                },
233
            },
234
 
235
 
236
        });
237
 
238
        $('body').on('click', 'button.btn-add', function(e) {
239
            e.preventDefault();
240
 
16840 efrain 241
 
1 www 242
            $('#form').attr('action', '$routeAdd');
15458 efrain 243
            $('#form #code').val('');
244
            $('#form #code').removeAttr('disabled');
1 www 245
            $('#form #title').val('');
246
            $('#form #type').val('$typePAGE').trigger('change');
247
            $('#form #status').bootstrapToggle('on');
248
            CKEDITOR.instances.content.setData('');
249
            $('#form #url').val('');
250
 
251
 
252
            validator.resetForm();
15458 efrain 253
 
254
            $('#row-header').hide();
255
            $('#row-list').hide();
256
            $('#row-form').show();
257
 
1 www 258
        });
259
 
260
        $('body').on('click', 'button.btn-edit', function(e) {
261
            e.preventDefault();
262
            NProgress.start();
263
            var action = $(this).data('href');
264
 
265
            $.ajax({
266
                'dataType'  : 'json',
267
                'accept'    : 'application/json',
268
                'method'    : 'get',
269
                'url'       :  action,
270
            }).done(function(response) {
271
                if(response['success']) {
272
 
16840 efrain 273
 
1 www 274
                    $('#form').attr('action', action);
15458 efrain 275
                    $('#form #code').val(response['data']['code']);
276
                    $('#form #code').attr('disabled','disabled');
1 www 277
                    $('#form #title').val(response['data']['title']);
278
                    $('#form #type').val(response['data']['type']).trigger('change');
279
                    $('#form #status').bootstrapToggle(response['data']['status'] == '$status_active' ? 'on' : 'off')
280
 
281
                    var content = $.trim(response['data']['content']);
282
                    CKEDITOR.instances.content.setData(content.length > 0 ? content : '');
283
                    $('#form #url').val(response['data']['url']);
284
 
285
                    validator.resetForm();
286
 
15458 efrain 287
                    $('#row-header').hide();
288
                    $('#row-list').hide();
289
                    $('#row-form').show();
290
 
1 www 291
                } else {
292
                    $.fn.showError(response['data']);
293
                }
294
            }).fail(function( jqXHR, textStatus, errorThrown) {
295
                $.fn.showError(textStatus);
296
            }).always(function() {
297
                NProgress.done();
298
            });
299
        });
300
 
301
        $('body').on('click', 'button.btn-refresh', function(e) {
302
            e.preventDefault();
303
            gridTable.api().ajax.reload(null, false);
304
        });
305
 
306
 
307
        $('body').on('click', 'button.btn-cancel', function(e) {
308
            e.preventDefault();
15458 efrain 309
            $('#row-form').hide();
310
 
311
            $('#row-header').show();
312
            $('#row-list').show();
313
 
314
 
1 www 315
        });
316
 
16822 efrain 317
 $('body').on('click', 'button.btn-delete', function(e) {
318
        e.preventDefault();
319
        var action = $(this).data('href');
320
 
321
 
322
          swal.fire({
323
            title: 'LABEL_ARE_YOU_SURE',
324
            icon: 'question',
325
            cancelButtonText: 'LABEL_NO',
326
            showCancelButton: true,
327
            confirmButtonText: 'LABEL_YES'
328
          }).then((result) => {
329
            if (result.isConfirmed) {
330
 
331
                    NProgress.start();
332
                    $.ajax({
333
                        'dataType'  : 'json',
334
                        'accept'    : 'application/json',
335
                        'method'    : 'post',
336
                        'url'       :  action,
337
                    }).done(function(response) {
338
                        if(response['success']) {
339
                            $.fn.showSuccess(response['data']);
340
                            gridTable.api().ajax.reload(null, false);
341
                        } else {
342
                            $.fn.showError(response['data']);
343
                        }
344
                    }).fail(function( jqXHR, textStatus, errorThrown) {
345
                        $.fn.showError(textStatus);
346
                    }).always(function() {
347
                        NProgress.done();
348
                    });
349
            }
350
       });
351
    });
352
 
1 www 353
        $('#form #type').select2({
16918 efrain 354
            theme: 'bootstrap-5',
1 www 355
        });
356
 
357
 
358
        $('#form #type').change(function(e) {
359
            e.preventDefault();
360
 
361
            var value = $(this).val();
362
            if(value == '$typePAGE') {
363
                $('#form #url').val('');
364
                $('#form #url').parent().hide();
365
                $('#form #content').parent().show();
366
            } else {
367
                CKEDITOR.instances.content.setData('');
368
 
369
                $('#form #content').parent().hide();
370
                $('#form #url').parent().show();
371
            }
372
        });
373
 
374
        $('button[type="submit"]').click(function(e) {
375
            e.preventDefault();
376
            CKEDITOR.instances.content.updateElement();
377
 
378
            if($('#form').valid()) {
379
 
380
                $.ajax({
381
                    'dataType'  : 'json',
382
                    'accept'    : 'application/json',
383
                    'method'    : 'post',
384
                    'url'       :  $('#form').attr('action'),
15458 efrain 385
                    'data'      :  {
386
                        'code': $('#form #code').val(),
387
                        'title': $('#form #title').val(),
388
                        'type' : $('#form #type').val(),
389
                        'content':$('#form #content').val(),
390
                        'url': $('#form #url').val(),
391
                        'status': $('#form #status').val(),
392
                  }
1 www 393
                }).done(function(response) {
394
                    NProgress.start();
395
                    if(response['success']) {
396
                        $.fn.showSuccess(response['data']);
397
 
15458 efrain 398
                        $('#row-form').hide();
399
                        $('#row-header').show();
400
                        $('#row-list').show();
1 www 401
                         gridTable.api().ajax.reload(null, false);
402
                    } else {
403
                        validator.resetForm();
404
                        if(jQuery.type(response['data']) == 'string') {
405
                            $.fn.showError(response['data']);
406
                        } else  {
407
                            $.each(response['data'], function( fieldname, errors ) {
408
                                $.fn.showFormErrorValidator('#form #' + fieldname, errors);
409
                            });
410
                        }
411
                    }
412
                }).fail(function( jqXHR, textStatus, errorThrown) {
413
                   $.fn.showError(textStatus);
414
                }).always(function() {
415
                    NProgress.done();
416
                });
417
                return false;
418
 
419
            }
420
        })
421
 
422
 
423
 
424
        $('#form #status').bootstrapToggle({'on' : 'LABEL_ACTIVE',  'off' : 'LABEL_INACTIVE', 'width' : '160px', 'height' : '40px'});
8775 stevensc 425
        CKEDITOR.replace( 'content', {
426
            toolbar: [
427
                    { name: 'editing', items: ['Scayt'] },
428
                    { name: 'links', items: ['Link', 'Unlink'] },
429
                    { name: 'paragraph', items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', 'Blockquote'] },
430
                    { name: 'basicstyles', items: ['Bold', 'Italic', 'Strike', 'RemoveFormat'] },
431
                    '/',
432
                    { name: 'insert', items: ['Image', 'Table', 'HorizontalRule', 'SpecialChar'] },
433
                    { name: 'styles', items: ['Styles', 'Format'] },
434
                    { name: 'tools', items: ['Maximize'] }
435
                ],
436
                removePlugins: 'elementspath,Anchor',
437
                heigth: 100
438
        });
1 www 439
    });
440
JS;
441
$this->inlineScript()->captureEnd();
442
?>
15572 anderson 443
 
444
 
445
 
1 www 446
 
16841 efrain 447
<div class="container">
448
	<div class="card" id="row-list">
449
 
450
	 	<div class="card-body">
451
	 		<h6 class="card-title">LABEL_PAGES</h6>
16845 efrain 452
	 		<table id="gridTable" class="table table-bordered">
16841 efrain 453
             	<thead>
454
               		<tr>
455
                 		<th>LABEL_ID</th>
456
                     	<th>LABEL_TITLE</th>
457
                    	<th>LABEL_ACTIVE</th>
458
                 		<th>LABEL_ACTIONS</th>
459
             		</tr>
460
                </thead>
461
              	<tbody>
462
             	</tbody>
463
          	</table>
464
	 	</div>
465
	 	<div class="card-footer text-right">
16992 efrain 466
			<button type="button" class="btn btn-info btn-refresh"><i class="fa fa-sync"></i> LABEL_REFRESH </button>
16841 efrain 467
            <?php if ($allowAdd) : ?>
468
    		<button type="button" class="btn btn-primary btn-add"><i class="fa fa-plus"></i> LABEL_ADD </button>
469
      		<?php endif; ?>
470
 
471
	 	</div>
472
	</div>
473
 
474
 
475
 
476
	<div class="card"  id="row-form" style="display: none">
477
	 	<?php
15458 efrain 478
                        $form = $this->form;
15572 anderson 479
                        $form->setAttributes([
15458 efrain 480
                            'method'    => 'post',
481
                            'name'      => 'form',
482
                            'id'        => 'form'
483
                        ]);
15572 anderson 484
 
15458 efrain 485
                        $form->prepare();
486
                        echo $this->form()->openTag($form);
16841 efrain 487
        ?>
488
	 	<div class="card-body">
489
	 		<h6 class="card-title">LABEL_PAGES</h6>
490
	 		<div class="row">
491
	 			<div class="col-12 mt-3">
15572 anderson 492
                            <?php
493
                            $element = $form->get('code');
494
                            $element->setOptions(['label' => 'LABEL_CODE']);
495
                            $element->setAttributes(['class' => 'form-control']);
496
 
497
                            echo $this->formLabel($element);
498
                            echo $this->formText($element);
15458 efrain 499
                            ?>
16841 efrain 500
          		</div>
501
          	</div>
502
			<div class="row">
503
	 			<div class="col-12 mt-3">
15572 anderson 504
                            <?php
505
                            $element = $form->get('title');
506
                            $element->setOptions(['label' => 'LABEL_TITLE']);
507
                            $element->setAttributes(['class' => 'form-control']);
508
 
509
                            echo $this->formLabel($element);
510
                            echo $this->formText($element);
1 www 511
                            ?>
16841 efrain 512
          		</div>
513
          	</div>
514
			<div class="row">
515
	 			<div class="col-12 mt-3">
15572 anderson 516
                            <?php
517
                            $element = $form->get('type');
518
                            $element->setOptions(['label' => 'LABEL_TYPE']);
519
                            $element->setAttributes(['class' => 'form-control']);
520
 
521
                            echo $this->formLabel($element);
522
                            echo $this->formSelect($element);
1 www 523
                            ?>
16841 efrain 524
          		</div>
525
          	</div>
526
			<div class="row">
527
	 			<div class="col-12 mt-3">
15572 anderson 528
                            <?php
529
                            $element = $form->get('content');
530
                            $element->setOptions(['label' => 'LABEL_CONTENT']);
531
                            $element->setAttributes(['class' => 'form-control']);
532
 
533
                            echo $this->formLabel($element);
534
                            echo $this->formTextArea($element);
535
                            ?>
16841 efrain 536
          		</div>
537
          	</div>
538
			<div class="row">
539
	 			<div class="col-12 mt-3">
15572 anderson 540
                            <?php
541
                            $element = $form->get('url');
542
                            $element->setOptions(['label' => 'LABEL_URL']);
543
                            $element->setAttributes(['class' => 'form-control']);
544
 
545
                            echo $this->formLabel($element);
546
                            echo $this->formText($element);
547
                            ?>
16841 efrain 548
          		</div>
549
          	</div>
550
			<div class="row">
551
	 			<div class="col-12 mt-3">
15572 anderson 552
                            <?php
553
                            $element = $form->get('status');
554
                            $element->setAttributes(['class' => 'form-control']);
555
                            echo $this->formCheckbox($element);
556
                            ?>
16841 efrain 557
          		</div>
558
          	</div>
559
	 	</div>
560
	 	<div class="card-footer text-right">
561
	 	 		<button type="submit" class="btn btn-primary">LABEL_SAVE</button>
562
                <button type="button" class="btn btn-light btn-cancel">LABEL_CANCEL</button>
563
	 	</div>
564
	 	<?php echo $this->form()->closeTag($form); ?>
565
	</div>
566
</div>
15572 anderson 567