Arreglados gestion de usuarios y roles

This commit is contained in:
imnavajas
2024-05-07 17:19:01 +02:00
parent 6fb370ee30
commit bdf605b26f
30 changed files with 1194 additions and 1210 deletions

View File

@ -1,246 +0,0 @@
<!--Style-->
<link rel="stylesheet" href="<?= site_url("themes/focus2/vendor/chartist/css/chartist.min.css") ?>">
<style>
.ct-series-a .ct-bar, .ct-series-a .ct-line, .ct-series-a .ct-point, .ct-series-a,.bg-char-lead{
stroke: #6b51df;
}
.ct-series-b .ct-bar, .ct-series-b .ct-line, .ct-series-b .ct-point, .ct-series-b,.bg-char-conversion{
stroke: limegreen;
}
.ct-series-c .ct-bar, .ct-series-c .ct-line, .ct-series-c .ct-point, .ct-series-c,.bg-char-disengaged{
stroke: #ff004d;
}
.ct-pie-chart .ct-label {
fill: rgb(255 255 255);
color: rgb(255 255 255);
font-size: .70rem;
line-height: 1;
}
.ct-icon {
height: 23px;
width: 23px;
margin-right: 5px;
float: left;
}
</style>
<!--Content Body-->
<div class="content-body">
<div class="container-fluid">
<div class="row page-titles mx-0">
<div class="col-sm-6 p-md-0">
<div class="welcome-text">
<h4><i class="<?= $title['icon']??'' ?>"></i> <?= $title['module']??'' ?></h4>
<span class="ml-1"><?= $title['page']??'' ?></span>
</div>
</div>
<div class="col-sm-6 p-md-0 justify-content-sm-end mt-2 mt-sm-0 d-flex">
<ol class="breadcrumb">
<?php foreach ($breadcrumb??[] as $item) : ?>
<?php if (!$item['active']) : ?>
<li class="breadcrumb-item"><a href="<?= site_url($item['route']) ?>"><?= $item['title'] ?></a></li>
<?php else : ?>
<li class="breadcrumb-item active"><?= $item['title'] ?></li>
<?php endif; ?>
<?php endforeach; ?>
</ol>
</div>
</div>
<div class="row">
<div class="col-lg-3 col-sm-6">
<div class="card">
<div class="stat-widget-one card-body">
<div class="d-inline-block">
<i class="fas fa-users text-pink fa-3x"></i>
</div>
<div class="stat-content d-inline-block">
<div class="stat-text text-pink"><?=strtoupper(lang("App.dashboard_user_total"))?></div>
<div class="stat-digit"><?=$total_user??'0'?></div>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-sm-6">
<div class="card">
<div class="stat-widget-one card-body">
<div class="d-inline-block">
<i class="fas fa-user-friends text-pink fa-3x"></i>
</div>
<div class="stat-content d-inline-block">
<div class="stat-text text-pink"><?=strtoupper(lang("App.dashboard_user_new"))?></div>
<div class="stat-digit"><?=$total_new??'0'?></div>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-sm-6">
<div class="card">
<div class="stat-widget-one card-body">
<div class="d-inline-block">
<i class="fas fa-user-check text-pink fa-3x"></i>
</div>
<div class="stat-content d-inline-block">
<div class="stat-text text-pink"><?=strtoupper(lang("App.dashboard_user_enabled"))?></div>
<div class="stat-digit"><?=$total_enabled??'0'?></div>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-sm-6">
<div class="card">
<div class="stat-widget-one card-body">
<div class="d-inline-block">
<i class="fas fa-user-times text-pink fa-3x"></i>
</div>
<div class="stat-content d-inline-block">
<div class="stat-text text-pink"><?=strtoupper(lang("App.dashboard_user_disabled"))?></div>
<div class="stat-digit"><?=$total_disabled??'0'?></div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-8">
<div class="card">
<div class="card-header">
<h4 class="card-title"><?=lang("App.dashboard_chart_history")?></h4>
<span><i class="fas fa-square" style="color: #6b51df"></i> <?=lang("App.dashboard_user_total")?> <i class="fas fa-square" style="color: limegreen"></i> <?=lang("App.dashboard_user_enabled")?> <i class="fas fa-square" style="color: #ff004d"></i> <?=lang("App.dashboard_user_disabled")?></span>
</div>
<div class="card-body">
<div class="ct-bar-chart mt-5"></div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="card">
<div class="card-header">
<h4 class="card-title"><?=lang("App.dashboard_grid_user")?></h4>
</div>
<div class="card-body">
<div class="table-responsive" style="max-height: 300px; overflow-y: auto;">
<table class="table" id="table-grid" >
<tbody>
<?php foreach ($data_user??[] as $item) : ?>
<tr>
<td style="height: 56px; text-align: center;">
<img src="<?= $item['picture']??''?>" class="btn-circle btn-circle-sm">
</td>
<td>
<b><?= $item['first_name']??''?> <?= $item['last_name']??''?></b><br>
<?= $item['email']??''?><br>
<span class="timeAgo"><?= $item['created_at']??'' ?></span>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-8">
<div class="card">
<div class="card-header">
<h4 class="card-title"><?=lang("App.dashboard_grid_access")?></h4>
</div>
<div class="card-body">
<div class="table-responsive" style="max-height: 370px; overflow-y: auto;">
<table class="table" id="table-grid">
<thead class="text-primary">
<tr>
<th><?=lang("App.dashboard_user")?></th>
<th><?=lang("App.dashboard_email")?></th>
<th><?=lang("App.dashboard_created_at")?></th>
</tr>
</thead>
<tbody>
<?php foreach ($data_activity??[] as $item) : ?>
<?php $data = json_decode($item['detail'],true); ?>
<tr>
<td><?= $item['first_name']??''?></td>
<td><?= $item['email']??''?></td>
<td><span class="timeAgo"><?= $item['created_at']??'' ?></span> </td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Required vendors -->
<script src="<?=site_url("themes/focus2/vendor/global/global.min.js")?>"></script>
<script src="<?=site_url("themes/focus2/js/quixnav-init.js")?>"></script>
<script src="<?=site_url("themes/focus2/js/custom.min.js")?>"></script>
<!-- Form -->
<script src="<?=site_url("themes/focus2/vendor/chartist/js/chartist.min.js")?>"></script>
<script src="<?=site_url("themes/focus2/vendor/moment/moment.min.js")?>"></script>
<script src="<?=site_url("themes/focus2/vendor/pg-calendar/js/pignose.calendar.min.js")?>"></script>
<script src="<?=site_url("themes/focus2/vendor/sweetalert2/dist/sweetalert2.min.js")?>"></script>
<script>
"use strict";
$(document).ready(function () {
let dataPie = <?= $data_char_pie??'{}' ?>;
let labels = dataPie['labels'];
let icons = document.getElementById("ct-icon-chart").innerHTML;
for (let i = 0; i < labels.length; i++) {
switch (labels[i].toLowerCase()) {
case 'vkontakte':
icons += '<p class="btn-vk btn-circle ct-icon"><i class="fab fa-vk mt-1 ml-1"></i></p>';
break;
case 'wechat':
icons += '<p class="btn-wechat btn-circle ct-icon"><i class="fab fa-weixin mt-1 ml-1"></i></p>';
break;
case 'google':
icons += '<p class="btn-'+labels[i].toLowerCase()+'-plus btn-circle ct-icon"><i class="fab fa-'+labels[i].toLowerCase()+' mt-1 ml-1"></i></p>';
break;
default:
icons += '<p class="btn-'+labels[i].toLowerCase()+' btn-circle ct-icon"><i class="fab fa-'+labels[i].toLowerCase()+' mt-1 ml-1"></i></p>';
}
}
document.getElementById("ct-icon-chart").innerHTML = icons;
let optionsPie = {
labelInterpolationFnc: function(value) {
return value[0]+value[1]+value[2]
}
};
let responsiveOptionsPie = [
['screen and (min-width: 640px)', {
chartPadding: 30,
labelOffset: 100,
labelDirection: 'explode',
labelInterpolationFnc: function(value) {
return value;
}
}],
['screen and (min-width: 1024px)', {
labelOffset: 0,
chartPadding: 10
}]
];
new Chartist.Pie('.ct-pie-chart', dataPie, optionsPie, responsiveOptionsPie);
let dataBar = <?= $data_char_bar??'{}' ?>;
let optionsBar = {
seriesBarDistance: 10
};
let responsiveOptionsBar = [
['screen and (max-width: 640px)', {
seriesBarDistance: 5,
axisX: {
labelInterpolationFnc: function(value) {
return value[0];
}
}
}]
];
new Chartist.Bar('.ct-bar-chart', dataBar, optionsBar, responsiveOptionsBar);
});
</script>
<?= sweetAlert() ?>

