Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
15333 stevensc 1
<?php
2
 
1 www 3
use LeadersLinked\Model\CompanyUser;
4
 
5
$acl            = $this->viewModel()->getRoot()->getVariable('acl');
6
$currentUser    = $this->currentUserHelper();
7
 
8
$roleName = $currentUser->getUserTypeId();
9
 
10
 
11
//$routeAdd       = $this->url('users/add');
12
$routeDatatable = $this->url('users');
13
$routeInvite    = $this->url('users/invite');
14
$routeUpload    = $this->url('users/upload');
15
 
16
 
17
 
18
$allowInvite            = $acl->isAllowed($roleName, 'users/invite') ? 1 : 0;
19
$allowAccept            = $acl->isAllowed($roleName, 'users/accept') ? 1 : 0;
20
$allowCancel            = $acl->isAllowed($roleName, 'users/cancel') ? 1 : 0;
21
$allowReject            = $acl->isAllowed($roleName, 'users/reject') ? 1 : 0;
22
$allowEdit              = $acl->isAllowed($roleName, 'users/edit') ? 1 : 0;
23
$allowUpload            = $acl->isAllowed($roleName, 'users/upload') ? 1 : 0;
24
$allowChangePassword    = $acl->isAllowed($roleName, 'users/change-password') ? 1 : 0;
25
$allowUnblock           = $acl->isAllowed($roleName, 'users/unblock') ? 1 : 0;
26
 
27
 
15284 stevensc 28
$this->inlineScript()->appendFile($this->basePath('plugins/popper/umd/popper.js'));
1 www 29
$this->headLink()->appendStylesheet($this->basePath('plugins/nprogress/nprogress.css'));
30
$this->inlineScript()->appendFile($this->basePath('plugins/nprogress/nprogress.js'));
31
 
32
$this->inlineScript()->appendFile($this->basePath('plugins/ckeditor/ckeditor.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
 
41
$this->inlineScript()->appendFile($this->basePath('plugins/datatables/jquery.dataTables.min.js'));
42
$this->inlineScript()->appendFile($this->basePath('plugins/datatables-bs4/js/dataTables.bootstrap4.min.js'));
43
 
44
 
45
$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap4-toggle/css/bootstrap4-toggle.min.css'));
46
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap4-toggle/js/bootstrap4-toggle.min.js'));
47
 
15280 stevensc 48
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap/js/bootstrap.js'));
1 www 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 = '';
15333 stevensc 345
 
346
                        $('#gridTable_wrapper .row:nth-child(2) .col-sm-12').addClass( "table table-responsive" );
1 www 347
 
348
                        if(allowAccept && data['link_accept']) {
15283 stevensc 349
                            s = s + '<button class="btn btn-sm btn-accept btn-primary" style="margin-top: 5px" data-href="' + data['link_accept']+ '" data-toggle="confirmation" title="LABEL_ACCEPT"><i class="fa fa-check"></i> LABEL_ACCEPT </button><br>';
1 www 350
                        }
15261 stevensc 351
                        if(allowEdit && data['link_edit']) {
15283 stevensc 352
                            s = s + '<button class="btn btn-sm btn-edit btn-primary" style="margin-top: 5px" data-href="' + data['link_edit']+ '" data-toggle="confirmation" title="LABEL_EDIT"><i class="fa fa-pencil"></i> LABEL_EDIT </button><br>';
15261 stevensc 353
                        }
1 www 354
                        if(allowCancel && data['link_cancel']) {
15278 stevensc 355
                            s = s + '<button class="btn btn-sm btn-cancel btn-danger" style="margin-top: 5px" data-href="' + data['link_cancel']+ '" data-toggle="confirmation" data-singleton="true" title="LABEL_CANCEL"><i class="fa fa-times"></i> LABEL_CANCEL </button><br>';
1 www 356
                        }
357
                        if(allowReject && data['link_reject']) {
15283 stevensc 358
                            s = s + '<button class="btn btn-sm btn-reject btn-danger" style="margin-top: 5px" data-href="' + data['link_reject']+ '" data-toggle="confirmation" title="LABEL_REJECT"><i class="fa fa-times"></i> LABEL_REJECT </button><br>';
1 www 359
                        }
360
 
361
                        if(allowChangePassword && data['link_change_password']) {
15283 stevensc 362
                            s = s + '<button class="btn btn-sm btn-primary btn-change-password" style="margin-top: 5px" data-href="' + data['link_change_password']+ '" data-toggle="confirmation" title="LABEL_CHANGE_PASSWORD"><i class="fa fa-key"></i> LABEL_PASSWORD </button><br>';
1 www 363
                        }
364
                        if(allowUnblock && data['link_unblock']) {
15283 stevensc 365
                            s = s + '<button class="btn btn-sm btn-info btn-unblock" style="margin-top: 5px" data-href="' + data['link_unblock']+ '" data-toggle="confirmation" title="LABEL_UNBLOCK"><i class="fa fa-unlock"></i> LABEL_UNBLOCK </button><br>';
1 www 366
                        }
367
 
368
 
369
                        return s;
370
                    }
371
                }
