Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 1 | Rev 5711 | Ir a la última revisión | | Comparar con el anterior | 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
$routeAdd       = $this->url('settings/job-categories/add');
9
$routeDatatable = $this->url('settings/job-categories');
10
$routeDashboard = $this->url('dashboard');
11
 
12
$allowAdd               = $acl->isAllowed($roleName, 'settings/job-categories/add') ? 1 : 0;
13
$allowEdit              = $acl->isAllowed($roleName, 'settings/job-categories/edit') ? 1 : 0;
14
$allowDelete            = $acl->isAllowed($roleName, 'settings/job-categories/delete') ? 1 : 0;
15
 
16
 
17
$this->headLink()->appendStylesheet($this->basePath('plugins/nprogress/nprogress.css'));
18
$this->inlineScript()->appendFile($this->basePath('plugins/nprogress/nprogress.js'));
19
 
20
$this->inlineScript()->appendFile($this->basePath('plugins/ckeditor/ckeditor.js'));
21
 
22
 
23
$this->inlineScript()->appendFile($this->basePath('plugins/jquery-validation/jquery.validate.js'));
24
$this->inlineScript()->appendFile($this->basePath('plugins/jquery-validation/additional-methods.js'));
25
$this->inlineScript()->appendFile($this->basePath('plugins/jquery-validation/localization/messages_es.js'));
26
 
27
$this->headLink()->appendStylesheet($this->basePath('plugins/datatables-bs4/css/dataTables.bootstrap4.min.css'));
28
$this->headLink()->appendStylesheet($this->basePath('plugins/datatables-responsive/css/responsive.bootstrap4.min.css'));
29
 
30
$this->inlineScript()->appendFile($this->basePath('plugins/datatables/jquery.dataTables.min.js'));
31
$this->inlineScript()->appendFile($this->basePath('plugins/datatables-bs4/js/dataTables.bootstrap4.min.js'));
32
$this->inlineScript()->appendFile($this->basePath('plugins/datatables-responsive/js/dataTables.responsive.min.js'));
33
$this->inlineScript()->appendFile($this->basePath('plugins/datatables-responsive/js/responsive.bootstrap4.min.js'));
34
 
35
 
36
$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap4-toggle/css/bootstrap4-toggle.min.css'));
37
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap4-toggle/js/bootstrap4-toggle.min.js'));
38
 
39
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-confirmation/dist/bootstrap-confirmation.js'));
40
$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap-checkbox/awesome-bootstrap-checkbox.css'));
41
 
42
 
43
 
44
$status_active = \LeadersLinked\Model\JobCategory::STATUS_ACTIVE;
45
 
