Proyectos de Subversion LeadersLinked - Backend

Rev

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