Igualando a rama dev/formateando

This commit is contained in:
imnavajas
2023-05-16 10:49:31 +02:00
parent ea0c714550
commit ec2835ad59
18 changed files with 294 additions and 892 deletions

58
.idea/workspace.xml generated
View File

@ -5,13 +5,31 @@
</component>
<component name="ChangeListManager">
<list default="true" id="7c8f7059-cd40-417c-936e-48dbc0507d86" name="Changes" comment="Add static Vuexy files">
<change afterPath="$PROJECT_DIR$/httpdocs/themes/vuexy/vendor/libs/toastr/toastr.min.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Config/Boot/development.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Config/Boot/development.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Config/Routes.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Config/Routes.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Controllers/Integration.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Controllers/Integration.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Controllers/Login.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Controllers/Login.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Helpers/general_helper.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Helpers/general_helper.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Language/es/App.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Language/es/App.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Config/App.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Config/App.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Config/Email.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Config/Email.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Controllers/GoBaseController.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Controllers/GoBaseController.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Controllers/Home.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Controllers/Home.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Controllers/Settings.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Controllers/Settings.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Filters/LoginAuthFilter.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Filters/LoginAuthFilter.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Language/en/App.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Language/en/App.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Language/es-ES/Tarifaaacabado.php" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/_commonPartialsBs/datatables.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/_commonPartialsBs/datatables.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/_commonPartialsBs/select2bs5.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/_commonPartialsBs/select2bs5.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/group/viewUserGroupForm.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/group/viewUserGroupForm.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/group/viewUserGroupList.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/group/viewUserGroupList.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/login/index.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/login/index.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/user/_userFormItems.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/form/user/_userFormItems.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/login/footer.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/login/footer.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/login/header.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/login/header.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/all.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/all.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/all_selects.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/all_selects.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/crud_layout.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/crud_layout.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/defaultlayout.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/defaultlayout.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/header.php" beforeDir="false" afterPath="$PROJECT_DIR$/ci4/app/Views/themes/backend/vuexy/main/header.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/datos web.txt" beforeDir="false" afterPath="$PROJECT_DIR$/datos web.txt" afterDir="false" />
<change beforePath="$PROJECT_DIR$/httpdocs/assets/js/login.js" beforeDir="false" afterPath="$PROJECT_DIR$/httpdocs/assets/js/login.js" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -33,20 +51,20 @@
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;WebServerToolWindowFactoryState&quot;: &quot;false&quot;,
&quot;last_opened_file_path&quot;: &quot;C:/temp-sk/safekat/ci4/app/Views/themes/backend/vuexy/main&quot;,
&quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
&quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
&quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
&quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
&quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"WebServerToolWindowFactoryState": "false",
"last_opened_file_path": "C:/temp-sk/safekat/httpdocs/themes/vuexy/vendor/libs/toastr",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
"node.js.selected.package.tslint": "(autodetect)",
"nodejs_package_manager_path": "npm",
"vue.rearranger.settings.migration": "true"
}
}</component>
}]]></component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="C:\temp-sk\safekat\ci4\app\Views\themes\backend\vuexy\main" />
@ -78,6 +96,8 @@
<workItem from="1683716769681" duration="8512000" />
<workItem from="1683796910193" duration="12918000" />
<workItem from="1684147458134" duration="7379000" />
<workItem from="1684221025785" duration="2261000" />
<workItem from="1684226343116" duration="557000" />
</task>
<task id="LOCAL-00001" summary="Starting Vuexy Theme creation">
<created>1682339938559</created>

View File