46
$this->inlineScript()->captureStart();
47
echo <<<JS
48
    jQuery( document ).ready(function( $ ) {
49
 
50
 
51
        $.validator.setDefaults({
52
            debug: true,
53
            highlight: function(element) {
54
                $(element).addClass('is-invalid');
55
            },
56
            unhighlight: function(element) {
57
                $(element).removeClass('is-invalid');
58
            },
59
            errorElement: 'span',
60
            errorClass: 'error invalid-feedback',
61
            errorPlacement: function(error, element) {
62
                if(element.parent('.form-group').length) {
63
                    error.insertAfter(element);
64
                } else if(element.parent('.toggle').length) {
65
                    error.insertAfter(element.parent().parent());
66
                } else {
67
                    error.insertAfter(element.parent());
68
                }
69
            }
70
        });
71
 
72
 
73
        $.fn.showFormErrorValidator = function(fieldname, errors) {
74
            var field = $(fieldname);
75
            if(field) {
76
                $(field).addClass('is-invalid');
77
 
78
 
79
                var error = $('<span id="' + fieldname +'-error" class="error invalid-feedback">' + errors + '</div>');
80
                if(field.parent('.form-group').length) {
81
                    error.insertAfter(field);
82
                } else  if(field.parent('.toggle').length) {
83
                    error.insertAfter(field.parent().parent());
84
                } else {
85
                    error.insertAfter(field.parent());
86
                }
87
            }
88
        };
89
 
90
 
91
 
92
 
93
 
94
        var allowEdit   = $allowEdit;
95
        var allowDelete = $allowDelete;
96
 
97
        var gridTable = $('#gridTable').dataTable( {
98
            'processing': true,
99
            'serverSide': true,
100
            'searching': true,
101
            'order': [[ 0, 'asc' ]],
102
            'ordering':  true,
103
            'ordenable' : true,
104
            'responsive': true,
105
            'select' : false,
106
        	'paging': true,
107
            'pagingType': 'simple_numbers',
108
    		'ajax': {
109
    			'url' : '$routeDatatable',
110
    			'type' : 'get',
111
                'beforeSend': function (request) {
112
                  NProgress.start();
113
                },
114
                'dataFilter': function(response) {
115
                    var response = jQuery.parseJSON( response );
116
 
117
                    var json                = {};
118
                    json.recordsTotal       = 0;
119
                    json.recordsFiltered    = 0;
120
                    json.data               = [];
121
 
122
 
123
                    if(response.success) {
124
                        json.recordsTotal       = response.data.total;
125
                        json.recordsFiltered    = response.data.total;
126
                        json.data               = response.data.items;
127
                    } else {
128
                        $.fn.showError(response.data)
129
                    }
130
 
131
                    return JSON.stringify( json );
132
                }
133
    		},
134
            'language' : {
135
                'sProcessing':     'LABEL_DATATABLE_SPROCESSING',
136
                'sLengthMenu':     'LABEL_DATATABLE_SLENGTHMENU',
137
                'sZeroRecords':    'LABEL_DATATABLE_SZERORECORDS',
138
                'sEmptyTable':     'LABEL_DATATABLE_SEMPTYTABLE',
139
                'sInfo':           'LABEL_DATATABLE_SINFO',
140
                'sInfoEmpty':      'LABEL_DATATABLE_SINFOEMPTY',
141
                'sInfoFiltered':   'LABEL_DATATABLE_SINFOFILTERED',
142
                'sInfoPostFix':    '',
143
                'sSearch':         'LABEL_DATATABLE_SSEARCH',
144
                'sUrl':            '',
145
                'sInfoThousands':  ',',
146
                'sLoadingRecords': 'LABEL_DATATABLE_SLOADINGRECORDS',
147
                'oPaginate': {
148
                    'sFirst':    'LABEL_DATATABLE_SFIRST',
149
                    'sLast':     'LABEL_DATATABLE_SLAST',
150
                    'sNext':     'LABEL_DATATABLE_SNEXT',
151
                    'sPrevious': 'LABEL_DATATABLE_SPREVIOUS'
152
                },
153
                'oAria': {
154
                    'sSortAscending':  ': LABEL_DATATABLE_SSORTASCENDING',
155
                    'sSortDescending': ':LABEL_DATATABLE_SSORTDESCENDING'
156
                },
157
            },
158
            'drawCallback': function( settings ) {
159
                NProgress.done();
160
                $('button.btn-delete').confirmation({
161
                    rootSelector: 'button.btn-delete',
162
                    title : 'LABEL_ARE_YOU_SURE',
163
                    singleton : true,
164
                    btnOkLabel: 'LABEL_YES',
165
                    btnCancelLabel: 'LABEL_NO',
166
                    onConfirm: function(value) {
167
                        action = $(this).data('href');
168
                        NProgress.start();
169
                        $.ajax({
170
                            'dataType'  : 'json',
171
                            'accept'    : 'application/json',
172
                            'method'    : 'post',
173
                            'url'       :  action,
174
                        }).done(function(response) {
175
                            if(response['success']) {
176
                                $.fn.showSuccess(response['data']);
177
                                gridTable.api().ajax.reload(null, false);
178
                            } else {
179
                                $.fn.showError(response['data']);
180
                            }
181
                        }).fail(function( jqXHR, textStatus, errorThrown) {
182
                            $.fn.showError(textStatus);
183
                        }).always(function() {
184
                            NProgress.done();
185
                        });
186
                    },
187
                });
188
            },
189
            'aoColumns': [
190
 
191
                { 'mDataProp': 'name' },
192
                { 'mDataProp': 'status' },
193
                { 'mDataProp': 'actions' },
194
    	    ],
195
            'columnDefs': [
196
 
197
                {
198
                    'targets': 0,
199
                    'className' : 'text-vertical-middle',
200
                },
201
                {
202
                    'targets': -2,
203
                    'orderable': false,
204
                    'className' : 'text-center',
205
                      'render' : function ( data, type, row ) {
206
 
207
                        checked = data == 'a' ? ' checked="checked" ' : '';
208
                        return '<div class="checkbox checkbox-success">' +
209
                            '<input class="styled" type="checkbox" ' + checked + ' disabled="disabled">' +
210
                            '<label ></label></div>';
211
                    }
212
                },
213
                {
214
                    'targets': -1,
215
                    'orderable': false,
216
                    'render' : function ( data, type, row ) {
217
                        s = '';
218
 
219
                        if(allowEdit) {
220
                            s = s + '<button class="btn btn-primary btn-edit" data-href="' + data['link_edit']+ '" data-toggle="tooltip" title="LABEL_EDIT"><i class="fa fa-pencil"></i> LABEL_EDIT </button>&nbsp;';
221
                        }
222
                        if(allowDelete) {
223
                            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>&nbsp;';
224
                        }
225
                        return s;
226
                    }
227
                }
228
              ],
229
        });
230
 
231
 
232
        var validator = $('#form').validate({
233
            debug: true,
234
            onclick: false,
235
            onkeyup: false,
236
            ignore: [],
237
            rules: {
238
                'name': {
239
                    required: true,
240
                    maxlength: 64,
241
                },
242
                'description': {
243
                    updateCkeditor:function() {
244
                        CKEDITOR.instances.description.updateElement();
245
                    },
246
                    required: true,
247
                },
248
                'status': {
249
                    required: false,
250
 
251
                },
252
            },
253
            submitHandler: function(form)
254
            {
255
                $.ajax({
256
                    'dataType'  : 'json',
257
                    'accept'    : 'application/json',
258
                    'method'    : 'post',
259
                    'url'       :  $('#form').attr('action'),
260
                    'data'      :  $('#form').serialize()
261
                }).done(function(response) {
262
                    NProgress.start();
263
                    if(response['success']) {
264
                        $.fn.showSuccess(response['data']);
265
 
266
                        $('#modal').modal('hide');
267
 
268
                         gridTable.api().ajax.reload(null, false);
269
                    } else {
270
                        validator.resetForm();
271
                        if(jQuery.type(response['data']) == 'string') {
272
                            $.fn.showError(response['data']);
273
                        } else  {
274
                            $.each(response['data'], function( fieldname, errors ) {
275
                                $.fn.showFormErrorValidator('#form #' + fieldname, errors);
276
                            });
277
                        }
278
                    }
279
                }).fail(function( jqXHR, textStatus, errorThrown) {
280
                   $.fn.showError(textStatus);
281
                }).always(function() {
282
                    NProgress.done();
283
                });
284
                return false;
285
            },
286
            invalidHandler: function(form, validator) {
287
 
288
            }
289
        });
290
 
291
        $('body').on('click', 'button.btn-add', function(e) {
292
            e.preventDefault();
293
 
294
            $('span[id="form-title"]').html('LABEL_ADD');
295
            $('#form').attr('action', '$routeAdd');
296
            $('#form #name').val('');
297
            $('#form #status').bootstrapToggle('on');
298
            CKEDITOR.instances.description.setData('');
299
 
300
 
301
            validator.resetForm();
302
            $('#modal').modal('show');
303
        });
304
 
305
        $('body').on('click', 'button.btn-edit', function(e) {
306
            e.preventDefault();
307
            NProgress.start();
308
            var action = $(this).data('href');
309
 
310
            $.ajax({
311
                'dataType'  : 'json',
312
                'accept'    : 'application/json',
313
                'method'    : 'get',
314
                'url'       :  action,
315
            }).done(function(response) {
316
                if(response['success']) {
317
 
318
                    $('span[id="form-title"]').html('LABEL_EDIT');
319
                    $('#form').attr('action', action);
320
                    $('#form #name').val(response['data']['name']);
321
                    $('#form #status').bootstrapToggle(response['data']['status'] == '$status_active' ? 'on' : 'off')
322
                    CKEDITOR.instances.description.setData(response['data']['description']);
323
 
324
                    validator.resetForm();
325
 
326
                    $('#modal').modal('show');
327
                } else {
328
                    $.fn.showError(response['data']);
329
                }
330
            }).fail(function( jqXHR, textStatus, errorThrown) {
331
                $.fn.showError(textStatus);
332
            }).always(function() {
333
                NProgress.done();
334
            });
335
        });
336
 
337
        $('body').on('click', 'button.btn-refresh', function(e) {
338
            e.preventDefault();
339
            gridTable.api().ajax.reload(null, false);
340
        });
341
 
342
 
343
        $('body').on('click', 'button.btn-cancel', function(e) {
344
            e.preventDefault();
345
            $('#modal').modal('hide');
346
            $('#div-listing').show();
347
        });
348
 
349
 
350
        $('#form #status').bootstrapToggle({'on' : 'LABEL_ACTIVE',  'off' : 'LABEL_INACTIVE', 'width' : '160px', 'height' : '40px'});
351
        CKEDITOR.replace( 'description');
352
    });
