Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 20 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
$acl            = $this->viewModel()->getRoot()->getVariable('acl');
3
$currentUser    = $this->currentUserHelper();
4
 
5
$roleName = $currentUser->getUserTypeId();
6
 
7
 
8
 
9
$routeDatatable = $this->url('microlearning/content/capsules');
10
 
11
$allowAdd       = $acl->isAllowed($roleName, 'microlearning/content/capsules/add') ? 1 : 0;
12
$allowEdit      = $acl->isAllowed($roleName, 'microlearning/content/capsules/edit') ? 1 : 0;
13
$allowDelete    = $acl->isAllowed($roleName, 'microlearning/content/capsules/delete') ? 1 : 0;
14
$allowUsers     = $acl->isAllowed($roleName, 'microlearning/content/capsules/users') ? 1 : 0;
15
 
16
 
17
 
18
$this->headLink()->appendStylesheet($this->basePath('plugins/nprogress/nprogress.css'));
19
$this->inlineScript()->appendFile($this->basePath('plugins/nprogress/nprogress.js'));
20
 
21
$this->inlineScript()->appendFile($this->basePath('plugins/ckeditor/ckeditor.js'));
22
 
23
 
24
$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap-fileinput/css/fileinput.min.css'));
25
$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap-fileinput/themes/explorer-fas/theme.css'));
26
 
27
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-fileinput/js/plugins/piexif.js'));
28
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-fileinput/js/plugins/sortable.js'));
29
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-fileinput/js/fileinput.js'));
30
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-fileinput/js/locales/es.js'));
31
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-fileinput/themes/fas/theme.js'));
32
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-fileinput/themes/explorer-fas/theme.js'));
33
 
34
 
35
$this->inlineScript()->appendFile($this->basePath('plugins/jquery-validation/jquery.validate.js'));
36
$this->inlineScript()->appendFile($this->basePath('plugins/jquery-validation/additional-methods.js'));
37
$this->inlineScript()->appendFile($this->basePath('plugins/jquery-validation/localization/messages_es.js'));
38
 
39
$this->headLink()->appendStylesheet($this->basePath('plugins/datatables-bs4/css/dataTables.bootstrap4.min.css'));
40
$this->headLink()->appendStylesheet($this->basePath('plugins/datatables-responsive/css/responsive.bootstrap4.min.css'));
41
 
42
$this->inlineScript()->appendFile($this->basePath('plugins/datatables/jquery.dataTables.min.js'));
43
$this->inlineScript()->appendFile($this->basePath('plugins/datatables-bs4/js/dataTables.bootstrap4.min.js'));
44
$this->inlineScript()->appendFile($this->basePath('plugins/datatables-responsive/js/dataTables.responsive.min.js'));
45
$this->inlineScript()->appendFile($this->basePath('plugins/datatables-responsive/js/responsive.bootstrap4.min.js'));
46
 
47
 
48
$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap4-toggle/css/bootstrap4-toggle.min.css'));
49
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap4-toggle/js/bootstrap4-toggle.min.js'));
50
 
51
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-confirmation/dist/bootstrap-confirmation.js'));
52
$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap-checkbox/awesome-bootstrap-checkbox.css'));
53
 
54
 
55
$this->inlineScript()->appendFile($this->basePath('plugins/jquery-input-number/input-number-format.jquery.js'));
56
 
57
 
58
$this->headStyle()->captureStart();
59
echo <<<CSS
60
 
61
 
62
#gridTableUsers {
63
    display: flex;
64
    flex-flow: column;
65
    width: 100%;
66
}
67
 
68
#gridTableUsers thead {
69
    flex: 0 0 auto;
70
}
71
 
72
#gridTableUsers tbody {
73
    flex: 1 1 auto;
74
    display: block;
75
    overflow-y: auto;
76
    overflow-x: hidden;
77
}
78
 
79
#gridTableUsers tr {
80
    width: 100%;
81
    display: table;
82
    table-layout: fixed;
83
}
84
CSS;
85
$this->headStyle()->captureEnd();
86
 
87
$this->headLink()->captureStart();
88
 