372
 
373
            ],
374
        });
375
 
376
 
377
        $('#form-filter #status').change(function(e) {
378
            e.preventDefault();
379
            gridTable.api().ajax.reload(null, false);
380
        });
381
 
382
 
383
        $('body').on('click', 'button.btn-refresh', function(e) {
384
            e.preventDefault();
385
            gridTable.api().ajax.reload(null, false);
386
        });
387
 
388
 
389
 
390
 
391
 
392
        $('body').on('click', 'button.btn-invite', function(e) {
393
            e.preventDefault();
394
            $('#form-invite #user_uuid').autoComplete('clear');
395
            $('#form-invite #user_uuid_selected').val('');
396
            $('#modalInvite').modal('show');
397
        });
398
 
399
        $('body').on('click', 'button.btn-accept', function(e) {
400
            e.preventDefault();
401
            action = $(this).data('href');
402
            NProgress.start();
403
            $.ajax({
404
                'dataType'  : 'json',
405
                'accept'    : 'application/json',
406
                'method'    : 'post',
407
                'url'       :  action
408
            }).done(function(response) {
409
                if(response['success']) {
410
                    $.fn.showSuccess(response['data']);
411
                    gridTable.api().ajax.reload(null, false);
412
                } else {
413
                    $.fn.showError(response['data']);
414
                }
415
            }).fail(function( jqXHR, textStatus, errorThrown) {
416
                $.fn.showError(textStatus);
417
            }).always(function() {
418
                NProgress.done();
419
            });
420
        });
421
 
422
 
423
        $('#form-invite #user_uuid').autoComplete({
424
            resolver: 'custom',
425
            events: {
426
 
427
                search: function (qry, callback) {
428
                    NProgress.start();
429
                    $.ajax({
430
                        'url' : '$routeInvite',
431
                        'method': 'get',
432
				        'data': { 'search': qry }
433
				    }).done(function (response) {
434
                        if(response['success']) {
435
                            callback(response['data'])
436
                        } else {
437
                            $.fn.showError(response['data']);
438
                        }
439
					}).fail(function( jqXHR, textStatus, errorThrown) {
440
                        $.fn.showError(textStatus);
441
                    }).always(function() {
442
                        NProgress.done();
443
                    });
444
                }
445
            }
446
        });
447
 
448
	    $('#form-invite #user_uuid').on('autocomplete.select', function (evt, item) {
449
            $('#form-invite #user_uuid_selected').val(item['value']);
450
        });
451
 
452
        var validatorFormInvite = $('#form-invite').validate({
453
            debug: true,
454
            onclick: false,
455
            onkeyup: false,
456
            ignore: [':hidden'],
457
            rules: {
458
 
459
                'user_uuid': {
460
                    required: true,
461
                },
462
            },
463
            submitHandler: function(form)
464
            {
465
                NProgress.start();
466
                $.ajax({
467
                    'dataType'  : 'json',
468
                    'accept'    : 'application/json',
469
                    'method'    : 'post',
470
                    'url'       : '$routeInvite',
471
                    'data'      : {
472
                        'id' : $('#form-invite #user_uuid_selected').val(),
473
                    }
474
                 }).done(function(response) {
475
                    if(response.success) {
476
                        $.fn.showSuccess(response.data);
477
 
478
                        $('#modalInvite').modal('hide');
479
                         gridTable.api().ajax.reload(null, false);
480
                    } else {
481
                        if(jQuery.type(response.data) == 'string') {
482
                            $.fn.showError(response.data)
483
                        } else  {
484
                            $.each(response.data, function( fieldname, errors ) {
485
                                $.fn.showFormErrorValidator('#form-invite #' + fieldname, errors);
486
                            });
487
                        }
488
                    }
489
                }).fail(function( jqXHR, textStatus, errorThrown) {
490
                    $.fn.showError(textStatus)
491
 
492
                }).always(function() {
493
                    NProgress.done();
494
                })
495
            },
496
            invalidHandler: function(form, validator) {
497
            }
498
        });