@ -109,7 +109,7 @@ class App extends BaseConfig
*
* @var string
*/
public $appTimezone = 'America/Sao_Paulo';
public $appTimezone = 'Europe/Madrid';
/**
* --------------------------------------------------------------------------

View File

@ -26,14 +26,14 @@ class Email extends BaseConfig
*
* @var string
*/
public $userAgent = 'CodeIgniter';
public $userAgent = 'Safekat ERP';
/**
* The mail sending protocol: mail, sendmail, smtp
*
* @var string
*/
public $protocol = 'mail';
public $protocol = 'smtp';
/**
* The server path to Sendmail.
@ -47,21 +47,21 @@ class Email extends BaseConfig
*
* @var string
*/
public $SMTPHost;
public $SMTPHost = "imnavajas.es";
/**
* SMTP Username
*
* @var string
*/
public $SMTPUser;
public $SMTPUser = "safekat@imnavajas.es";
/**
* SMTP Password
*
* @var string
*/
public $SMTPPass;
public $SMTPPass = "Etkd9~448";
/**
* SMTP Port
@ -110,7 +110,7 @@ class Email extends BaseConfig
*
* @var string
*/
public $mailType = 'text';
public $mailType = 'html';
/**
* Character set (utf-8, iso-8859-1, etc.)

View File

@ -9,7 +9,7 @@ use App\Models\SettingsModel;
use App\Models\TemplateModel;
use App\Models\ThemeModel;
use App\Models\TimezoneModel;
use App\Models\UserGroupModel;
use App\Models\Usuarios\UserGroupModel;
use App\Models\Usuarios\UserModel;
class Settings extends BaseController

View File

@ -139,7 +139,9 @@ class LoginAuthFilter implements FilterInterface
'Integration',
'Migrate',
'Test',
'GoBaseController'
'GoBaseController',
'GoBaseResourceController'
];
}

View File

@ -1,114 +0,0 @@
<?php
return [
'ajuste' => 'Ajuste',
'createdAt' => 'Creado en',
'deletedAt' => 'Borrado en',
'formulaPrice' => 'Fórmula precio',
'id' => 'ID',
'moduleTitle' => 'Tarifas Acabado',
'nombre' => 'Nombre',
'precioMax' => 'Precio Max',
'precioMin' => 'Precio Min',
'tarifaacabado' => 'Tarifas Acabado',
'tarifaacabadoList' => 'Lista Tarifas Acabado',
'tarifasacabado' => 'Tarifas Acabado',
'tiradaMax' => 'Tirada Max',
'tiradaMin' => 'Tirada Min',
'updatedAt' => 'Actualizado en',
'userCreatedId' => 'ID Usuario "Creado en"',
'userUpdateId' => 'ID Usuario "Actualizado en"',
'validation' => [
'formula_price' => [
'max_length' => 'El campo {field} no puede exceder {param} caracteres en longitud.',
'required' => 'El campo {field} es obligatorio.',
],
],
'validation' => [
'nombre' => [
'max_length' => 'El campo {field} no puede exceder {param} caracteres en longitud.',
'required' => 'El campo {field} es obligatorio.',
],
],
'validation' => [
'precio_max' => [
'decimal' => 'El campo {field} debe contener un número decimal.',
'required' => 'El campo {field} es obligatorio.',
],
],
'validation' => [
'precio_min' => [
'decimal' => 'El campo {field} debe contener un número decimal.',
'required' => 'El campo {field} es obligatorio.',
],
],
'validation' => [
'tirada_max' => [
'integer' => 'El campo {field} debe contener un número entero.',
'required' => 'El campo {field} es obligatorio.',
],
],
'validation' => [
'tirada_min' => [
'integer' => 'El campo {field} debe contener un número entero.',
'required' => 'El campo {field} es obligatorio.',
],
],
'validation' => [
'user_created_id' => [
'integer' => 'El campo {field} debe contener un número entero.',
'required' => 'El campo {field} es obligatorio.',
],
],
'validation' => [
'user_update_id' => [
'integer' => 'El campo {field} debe contener un número entero.',
'required' => 'El campo {field} es obligatorio.',
],
],
'validation' => [
'ajuste' => [
'decimal' => 'El campo {field} debe contener un número decimal',
'required' => 'El campo {field} es obligatorio.',
],
],
];

View File

@ -4,7 +4,7 @@
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/css/select2.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.1.1/dist/select2-bootstrap-5-theme.min.css" />
*/ ?>
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/select2/select2.css') ?>">
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/select2/select2.css') ?>"/>
<?= $this->endSection() ?>
<!-- Push additional js -->
@ -17,15 +17,19 @@
<?= $this->section('additionalInlineJs') ?>
<?php /*
$('.select2bs').select2({
theme: "bootstrap-5",
allowClear: false,
});
*/ ?>
'use strict';
const select2 = $('.select2');
$('.select2').select2({
});
// Select2
// --------------------------------------------------------------------
if (select2.length) {
select2.each(function () {
var $this = $(this);
$this.wrap('<div class="position-relative"></div>').select2({
placeholder: 'Select value',
dropdownParent: $this.parent()
});
});
}
<?= $this->endSection() ?>

View File

