Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16768 | Rev 16822 | 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'));
15460 efrain 57
$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap-fileinput/themes/explorer-fa/theme.css'));
1 www 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'));
15460 efrain 63
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-fileinput/themes/fa/theme.js'));
64
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-fileinput/themes/explorer-fa/theme.js'));
1 www 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
 
15460 efrain 500
    var validatorUploadUsers = $('#form-upload-users').validate({
1 www 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>';
15460 efrain 547
                        s = s + '<td>' + item['is_adult'] + '</td>';
1 www 548
                        s = s + '</tr>';
549
 
550
                        $('#gridTableUploadUsers tbody').append(s);
551
 
552
 
553
                    });
554
 
555
                    $('#modalFormUploadUsers').modal('hide');
556
                    $('#modalUploadUsers').modal('show');
557
 
558
 
559
 
560
                } else {
15460 efrain 561
                    validatorUploadUsers.resetForm();
1 www 562
                    if(jQuery.type(response['data']) == 'string') {
563
                        $.fn.showError(response['data']);
564
                    } else  {
565
                        $.each(response['data'], function( fieldname, errors ) {
566
                            $.fn.showFormErrorValidator('#form-upload-users #' + fieldname, errors);
567
                        });
568
                    }
569
                }
570
            }).fail(function( jqXHR, textStatus, errorThrown) {
571
                $.fn.showError(textStatus);
572
            }).always(function() {
573
 
574
                NProgress.done();
575
            });
576
            return false;
577
        },
578
        invalidHandler: function(form, validator) {
579
 
580
        }
581
    });
582
 
583
 
584
    $('#form-upload-users #file').fileinput({
15460 efrain 585
        theme: 'fa',
1 www 586
        language: 'es',
587
        showUpload: false,
588
        dropZoneEnabled: false,
589
        maxFileCount: 1,
590
        allowedFileExtensions: ['xls', 'xlsx'],
591
    });
592
 
593
    $('body').on('click', 'button.btn-upload', function(e) {
594
        e.preventDefault();
595
 
596
        $('#form-upload-users #file').fileinput('reset');
597
        $('#form-upload-users #file').val('');
598
 
599
        $('#modalFormUploadUsers').modal('show');
600
    });
601
 
602
    $('body').on('click', 'button.btn-upload-users-step2', function(e) {
603
        e.preventDefault();
604
        NProgress.start();
605
 
606
        $.ajax({
607
            'dataType'  : 'json',
608
            'accept'    : 'application/json',
609
            'method'    : 'post',
610
            'url'       : '$routeUpload',
611
            'data'      :  {
612
                'step' : 'process',
613
                'key' : $('#table-upload-users-key').val(),
614
            }
615
        }).done(function(response) {
616
            if(response['success']) {
15460 efrain 617
                if(response['data']['users_created'] == 1) {
618
                    $.fn.showSuccess(response['data']['users_created'] + ' LABEL_USER_CREATED');
1 www 619
                } else {
15460 efrain 620
                    $.fn.showSuccess(response['data']['users_created'] + ' LABEL_USERS_CREATED');
1 www 621
                }
622
                 gridTable.api().ajax.reload(null, false);
623
                $('#modalUploadUsers').modal('hide');
624
            } else {
625
                $.fn.showError(response['data']);
626
            }
627
        }).fail(function( jqXHR, textStatus, errorThrown) {
628
            $.fn.showError(textStatus);
629
        }).always(function() {
630
            NProgress.done();
631
        });
632
        return false;
633
    });
634
 
635
    $('body').on('click', 'button.btn-edit', function(e) {
636
        e.preventDefault();
637
 
638
        var href = $(this).data('href');
639
        $('#form-edit').attr('action', href);
640
 
641
        NProgress.start();
642
        $.ajax({
643
            'dataType'  : 'json',
644
            'accept'    : 'application/json',
645
            'method'    : 'get',
646
            'url'       :  href,
647
        }).done(function(response) {
648
            if(response['success']) {
649
                $('#form-edit #backend').prop('checked', response['data']['backend'] );
650
                $('#table-roles tbody').empty();
651
 
652
                $.each(response['data']['roles'], function(index, role) {
653
 
654
                    var checked = role['checked'] ? ' checked="checked" ' : '';
655
                    var s = '<tr>';
656
                    s = s + '<td>' + role['name'] + '</td>';
657
 
658
                    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>';
659
                    s = s + '</tr>';
660
 
661
                    $('#table-roles tbody').append(s);
662
 
663
                });
664
 
665
                $('#modalEdit').modal('show');
666
 
667
            } else {
668
                $.fn.showError(response['data']);
669
            }
670
        }).fail(function( jqXHR, textStatus, errorThrown) {
671
            $.fn.showError(textStatus);
672
        }).always(function() {
673
            NProgress.done();
674
        });
675
 
676
    });