353
JS;
354
$this->inlineScript()->captureEnd();
355
?>
356
 
357
 
358
 
359
 
360
 
361
 
362
<!-- Content Header (Page header) -->
363
<section class="content-header">
364
	<div class="container-fluid">
365
    	<div class="row mb-2">
366
        	<div class="col-sm-12">
367
            	<h1>LABEL_JOB_CATEGORIES</h1>
368
			</div>
369
		</div>
370
	</div><!-- /.container-fluid -->
371
</section>
372
 
373
<section class="content">
374
	<div class="container-fluid">
375
    	<div class="row">
376
        	<div class="col-12">
377
				<div class="card">
378
					<div class="card-body">
20 steven 379
        	    		<table id="gridTable" class="table   table-hover">
1 www 380
                      		<thead>
381
        						<tr>
382
                                	<th>LABEL_NAME</th>
383
                                  	<th>LABEL_ACTIVE</th>
384
                                  	<th>LABEL_ACTIONS</th>
385
                                </tr>
386
                       		</thead>
387
                         	<tbody>
388
                         	</tbody>
389
                    	</table>
390
                   	</div>
391
                   	<div class="card-footer clearfix">
392
                   		<div style="float:right;">
393
							<button type="button" class="btn btn-info btn-refresh"><i class="fa fa-refresh"></i> LABEL_REFRESH  </button>