499
 
500
    var validatorCapsuleCustomer = $('#form-upload-users').validate({
501
        debug: true,
502
        onclick: false,
503
        onkeyup: false,
504
        onfocusout: false,
505
        ignore: [],
506
        rules: {
507
            'file' : {
508
                required: true,
509
                extension: 'xls|xlsx',
510
                accept: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel'
511
            },
512
        },
513
 
514
        submitHandler: function(form)
515
        {
516
            NProgress.start();
517
            var formdata = false;
518
            if (window.FormData){
519
                formdata = new FormData(form);
520
            }
521
            formdata.append('step','validation');
522
 
523
 
524
            $.ajax({
525
                'dataType'  : 'json',
526
                'accept'    : 'application/json',
527
                'method'    : 'post',
528
                'url'       : '$routeUpload',
529
                'data'      :  formdata,
530
                'processData': false,
531
                'contentType': false,
532
            }).done(function(response) {
533
                if(response['success']) {
534
 
535
                    $('#table-upload-users-key').val(response['data']['key']);
536
 
537
                    $('#gridTableUploadUsers tbody').empty();
538
 
539
                    $.each(response['data']['items'], function(index, item) {
540
 
541
 
542
                        var s = '<tr>';
543
                        s = s + '<td>' + item['first_name'] + '</td>';
544
                        s = s + '<td>' + item['last_name'] + '</td>';
545
                        s = s + '<td>' + item['email'] + '</td>';
546
                        s = s + '<td>' + item['password'] + '</td>';
547
                        s = s + '</tr>';
548
 
549
                        $('#gridTableUploadUsers tbody').append(s);
550
 
551
 
552
                    });
553
 
554
                    $('#modalFormUploadUsers').modal('hide');
555
                    $('#modalUploadUsers').modal('show');
556
 
557
 
558
 
559
                } else {
560
                    validatorCapsuleCustomer.resetForm();
561
                    if(jQuery.type(response['data']) == 'string') {
562
                        $.fn.showError(response['data']);
563
                    } else  {
564
                        $.each(response['data'], function( fieldname, errors ) {
565
                            $.fn.showFormErrorValidator('#form-upload-users #' + fieldname, errors);
566
                        });
567
                    }
568
                }
569
            }).fail(function( jqXHR, textStatus, errorThrown) {
570
                $.fn.showError(textStatus);
571
            }).always(function() {
572
 
573
                NProgress.done();
574
            });
575
            return false;
576
        },
577
        invalidHandler: function(form, validator) {
578
 
579
        }
580
    });
581
 
582
 
583
    $('#form-upload-users #file').fileinput({
584
        theme: 'fas',
585
        language: 'es',
586
        showUpload: false,
587
        dropZoneEnabled: false,
588
        maxFileCount: 1,
589
        allowedFileExtensions: ['xls', 'xlsx'],
590
    });
591
 
592
    $('body').on('click', 'button.btn-upload', function(e) {
593
        e.preventDefault();
594
 
595
        $('#form-upload-users #file').fileinput('reset');
596
        $('#form-upload-users #file').val('');
597
 
598
        $('#modalFormUploadUsers').modal('show');
599
    });
600
 
601
    $('body').on('click', 'button.btn-upload-users-step2', function(e) {
602
        e.preventDefault();
603
        NProgress.start();
604
 
605
        $.ajax({
606
            'dataType'  : 'json',
607
            'accept'    : 'application/json',
608
            'method'    : 'post',
609
            'url'       : '$routeUpload',
610
            'data'      :  {
611
                'step' : 'process',
612
                'key' : $('#table-upload-users-key').val(),
613
            }
614
        }).done(function(response) {
615
            if(response['success']) {
616
                if(response['data']['users_assigned'] == 1) {
617
                    $.fn.showSuccess(response['data']['users_assigned'] + ' LABEL_USER_CREATED');
618
                } else {
619
                    $.fn.showSuccess(response['data']['users_assigned'] + ' LABEL_USERS_CREATED');
620
                }
621
                 gridTable.api().ajax.reload(null, false);
622
                $('#modalUploadUsers').modal('hide');
623
            } else {
624
                $.fn.showError(response['data']);
625
            }
626
        }).fail(function( jqXHR, textStatus, errorThrown) {
627
            $.fn.showError(textStatus);
628
        }).always(function() {
629
            NProgress.done();
630
        });
631
        return false;
632
    });