89
$this->inlineScript()->captureStart();
90
echo <<<JS
91
    jQuery( document ).ready(function( $ ) {
92
 
93
        $.validator.setDefaults({
94
            debug: true,
95
            highlight: function(element) {
96
                $(element).addClass('is-invalid');
97
            },
98
            unhighlight: function(element) {
99
                $(element).removeClass('is-invalid');
100
            },
101
            errorElement: 'span',
102
            errorClass: 'error invalid-feedback',
103
            errorPlacement: function(error, element) {
104
                if(element.parent('.btn-file').length) {
105
                    error.insertAfter(element.parent().parent());
106
                } else if(element.parent('.toggle').length) {
107
                    error.insertAfter(element.parent().parent());
108
                } else {
109
                    error.insertAfter(element.parent());
110
                }
111
            }
112
        });
113
 
114
 
115
        $.fn.showFormErrorValidator = function(fieldname, errors) {
116
            var field = $(fieldname);
117
            if(field) {
118
                $(field).addClass('is-invalid');
119
 
120
 
121
                var error = $('<span id="' + fieldname +'-error" class="error invalid-feedback">' + errors + '</div>');
122
                if(element.parent('.btn-file').length) {
123
                    error.insertAfter(element.parent().parent());
124
                } else if(element.parent('.toggle').length) {
125
                    error.insertAfter(element.parent().parent());
126
                } else {
127
                    error.insertAfter(element.parent());
128
                }
129
            }
130
        };
131
 
132
 
133
 
134
        var allowEdit   = $allowEdit;
135
        var allowDelete = $allowDelete;
136
        var allowUsers  = $allowUsers;
137
 
138
 
139
        var gridTable = $('#gridTable').dataTable( {
140
            'processing': true,
141
            'serverSide': true,
142
            'searching': true,
143
            'order': [[ 0, 'asc' ]],
144
            'ordering':  true,
145
            'ordenable' : true,
146
            'responsive': true,
147
            'select' : false,
148
        	'paging': true,
149
            'pagingType': 'simple_numbers',
150
 
151
    		'ajax': {
152
    			'url' : '$routeDatatable',
153
    			'type' : 'get',
154
                'data': function ( d ) {
155
                    d.topic_uuid = $('#form-filter #topic_uuid').val();
156
 
157
                },
158
                'beforeSend': function (request) {
159
                  NProgress.start();
160
                },
161
                'dataFilter': function(response) {
162
                    var response = jQuery.parseJSON( response );
163
 
164
                    var json                = {};
165
                    json.recordsTotal       = 0;
166
                    json.recordsFiltered    = 0;
167
                    json.data               = [];
168
 
169
                    if(response.success) {
170
                        $('#form-capsule-add').attr('action', response.data.link_add );
171
 
172
                        json.recordsTotal       = response.data.total;
173
                        json.recordsFiltered    = response.data.total;
174
                        json.data               = response.data.items;
175
                    } else {
176
                        $.fn.showError(response.data)
177
                    }
178
 
179
                    return JSON.stringify( json );
180
                }
181
    		},
182
            'language' : {
183
                'sProcessing':     'LABEL_DATATABLE_SPROCESSING',
184
                'sLengthMenu':     'LABEL_DATATABLE_SLENGTHMENU',
185
                'sZeroRecords':    'LABEL_DATATABLE_SZERORECORDS',
186
                'sEmptyTable':     'LABEL_DATATABLE_SEMPTYTABLE',
187
                'sInfo':           'LABEL_DATATABLE_SINFO',
188
                'sInfoEmpty':      'LABEL_DATATABLE_SINFOEMPTY',
189
                'sInfoFiltered':   'LABEL_DATATABLE_SINFOFILTERED',
190
                'sInfoPostFix':    '',
191
                'sSearch':         'LABEL_DATATABLE_SSEARCH',
192
                'sUrl':            '',
193
                'sInfoThousands':  ',',
194
                'sLoadingRecords': 'LABEL_DATATABLE_SLOADINGRECORDS',
195
                'oPaginate': {
196
                    'sFirst':    'LABEL_DATATABLE_SFIRST',
197
                    'sLast':     'LABEL_DATATABLE_SLAST',
198
                    'sNext':     'LABEL_DATATABLE_SNEXT',
199
                    'sPrevious': 'LABEL_DATATABLE_SPREVIOUS'
200
                },
201
                'oAria': {
202
                    'sSortAscending':  ': LABEL_DATATABLE_SSORTASCENDING',
203
                    'sSortDescending': ':LABEL_DATATABLE_SSORTDESCENDING'
204
                },
205
            },
206
            'drawCallback': function( settings ) {
207
                NProgress.done();
208
                $('button.btn-delete').confirmation({
209
                    rootSelector: 'button.btn-delete',
210
                    title : 'LABEL_ARE_YOU_SURE',
211
                    singleton : true,
212
                    btnOkLabel: 'LABEL_YES',
213
                    btnCancelLabel: 'LABEL_NO',
214
                    onConfirm: function(value) {
215
                        action = $(this).data('href');
216
                        NProgress.start();
217
                        $.ajax({
218
                            'dataType'  : 'json',
219
                            'accept'    : 'application/json',
220
                            'method'    : 'post',
221
                            'url'       :  action,
222
                        }).done(function(response) {
223
                            if(response['success']) {
224
                                $.fn.showSuccess(response['data']);
225
                                gridTable.api().ajax.reload(null, false);
226
                            } else {
227
                                $.fn.showError(response['data']);
228
                            }
229
                        }).fail(function( jqXHR, textStatus, errorThrown) {
230
                            $.fn.showError(textStatus);
231
                        }).always(function() {
232
                            NProgress.done();
233
                        });
234
                    },
235
                });
236
            },
237
            'aoColumns': [
238
                { 'mDataProp': 'name' },
239
                { 'mDataProp': 'details' },
240
                { 'mDataProp': 'images' },
241
                { 'mDataProp': 'actions' },
242
    	    ],
243
            'columnDefs': [
244
                {
245
                    'targets': 0,
246
                    'className' : 'text-vertical-middle',
247
                },
248
                {
249
                    'targets': -3,
250
                    'orderable': false,
251
                    'render' : function ( data, type, row ) {
252
                        var s = '';
253
                        s += 'LABEL_STATUS: ' + data['status']  + '<br/>';
254
 
255
                         if(allowUsers && row['actions']['link_total_users']  ) {
256
                            s += 'LABEL_TOTAL_USERS: ' + data['total_users']  + ' <button class="btn btn-view-total-users" data-href="' + row['actions']['link_total_users'] + '" data-toggle="tooltip" title="LABEL_VIEW"><i class="fa fa-external-link"></i></button> <br>';
257
                         } else {
258
                            s += 'LABEL_TOTAL_USERS: ' + data['total_users']  + '<br/>';
259
                         }
260
                         if(allowUsers && row['actions']['link_total_users_actives']  ) {
261
                            s += 'LABEL_TOTAL_USERS_ACTIVE: ' + data['total_users_active']  + ' <button class="btn btn-view-total-users" data-href="' + row['actions']['link_total_users_actives'] + '" data-toggle="tooltip" title="LABEL_VIEW"><i class="fa fa-external-link"></i></button> <br>';
262
                         } else {
263
                            s += 'LABEL_TOTAL_USERS_ACTIVE: ' + data['total_users_active']  + '<br/>';
264
                         }
265
 
266
                        return s;
267
                    }
268
                },
269
                {
270
                    'targets': -2,
271
                    'orderable': false,
272
                    'render' : function ( data, type, row ) {
273
                        s = '';
274
 
275
                        if( data['image'] )  {
276
                            s = s + '&nbsp; <img class="btn-view-image-app" data-href="' + data['image'] + '" data-toggle="tooltip" src="'+data['image']+'" title="LABEL_VIEW" style="width: 40px; object-fit: cover; height: 40px;" /> '
277
                        }  else {
278
                            s = s + '';
279
                        }
280
 
281
                        if( data['marketplace'] )  {
282
                            s = s + '&nbsp; <img class="btn-view-image-marketplace" data-href="' + data['image'] + '" data-toggle="tooltip" src="'+data['image']+'" title="LABEL_VIEW" style="width: 40px; object-fit: cover; height: 40px;" /> '
283
                        }  else {
284
                            s = s + '';
285
                        }
286
 
287
 
288
 
289
                        return s;
290
                    }
291
                },
292
 
293
 
294
                {
295
                    'targets': -1,
296
                    'orderable': false,
297
                    'render' : function ( data, type, row ) {
298
                        s = '';
299
 
300
                        if(allowEdit && data['link_edit']  ) {
301
                            s = s + '<button class="btn btn-info btn-sm btn-edit" data-href="' + data['link_edit']+ '" data-toggle="tooltip" title="LABEL_EDIT"><i class="fa fa-pencil"></i> LABEL_EDIT </button>&nbsp;';
302
                        }
303
                        if(allowDelete && data['link_delete']  ) {
304
                            s = s + '<button class="btn btn-danger btn-sm btn-delete" data-href="' + data['link_delete']+ '" data-toggle="tooltip" title="LABEL_DELETE"><i class="fa fa-trash"></i> LABEL_DELETE </button>&nbsp;';
305
                        }
306
 
307
                        return s;
308
                    }
309
                }
310
              ],
311
        });
312
 
313
 
314
 
315
    var validatorAdd = $('#form-capsule-add').validate({
316
        debug: true,
317
        onclick: false,
318
        onkeyup: false,
319
        ignore: [],
320
        rules: {
321
            'name': {
322
                required: true,
323
                maxlength: 128,
324
            },
325
            'description': {
326
                updateCkeditor:function() {
327
                        CKEDITOR.instances.description_add.updateElement();
328
                },
329
                required: true
330
            },
331
           'file': {
332
                required: true,
333
                extension: 'jpg|jpeg|png',
334
                accept: 'image/jpg,image/jpeg,image/png'
335
            },
336
            'order' : {
337
                required: true,
338
                digits: true,
339
                min: 1,
340
                max: 250
341
            },
342
           'marketplace': {
343
                required: false,
344
                extension: 'jpg|jpeg|png',
345
                accept: 'image/jpg,image/jpeg,image/png'
346
            },
347
            'status' : {
348
                required: true,
349
            },
350
            'privacy' : {
351
                required: true,
352
            },
353
            'type' : {
354
                required: true,
355
            },
356
            'cost' : {
357
                required: function() {
358
                    return $('#form-capsule-add #type').val() == 's';
359
                },
360
                'number' : true,
361
                'min' : 0
362
            }
363
        },
364
        submitHandler: function(form)
365
        {
366
            var formdata = false;
367
            if (window.FormData){
368
                formdata = new FormData(form); //form[0]);
369
            }
370
 
371
            $('input[type="submit"]').prop('disabled', true);
372
 
373
            $.ajax({
374
                'dataType'  : 'json',
375
                'accept'    : 'application/json',
376
                'method'    : 'post',
377
                'url'       :  $('#form-capsule-add').attr('action'),
378
                'data'      :  formdata,
379
                'processData': false,
380
                'contentType': false,
381
            }).done(function(response) {
382
                if(response['success']) {
383
                    $.fn.showSuccess(response['data']);
384
 
385
                    $('#modalCapsuleAdd').modal('hide');
386
                    gridTable.api().ajax.reload(null, false);
387
                } else {
388
                    validatorAdd.resetForm();
389
                    if(jQuery.type(response['data']) == 'string') {
390
                        $.fn.showError(response['data']);
391
                    } else  {
392
                        $.each(response['data'], function( fieldname, errors ) {
393
                            $.fn.showFormErrorValidator('#form-capsule-add #' + fieldname, errors);
394
                        });
395
                    }
396
                }
397
            }).fail(function( jqXHR, textStatus, errorThrown) {
398
                $.fn.showError(textStatus);
399
            }).always(function() {
400
                NProgress.done();
401
            });
402
            return false;
403
        },
404
        invalidHandler: function(form, validator) {
405
 
406
        }
407
    });
408
 
409
    var validatorEdit  = $('#form-capsule-edit').validate({
410
        debug: true,
411
        onclick: false,
412
        onkeyup: false,
413
        ignore: [],
414
        rules: {
415
              'name': {
416
                required: true,
417
                maxlength: 128,
418
            },
419
            'description': {
420
                updateCkeditor:function() {
421
                        CKEDITOR.instances.description_edit.updateElement();
422
                },
423
                required: true
424
            },
425
           'file': {
426
                required: false,
427
                extension: 'jpg|jpeg|png',
428
                accept: 'image/jpg,image/jpeg,image/png'
429
            },
430
            'order' : {
431
                required: true,
432
                digits: true,
433
                min: 1,
434
                max: 250
435
            },
436
           'marketplace': {
437
                required: false,
438
                extension: 'jpg|jpeg|png',
439
                accept: 'image/jpg,image/jpeg,image/png'
440
            },
441
            'status' : {
442
                required: true,
443
            },
444
            'privacy' : {
445
                required: true,
446
            },
447
            'type' : {
448
                required: true,
449
            },
450
            'cost' : {
451
                required: function() {
452
                    return $('#form-capsule-edit #type').val() == 's';
453
                },
454
                'number' : true,
455
                'min' : 0
456
            }
457
        },
458
        submitHandler: function(form)
459
        {
460
            var formdata = false;
461
            if (window.FormData){
462
                formdata = new FormData(form); //form[0]);
463
            }
464
 
465
            $('input[type="submit"]').prop('disabled', true);
466
 
467
            $.ajax({
468
                'dataType'  : 'json',
469
                'accept'    : 'application/json',
470
                'method'    : 'post',
471
                'url'       :  $('#form-capsule-edit').attr('action'),
472
                'data'      :  formdata,
473
                'processData': false,
474
                'contentType': false,
475
            }).done(function(response) {
476
                if(response['success']) {
477
                    $.fn.showSuccess(response['data']);
478
 
479
 
480
                    $('#modalCapsuleEdit').modal('hide');
481
                    gridTable.api().ajax.reload(null, false);
482
                } else {
483
                    validatorAdd.resetForm();
484
                    if(jQuery.type(response['data']) == 'string') {
485
                        $.fn.showError(response['data']);
486
                    } else  {
487
                        $.each(response['data'], function( fieldname, errors ) {
488
                            $.fn.showFormErrorValidator('#form-capsule-edit #' + fieldname, errors);
489
                        });
490
                    }
491
                }
492
            }).fail(function( jqXHR, textStatus, errorThrown) {
493
                $.fn.showError(textStatus);
494
            }).always(function() {
495
                NProgress.done();
496
            });
497
            return false;
498
        },
499
        invalidHandler: function(form, validator) {
500
 
501
        }
502
    });
503
 
504
 
505
 
506
        $('body').on('click', '.btn-view-image-marketplace', function(e) {
507
            e.preventDefault();
508
 
509
            $('#image-marketplace').attr('src', $(this).data('href'));
510
            $('#modalAppMarkeplate').modal('show');
511
            return false;
512
        });
513
 
514
        $('body').on('click', '.btn-view-image-app', function(e) {
515
            e.preventDefault();
516
 
517
            $('#image-app').attr('src', $(this).data('href'));
518
            $('#modalImageApp').modal('show');
519
            return false;
520
        });
521
 
522
        $('#form-capsule-add #order').inputNumberFormat({decimal: 0});
523
 
524
        $('#form-capsule-add #file').fileinput({
525
            theme: 'fas',
526
            language: 'es',
527
            showUpload: false,
528
            dropZoneEnabled: false,
529
            maxFileCount: 1,
530
            allowedFileExtensions: ['jpeg', 'jpg', 'png'],
531
            msgPlaceholder: 'LABEL_RECOMMENDED_SIZE $image_size',
532
        });
533
 
534
 
535
        $('#form-capsule-add #marketplace').fileinput({
536
            theme: 'fas',
537
            language: 'es',
538
            showUpload: false,
539
            dropZoneEnabled: false,
540
            maxFileCount: 1,
541
            allowedFileExtensions: ['jpeg', 'jpg', 'png'],
542
            msgPlaceholder: 'LABEL_MARKETPLACE_RECOMMENDED_SIZE $marketplace_size',
543
        });
544
 
545
        $('body').on('click', 'button.btn-add', function(e) {
546
            e.preventDefault();
547
 
548
            $('#form-capsule-add #name').val('');
549
            $('#form-capsule-add #order').val('1');
550
            $('#form-capsule-add #file').fileinput('reset');
551
            $('#form-capsule-add #file').val('');
552
 
553
            $('#form-capsule-add #marketplace').fileinput('reset');
554
            $('#form-capsule-add #marketplace').val('');
555
            $('#form-capsule-add #privacy').val('');
556
            $('#form-capsule-add #status').val('');
557
            $('#form-capsule-add #cost').val('');
558
            $('#form-capsule-add #form-row-cost').hide();
559
 
560
            CKEDITOR.instances.description_add.setData('');
561
            validatorAdd.resetForm();
562
 
563
            $('#modalCapsuleAdd').modal('show');
564
            return false;
565
        });
566
 
567
 
568
        $('#form-capsule-edit #order').inputNumberFormat({decimal: 0});
569
 
570
        $('#form-capsule-edit #file').fileinput({
571
            theme: 'fas',
572
            language: 'es',
573
            showUpload: false,
574
            dropZoneEnabled: false,
575
            maxFileCount: 1,
576
            allowedFileExtensions: ['jpeg', 'jpg', 'png'],
577
            msgPlaceholder: 'LABEL_RECOMMENDED_SIZE $image_size',
578
        });
579
 
580
        $('#form-capsule-edit #marketplace').fileinput({
581
            theme: 'fas',
582
            language: 'es',
583
            showUpload: false,
584
            dropZoneEnabled: false,
585
            maxFileCount: 1,
586
            allowedFileExtensions: ['jpeg', 'jpg', 'png'],
587
            msgPlaceholder: 'LABEL_MARKETPLACE_RECOMMENDED_SIZE $marketplace_size',
588
        });
589
 
590
        $('body').on('click', 'button.btn-edit', function(e) {
591
            e.preventDefault();
592
 
593
            var url = $(this).data('href');
594
            $.ajax({
595
                'dataType'  : 'json',
596
                'accept'    : 'application/json',
597
                'method'    : 'get',
598
                'url'       :  url,
599
            }).done(function(response) {
600
                if(response['success']) {
601
                    $('#form-capsule-edit').attr('action',url);
602
                    $('#form-capsule-edit #name').val(response['data']['name']);
603
                    $('#form-capsule-edit #order').val(response['data']['order']);
604
                    $('#form-capsule-edit #file').fileinput('reset');
605
                    $('#form-capsule-edit #file').val('');
606
 
607
                    $('#form-capsule-edit #marketplace').fileinput('reset');
608
                    $('#form-capsule-edit #marketplace').val('');
609
                    $('#form-capsule-edit #privacy').val(response['data']['privacy']);
610
                    $('#form-capsule-edit #type').val(response['data']['type']);
611
                    $('#form-capsule-edit #status').val(response['data']['status']);
612
 
613
                    if('s' == response['data']['type']) {
614
                        $('#form-capsule-edit #form-row-cost').show();
615
                        $('#form-capsule-edit #cost').val(response['data']['cost']);
616
                    } else {
617
                        $('#form-capsule-edit #form-row-cost').hide();
618
                        $('#form-capsule-edit #cost').val('');
619
                    }
620
 
621
                    CKEDITOR.instances.description_edit.setData(response['data']['description']);
622
                    validatorEdit.resetForm();
623
 
624
 
625
                    $('#modalCapsuleEdit').modal('show');
626
                } else {
627
                    validatorEdit.resetForm();
628
                    if(jQuery.type(response['data']) == 'string') {
629
                        $.fn.showError(response['data']);
630
                    } else  {
631
                        $.each(response['data'], function( fieldname, errors ) {
632
                            $.fn.showFormErrorValidator('#form-capsule-edit #' + fieldname, errors);
633
                        });
634
                    }
635
                }
636
            }).fail(function( jqXHR, textStatus, errorThrown) {
637
                $.fn.showError(textStatus);
638
            }).always(function() {
639
                NProgress.done();
640
            });
641
        });
642
 
643
        $('body').on('click', 'button.btn-cancel', function(e) {
644
            e.preventDefault();
645
            $('#modalCapsuleAdd').modal('hide');
646
            $('#modalCapsuleEdit').modal('hide');
647
        });
648
 
649
 
650
        CKEDITOR.replace('description_add');
651
        CKEDITOR.replace('description_edit');
652
 
653
        $('#form-capsule-add #type').change(function(e) {
654
            e.preventDefault();
655
 
656
            if('s' == $(this).val()) {
657
                $('#form-capsule-add #form-row-cost').show();
658
            } else {
659
                $('#form-capsule-add #cost').val(0);
660
                $('#form-capsule-add #form-row-cost').hide();
661
            }
662
 
663
        });
664
 
665
        $('#form-capsule-edit #type').change(function(e) {
666
            e.preventDefault();
667
 
668
            if('s' == $(this).val()) {
669
                $('#form-capsule-edit #form-row-cost').show();
670
            } else {
671
                $('#form-capsule-edit #cost').val(0);
672
                $('#form-capsule-edit #form-row-cost').hide();
673
            }
674
 
675
        });
676
 
677
        $('#form-capsule-add #order').inputNumberFormat({decimal: 0});
678
        $('#form-capsule-add #cost').inputNumberFormat({decimal: 2});
679
 
680
        $('#form-filter #topic_uuid').change(function(e) {
681
            e.preventDefault();
682
 
683
            gridTable.api().ajax.reload(null, false);
684
 
685
        });
686
 
687
 
688
 
689
 
690
 
691
    $('body').on('click', 'button.btn-view-total-users', function(e) {
692
        e.preventDefault();
693
 
694
        var href = $(this).data('href');
695
        NProgress.start();
696
        $.ajax({
697
            'dataType'  : 'json',
698
            'accept'    : 'application/json',
699
            'method'    : 'get',
700
            'url'       : href,
701
        }).done(function(response) {
702
            if(response['success']) {
703
 
704
                $('#table-users-topic').val(response['data']['topic']);
705
      			$('#table-users-capsule').val(response['data']['capsule']);
706
 
707
                $('#gridTableUsers tbody').empty();
708
 
709
                $.each(response['data']['items'], function(index, item) {
710
 
711
                    console.log(item);
712
 
713
                    var s = '<tr>';
714
                    s = s + '<td>' + item['first_name'] + '</td>';
715
                    s = s + '<td>' + item['last_name'] + '</td>';
716
                    s = s + '<td>' + item['email'] + '</td>';
717
 
718
                    s = s + '<td>';
719
                    if(item['details']['access']) {
720
                        s = s + 'LABEL_ACCESS : ' + item['details']['access'] + '<br>';
721
                    }
722
                    if(item['details']['paid_from']) {
723
                        s = s + 'LABEL_PAID_FROM : ' + item['details']['paid_from'] + '<br>';
724
                    }
725
                    if(item['details']['paid_to']) {
726
                        s = s + 'LABEL_PAID_TO : ' + item['details']['paid_to'] + '<br>';
727
                    }
728
 
729
                    s = s + '</td>';
730
                    s = s + '</tr>';
731
 
732
                    $('#gridTableUsers tbody').append(s);
733
 
734
 
735
                });
736
 
737
                $('#notificationUsersModal').modal('show');
738
 
739
            } else {
740
                $.fn.showError(response['data']);
741
 
742
            }
743
        }).fail(function( jqXHR, textStatus, errorThrown) {
744
            $.fn.showError(textStatus);
745
        }).always(function() {
746
 
747
            NProgress.done();
748
        });
749
        return false;
750
 
751
    });
752
 
753
    $('body').on('click', 'button.btn-refresh', function(e) {
754
        e.preventDefault();
755
        gridTable.api().ajax.reload(null, false);
756
    });
757
 
758
 
759
});
760
JS;
761
$this->inlineScript()->captureEnd();
762
?>
763
 
