Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 17252 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
17003 efrain 1
<?php
2
$acl            = $this->viewModel()->getRoot()->getVariable('acl');
3
$currentUser    = $this->currentUserHelper();
4
 
5
$roleName = $currentUser->getUserTypeId();
6
 
7
$routeAdd       = $this->url('media/categories/add');
8
$routeDatatable = $this->url('media/categories');
9
$routeDashboard = $this->url('dashboard');
10
 
11
$allowAdd               = $acl->isAllowed($roleName, 'media/categories/add') ? 1 : 0;
12
$allowEdit              = $acl->isAllowed($roleName, 'media/categories/edit') ? 1 : 0;
13
$allowDelete            = $acl->isAllowed($roleName, 'media/categories/delete') ? 1 : 0;
14
 
17253 ariadna 15
// NProgress
17003 efrain 16
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/nprogress/nprogress.css'));
17
$this->inlineScript()->appendFile($this->basePath('assets/vendors/nprogress/nprogress.js'));
18
 
17253 ariadna 19
// Datatables
17003 efrain 20
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net/jquery.dataTables.js'));
21
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/datatables.net-bs5/dataTables.bootstrap5.css'));
22
$this->headLink()->appendStylesheet($this->basePath('assets/vendors/datatables.net-bs5-responsive/responsive.bootstrap5.css'));
23
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net/jquery.dataTables.js'));
24
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net-bs5/dataTables.bootstrap5.js'));
25
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net-bs5-responsive/dataTables.responsive.min.js'));
26
$this->inlineScript()->appendFile($this->basePath('assets/vendors/datatables.net-bs5-responsive/responsive.bootstrap5.min.js'));
27
 