633
 
634
    $('body').on('click', 'button.btn-edit', function(e) {
635
        e.preventDefault();
636
 
637
        var href = $(this).data('href');
638
        $('#form-edit').attr('action', href);
639
 
640
        NProgress.start();
641
        $.ajax({
642
            'dataType'  : 'json',
643
            'accept'    : 'application/json',
644
            'method'    : 'get',
645
            'url'       :  href,
646
        }).done(function(response) {
647
            if(response['success']) {
648
                $('#form-edit #backend').prop('checked', response['data']['backend'] );
649
                $('#table-roles tbody').empty();
650
 
651
                $.each(response['data']['roles'], function(index, role) {
652
 
653
                    var checked = role['checked'] ? ' checked="checked" ' : '';
654
                    var s = '<tr>';
655
                    s = s + '<td>' + role['name'] + '</td>';
656
 
657
                    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>';
658
                    s = s + '</tr>';
659
 
660
                    $('#table-roles tbody').append(s);
661
 
662
                });
663
 
664
                $('#modalEdit').modal('show');
665
 
666
            } else {
667
                $.fn.showError(response['data']);
668
            }
669
        }).fail(function( jqXHR, textStatus, errorThrown) {
670
            $.fn.showError(textStatus);
671
        }).always(function() {
672
            NProgress.done();
673
        });
674
 
675
    });
676
 
677
    $('#form-edit').submit(function (e) {
678
        e.preventDefault();
679
        NProgress.start();
680
        $.ajax({
681
            'dataType'  : 'json',
682
            'accept'    : 'application/json',
683
            'method'    : 'post',
684
            'url'       : $('#form-edit').attr('action'),
685
            'data'      : $('#form-edit').serialize(),
686
        }).done(function(response) {
687
            if(response['success']) {
688
 
689
                $.fn.showSuccess(response['data']);
690
                $('#modalEdit').modal('hide');
691
                gridTable.api().ajax.reload(null, false);
692
 
693
            } else {
694
                $.fn.showError(response['data']);
695
            }
696
        }).fail(function( jqXHR, textStatus, errorThrown) {
697
            $.fn.showError(textStatus);
698
        }).always(function() {
699
            NProgress.done();
700
        });
701
        return false;
702
 
703
    });
704
 
705
    $('body').on('click', 'button.btn-cancel-modal', function(e) {
706
        e.preventDefault();
707
        $('#modalInvite').modal('hide');
708
        $('#modalFormUploadUsers').modal('hide');
709
        $('#modalEdit').modal('hide');
710
        $('#modalChangePassword').modal('hide');
711
    });
712
 
713
    var validatorChangePassword = $('#form-change-password').validate({
714
        debug: true,
715
        onclick: false,
716
        onkeyup: false,
717
        ignore: [':hidden'],
718
            rules: {
719
 
720
                'password': {
721
                    required: true,
722
                    minlength: 6,
723
                    maxlength: 16,
724
                    passwordStrengthCheck: true,
725
                },
726
                'confirmation' : {
727
                    required: true,
728
                    minlength: 6,
729
                    maxlength: 16,
730
                    equalTo: '#form-change-password #password'
731
                },
732
            },
733
            submitHandler: function(form)
734
            {
735
                NProgress.start();
736
                $.ajax({
737
                    'dataType'  : 'json',
738
                    'accept'    : 'application/json',
739
                    'method'    : 'post',
740
                    'url'       : $('#form-change-password').attr('action'),
741
                    'data'      : $('#form-change-password').serialize()
742
                 }).done(function(response) {
743
                    if(response.success) {
744
                        $.fn.showSuccess(response.data);
745
 
746
                        $('#modalChangePassword').modal('hide');
747
                         gridTable.api().ajax.reload(null, false);
748
                    } else {
749
                        if(jQuery.type(response.data) == 'string') {
750
                            $.fn.showError(response.data)
751
                        } else  {
752
                            $.each(response.data, function( fieldname, errors ) {
753
                                $.fn.showFormErrorValidator('#form-change-password #' + fieldname, errors);
754
                            });
755
                        }
756
                    }
757
                }).fail(function( jqXHR, textStatus, errorThrown) {
758
                    $.fn.showError(textStatus)
759
 
760
                }).always(function() {
761
                    NProgress.done();
762
                })
763
            },
764
            invalidHandler: function(form, validator) {
765
            }
766
        });