764
 
765
 
766
<!-- Content Header (Page header) -->
767
<section class="content-header">
768
	<div class="container-fluid">
769
    	<div class="row mb-2">
770
        	<div class="col-sm-12">
771
            	<h1>LABEL_CAPSULES</h1>
772
			</div>
773
		</div>
774
	</div><!-- /.container-fluid -->
775
</section>
776
 
777
<section class="content">
778
	<div class="container-fluid">
779
    	<div class="row">
780
        	<div class="col-12">
781
				<div class="card">
782
					<div class="card-header">
783
						<?php
784
                        $form = $this->form;
785
            	        $form->setAttributes([
786
                            'name'    => 'form-filter',
787
                            'id'      => 'form-filter',
788
                        ]);
789
 
790
                        $form->prepare();
791
                        echo $this->form()->openTag($form);
792
                        ?>
793
                        <div class="form-group">
794
                            <?php
795
                            $element = $form->get('topic_uuid');
796
 
797
                            $element->setAttributes(['class' => 'form-control']);
798
                            $element->setLabel('LABEL_TOPIC');
799
                            echo $this->formLabel($element);
800
                            echo $this->formSelect($element);
801
                            ?>
802
                        </div>
803
						<?php echo $this->form()->closeTag($form); ?>
804
					</div>