@ -1,123 +1,155 @@
<?= $this->include("themes/_commonPartialsBs/select2bs5") ?>
<?=$this->extend('themes/backend/vuexy/main/defaultlayout') ?>
<?= $this->extend('themes/backend/vuexy/main/defaultlayout') ?>
<?= $this->section("content") ?>
<div class="row">
<div class="col-12">
<div class="card card-info">
<div class="card-header">
<h3 class="card-title"><?= $boxTitle ?? $pageTitle ?></h3>
</div><!--//.card-header -->
<div class="card-body">
<?= formAlert() ?>
<form id="groupForm" method="post" action="<?= $formAction ?>">
<?= csrf_field() ?>
<input type="hidden" name="id_group" value="<?= (isset($obj)) ? $obj['id_group'] : set_value('id_group') ?>">
<input type="hidden" name="token" value="<?= (isset($obj)) ? $obj['token'] : set_value('token') ?>">
<div class="form-body">
<div class="row">
<div class="col-md-8">
<div class="form-group">
<label for="title" class="text-dark"><?=lang("App.group_field_title")?></label>
<input type="text" name="title" id="title" class="form-control" value="<?= old('title', $group->title) ?>">
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label for="dashboard" class="text-dark"><?=lang("App.group_field_dashboard")?></label>
<?php $id_select = (isset($group)) ? $group->dashboard : set_value('dashboard');?>
<select name="dashboard" id="dashboard" class="form-control">
<option value="user" <?= $id_select == "user" ? 'selected' : '' ?>><?=lang("App.group_label_user")?></option>
<option value="admin" <?= $id_select == "admin" ? 'selected' : '' ?>><?=lang("App.group_label_admin")?></option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 right">
<div class="form-group">
<button type="button" name="select_all" id="select_all" class="btn btn-primary round"><i class="la la-toggle-on"></i> <?=lang("App.group_btn_select")?></button>
<button type="button" name="remove_all" id="remove_all" class="btn btn-primary round ml-1"><i class="la la-toggle-off"></i> <?=lang("App.group_btn_remove")?></button>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 right">
<div class="card">
<div class="card-header">
<h4 class="card-title"><?= lang("App.permisos_general") ?></h4>
<div class="row">
<div class="col-12">
<div class="card card-info">
<div class="card-header">
<h3 class="card-title"><?= $boxTitle ?? $pageTitle ?></h3>
</div><!--//.card-header -->
<div class="card-body">
<?= formAlert() ?>
<form id="groupForm" method="post" action="<?= $formAction ?>">
<?= csrf_field() ?>
<input type="hidden" name="id_group"
value="<?= (isset($obj)) ? $obj['id_group'] : set_value('id_group') ?>">
<input type="hidden" name="token"
value="<?= (isset($obj)) ? $obj['token'] : set_value('token') ?>">
<div class="form-body">
<div class="row">
<div class="col-md-8">
<div class="form-group">
<label for="title"
class="text-dark"><?= lang("App.group_field_title") ?></label>
<input type="text" name="title" id="title" class="form-control"
value="<?= old('title', $group->title) ?>">
</div>
<div class="card-body">
<div class="row">
<?php foreach(getAllClass() as $item): ?>
<?php if (empty($item['path'])): ?>
<div class="col-md-3 col-lg-2">
<h4 class="danger"><?=getDictionary($item['name'])?></h4>
<?php foreach($item['methods'] as $subitem): ?>
<?php if(!getIgnoreMethod($subitem)): ?>
<div class="custom-control custom-switch">
<input type="checkbox" id="<?=$item['name'].'_'.$subitem?>" name="<?=$item['name'].'_'.$subitem?>" class="custom-control-input">
<label for="<?=$item['name'].'_'.$subitem?>" class="custom-control-label"><?=getDictionary($subitem)?></label>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label for="dashboard"
class="text-dark"><?= lang("App.group_field_dashboard") ?></label>
<?php $id_select = (isset($group)) ? $group->dashboard : set_value('dashboard'); ?>
<select name="dashboard" id="dashboard" class="form-control">
<option value="user" <?= $id_select == "user" ? 'selected' : '' ?>><?= lang("App.group_label_user") ?></option>
<option value="admin" <?= $id_select == "admin" ? 'selected' : '' ?>><?= lang("App.group_label_admin") ?></option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 right">
<div class="form-group">
<button type="button" name="select_all" id="select_all"
class="btn btn-primary round"><i
class="la la-toggle-on"></i> <?= lang("App.group_btn_select") ?>
</button>
<button type="button" name="remove_all" id="remove_all"
class="btn btn-primary round ml-1"><i
class="la la-toggle-off"></i> <?= lang("App.group_btn_remove") ?>
</button>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h5>Role Permissions</h5>
<!-- Permission table -->
<div class="table-responsive">
<table class="table table-flush-spacing">
<tbody>
<!-- <tr>-->
<!-- <td class="text-nowrap fw-semibold">-->
<!-- Permisos GLobales-->
<!-- <i-->
<!-- class="ti ti-info-circle"-->
<!-- data-bs-toggle="tooltip"-->
<!-- data-bs-placement="top"-->
<!-- title="Allows a full access to the system"></i>-->
<!-- </td>-->
<!-- <td>-->
<!-- <div class="form-check">-->
<!-- <input class="form-check-input" type="checkbox" id="selectAll"/>-->
<!-- <label class="form-check-label" for="selectAll"> Seleccionar-->
<!-- todos </label>-->
<!-- </div>-->
<!-- </td>-->
<!-- </tr>-->
<?php foreach (getAllFolder() as $folder): ?>
<?php foreach (getAllClass() as $item): ?>
<?php if (str_contains($item['path'], $folder)): ?>
<tr>
<td class="text-nowrap fw-semibold"><?= getDictionary($folder) ?? '' ?> >> <?= getDictionary($item['name']) ?></td>
<?php foreach ($item['methods'] as $subitem): ?>
<?php if (!getIgnoreMethod($subitem)): ?>
<td>
<div class="form-check">
<input type="checkbox"
id="<?= $item['name'] . '_' . $subitem ?>"
name="<?= $item['name'] . '_' . $subitem ?>"
class="form-check-input">
<label for="<?= $item['name'] . '_' . $subitem ?>"
class="form-check-label"><?= getDictionary($subitem) ?></label>
</div>
</td>
<?php endif; ?>
<?php endforeach; ?>
</tr>
<?php endif; ?>
<?php endforeach; ?>
</div>
<?php endif; ?>
<?php endforeach; ?>
</div>
</div>
</div>
<?php foreach(getAllFolder() as $folder): ?>
<div class="card">
<div class="card-header">
<h4 class="card-title"><?= getDictionary($folder)??'' ?></h4>
</div>
<div class="card-body">
<div class="row">
<?php foreach(getAllClass() as $item): ?>
<?php if (str_contains($item['path'], $folder)): ?>
<div class="col-md-3 col-lg-2">
<h4 class="danger"><?=getDictionary($item['name'])?></h4>
<?php foreach($item['methods'] as $subitem): ?>
<?php if(!getIgnoreMethod($subitem)): ?>
<div class="custom-control custom-switch">
<input type="checkbox" id="<?=$item['name'].'_'.$subitem?>" name="<?=$item['name'].'_'.$subitem?>" class="custom-control-input">
<label for="<?=$item['name'].'_'.$subitem?>" class="custom-control-label"><?=getDictionary($subitem)?></label>
</div>
<?php foreach (getAllClass() as $item): ?>
<?php if (empty($item['path'])): ?>
<tr>
<td class="text-nowrap fw-semibold"><?= getDictionary($item['name']) ?></td>
<?php foreach ($item['methods'] as $subitem): ?>
<?php if (!getIgnoreMethod($subitem)): ?>
<td>
<div class="form-check">
<input type="checkbox"
id="<?= $item['name'] . '_' . $subitem ?>"
name="<?= $item['name'] . '_' . $subitem ?>"
class="form-check-input">
<label for="<?= $item['name'] . '_' . $subitem ?>"
class="form-check-label"><?= getDictionary($subitem) ?></label>
</div>
</td>
<?php endif; ?>
<?php endforeach; ?>
</div>
<?php endif; ?>
<?php endforeach; ?>
</div>
</div>
</tr>
<?php endif; ?>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
<div class="form-actions mt-2">
<?= anchor(route_to("groupIndex"), lang("Basic.global.Cancel"), ["class" => "btn btn-secondary float-start"]) ?>
<input type="submit" class="btn btn-primary float-end" name="save" value="<?= lang("Basic.global.Save") ?>">
</div>
</form>
<div class="form-actions mt-2">
<?= anchor(route_to("groupIndex"), lang("Basic.global.Cancel"), ["class" => "btn btn-secondary float-start"]) ?>
<input type="submit" class="btn btn-primary float-end" name="save"
value="<?= lang("Basic.global.Save") ?>">
</div>
</form>
</div><!-- /.card-body -->
</div><!-- /.card-body -->
</div><!-- //.card -->
</div><!--//.col -->
</div><!--//.row -->
</div><!-- //.card -->
</div><!--//.col -->
</div><!--//.row -->
<?= $this->endSection() ?>
<?= $this->section('additionalInlineJs') ?>
$('#select_all').on('click', function () {
$(':checkbox').each(function() {
$(':checkbox').each(function() {
this.checked = true;
});
});
});
$('#remove_all').on('click', function () {
$(':checkbox').each(function() {
@ -125,5 +157,4 @@
});
});
<?= $this->endSection() ?>

