Proyectos de Subversion LeadersLinked - Backend

Rev

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