Proyectos de Subversion LeadersLinked - Backend

Rev

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