View File

@ -1,66 +1,82 @@
<?=$this->include('themes/_commonPartialsBs/datatables') ?>
<?=$this->extend('themes/backend/vuexy/main/defaultlayout') ?>
<?=$this->section('content'); ?>
<div class="row">
<div class="col-md-12">
<?= $this->include('themes/_commonPartialsBs/datatables') ?>
<?= $this->extend('themes/backend/vuexy/main/defaultlayout') ?>
<?= $this->section('content'); ?>
<div class="row">
<div class="col-md-12">
<div class="card card-info">
<div class="card-header">
<h3 class="card-title"><?= lang('Group.grouplist') ?></h3>
</div><!--//.card-header -->
<div class="card-body">
<div class="container-xxl flex-grow-1 container-p-y">
<!-- Role cards -->
<div class="row g-4">
<div class="col-xl-4 col-lg-6 col-md-6">
<div class="card h-100">
<div class="row h-100">
<div class="col-sm-5">
<div class="d-flex align-items-end h-100 justify-content-center mt-sm-0 mt-3">
<img
src="<?= site_url('themes/vuexy/img/illustrations/add-new-roles.png') ?>"
class="img-fluid mt-sm-4 mt-md-0"
alt="add-new-roles"
width="83"/>
</div>
</div>
<div class="col-sm-7">
<div class="card-body text-sm-end text-center ps-sm-0">
<button
onclick="window.location='<?= route_to('newGroup') ?>'"
class="btn btn-primary mb-2 text-nowrap add-new-role"
>
<?= lang('Basic.global.addNew') ?>
</button>
<p class="mb-0 mt-1">Añadir rol si no existe</p>
</div>
</div>
</div>
</div>
</div>
<div class="card card-info">
<div class="card-header">
<h3 class="card-title"><?=lang('Group.grouplist') ?></h3>
<?=anchor(route_to('newGroup'), lang('Basic.global.addNew').' '.lang('Group.group'), ['class'=>'btn btn-primary float-end']); ?>
</div><!--//.card-header -->
<div class="card-body">
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
<?php foreach ($userGroupList as $item) : ?>
<div class="col-xl-4 col-lg-6 col-md-6">
<div class="card">
<div class="card-body">
<div class="d-flex justify-content-between">
<h6 class="fw-normal mb-2">Total 4 users</h6>
</div>
<div class="d-flex justify-content-between align-items-end mt-1">
<div class="role-heading">
<h4 class="mb-1"><?= esc($item->title) ?></h4>
<a href="<?= route_to('editGroup', $item->id_group) ?>">
<span><?= lang('Basic.global.edit') ?></span>
</a>
</div>
<?=
anchor('#confirm2delete', "<i class='ti ti-trash ti-md'></i>",
[
'class' => 'text-muted',
'data-href' => route_to('deleteGroup', $item->id_group),
'data-bs-toggle' => 'modal',
'data-bs-target' => '#confirm2delete'
]);
?>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
<!--/ Role cards -->
</div>
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
<table id="tableOfGroups" class="table table-striped table-hover using-data-table" style="width: 100%;">
<thead>
<tr>
<th><?=lang("Group.id")?></th>
<th><?=lang("Group.group_grid_title")?></th>
<th><?=lang("Group.group_grid_dashboard")?></th>
<th><?= lang('UserGroups.token') ?></th>
<th><?= lang('UserGroups.createdAt') ?></th>
<th><?= lang('UserGroups.updatedAt') ?></th>
<th class="text-nowrap"><?= lang('Basic.global.Action') ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($userGroupList as $item ) : ?>
<tr>
<td class="align-middle text-center">
<?=$item->id_group ?>
</td>
<td class="align-middle">
<?= esc($item->title) ?>
</td>
<td class="align-middle">
<?= esc($item->dashboard) ?>
</td>
<td class="align-middle">
<?= esc($item->token) ?>
</td>
</td>
<td class="align-middle text-nowrap">
<?= empty($item->created_at) ? '' : date('d/m/Y H:m:s', strtotime($item->created_at)) ?>
</td>
<td class="align-middle text-nowrap">
<?= empty($item->updated_at) ? '' : date('d/m/Y H:m:s', strtotime($item->updated_at)) ?>
</td>
<td class="align-middle text-center text-nowrap">
<?=anchor(route_to('editGroup', $item->id_group), lang('Basic.global.edit'), ['class'=>'btn btn-sm btn-warning btn-edit me-1', 'data-id'=>$item->id_group,]); ?>
<?=anchor('#confirm2delete', lang('Basic.global.Delete'), ['class'=>'btn btn-sm btn-danger btn-delete ms-1', 'data-href'=>route_to('deleteGroup', $item->id_group), 'data-bs-toggle'=>'modal', 'data-bs-target'=>'#confirm2delete']); ?>
</td>
</tr>
</div><!--//.card-body -->
<div class="card-footer">
<?php endforeach; ?>
</tbody>
</table>
</div><!--//.card-body -->
<div class="card-footer">
</div><!--//.card-footer -->
</div><!--//.card -->
</div><!--//.col -->
</div><!--//.row -->
</div><!--//.card-footer -->
</div><!--//.card -->
</div><!--//.col -->
</div><!--//.row -->
<?=$this->endSection() ?>
<?= $this->endSection() ?>

View File

@ -71,7 +71,7 @@
aria-describedby="password"
onclick="pass()"
/>
<span class="input-group-text cursor-pointer"><i class="ti ti-eye-off"></i></span>
<span id="show_pass" class="input-group-text cursor-pointer"><i class="ti ti-eye-off"></i></span>
</div>
</div>
<?php if($settings['remember_me']??false): ?>

View File