View File

@ -1,12 +0,0 @@
<!--Content Body-->
<div class="content-body"></div>
<!-- Required vendors -->
<script src="<?=site_url("themes/focus2/vendor/global/global.min.js")?>"></script>
<script src="<?=site_url("themes/focus2/js/quixnav-init.js")?>"></script>
<script src="<?=site_url("themes/focus2/js/custom.min.js")?>"></script>
<script src="<?=site_url("themes/focus2/vendor/sweetalert2/dist/sweetalert2.min.js")?>"></script>
<script>
"use strict";
$(document).ready(function () {
});
</script>

View File

@ -1,29 +0,0 @@
<div class="content-body">
<div class="container-fluid">
<div class="row page-titles mx-0">
<div class="col-sm-6 p-md-0">
<div class="welcome-text">
<h4><i class="<?= $title['icon']??'' ?>"></i> <?= $title['module']??'' ?></h4>
<span class="ml-1"><?= $title['page']??'' ?></span>
</div>
</div>
<div class="col-sm-6 p-md-0 justify-content-sm-end mt-2 mt-sm-0 d-flex">
<ol class="breadcrumb">
<?php foreach ($breadcrumb??[] as $item) : ?>
<?php if (!$item['active']) : ?>
<li class="breadcrumb-item"><a href="<?= site_url($item['route']) ?>"><?= $item['title'] ?></a></li>
<?php else : ?>
<li class="breadcrumb-item active"><?= $item['title'] ?></li>
<?php endif; ?>
<?php endforeach; ?>
</ol>
</div>
</div>
</div>
</div>
<!-- Required vendors -->
<script src="<?=site_url("themes/focus2/vendor/global/global.min.js")?>"></script>
<script src="<?=site_url("themes/focus2/js/quixnav-init.js")?>"></script>
<script src="<?=site_url("themes/focus2/js/custom.min.js")?>"></script>
<script src="<?=site_url("themes/focus2/vendor/sweetalert2/dist/sweetalert2.min.js")?>"></script>
<?= sweetAlert() ?>