805
					<div class="card-body">
806
        	    		<table id="gridTable" class="table table-striped table-hover">
807
                      		<thead>
808
        						<tr>
809
                                	<th>LABEL_NAME</th>
810
                                  	<th>LABEL_DETAILS</th>
811
                                  	<th>LABEL_IMAGES</th>
812
                                  	<th>LABEL_ACTIONS</th>
813
                                </tr>
814
                       		</thead>
815
                         	<tbody>
816
                         	</tbody>
817
                    	</table>
818
                   	</div>
819
                   	<div class="card-footer clearfix">
820
                   		<div style="float:right;">
821
							<button type="button" class="btn btn-info btn-refresh"><i class="fa fa-refresh"></i> LABEL_REFRESH  </button>
822
							<?php if($allowAdd) : ?>
823
							<button type="button" class="btn btn-primary btn-add"><i class="fa fa-plus"></i> LABEL_ADD </button>
824
							<?php endif; ?>
825
						</div>
826
                 	</div>
827
          		</div>
828
           	</div>
829
        </div>
830
 	</div>
831
</section>
832
 
833
 
834
<!-- The Modal -->
835
<div class="modal" id="modalCapsuleAdd">
836
	<div class="modal-dialog  modal-xl">
837
    	<div class="modal-content">
838
 