767
 
768
        $('body').on('click', 'button.btn-change-password', function(e) {
769
            e.preventDefault();
770
 
771
            NProgress.start();
772
            var action = $(this).data('href');
773
 
774
            $.ajax({
775
                'dataType'  : 'json',
776
                'accept'    : 'application/json',
777
                'method'    : 'get',
778
                'url'       :  action,
779
            }).done(function(response) {
780
                if(response['success']) {
781
 
782
                    $('#form-change-password').attr('action', action);
783
                    $('#form-change-password #first_name').val(response['data']['first_name']);
784
                    $('#form-change-password #last_name').val(response['data']['last_name']);
785
                    $('#form-change-password #email').val(response['data']['email']);
786
                    $('#form-change-password #password').val('');
787
                    $('#form-change-password #confirmation').val('');
788
                    validatorChangePassword.resetForm();
789
 
790
                    $('#modalChangePassword').modal('show');
791
                } else {
792
                    $.fn.showError(response['data']);
793
                }
794
            }).fail(function( jqXHR, textStatus, errorThrown) {
795
                $.fn.showError(textStatus);
796
            }).always(function() {
797
                NProgress.done();
798
            });
799
 
800
        });
801
 
802
 
803
 
804
    });
805
JS;
806
$this->inlineScript()->captureEnd();
15222 stevensc 807
$this->headLink()->appendStylesheet('/css/style.css');
15333 stevensc 808
?>
809
 
1 www 810
<!-- Content Header (Page header) -->
811
<section class="content-header">
15333 stevensc 812
    <div class="container-fluid">
813
        <div class="row mb-2">
814
            <div class="col-sm-12">
815
                <h1>LABEL_USERS</h1>
816
            </div>
817
        </div>
818
    </div><!-- /.container-fluid -->
1 www 819
</section>
820
 
821
<section class="content">
15333 stevensc 822
    <div class="container-fluid">
823
        <div class="row">
824
            <div class="col-12">
825
                <div class="card">
826
                    <div class="card-body">
827
                        <div class="row">
828
                            <div class="col-md-12 col-sm-12">
1 www 829
                                <form name="form-filter" id="form-filter">
830
                                    <div class="form-group">
831
                                        <label for="status">LABEL_STATUS</label>
832
                                        <select id="status" name="status" class="form-control">
833
                                            <option value="">LABEL_ALL</option>
834
                                            <option value="<?php echo CompanyUser::STATUS_PENDING ?>">LABEL_PENDING</option>
835
                                            <option value="<?php echo CompanyUser::STATUS_ACCEPTED ?>">LABEL_ACCEPTED</option>
836
                                            <option value="<?php echo CompanyUser::STATUS_ADMIN_WILL_ADD ?>">LABEL_ADMIN_WILL_ADD</option>
837
                                            <option value="<?php echo CompanyUser::STATUS_SENT ?>">LABEL_INVITED</option>
838
                                            <option value="<?php echo CompanyUser::STATUS_CANCELLED ?>">LABEL_CANCELLED</option>
839
                                            <option value="<?php echo CompanyUser::STATUS_REJECTED ?>">LABEL_REJECTED</option>
840
                                        </select>
841
                                    </div>
842
                                </form>
15333 stevensc 843
                            </div>
844
                            <div class="col-12 text-right p-2">
1 www 845
                                <div style="float:right;">
846
                                    <button type="button" class="btn btn-sm btn-info btn-refresh"><i class="fa fa-refresh"></i></button>
15333 stevensc 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>
1 www 849
                                    <?php endif; ?>
15333 stevensc 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>
1 www 852
                                    <?php endif; ?>
853
                                </div>
15333 stevensc 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>
1 www 866
                                        </tr>