View File

@ -68,7 +68,7 @@
<?php foreach ($permiso->rules as $key => $rules): ?>
<tr>
<td class="text-nowrap fw-semibold" >
&emsp;&emsp;<?= lang("RolesPermisos." . $key . "Section") ?>
&emsp;&emsp;<?= lang("RolesPermisos." . convertToCamelCase($key) . "Section") ?>
</td>
<?php foreach ($rules as $rule): ?>
<td>

View File

@ -1,172 +1,77 @@
<div class="row">
<div class="col-md-12 col-lg-6 px-4">
<div class="row">
<div class="col-md-12 col-lg-6 px-4">
<div class="mb-3">
<label for="firstName" class="form-label">
<?=lang('Users.firstName') ?>
</label>
<input tabindex="1" type="text" id="firstName" name="first_name" maxLength="150" class="form-control" value="<?=old('first_name', $user->first_name) ?>">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="firstName" class="form-label">
<?= lang('Users.firstName') ?>
</label>
<input tabindex="1" type="text" id="firstName" name="first_name" maxLength="150" class="form-control"
value="<?= old('first_name', $user->first_name) ?>">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="address" class="form-label">
<?=lang('Users.address') ?>
</label>
<input tabindex="3" type="text" id="address" name="address" maxLength="255" class="form-control" value="<?=old('address', $user->address) ?>">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="email" class="form-label">
<?= lang('Users.email') ?>*
</label>
<input tabindex="13" type="email" id="email" name="email" maxLength="150" class="form-control"
value="<?= old('email', $user->email) ?>">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="state" class="form-label">
<?=lang('Users.state') ?>
</label>
<input tabindex="5" type="text" id="state" name="state" maxLength="255" class="form-control" value="<?=old('state', $user->state) ?>">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="country" class="form-label">
<?=lang('Users.country') ?>
</label>
<select tabindex="7" id="country" name="country" class="select2 form-control " style="width: 100%;" >
<option value=""><?=lang('Basic.global.pleaseSelectA', [lang('Users.country')]) ?></option>
<?php foreach ($paisList as $item) : ?>
<option value="<?=$item->code ?>"<?=$item->code==$user->country ? ' selected':'' ?> >
<?=$item->nombre ?>
</option>
<?php endforeach; ?>
</select>
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="dateBirth" class="form-label">
<?=lang('Users.dateBirth') ?>
</label>
<input tabindex="9" type="date" id="dateBirth" name="date_birth" maxLength="10" class="form-control" value="<?=old('date_birth', $user->date_birth) ?>">
</div><!--//.mb-3 -->
<div class="mb-3">
<div class="form-group">
<label for="group" class="form-label"> <?= lang('Users.group') ?></label>
<select tabindex="17" name="group[]" id="group" multiple="multiple"
class="form-control select2 form-select">
<option value=""><?= lang('Basic.global.pleaseSelectA', [lang('Users.group')]) ?></option>
<?php
$selectedGroups = isset($selectedGroups) && is_array($selectedGroups) ? $selectedGroups : [];
$selectedKeywords = array_map(fn($group) => $group->group, $selectedGroups);
foreach ($groups as $item) :
$isSelected = in_array($item->keyword, $selectedKeywords) ? 'selected' : '';
?>
<option value="<?= $item->keyword ?>"
data-select2-id=<?= $item->keyword ?> <?= $isSelected ?>>
<?= $item->title ?>
</option>
<?php endforeach; ?>
</select>
</div>
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="mobile" class="form-label">
<?=lang('Users.mobile') ?>
</label>
<input tabindex="11" type="text" id="mobile" name="mobile" maxLength="50" class="form-control" value="<?=old('mobile', $user->mobile) ?>">
</div><!--//.mb-3 -->
</div><!--//.col -->
<div class="col-md-12 col-lg-6 px-4">
<div class="mb-3">
<label for="email" class="form-label">
<?=lang('Users.email') ?>*
</label>
<input tabindex="13" type="email" id="email" name="email" maxLength="150" class="form-control" value="<?=old('email', $user->email) ?>">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="lastName" class="form-label">
<?= lang('Users.lastName') ?>
</label>
<input tabindex="2" type="text" id="lastName" name="last_name" maxLength="150" class="form-control"
value="<?= old('last_name', $user->last_name) ?>">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="password" class="form-label">
<?=lang('Users.password') ?>*
</label>
<input tabindex="15" type="password" id="password" name="password" maxLength="35" class="form-control" value="<?=old('password', $user->password) ?>">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="status" class="form-label">
<?= lang('Users.blocked') ?>
</label>
<?php $isBanned = old('blocked', $user->status); ?>
<select tabindex="12" name="status" id="status" class="select2 form-control">
<option value="0" <?= is_null($isBanned) ? 'selected' : '' ?>><?= lang("Users.non_blocked") ?></option>
<option value="1" <?= $isBanned === "banned" ? 'selected' : '' ?>><?= lang("Users.blocked") ?></option>
</select>
</div>
<div class="mb-3">
<div class="form-group">
<label for="group" class="form-label"> <?=lang('Users.group') ?></label>
<select tabindex="17" name="group[]" id="group" multiple="multiple" class="form-control select2 form-select">
<option value=""><?=lang('Basic.global.pleaseSelectA', [lang('Users.group')]) ?></option>
<?php foreach ($groups as $item) : ?>
<?php if (isset($selectedGroups) && sizeof($selectedGroups)>=1): ?>
<?php foreach ($selectedGroups as $selItem) : ?>
<option value="<?=$item->token ?>" data-select2-id=<?=$item->token ?> <?=$item->token==$selItem['token_group']?'selected':'' ?>> <?= $item->title ?>
</option>
<?php endforeach; ?>
<?php else: ?>
<option value="<?=$item->token ?>" data-select2-id=<?=$item->token ?> > <?= $item->title ?>
</option>
<?php endif ?>
<?php endforeach; ?>
</select>
</div>
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="active" class="form-label">
<?= lang('Users.status') ?>
</label>
<?php $isActive = old('status', $user->active); ?>
<select tabindex="16" name="active" id="active" class="select2 form-control">
<option value="1" <?= $isActive ? 'selected' : '' ?>><?= lang("Users.global_active") ?></option>
<option value="0" <?= $isActive ? '' : 'selected' ?>><?= lang("Users.global_inactive") ?></option>
</select>
</div><!--//.mb-3 -->
</div><!--//.col -->
</div><!--//.col -->
<div class="col-md-12 col-lg-6 px-4">
<div class="mb-3">
<label for="lastName" class="form-label">
<?=lang('Users.lastName') ?>
</label>
<input tabindex="2" type="text" id="lastName" name="last_name" maxLength="150" class="form-control" value="<?=old('last_name', $user->last_name) ?>">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="city" class="form-label">
<?=lang('Users.city') ?>
</label>
<input tabindex="4" type="text" id="city" name="city" maxLength="255" class="form-control" value="<?=old('city', $user->city) ?>">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="zipCode" class="form-label">
<?=lang('Users.zipCode') ?>
</label>
<input tabindex="6" type="text" id="zipCode" name="zip_code" maxLength="50" class="form-control" value="<?=old('zip_code', $user->zip_code) ?>">
</div><!--//.mb-3 -->
<div class="mb-3">
<div class="form-group">
<label for="language" class="text-dark"><?=lang("Users.language")?></label>
<?php $id_select = old('language', $user->language);?>
<select tabindex="8" name="language" id="language" class="form-control">
<option value=""><?=lang("App.global_select")?></option>
<option value="en" <?= $id_select == "en" ? 'selected' : '' ?>><?=lang("App.lang_en")?></option>
<option value="es" <?= $id_select == "es" ? 'selected' : '' ?>><?=lang("App.lang_es")?></option>
</select>
</div>
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="picture" class="form-label">
<?=lang('Users.picture') ?>
</label>
<input tabindex="10" type="text" id="picture" name="picture" placeholder="/assets/img/default-user.png" maxLength="150" class="form-control" value="<?=old('picture', $user->picture) ?>">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="blocked" class="form-label">
<?=lang('Users.blocked') ?>
</label>
<?php $id_select = old('blocked', $user->blocked);?>
<select tabindex="12" name="blocked" id="blocked" class="select2 form-control">
<option value="0" <?= $id_select == "0" ? 'selected' : '' ?>><?=lang("Users.non_blocked")?></option>
<option value="1" <?= $id_select == "1" ? 'selected' : '' ?>><?=lang("Users.blocked")?></option>
</select>
</div>
<div class="mb-3">
<label for="emailConfirmed" class="form-label">
<?=lang('Users.emailConfirmed') ?>*
</label>
<?php $id_select = old('email_confirmed', $user->email_confirmed);?>
<select tabindex="14" name="email_confirmed" id="email_confirmed" class="select2 form-control">
<option value="0" <?= $id_select == "0" ? 'selected' : '' ?>><?=lang("Users.email_not_confirmed")?></option>
<option value="1" <?= $id_select == "1" ? 'selected' : '' ?>><?=lang("Users.email_confirmed")?></option>
</select>
</div>
<div class="mb-3">
<label for="status" class="form-label">
<?=lang('Users.status') ?>
</label>
<?php $id_select = old('status', $user->status);?>
<select tabindex="16" name="status" id="status" class="select2 form-control">
<option value="1" <?= $id_select == "1" ? 'selected' : '' ?>><?=lang("Users.global_active")?></option>
<option value="0" <?= $id_select == "0" ? 'selected' : '' ?>><?=lang("Users.global_inactive")?></option>
</select>
</div><!--//.mb-3 -->
</div><!--//.col -->
</div><!-- //.row -->
</div><!-- //.row -->