677
 
678
    $('#form-edit').submit(function (e) {
679
        e.preventDefault();
680
        NProgress.start();
681
        $.ajax({
682
            'dataType'  : 'json',
683
            'accept'    : 'application/json',
684
            'method'    : 'post',
685
            'url'       : $('#form-edit').attr('action'),
686
            'data'      : $('#form-edit').serialize(),
687
        }).done(function(response) {
688
            if(response['success']) {
689
 
690
                $.fn.showSuccess(response['data']);
691
                $('#modalEdit').modal('hide');
692
                gridTable.api().ajax.reload(null, false);
693
 
694
            } else {
695
                $.fn.showError(response['data']);
696
            }
697
        }).fail(function( jqXHR, textStatus, errorThrown) {
698
            $.fn.showError(textStatus);
699
        }).always(function() {
700
            NProgress.done();
701
        });
702
        return false;
703
 
704
    });
705
 
706
    $('body').on('click', 'button.btn-cancel-modal', function(e) {
707
        e.preventDefault();
708
        $('#modalInvite').modal('hide');
709
        $('#modalFormUploadUsers').modal('hide');
710
        $('#modalEdit').modal('hide');
711
        $('#modalChangePassword').modal('hide');
712
    });
713
 
714
    var validatorChangePassword = $('#form-change-password').validate({
715
        debug: true,
716
        onclick: false,
717
        onkeyup: false,
718
        ignore: [':hidden'],
719
            rules: {
720
 
721
                'password': {
722
                    required: true,
723
                    minlength: 6,
724
                    maxlength: 16,
725
                    passwordStrengthCheck: true,
726
                },
727
                'confirmation' : {
728
                    required: true,
729
                    minlength: 6,
730
                    maxlength: 16,
731
                    equalTo: '#form-change-password #password'
732
                },
733
            },
734
            submitHandler: function(form)
735
            {
736
                NProgress.start();
737
                $.ajax({
738
                    'dataType'  : 'json',
739
                    'accept'    : 'application/json',
740
                    'method'    : 'post',
741
                    'url'       : $('#form-change-password').attr('action'),
742
                    'data'      : $('#form-change-password').serialize()
743
                 }).done(function(response) {
744
                    if(response.success) {
745
                        $.fn.showSuccess(response.data);
746
 
747
                        $('#modalChangePassword').modal('hide');
748
                         gridTable.api().ajax.reload(null, false);
749
                    } else {
750
                        if(jQuery.type(response.data) == 'string') {
751
                            $.fn.showError(response.data)
752
                        } else  {
753
                            $.each(response.data, function( fieldname, errors ) {
754
                                $.fn.showFormErrorValidator('#form-change-password #' + fieldname, errors);
755
                            });
756
                        }
757
                    }
758
                }).fail(function( jqXHR, textStatus, errorThrown) {
759
                    $.fn.showError(textStatus)
760
 
761
                }).always(function() {
762
                    NProgress.done();
763
                })
764
            },
765
            invalidHandler: function(form, validator) {
766
            }
767
        });
768
 
769
        $('body').on('click', 'button.btn-change-password', function(e) {
770
            e.preventDefault();
771
 
772
            NProgress.start();
773
            var action = $(this).data('href');
774
 
775
            $.ajax({
776
                'dataType'  : 'json',
777
                'accept'    : 'application/json',
778
                'method'    : 'get',
779
                'url'       :  action,
780
            }).done(function(response) {
781
                if(response['success']) {
782
 
783
                    $('#form-change-password').attr('action', action);
784
                    $('#form-change-password #first_name').val(response['data']['first_name']);
785
                    $('#form-change-password #last_name').val(response['data']['last_name']);
786
                    $('#form-change-password #email').val(response['data']['email']);
787
                    $('#form-change-password #password').val('');
788
                    $('#form-change-password #confirmation').val('');
789
                    validatorChangePassword.resetForm();
790
 
791
                    $('#modalChangePassword').modal('show');
792
                } else {
793
                    $.fn.showError(response['data']);
794
                }
795
            }).fail(function( jqXHR, textStatus, errorThrown) {
796
                $.fn.showError(textStatus);
797
            }).always(function() {
798
                NProgress.done();
799
            });
800
 
801
        });