394
							<?php if($allowAdd) : ?>
395
							<button type="button" class="btn btn-primary btn-add"><i class="fa fa-plus"></i> LABEL_ADD </button>
396
							<?php endif; ?>
397
						</div>
398
                 	</div>
399
          		</div>
400
           	</div>
401
        </div>
402
 	</div>
403
</section>
404
 
405
<!-- The Modal -->
406
<div class="modal" id="modal">
407
	<div class="modal-dialog  modal-xl">
408
    	<div class="modal-content">
409
 
410
            <!-- Modal Header -->
411
      		<div class="modal-header">
412
        		<h4 class="modal-title">LABEL_JOB_CATEGORIES - <span id="form-title"></span></h4>
413
        		<button type="button" class="close" data-dismiss="modal">&times;</button>
414
      		</div>
415
 
416
            <!-- Modal body -->
417
      		<div class="modal-body">
418
       			 <?php
419
                    $form = $this->form;
420
            		$form->setAttributes([
421
                        'method'    => 'post',
422
                        'name'      => 'form',
423
                        'id'        => 'form'
424
                    ]);
425
 
426
                    $form->prepare();
427
                    echo $this->form()->openTag($form);
428
                    ?>
429
    					<div class="form-group">
430
        					<?php
431
                            $element = $form->get('name');
432
                            $element->setOptions(['label' => 'LABEL_NAME']);
433
                            $element->setAttributes(['class' => 'form-control']);
434
 
435
                            echo $this->formLabel($element);
436
                            echo $this->formText($element);
437
                            ?>
438
						</div>
439
						<div class="form-group">
440
                    	<?php
441
                            $element = $form->get('description');
442
                            $element->setOptions(['label' => 'LABEL_DESCRIPTION']);
443
                            $element->setAttributes(['class' => 'form-control']);
444
 
445
                            echo $this->formLabel($element);
446
                            echo $this->formTextArea($element);
447
                        ?>
448
						</div>
449
						<div class="form-group">
450
                      	<?php
451
                            $element = $form->get('status');
452
                            echo $this->formCheckbox($element);
453
                        ?>
454
						</div>
455
 
456
        				<div class="form-group">
457
                    		<button type="submit" class="btn btn-primary">LABEL_SAVE</button>
458
                    		<button type="button" class="btn btn-light btn-cancel">LABEL_CANCEL</button>
459
                   		</div>
460
     	      		<?php echo $this->form()->closeTag($form); ?>
461
      		</div>
462
 
463
            <!-- Modal footer -->
464
      		<div class="modal-footer">
465
        		<button type="button" class="btn btn-danger" data-dismiss="modal">Cerrar</button>
466
      		</div>
467
 
468
    	</div>
469
	</div>
470
</div>
471
 
472
 
473
 
474
 
475
 
476
 
477
 
478
 
479
 
480
 
481
 
482