839
            <!-- Modal Header -->
840
      		<div class="modal-header">
841
        		<h4 class="modal-title">LABEL_ADD_CAPSULE</h4>
842
        		<button type="button" class="close" data-dismiss="modal">&times;</button>
843
      		</div>
844
 
845
            <!-- Modal body -->
846
      		<div class="modal-body">
847
       			 <?php
848
       			 $form = $this->formAdd;
849
            		$form->setAttributes([
850
                        'method'  => 'post',
851
            		    'action'  => '',
852
                        'name'    => 'form-capsule-add',
853
                        'id'      => 'form-capsule-add',
854
                    ]);
855
 
856
                    $form->prepare();
857
                    echo $this->form()->openTag($form);
858
                    ?>
859
    				<div class="form-group">
860
    				<?php
861
                        $element = $form->get('name');
862
 
863
                        $element->setAttributes(['class' => 'form-control']);
864
                        $element->setOptions(['label' => 'LABEL_NAME']);
865
                        echo $this->formLabel($element);
866
                        echo $this->formText($element);
867
                    ?>
868
				</div>
869
                <div class="form-group">
870
                	<?php
871
                    $element = $form->get('description');
872
                    $element->setAttributes(['id' => 'description_add', 'class' => 'form-control', 'rows' => '2','class' => 'form-control']);