802
 
803
 
804
 
805
    });
806
JS;
807
$this->inlineScript()->captureEnd();
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">
15460 efrain 815
                <h1>LABEL_USERS_FOR_COMPANY</h1>
15333 stevensc 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
16816 stevensc 953
 
954
 
955
 
956
 
16768 efrain 957
                        $element->setAttributes(['class' => 'form-control', 'accept' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel']);
1 www 958
                        echo $this->formFile($element);
959
                        ?>
15333 stevensc 960
                    </div>
961
                </div>
1 www 962
 
963
 
964
 
15333 stevensc 965
                <div class="form-group">
966
                    <button type="submit" class="btn btn-sm btn-primary">LABEL_UPLOAD</button>
967
                    <button type="button" class="btn btn-sm btn-light btn-cancel-modal">LABEL_CANCEL</button>
968
                </div>
969
                <?php echo $this->form()->closeTag($form); ?>
970
            </div>
1 www 971
 
15333 stevensc 972
        </div>
973
    </div>
974
</div>
1 www 975
 
976
 
15333 stevensc 977
 
1 www 978
<!-- The Modal -->
979
<div class="modal" id="modalUploadUsers">
15333 stevensc 980
    <div class="modal-dialog modal-xl">
981
        <div class="modal-content">
1 www 982
 
983
            <!-- Modal Header -->
15333 stevensc 984
            <div class="modal-header">
15460 efrain 985
                <h3 class="modal-title">LABEL_USERS_FOR_COMPANY</h3>
15333 stevensc 986
                <button type="button" class="close" data-dismiss="modal">&times;</button>
987
            </div>
1 www 988
 
989
            <!-- Modal body -->
15333 stevensc 990
            <div class="modal-body">
991
                <form>
992
                    <input type="hidden" name="table-upload-users-key" id="table-upload-users-key">
993
                </form>
994
                <div style="height: 300px;overflow: scroll;">
995
                    <table id="gridTableUploadUsers" style="width: 100%" class="table table-bordered table-hover">
996
                        <thead>
997
                            <tr>
998
                                <th>LABEL_FIRST_NAME</th>
999
                                <th>LABEL_LAST_NAME</th>
1000
                                <th>LABEL_EMAIL</th>
1001
                                <th>LABEL_PASSWORD</th>
15460 efrain 1002
                                <th>LABEL_IS_ADULT</th>
15333 stevensc 1003
                            </tr>
1004
                        </thead>
1005
                        <tbody>
1006
                        </tbody>
1007
                    </table>
1008
                </div>
1 www 1009
 
15333 stevensc 1010
            </div>
1011
 
1 www 1012
            <!-- Modal footer -->
15333 stevensc 1013
            <div class="modal-footer">
1014
                <button type="submit" class="btn btn-sm btn-primary btn-upload-users-step2">LABEL_SAVE</button>
1015
                <button type="button" class="btn btn-sm btn-danger" data-dismiss="modal">LABEL_CLOSE</button>
1016
            </div>
1 www 1017
 
15333 stevensc 1018
        </div>
1019
    </div>
1020
</div>
1 www 1021
 
1022
 
1023
<!-- The Modal -->
1024
<div class="modal" id="modalEdit">
15333 stevensc 1025
    <div class="modal-dialog  modal-xl">
1026
        <div class="modal-content">
1 www 1027
 
1028
            <!-- Modal Header -->
15333 stevensc 1029
            <div class="modal-header">
15460 efrain 1030
                <h3 class="modal-title">LABEL_USER_FOR_COMPANY - LABEL_EDIT</h3>
15333 stevensc 1031
            </div>
1 www 1032
 
1033
            <!-- Modal body -->
15333 stevensc 1034
            <div class="modal-body">
1035
                <form name="form-edit" id="form-edit">
1036
                    <div class="row">
1037
                        <div class="col-md-12 col-sm-12">
1038
                            <div class="form-group">
1039
                                <label for="backend">LABEL_ACCESS_BACKEND</label>
1040
                                <input type="checkbox" name="backend" id="backend" value="y" class="form-control" style="width: 20px; height: 20px">
1041
                            </div>
1042
                        </div>
1043
                    </div>
1044
                    <div class="row">
1045
                        <div class="col-md-12 col-sm-12">
1046
                            <table id="table-roles" class="table table-bordered table-hover">
1047
                                <thead>
1048
                                    <tr>
1049
                                        <th>LABEL_NAME</th>
1050
                                        <th>LABEL_ACTIVE</th>
1051
                                    </tr>
1052
                                </thead>
1053
                                <tbody>
1054
                                </tbody>
1055
                            </table>
1 www 1056
 
15333 stevensc 1057
                        </div>
1058
                    </div>
1059
 
1060
                    <div class="form-group">
1061
                        <button type="submit" class="btn btn-sm btn-primary">LABEL_SAVE</button>
1062
                        <button type="button" class="btn btn-sm btn-light btn-cancel-modal">LABEL_CANCEL</button>
1063
                    </div>
1064
                </form>
1065
            </div>
1066
 
1067
        </div>
1068
    </div>
1 www 1069
</div>
1070
 
1071
 
1072
 
1073
<!-- The Modal -->
1074
<div class="modal" id="modalChangePassword">
15333 stevensc 1075
    <div class="modal-dialog">
1076
        <div class="modal-content">
1 www 1077
 
1078
            <!-- Modal Header -->
15333 stevensc 1079
            <div class="modal-header">
1080
                <h3 class="modal-title">LABEL_USERS</h3>
1081
            </div>
1 www 1082
 
1083
            <!-- Modal body -->
15333 stevensc 1084
            <div class="modal-body">
1085
                <?php
1086
                $form = $this->formChangePassword;
1087
                $form->setAttributes([
1088
                    'method'    => 'post',
1089
                    'name'      => 'form-change-password',
1090
                    'id'        => 'form-change-password'
1091
                ]);
1 www 1092
 
15333 stevensc 1093
                $form->prepare();
1094
                echo $this->form()->openTag($form);
1095
                ?>
1096
                <div class="form-group">
1097
                    <?php
1098
                    $element = $form->get('first_name');
1099
                    $element->setOptions(['label' => 'LABEL_FIRST_NAME']);
1100
                    $element->setAttributes(['class' => 'form-control', 'readonly' => 'readonly']);
1 www 1101
 
15333 stevensc 1102
                    echo $this->formLabel($element);
1103
                    echo $this->formText($element);
1104
                    ?>
1105
                </div>
1106
                <div class="form-group">
1107
                    <?php
1108
                    $element = $form->get('last_name');
1109
                    $element->setOptions(['label' => 'LABEL_LAST_NAME']);
1110
                    $element->setAttributes(['class' => 'form-control', 'readonly' => 'readonly']);
1 www 1111
 
15333 stevensc 1112
                    echo $this->formLabel($element);
1113
                    echo $this->formText($element);
1114
                    ?>
1115
                </div>
1116
                <div class="form-group">
1117
                    <?php
1118
                    $element = $form->get('email');
1119
                    $element->setOptions(['label' => 'LABEL_EMAIL']);
1120
                    $element->setAttributes(['class' => 'form-control', 'readonly' => 'readonly']);
1 www 1121
 
15333 stevensc 1122
                    echo $this->formLabel($element);
1123
                    echo $this->formText($element);
1124
                    ?>
1125
                </div>
1126
                <div class="form-group">
1127
                    <?php
1128
                    $element = $form->get('password');
1129
                    $element->setOptions(['label' => 'LABEL_PASSWORD']);
1130
                    $element->setAttributes(['class' => 'form-control']);
1 www 1131
 
15333 stevensc 1132
                    echo $this->formLabel($element);
1133
                    echo $this->formPassword($element);
1134
                    ?>
1135
                </div>
1136
                <div class="form-group">
1137
                    <?php
1138
                    $element = $form->get('confirmation');
1139
                    $element->setOptions(['label' => 'LABEL_CONFIRMATION']);
1140
                    $element->setAttributes(['class' => 'form-control']);
1 www 1141
 
15333 stevensc 1142
                    echo $this->formLabel($element);
1143
                    echo $this->formPassword($element);
1144
                    ?>
1145
                </div>
1146
 
1147
 
1148
                <div class="form-group">
1149
                    <button type="submit" class="btn btn-sm btn-primary">LABEL_SAVE</button>
1150
                    <button type="button" class="btn btn-sm btn-light btn-cancel-modal">LABEL_CANCEL</button>
1151
                </div>
1152
                <?php echo $this->form()->closeTag($form); ?>
1153
            </div>
1154
 
1155
        </div>
1156
    </div>
1157
</div>