28
$this->inlineScript()->captureStart();
29
echo <<<JS
17253 ariadna 30
    jQuery(document).ready(function ($) {
31
        var allowEdit = $allowEdit
32
        var allowDelete = $allowDelete
17003 efrain 33
 
17253 ariadna 34
        // Datatable
35
        var gridTable = $('#gridTable').dataTable({
36
            processing: true,
37
            serverSide: true,
38
            searching: true,
39
            order: [[0, 'asc']],
40
            ordering: true,
41
            ordenable: true,
42
            responsive: true,
43
            select: false,
44
            paging: true,
45
            pagingType: 'simple_numbers',
46
            ajax: {
47
                url: '$routeDatatable',
48
                type: 'get',
49
                beforeSend: function (request) {
50
                    NProgress.start()
17003 efrain 51
                },
17253 ariadna 52
                dataFilter: function (response) {
53
                    response = JSON.parse(response)
54
 
55
                    var json = {}
56
                    json.recordsTotal = 0
57
                    json.recordsFiltered = 0
58
                    json.data = []
59
 
60
                    if (response.success) {
61
                        json.recordsTotal = response.data.total
62
                        json.recordsFiltered = response.data.total
63
                        json.data = response.data.items
17252 ariadna 64
                    } else {
65
                        $.fn.showError(response.data)
17003 efrain 66
                    }
17253 ariadna 67
 
68
                    return JSON.stringify(json)
17003 efrain 69
                }
17253 ariadna 70
            },
71
            language: {
72
                sProcessing: 'LABEL_DATATABLE_SPROCESSING',
73
                sLengthMenu: 'LABEL_DATATABLE_SLENGTHMENU',
74
                sZeroRecords: 'LABEL_DATATABLE_SZERORECORDS',
75
                sEmptyTable: 'LABEL_DATATABLE_SEMPTYTABLE',
76
                sInfo: 'LABEL_DATATABLE_SINFO',
77
                sInfoEmpty: 'LABEL_DATATABLE_SINFOEMPTY',
78
                sInfoFiltered: 'LABEL_DATATABLE_SINFOFILTERED',
79
                sInfoPostFix: '',
80
                sSearch: 'LABEL_DATATABLE_SSEARCH',
81
                sUrl: '',
82
                sInfoThousands: ',',
83
                sLoadingRecords: 'LABEL_DATATABLE_SLOADINGRECORDS',
84
                oPaginate: {
85
                    sFirst: 'LABEL_DATATABLE_SFIRST',
86
                    sLast: 'LABEL_DATATABLE_SLAST',
87
                    sNext: 'LABEL_DATATABLE_SNEXT',
88
                    sPrevious: 'LABEL_DATATABLE_SPREVIOUS'
17003 efrain 89
                },
17253 ariadna 90
                oAria: {
91
                    sSortAscending: ': LABEL_DATATABLE_SSORTASCENDING',
92
                    sSortDescending: ':LABEL_DATATABLE_SSORTDESCENDING'
93
                }
17003 efrain 94
            },
17253 ariadna 95
            drawCallback: function (settings) {
96
                NProgress.done()
17003 efrain 97
            },
17253 ariadna 98
            aoColumns: [{ mDataProp: 'name' }, { mDataProp: 'actions' }],
99
            columnDefs: [
17003 efrain 100
                {
17253 ariadna 101
                    targets: 0,
102
                    className: 'text-vertical-middle'
17003 efrain 103
                },
17253 ariadna 104
                {
105
                    targets: -1,
106
                    orderable: false,
107
                    render: function (data, type, row) {
108
                        s = ''
17003 efrain 109
 
17253 ariadna 110
                        if (allowEdit) {
111
                            s =
112
                                s +
113
                                '<button class="btn btn-primary btn-edit" data-href="' +
114
                                data['link_edit'] +
115
                                '" data-toggle="tooltip" title="LABEL_EDIT"><i class="fa fa-pen"></i> LABEL_EDIT </button>&nbsp;'
17003 efrain 116
                        }
17253 ariadna 117
                        if (allowDelete) {
118
                            s =
119
                                s +
120
                                '<button class="btn btn-danger btn-delete" data-href="' +
121
                                data['link_delete'] +
122
                                '" data-toggle="tooltip" title="LABEL_DELETE"><i class="fa fa-trash"></i> LABEL_DELETE </button>&nbsp;'
17003 efrain 123
                        }
17253 ariadna 124
                        return s
17003 efrain 125
                    }
126
                }
17253 ariadna 127
            ]
128
        })
129
 
130
        // Form Validator
17003 efrain 131
        var validator = $('#form').validate({
132
            debug: true,
133
            onclick: false,
134
            onkeyup: false,
135
            ignore: [],
136
            rules: {
17253 ariadna 137
                name: {
17003 efrain 138
                    required: true,
17253 ariadna 139
                    maxlength: 100
17003 efrain 140
                }
141
            },
17253 ariadna 142
            submitHandler: function (form) {
17003 efrain 143
                $.ajax({
17253 ariadna 144
                    dataType: 'json',
145
                    accept: 'application/json',
146
                    method: 'post',
147
                    url: $('#form').attr('action'),
148
                    data: $('#form').serialize()
149
                })
150
                    .done(function (response) {
151
                        NProgress.start()
152
                        if (response['success']) {
153
                            $.fn.showSuccess(response['data'])
154
 
155
                            $('#modal').modal('hide')
156
 
157
                            gridTable.api().ajax.reload(null, false)
158
                        } else {
159
                            validator.resetForm()
160
                            if (jQuery.type(response['data']) == 'string') {
161
                                $.fn.showError(response['data'])
162
                            } else {
163
                                $.each(response['data'], function (fieldname, errors) {
164
                                    $.fn.showFormErrorValidator('#form #' + fieldname, errors)
165
                                })
166
                            }
17003 efrain 167
                        }
17253 ariadna 168
                    })
169
                    .fail(function (jqXHR, textStatus, errorThrown) {
170
                        $.fn.showError(textStatus)
171
                    })
172
                    .always(function () {
173
                        NProgress.done()
174
                    })
175
                return false
17003 efrain 176
            },
17253 ariadna 177
            invalidHandler: function (form, validator) { }
178
        })
17003 efrain 179
 
17253 ariadna 180
        // Button Add
181
        $('body').on('click', 'button.btn-add', function (e) {
182
            e.preventDefault()
183
 
184
            $('#form').attr('action', '$routeAdd')
185
            $('#form #name').val('')
186
 
187
            validator.resetForm()
188
            $('#modal').modal('show')
189
        })
190
 
191
        // Button Edit
192
        $('body').on('click', 'button.btn-edit', function (e) {
193
            e.preventDefault()
194
            NProgress.start()
195
            var action = $(this).data('href')
196
 
17003 efrain 197
            $.ajax({
17253 ariadna 198
                dataType: 'json',
199
                accept: 'application/json',
200
                method: 'get',
201
                url: action
202
            })
203
                .done(function (response) {
204
                    if (response['success']) {
205
                        $('#form').attr('action', action)
206
                        $('#form #name').val(response['data']['name'])
17003 efrain 207
 
17253 ariadna 208
                        validator.resetForm()
17003 efrain 209
 
17253 ariadna 210
                        $('#modal').modal('show')
211
                    } else {
212
                        $.fn.showError(response['data'])
213
                    }
214
                })
215
                .fail(function (jqXHR, textStatus, errorThrown) {
216
                    $.fn.showError(textStatus)
217
                })
218
                .always(function () {
219
                    NProgress.done()
220
                })
221
        })
222
 
223
        // Button Delete
224
        $('body').on('click', 'button.btn-delete', function (e) {
225
            e.preventDefault()
226
            var action = $(this).data('href')
227
 
228
            swal
229
                .fire({
230
                    title: 'LABEL_ARE_YOU_SURE',
231
                    icon: 'question',
232
                    cancelButtonText: 'LABEL_NO',
233
                    showCancelButton: true,
234
                    confirmButtonText: 'LABEL_YES'
235
                })
236
                .then((result) => {
237
                    if (result.isConfirmed) {
238
                        NProgress.start()
239
                        $.ajax({
240
                            dataType: 'json',
241
                            accept: 'application/json',
242
                            method: 'post',
243
                            url: action
244
                        })
245
                            .done(function (response) {
246
                                if (response['success']) {
247
                                    $.fn.showSuccess(response['data'])
248
                                    gridTable.api().ajax.reload(null, false)
249
                                } else {
250
                                    $.fn.showError(response['data'])
251
                                }
252
                            })
253
                            .fail(function (jqXHR, textStatus, errorThrown) {
254
                                $.fn.showError(textStatus)
255
                            })
256
                            .always(function () {
257
                                NProgress.done()
258
                            })
259
                    }
260
                })
261
        })
262
 
263
        // Button Refresh
264
        $('body').on('click', 'button.btn-refresh', function (e) {
265
            e.preventDefault()
266
            gridTable.api().ajax.reload(null, false)
267
        })
268
 
269
        // Button Cancel
270
        $('body').on('click', 'button.btn-cancel', function (e) {
271
            e.preventDefault()
272
            $('#modal').modal('hide')
273
        })
274
    })