873
                    $element->setOptions(['label' => 'LABEL_DESCRIPTION']);
874
                    echo $this->formLabel($element);
875
                    echo $this->formTextArea($element);
876
                    ?>
877
   				</div>
878
				<div class="form-group">
879
    				<?php
880
                        $element = $form->get('order');
881
                        $element->setAttributes(['class' => 'form-control']);
882
                        $element->setOptions(['label' => 'LABEL_ORDER']);
883
                        echo $this->formLabel($element);
884
                        echo $this->formText($element);
885
                    ?>
886
				</div>
887
				<div class="form-group">
888
               		<?php
889
                    $element = $form->get('file');
890
 
891
                    $element->setAttributes(['class' => 'form-control',  'accept' => 'image/jpg,image/jpeg,image/png']);
892
                    $element->setOptions(['label' => 'LABEL_IMAGE']);
893
                    echo $this->formLabel($element);
894
                    ?>
895
                    <div class="file-loading">
896
                    	<?php echo $this->formFile($element); ?>
897
                	</div>
898
          		</div>
899
          		<div class="form-group">
900
    				<?php
901
                        $element = $form->get('status');
902
                        $element->setAttributes(['class' => 'form-control']);
903
                        $element->setOptions(['label' => 'LABEL_STATUS']);
904
                        echo $this->formLabel($element);