@ -27,7 +27,7 @@
<?=lang('Users.country') ?>*
</label>
<select id="country" name="country" required class="form-control " style="width: 100%;" >
<select id="country" name="country" required class="select2 form-control " style="width: 100%;" >
<option value=""><?=lang('Basic.global.pleaseSelectA', [lang('Users.country')]) ?></option>
<?php foreach ($paisList as $item) : ?>
@ -136,7 +136,7 @@
<?=lang('Users.blocked') ?>*
</label>
<?php $id_select = old('blocked', $user->blocked);?>
<select name="blocked" id="blocked" class="form-control">
<select name="blocked" id="blocked" class="select2 form-control">
<option value="0" <?= $id_select == "0" ? 'selected' : '' ?>><?=lang("User.user_non_blocked")?></option>
<option value="1" <?= $id_select == "1" ? 'selected' : '' ?>><?=lang("User.user_blocked")?></option>
</select>
@ -147,7 +147,7 @@
<?=lang('Users.emailConfirmed') ?>*
</label>
<?php $id_select = old('email_confirmed', $user->email_confirmed);?>
<select name="email_confirmed" id="email_confirmed" class="form-control">
<select name="email_confirmed" id="email_confirmed" class="select2 form-control">
<option value="0" <?= $id_select == "0" ? 'selected' : '' ?>><?=lang("User.user_alert_not_confirmed")?></option>
<option value="1" <?= $id_select == "1" ? 'selected' : '' ?>><?=lang("User.user_alert_confirmed")?></option>
</select>

View File

@ -14,18 +14,16 @@
<!-- Vendors JS -->
<script src="<?= site_url('themes/vuexy/vendor/libs/formvalidation/dist/js/FormValidation.min.js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/formvalidation/dist/js/plugins/Bootstrap5.min.js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/formvalidation/dist/js/plugins/AutoFocus.min.js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/toastr/toastr.min.js'); ?>"></script>
<!-- Main JS -->
<script src="<?= site_url('themes/vuexy/js/main.js') ?>"></script>
<!-- Page JS -->
<script src="<?= site_url('themes/vuexy/js/pages-auth.js') ?>"></script>
<!-- Custom JS -->
<script src="<?= site_url('assets/js/login.js'); ?>"></script>
<?= toastAlert() ?>
</body>
</html>

View File