15333 stevensc 867
                                    </thead>
868
                                    <tbody>
869
                                    </tbody>
870
                                </table>
871
                            </div>
872
                        </div>
1 www 873
 
874
 
15333 stevensc 875
                    </div>
876
                    <div class="card-footer clearfix">
1 www 877
 
15333 stevensc 878
 
879
                    </div>
880
                </div>
881
            </div>
882
        </div>
883
    </div>
884
</section>
885
 
886
 
1 www 887
<!-- The Modal -->
888
<div class="modal" id="modalInvite">
15333 stevensc 889
    <div class="modal-dialog  modal-xl">
890
        <div class="modal-content">
1 www 891
 
892
            <!-- Modal Header -->
15333 stevensc 893
            <div class="modal-header">
894
                <h3 class="modal-title">LABEL_INVITE</h3>
895
            </div>
1 www 896
 
897
            <!-- Modal body -->
15333 stevensc 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>
1 www 905
 
906
 
15333 stevensc 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>
1 www 916
 
917
 
15333 stevensc 918
 
1 www 919
<!-- The Modal -->
920
<div class="modal" id="modalFormUploadUsers">
15333 stevensc 921
    <div class="modal-dialog  modal-xl">
922
        <div class="modal-content">
1 www 923
 
924
            <!-- Modal Header -->
15333 stevensc 925
            <div class="modal-header">
926
                <h3 class="modal-title">LABEL_UPLOAD</h3>
927
            </div>
1 www 928
 
929
            <!-- Modal body -->
15333 stevensc 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
                ]);
1 www 938
 
15333 stevensc 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
1 www 953
                        $element->setAttributes(['class' => 'form-control', 'accept' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.ms-excel']);
954
                        echo $this->formFile($element);
955
                        ?>
15333 stevensc 956
                    </div>
957
                </div>
1 www 958
 
959
 
960
 
15333 stevensc 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>
1 www 967
 
15333 stevensc 968
        </div>
969
    </div>
970
</div>
1 www 971
 
972
 
15333 stevensc 973
 
1 www 974
<!-- The Modal -->
975
<div class="modal" id="modalUploadUsers">
15333 stevensc 976
    <div class="modal-dialog modal-xl">
977
        <div class="modal-content">
1 www 978
 
979
            <!-- Modal Header -->
15333 stevensc 980
            <div class="modal-header">
981
                <h3 class="modal-title">LABEL_USERS</h3>
982
                <button type="button" class="close" data-dismiss="modal">&times;</button>
983
            </div>
1 www 984
 
985
            <!-- Modal body -->
15333 stevensc 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>
1 www 1004
 
15333 stevensc 1005
            </div>
1006
 
1 www 1007
            <!-- Modal footer -->
15333 stevensc 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>
1 www 1012
 
15333 stevensc 1013
        </div>
1014
    </div>
1015
</div>
1 www 1016
 
1017
 
1018
<!-- The Modal -->
1019
<div class="modal" id="modalEdit">
15333 stevensc 1020
    <div class="modal-dialog  modal-xl">
1021
        <div class="modal-content">
1 www 1022
 
1023
            <!-- Modal Header -->
15333 stevensc 1024
            <div class="modal-header">
1025
                <h3 class="modal-title">LABEL_EDIT</h3>
1026
            </div>
1 www 1027
 
1028
            <!-- Modal body -->
15333 stevensc 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>
1 www 1051
 
15333 stevensc 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>
1 www 1064
</div>
1065
 
1066
 
1067
 
1068
<!-- The Modal -->
1069
<div class="modal" id="modalChangePassword">
15333 stevensc 1070
    <div class="modal-dialog">
1071
        <div class="modal-content">
1 www 1072
 
1073
            <!-- Modal Header -->
15333 stevensc 1074
            <div class="modal-header">
1075
                <h3 class="modal-title">LABEL_USERS</h3>
1076
            </div>
1 www 1077
 
1078
            <!-- Modal body -->
15333 stevensc 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
                ]);
1 www 1087
 
15333 stevensc 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']);
1 www 1096
 
15333 stevensc 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']);
1 www 1106
 
15333 stevensc 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']);
1 www 1116
 
15333 stevensc 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']);
1 www 1126
 
15333 stevensc 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']);
1 www 1136
 
15333 stevensc 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>