905
                        echo $this->formSelect($element);
906
                    ?>
907
				</div>
908
				<div class="form-group">
909
    				<?php
910
                        $element = $form->get('privacy');
911
                        $element->setAttributes(['class' => 'form-control']);
912
                        $element->setOptions(['label' => 'LABEL_PRIVACY']);
913
                        echo $this->formLabel($element);
914
                        echo $this->formSelect($element);
915
                    ?>
916
				</div>
917
				<div class="form-group">
918
    				<?php
919
                        $element = $form->get('type');
920
                        $element->setAttributes(['class' => 'form-control']);
921
                        $element->setOptions(['label' => 'LABEL_TYPE']);
922
                        echo $this->formLabel($element);
923
                        echo $this->formSelect($element);
924
                    ?>
925
				</div>
926
				<div class="form-group" id="form-row-cost">
927
    				<?php
928
                        $element = $form->get('cost');
929
                        $element->setAttributes(['class' => 'form-control']);
930
                        $element->setOptions(['label' => 'LABEL_COST']);
931
                        echo $this->formLabel($element);
932
                        echo $this->formText($element);
933
                    ?>
934
				</div>
935
				<div class="form-group">
936
 
937
                 	<?php
938
                    $element = $form->get('marketplace');
939
                    $element->setAttributes([ 'class' => 'form-control', 'accept' => 'image/jpg,image/jpeg,image/png']);
940
                    $element->setOptions(['label' => 'LABEL_IMAGE_MARKETPLACE']);
941
                    echo $this->formLabel($element);
942
                    ?>
943
                    <div class="file-loading">
944
                    	<?php echo $this->formFile($element); ?>
945
                	</div>
946
          		</div>
947
 
948
        				<div class="form-group">
949
                    		<button type="submit" class="btn btn-primary">LABEL_SAVE</button>
950
                    		<button type="button" class="btn btn-light btn-cancel">LABEL_CANCEL</button>
951
                   		</div>
952
     	      		<?php echo $this->form()->closeTag($form); ?>
953
      		</div>
954
 
955
            <!-- Modal footer -->
956
      		<div class="modal-footer">
957
        		<button type="button" class="btn btn-danger" data-dismiss="modal">LABEL_CLOSE</button>
958
      		</div>
959
 
960
    	</div>
961
	</div>
962
</div>
963
 
964
 
965
<!-- The Modal -->
966
<div class="modal" id="modalCapsuleEdit">
967
	<div class="modal-dialog  modal-xl">
968
    	<div class="modal-content">
969
 
970
            <!-- Modal Header -->
971
      		<div class="modal-header">
972
        		<h4 class="modal-title">LABEL_EDIT_CAPSULE</h4>
973
        		<button type="button" class="close" data-dismiss="modal">&times;</button>
974
      		</div>
975
 
976
            <!-- Modal body -->
977
      		<div class="modal-body">
978
       			 <?php
979
       			  $form = $this->formEdit;
980
            		$form->setAttributes([
981
                        'method'    => 'post',
982
                        'name'      => 'form-capsule-edit',
983
                        'id'        => 'form-capsule-edit'
984
                    ]);
985
 
986
                    $form->prepare();
987
                    echo $this->form()->openTag($form);
988
                ?>
989
    			<div class="form-group">
990
    				<?php
991
                        $element = $form->get('name');
992
                        $element->setAttributes(['class' => 'form-control']);
993
                        $element->setOptions(['label' => 'LABEL_NAME']);
994
                        echo $this->formLabel($element);
995
                        echo $this->formText($element);
996
                    ?>
997
				</div>
998
                <div class="form-group">
999
                	<?php
1000
                    $element = $form->get('description');
1001
                    $element->setAttributes(['id' => 'description_edit', 'rows' => '2', 'class' => 'form-control',   'class' => 'form-control']);
1002
                    $element->setOptions(['label' => 'LABEL_DESCRIPTION']);
1003
                    echo $this->formLabel($element);
1004
                    echo $this->formTextArea($element);
1005
                    ?>
1006
   				</div>
1007
				<div class="form-group">
1008
    				<?php
1009
                        $element = $form->get('order');
1010
                        $element->setAttributes(['class' => 'form-control']);
1011
                        $element->setOptions(['label' => 'LABEL_ORDER']);
1012
                        echo $this->formLabel($element);
1013
                        echo $this->formText($element);
1014
                    ?>
1015
				</div>
1016
				<div class="form-group">
1017
 
1018
 
1019
                 		<?php
1020
                        $element = $form->get('file');
1021
                        $element->setOptions(['label' => 'LABEL_IMAGE']);
1022
                        echo $this->formLabel($element);
1023
                        ?>
1024
                        <div class="file-loading">
1025
                        <?php
1026
                        $element->setAttributes(['class' => 'form-control', 'accept' => 'image/jpg,image/jpeg,image/png']);
1027
                        echo $this->formFile($element);
1028
                        ?>
1029
                	</div>
1030
          		</div>
1031
 
1032
          		<div class="form-group">
1033
    				<?php
1034
                        $element = $form->get('status');
1035
                        $element->setAttributes(['class' => 'form-control']);
1036
                        $element->setOptions(['label' => 'LABEL_STATUS']);
1037
                        echo $this->formLabel($element);
1038
                        echo $this->formSelect($element);
1039
                    ?>
1040
				</div>
1041
				<div class="form-group">
1042
    				<?php
1043
                        $element = $form->get('privacy');
1044
                        $element->setAttributes(['class' => 'form-control']);
1045
                        $element->setOptions(['label' => 'LABEL_PRIVACY']);