@ -57,8 +57,8 @@ if (!empty($token) && $tfa == false) {
<link rel="manifest" href="<?= site_url('themes/vuexy/img/favicon/manifest.json') ?>">
<!-- Fonts -->
<link rel="preconnect" href="https:/fonts.googleapis.com"/>
<link rel="preconnect" href="https:/fonts.gstatic.com" crossorigin/>
<link rel="preconnect" href="https://fonts.googleapis.com"/>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
<link
href="https://fonts.googleapis.com/css2?family=Public+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap"
rel="stylesheet"
@ -78,6 +78,8 @@ if (!empty($token) && $tfa == false) {
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/perfect-scrollbar/perfect-scrollbar.css') ?>"/>
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/node-waves/node-waves.css') ?>"/>
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/typeahead-js/typeahead.css') ?>"/>
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/toastr/toastr.css') ?>"/>
<!-- Vendor -->
<link rel="stylesheet"
href="<?= site_url('themes/vuexy/vendor/libs/formvalidation/dist/css/formValidation.min.css') ?>"/>
@ -91,9 +93,9 @@ if (!empty($token) && $tfa == false) {
<?php
if ($settings['captcha_gateway'] == 'recaptcha') {
echo "<script src='https:/www.google.com/recaptcha/api.js' async defer></script>";
echo "<script src='https://www.google.com/recaptcha/api.js' async defer></script>";
} else {
echo "<script src='https:/www.hCaptcha.com/1/api.js' async defer></script>";
echo "<script src='https://www.hCaptcha.com/1/api.js' async defer></script>";
}
?>
</head>

View File

@ -61,8 +61,8 @@ if (!empty($token) && $tfa == false) {
<link rel="manifest" href="<?= site_url('themes/vuexy/img/favicon/manifest.json') ?>">
<!-- Fonts -->
<link rel="preconnect" href="https:/fonts.googleapis.com"/>
<link rel="preconnect" href="https:/fonts.gstatic.com" crossorigin/>
<link rel="preconnect" href="https://fonts.googleapis.com"/>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
<link
href="https://fonts.googleapis.com/css2?family=Public+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap"
rel="stylesheet"
@ -82,9 +82,6 @@ if (!empty($token) && $tfa == false) {
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/perfect-scrollbar/perfect-scrollbar.css') ?>"/>
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/node-waves/node-waves.css') ?>"/>
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/select2/select2.css') ?>"/>
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/tagify/tagify.css') ?>"/>
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/bootstrap-select/bootstrap-select.css') ?>"/>
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/libs/typeahead-js/typeahead.css') ?>"/>
<!-- Page CSS -->
@ -402,32 +399,23 @@ if (!empty($token) && $tfa == false) {
<script src="<?= site_url('themes/vuexy/vendor/js/bootstrap.js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/perfect-scrollbar/perfect-scrollbar.js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/node-waves/node-waves.js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/hammer/hammer.js') ?>"></script>
<!--<script src="--><?php //= site_url('themes/vuexy/vendor/libs/i18n/i18n.js') ?><!--"></script>-->
<script src="<?= site_url('themes/vuexy/vendor/libs/typeahead-js/typeahead.js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/js/menu.js') ?>"></script>
<!-- endbuild -->
<!-- Vendors JS -->
<script src="<?= site_url('themes/vuexy/vendor/libs/select2/select2.js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/tagify/tagify.js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/bootstrap-select/bootstrap-select.js') ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/bloodhound/bloodhound.js') ?>"></script>
<!-- Main JS -->
<script src="<?= site_url('themes/vuexy/js/main.js') ?>"></script>
<!-- Page JS -->
<script>
'use strict';
$(function () {
const selectPicker = $('.selectpicker'),
select2 = $('.select2'),
select2Icons = $('.select2-icons');
select2 = $('.select2');
// Bootstrap Select
// --------------------------------------------------------------------
@ -448,324 +436,8 @@ if (!empty($token) && $tfa == false) {
});
});
}
// Select2 Icons
if (select2Icons.length) {
// custom template to render icons
function renderIcons(option) {
if (!option.id) {
return option.text;
}
var $icon = "<i class='" + $(option.element).data('icon') + " me-2'></i>" + option.text;
return $icon;
}
select2Icons.wrap('<div class="position-relative"></div>').select2({
templateResult: renderIcons,
templateSelection: renderIcons,
escapeMarkup: function (es) {
return es;
}
});
}
});
(function () {
// Basic
//------------------------------------------------------
const tagifyBasicEl = document.querySelector('#TagifyBasic');
const TagifyBasic = new Tagify(tagifyBasicEl);
// Read only
//------------------------------------------------------
const tagifyReadonlyEl = document.querySelector('#TagifyReadonly');
const TagifyReadonly = new Tagify(tagifyReadonlyEl);
// Custom list & inline suggestion
//------------------------------------------------------
const TagifyCustomInlineSuggestionEl = document.querySelector('#TagifyCustomInlineSuggestion');
const TagifyCustomListSuggestionEl = document.querySelector('#TagifyCustomListSuggestion');
const whitelist = [
'A# .NET',
'A# (Axiom)',
'A-0 System',
'A+',
'A++',
'ABAP',
'ABC',
'ABC ALGOL',
'ABSET',
'ABSYS',
'ACC',
'Accent',
'Ace DASL',
'ACL2',
'Avicsoft',
'ACT-III',
'Action!',
'ActionScript',
'Ada',
'Adenine',
'Agda',
'Agilent VEE',
'Agora',
'AIMMS',
'Alef',
'ALF',
'ALGOL 58',
'ALGOL 60',
'ALGOL 68',
'ALGOL W',
'Alice',
'Alma-0',
'AmbientTalk',
'Amiga E',
'AMOS',
'AMPL',
'Apex (Salesforce.com)',
'APL',
'AppleScript',
'Arc',
'ARexx',
'Argus',
'AspectJ',
'Assembly language',
'ATS',
'Ateji PX',
'AutoHotkey',
'Autocoder',
'AutoIt',
'AutoLISP / Visual LISP',
'Averest',
'AWK',
'Axum',
'Active Server Pages',
'ASP.NET'
];
// Inline
let TagifyCustomInlineSuggestion = new Tagify(TagifyCustomInlineSuggestionEl, {
whitelist: whitelist,
maxTags: 10,
dropdown: {
maxItems: 20,
classname: 'tags-inline',
enabled: 0,
closeOnSelect: false
}
});
// List
let TagifyCustomListSuggestion = new Tagify(TagifyCustomListSuggestionEl, {
whitelist: whitelist,
maxTags: 10,
dropdown: {
maxItems: 20,
classname: '',
enabled: 0,
closeOnSelect: false
}
});
// Users List suggestion
//------------------------------------------------------
const TagifyUserListEl = document.querySelector('#TagifyUserList');
const usersList = [
{
value: 1,
name: 'Justinian Hattersley',
avatar: 'https://i.pravatar.cc/80?img=1',
email: 'jhattersley0@ucsd.edu'
},
{
value: 2,
name: 'Antons Esson',
avatar: 'https://i.pravatar.cc/80?img=2',
email: 'aesson1@ning.com'
},
{
value: 3,
name: 'Ardeen Batisse',
avatar: 'https://i.pravatar.cc/80?img=3',
email: 'abatisse2@nih.gov'
},
{
value: 4,
name: 'Graeme Yellowley',
avatar: 'https://i.pravatar.cc/80?img=4',
email: 'gyellowley3@behance.net'
},
{
value: 5,
name: 'Dido Wilford',
avatar: 'https://i.pravatar.cc/80?img=5',
email: 'dwilford4@jugem.jp'
},
{
value: 6,
name: 'Celesta Orwin',
avatar: 'https://i.pravatar.cc/80?img=6',
email: 'corwin5@meetup.com'
},
{
value: 7,
name: 'Sally Main',
avatar: 'https://i.pravatar.cc/80?img=7',
email: 'smain6@techcrunch.com'
},
{
value: 8,
name: 'Grethel Haysman',
avatar: 'https://i.pravatar.cc/80?img=8',
email: 'ghaysman7@mashable.com'
},
{
value: 9,
name: 'Marvin Mandrake',
avatar: 'https://i.pravatar.cc/80?img=9',
email: 'mmandrake8@sourceforge.net'
},
{
value: 10,
name: 'Corrie Tidey',
avatar: 'https://i.pravatar.cc/80?img=10',
email: 'ctidey9@youtube.com'
}
];
function tagTemplate(tagData) {
return `
<tag title="${tagData.title || tagData.email}"
contenteditable='false'
spellcheck='false'
tabIndex="-1"
class="${this.settings.classNames.tag} ${tagData.class ? tagData.class : ''}"
${this.getAttributes(tagData)}
>
<x title='' class='tagify__tag__removeBtn' role='button' aria-label='remove tag'></x>
<div>
<div class='tagify__tag__avatar-wrap'>
<img onerror="this.style.visibility='hidden'" src="${tagData.avatar}">
</div>
<span class='tagify__tag-text'>${tagData.name}</span>
</div>
</tag>
`;
}
function suggestionItemTemplate(tagData) {
return `
<div ${this.getAttributes(tagData)}
class='tagify__dropdown__item align-items-center ${tagData.class ? tagData.class : ''}'
tabindex="0"
role="option"
>
${
tagData.avatar
? `<div class='tagify__dropdown__item__avatar-wrap'>
<img onerror="this.style.visibility='hidden'" src="${tagData.avatar}">
</div>`
: ''
}
<strong>${tagData.name}</strong>
<span>${tagData.email}</span>
</div>
`;
}
// initialize Tagify on the above input node reference
let TagifyUserList = new Tagify(TagifyUserListEl, {
tagTextProp: 'name', // very important since a custom template is used with this property as text. allows typing a "value" or a "name" to match input with whitelist
enforceWhitelist: true,
skipInvalid: true, // do not remporarily add invalid tags
dropdown: {
closeOnSelect: false,
enabled: 0,
classname: 'users-list',
searchKeys: ['name', 'email'] // very important to set by which keys to search for suggesttions when typing
},
templates: {
tag: tagTemplate,
dropdownItem: suggestionItemTemplate
},
whitelist: usersList
});
TagifyUserList.on('dropdown:show dropdown:updated', onDropdownShow);
TagifyUserList.on('dropdown:select', onSelectSuggestion);
let addAllSuggestionsEl;
function onDropdownShow(e) {
let dropdownContentEl = e.detail.tagify.DOM.dropdown.content;
if (TagifyUserList.suggestedListItems.length > 1) {
addAllSuggestionsEl = getAddAllSuggestionsEl();
// insert "addAllSuggestionsEl" as the first element in the suggestions list
dropdownContentEl.insertBefore(addAllSuggestionsEl, dropdownContentEl.firstChild);
}
}
function onSelectSuggestion(e) {
if (e.detail.elm == addAllSuggestionsEl) TagifyUserList.dropdown.selectAll.call(TagifyUserList);
}
// create an "add all" custom suggestion element every time the dropdown changes
function getAddAllSuggestionsEl() {
// suggestions items should be based on "dropdownItem" template
return TagifyUserList.parseTemplate('dropdownItem', [
{
class: 'addAll',
name: 'Add all',
email:
TagifyUserList.settings.whitelist.reduce(function (remainingSuggestions, item) {
return TagifyUserList.isTagDuplicate(item.value) ? remainingSuggestions : remainingSuggestions + 1;
}, 0) + ' Members'
}
]);
}
// Email List suggestion
//------------------------------------------------------
// generate random whitelist items (for the demo)
let randomStringsArr = Array.apply(null, Array(100)).map(function () {
return (
Array.apply(null, Array(~~(Math.random() * 10 + 3)))
.map(function () {
return String.fromCharCode(Math.random() * (123 - 97) + 97);
})
.join('') + '@gmail.com'
);
});
const TagifyEmailListEl = document.querySelector('#TagifyEmailList'),
TagifyEmailList = new Tagify(TagifyEmailListEl, {
// email address validation (https://stackoverflow.com/a/46181/104380)
pattern:
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
whitelist: randomStringsArr,
callbacks: {
invalid: onInvalidTag
},
dropdown: {
position: 'text',
enabled: 1 // show suggestions dropdown after 1 typed character
}
}),
button = TagifyEmailListEl.nextElementSibling; // "add new tag" action-button
button.addEventListener('click', onAddButtonClick);
function onAddButtonClick() {
TagifyEmailList.addEmptyTag();
}
function onInvalidTag(e) {
console.log('invalid', e.detail);
}
})();
</script>

View File

@ -137,237 +137,6 @@ if (!empty($token) && $tfa == false) {
<i class="ti ti-bell ti-md"></i>
<span class="badge bg-danger rounded-pill badge-notifications">5</span>
</a>
<ul class="dropdown-menu dropdown-menu-end py-0">
<li class="dropdown-menu-header border-bottom">
<div class="dropdown-header d-flex align-items-center py-3">
<h5 class="text-body mb-0 me-auto">Notification</h5>
<a
href="javascript:void(0)"
class="dropdown-notifications-all text-body"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="Mark all as read"
><i class="ti ti-mail-opened fs-4"></i
></a>
</div>
</li>
<li class="dropdown-notifications-list scrollable-container">
<ul class="list-group list-group-flush">
<li class="list-group-item list-group-item-action dropdown-notifications-item">
<div class="d-flex">
<div class="flex-shrink-0 me-3">
<div class="avatar">
<img src="../../assets/img/avatars/1.png" alt class="h-auto rounded-circle" />
</div>
</div>
<div class="flex-grow-1">
<h6 class="mb-1">Congratulation Lettie 🎉</h6>
<p class="mb-0">Won the monthly best seller gold badge</p>
<small class="text-muted">1h ago</small>
</div>
<div class="flex-shrink-0 dropdown-notifications-actions">
<a href="javascript:void(0)" class="dropdown-notifications-read"
><span class="badge badge-dot"></span
></a>
<a href="javascript:void(0)" class="dropdown-notifications-archive"
><span class="ti ti-x"></span
></a>
</div>
</div>
</li>
<li class="list-group-item list-group-item-action dropdown-notifications-item">
<div class="d-flex">
<div class="flex-shrink-0 me-3">
<div class="avatar">
<span class="avatar-initial rounded-circle bg-label-danger">CF</span>
</div>
</div>
<div class="flex-grow-1">
<h6 class="mb-1">Charles Franklin</h6>
<p class="mb-0">Accepted your connection</p>
<small class="text-muted">12hr ago</small>
</div>
<div class="flex-shrink-0 dropdown-notifications-actions">
<a href="javascript:void(0)" class="dropdown-notifications-read"
><span class="badge badge-dot"></span
></a>
<a href="javascript:void(0)" class="dropdown-notifications-archive"
><span class="ti ti-x"></span
></a>
</div>
</div>
</li>
<li class="list-group-item list-group-item-action dropdown-notifications-item marked-as-read">
<div class="d-flex">
<div class="flex-shrink-0 me-3">
<div class="avatar">
<img src="../../assets/img/avatars/2.png" alt class="h-auto rounded-circle" />
</div>
</div>
<div class="flex-grow-1">
<h6 class="mb-1">New Message ✉️</h6>
<p class="mb-0">You have new message from Natalie</p>
<small class="text-muted">1h ago</small>
</div>
<div class="flex-shrink-0 dropdown-notifications-actions">
<a href="javascript:void(0)" class="dropdown-notifications-read"
><span class="badge badge-dot"></span
></a>
<a href="javascript:void(0)" class="dropdown-notifications-archive"
><span class="ti ti-x"></span
></a>
</div>
</div>
</li>
<li class="list-group-item list-group-item-action dropdown-notifications-item">
<div class="d-flex">
<div class="flex-shrink-0 me-3">
<div class="avatar">
<span class="avatar-initial rounded-circle bg-label-success"
><i class="ti ti-shopping-cart"></i
></span>
</div>
</div>
<div class="flex-grow-1">
<h6 class="mb-1">Whoo! You have new order 🛒</h6>
<p class="mb-0">ACME Inc. made new order $1,154</p>
<small class="text-muted">1 day ago</small>
</div>
<div class="flex-shrink-0 dropdown-notifications-actions">
<a href="javascript:void(0)" class="dropdown-notifications-read"
><span class="badge badge-dot"></span
></a>
<a href="javascript:void(0)" class="dropdown-notifications-archive"
><span class="ti ti-x"></span
></a>
</div>
</div>
</li>
<li class="list-group-item list-group-item-action dropdown-notifications-item marked-as-read">
<div class="d-flex">
<div class="flex-shrink-0 me-3">
<div class="avatar">
<img src="../../assets/img/avatars/9.png" alt class="h-auto rounded-circle" />
</div>
</div>
<div class="flex-grow-1">
<h6 class="mb-1">Application has been approved 🚀</h6>
<p class="mb-0">Your ABC project application has been approved.</p>
<small class="text-muted">2 days ago</small>
</div>
<div class="flex-shrink-0 dropdown-notifications-actions">
<a href="javascript:void(0)" class="dropdown-notifications-read"
><span class="badge badge-dot"></span
></a>
<a href="javascript:void(0)" class="dropdown-notifications-archive"
><span class="ti ti-x"></span
></a>
</div>
</div>
</li>
<li class="list-group-item list-group-item-action dropdown-notifications-item marked-as-read">
<div class="d-flex">
<div class="flex-shrink-0 me-3">
<div class="avatar">
<span class="avatar-initial rounded-circle bg-label-success"
><i class="ti ti-chart-pie"></i
></span>
</div>
</div>
<div class="flex-grow-1">
<h6 class="mb-1">Monthly report is generated</h6>
<p class="mb-0">July monthly financial report is generated</p>
<small class="text-muted">3 days ago</small>
</div>
<div class="flex-shrink-0 dropdown-notifications-actions">
<a href="javascript:void(0)" class="dropdown-notifications-read"
><span class="badge badge-dot"></span
></a>
<a href="javascript:void(0)" class="dropdown-notifications-archive"
><span class="ti ti-x"></span
></a>
</div>
</div>
</li>
<li class="list-group-item list-group-item-action dropdown-notifications-item marked-as-read">
<div class="d-flex">
<div class="flex-shrink-0 me-3">
<div class="avatar">
<img src="../../assets/img/avatars/5.png" alt class="h-auto rounded-circle" />
</div>
</div>
<div class="flex-grow-1">
<h6 class="mb-1">Send connection request</h6>
<p class="mb-0">Peter sent you connection request</p>
<small class="text-muted">4 days ago</small>
</div>
<div class="flex-shrink-0 dropdown-notifications-actions">
<a href="javascript:void(0)" class="dropdown-notifications-read"
><span class="badge badge-dot"></span
></a>
<a href="javascript:void(0)" class="dropdown-notifications-archive"
><span class="ti ti-x"></span
></a>
</div>
</div>
</li>
<li class="list-group-item list-group-item-action dropdown-notifications-item">
<div class="d-flex">
<div class="flex-shrink-0 me-3">
<div class="avatar">
<img src="../../assets/img/avatars/6.png" alt class="h-auto rounded-circle" />
</div>
</div>
<div class="flex-grow-1">
<h6 class="mb-1">New message from Jane</h6>
<p class="mb-0">Your have new message from Jane</p>
<small class="text-muted">5 days ago</small>
</div>
<div class="flex-shrink-0 dropdown-notifications-actions">
<a href="javascript:void(0)" class="dropdown-notifications-read"
><span class="badge badge-dot"></span
></a>
<a href="javascript:void(0)" class="dropdown-notifications-archive"
><span class="ti ti-x"></span
></a>
</div>
</div>
</li>
<li class="list-group-item list-group-item-action dropdown-notifications-item marked-as-read">
<div class="d-flex">
<div class="flex-shrink-0 me-3">
<div class="avatar">
<span class="avatar-initial rounded-circle bg-label-warning"
><i class="ti ti-alert-triangle"></i
></span>
</div>
</div>
<div class="flex-grow-1">
<h6 class="mb-1">CPU is running high</h6>
<p class="mb-0">CPU Utilization Percent is currently at 88.63%,</p>
<small class="text-muted">5 days ago</small>
</div>
<div class="flex-shrink-0 dropdown-notifications-actions">
<a href="javascript:void(0)" class="dropdown-notifications-read"
><span class="badge badge-dot"></span
></a>
<a href="javascript:void(0)" class="dropdown-notifications-archive"
><span class="ti ti-x"></span
></a>
</div>
</div>
</li>
</ul>
</li>
<li class="dropdown-menu-footer border-top">
<a
href="javascript:void(0);"
class="dropdown-item d-flex justify-content-center text-primary p-2 h-px-40 mb-1 align-items-center"
>
View all notifications
</a>
</li>
</ul>
</li>
<!--/ Notification -->

View File

@ -6,5 +6,5 @@ datos web guard:
email admin: jajaime.jim@gmail.com
password: 1234
FTP SK-IMN: Kqd1s#917
FTP SK-IMN: pjS9~l138

View File

@ -9,10 +9,10 @@ function pass(){
"use strict";
if(document.getElementById('password').type === 'text'){
document.getElementById('password').type = 'password';
document.getElementById('btn_pass').innerHTML = '<i class="far fa-eye"></i>';
document.getElementById('show_pass').innerHTML = '<i class="ti ti-eye"></i>';
}else{
document.getElementById('password').type = 'text';
document.getElementById('btn_pass').innerHTML = '<i class="far fa-eye-slash"></i>';
document.getElementById('show_pass').innerHTML = '<i class="ti ti-eye-off"></i>';
}
}
function accepted(){

File diff suppressed because one or more lines are too long