17003 efrain 275
JS;
276
$this->inlineScript()->captureEnd();
277
?>
278
 
279
<div class="container">
17246 ariadna 280
    <div class="row">
281
        <div class="col-12 mt-3">
282
            <div class="card">
283
                <div class="card-body">
284
                    <h6 class="card-title">LABEL_MEDIA_CATEGORIES</h6>
285
                    <div class="row">
286
                        <div class="col-12  mt-3">
287
                            <table id="gridTable" class="table   table-bordered">
288
                                <thead>
289
                                    <tr>
290
                                        <th>LABEL_NAME</th>
291
                                        <th>LABEL_ACTIONS</th>
292
                                    </tr>
293
                                </thead>
294
                                <tbody>
295
                                </tbody>
296
                            </table>
297
                        </div>
298
                    </div>
17253 ariadna 299
                </div>
17246 ariadna 300
 
301
                <div class="card-footer text-right">
17253 ariadna 302
                    <button type="button" class="btn btn-info btn-refresh">
303
                        <i class="fa fa-sync"></i> LABEL_REFRESH
304
                    </button>
17246 ariadna 305
 
306
                    <?php if ($allowAdd) : ?>
17253 ariadna 307
                        <button type="button" class="btn btn-primary btn-add">
308
                            <i class="fa fa-plus"></i> LABEL_ADD
309
                        </button>
17246 ariadna 310
                    <?php endif; ?>
311
                </div>
312
            </div>
313
        </div>
314
    </div>
17003 efrain 315
</div>
316
 
317
<!-- The Modal -->
318
<div class="modal" id="modal">
17246 ariadna 319
    <div class="modal-dialog  modal-lg">
320
        <div class="modal-content">
17003 efrain 321
 
322
            <!-- Modal Header -->
17246 ariadna 323
            <div class="modal-header">
324
                <h6 class="modal-title">LABEL_CATEGORIES</h6>
325
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="btn-close"></button>
326
            </div>
17003 efrain 327
 
17246 ariadna 328
            <?php
329
            $form = $this->form;
330
            $form->setAttributes([
331
                'method'    => 'post',
332
                'name'      => 'form',
333
                'id'        => 'form'
334
            ]);
335
 
336
            $form->prepare();
337
            echo $this->form()->openTag($form);
338
            ?>
339
 
17003 efrain 340
            <!-- Modal body -->
17246 ariadna 341
            <div class="modal-body">
17003 efrain 342
 
17246 ariadna 343
                <div class="row">
344
                    <div class="col  mt-3">
345
                        <?php
346
                        $element = $form->get('name');
347
                        $element->setOptions(['label' => 'LABEL_NAME']);
348
                        $element->setAttributes(['class' => 'form-control']);
17003 efrain 349
 
17246 ariadna 350
                        echo $this->formLabel($element);
351
                        echo $this->formText($element);
352
                        ?>
353
                    </div>
354
                </div>
17003 efrain 355
 
356
 
17246 ariadna 357
            </div>
17003 efrain 358
 
17246 ariadna 359
            <!-- Modal footer -->
360
            <div class="modal-footer text-right">
361
                <button type="submit" class="btn btn-primary">LABEL_SAVE</button>
362
                <button type="button" class="btn btn-light btn-cancel">LABEL_CANCEL</button>
363
            </div>
364
            <?php echo $this->form()->closeTag($form); ?>
17003 efrain 365
 
17246 ariadna 366
        </div>
367
    </div>
368
</div>