1046
                        echo $this->formLabel($element);
1047
                        echo $this->formSelect($element);
1048
                    ?>
1049
				</div>
1050
				<div class="form-group">
1051
    				<?php
1052
                        $element = $form->get('type');
1053
                        $element->setAttributes(['class' => 'form-control']);
1054
                        $element->setOptions(['label' => 'LABEL_TYPE']);
1055
                        echo $this->formLabel($element);
1056
                        echo $this->formSelect($element);
1057
                    ?>
1058
				</div>
1059
				<div class="form-group" id="form-row-cost">
1060
    				<?php
1061
                        $element = $form->get('cost');
1062
                        $element->setAttributes(['class' => 'form-control']);
1063
                        $element->setOptions(['label' => 'LABEL_COST']);
1064
                        echo $this->formLabel($element);
1065
                        echo $this->formText($element);
1066
                    ?>
1067
				</div>
1068
 
1069
 
1070
        				<div class="form-group">
1071
                    		<button type="submit" class="btn btn-primary">LABEL_SAVE</button>
1072
                    		<button type="button" class="btn btn-light btn-cancel">LABEL_CANCEL</button>
1073
                   		</div>
1074
     	      		<?php echo $this->form()->closeTag($form); ?>
1075
      		</div>
1076
 
1077
            <!-- Modal footer -->
1078
      		<div class="modal-footer">
1079
        		<button type="button" class="btn btn-danger" data-dismiss="modal">LABEL_CLOSE</button>
1080
      		</div>
1081
 
1082
    	</div>
1083
	</div>
1084
</div>
1085
 
1086
 
1087
 
1088
<!-- The Modal -->
1089
<div class="modal" id="modalAppMarkeplate">
1090
	<div class="modal-dialog">
1091
		<div class="modal-content">
1092
        	<!-- Modal Header -->
1093
        	<div class="modal-header">
1094
           		<h4 class="modal-title">LABEL_IMAGE_MARKETPLACE</h4>
1095
        		<button type="button" class="close" data-dismiss="modal">&times;</button>
1096
      		</div>
1097
 
1098
           	<!-- Modal body -->
1099
           	<div class="modal-body text-center">
1100
    			<img src="" class="img img-responsive" style="width: 300px; height: auto" id="image-marketplace" />
1101
          	</div>
1102
 
1103
            <!-- Modal footer -->
1104
  			<div class="modal-footer">
1105
    			<button type="button" class="btn btn-danger" data-dismiss="modal">LABEL_CLOSE</button>
1106
      		</div>
1107
      	</div>
1108
	</div>
1109
</div>
1110
 
1111
 
1112
<!-- The Modal -->
1113
<div class="modal" id="modalImageApp">
1114
	<div class="modal-dialog ">
1115
    	<div class="modal-content">
1116
 
1117
            <!-- Modal Header -->
1118
      		<div class="modal-header">
1119
        		<h4 class="modal-title">LABEL_IMAGE</h4>
1120
        		<button type="button" class="close" data-dismiss="modal">&times;</button>
1121
      		</div>
1122
 
1123
            <!-- Modal body -->
1124
            <div class="modal-body text-center">
1125
				<img src="" class="img img-responsive" style="width: 300px; height: auto" id="image-app" />
1126
      		</div>
1127
 
1128
            <!-- Modal footer -->
1129
      		<div class="modal-footer">
1130
        		<button type="button" class="btn btn-danger" data-dismiss="modal">LABEL_CLOSE</button>
1131
          	</div>
1132
         </div>
1133
	</div>
1134
</div>
1135
 
1136
 
1137
 
1138
 
1139
 
1140
 
1141
<!-- The Modal -->
1142
<div class="modal" id="notificationUsersModal">
1143
	<div class="modal-dialog modal-xl">
1144
    	<div class="modal-content">
1145
 
1146
            <!-- Modal Header -->
1147
      		<div class="modal-header">
1148
        		<h4 class="modal-title">LABEL_USERS</h4>
1149
        		<button type="button" class="close" data-dismiss="modal">&times;</button>
1150
      		</div>
1151
 
1152
            <!-- Modal body -->
1153
      		<div class="modal-body">
1154
      			<form>
1155
      				<div class="form-group">
1156
      					<label>LABEL_TOPIC</label>
1157
      					<input type="text" readonly="readonly" id="table-users-topic" class="form-control" >
1158
      				</div>
1159
      				<div class="form-group">
1160
      					<label>LABEL_CAPSULE</label>
1161
      					<input type="text" readonly="readonly" id="table-users-capsule" class="form-control" >
1162
      				</div>
1163
      			</form>
1164
      			<div style="height: 300px;overflow: scroll;">
1165
				<table id="gridTableUsers" style="width: 100%" class="table table-striped table-hover">
1166
            		<thead>
1167
            			<tr>
1168
                      		<th>LABEL_FIRST_NAME</th>
1169
                     		<th>LABEL_LAST_NAME</th>
1170
                         	<th>LABEL_EMAIL</th>
1171
                       		<th>LABEL_DETAILS</th>
1172
             			</tr>
1173
                  	</thead>
1174
               		<tbody>
1175
               		</tbody>
1176
         		</table>
1177
         		</div>
1178
 
1179
      		</div>
1180
 
1181
            <!-- Modal footer -->
1182
      		<div class="modal-footer">
1183
        		<button type="button" class="btn btn-danger" data-dismiss="modal">LABEL_CLOSE</button>
1184
      		</div>
1185
 
1186
    	</div>
1187
	</div>
1188
</div>
1189
 
1190
 
1191
 
1192
 
1193
 
1194
 
1195
 
1196