mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
Merge branch 'main' into 'dev/presupuesto_cliente_2'
Main See merge request jjimenez/safekat!231
This commit is contained in:
31
ci4/app/Views/Shield/Email/email_2fa_email.php
Normal file
31
ci4/app/Views/Shield/Email/email_2fa_email.php
Normal file
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
|
||||
<head>
|
||||
<meta name="x-apple-disable-message-reformatting">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="format-detection" content="telephone=no, date=no, address=no, email=no">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title><?= lang('Auth.email2FASubject') ?></title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<p><?= lang('Auth.email2FAMailBody') ?></p>
|
||||
<div style="text-align: center">
|
||||
<h1><?= $code ?></h1>
|
||||
</div>
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0" style="width: 100%;" width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="line-height: 20px; font-size: 20px; width: 100%; height: 20px; margin: 0;" align="left" width="100%" height="20">
|
||||
 
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<b><?= lang('Auth.emailInfo') ?></b>
|
||||
<p><?= lang('Auth.emailIpAddress') ?> <?= esc($ipAddress) ?></p>
|
||||
<p><?= lang('Auth.emailDevice') ?> <?= esc($userAgent) ?></p>
|
||||
<p><?= lang('Auth.emailDate') ?> <?= esc($date) ?></p>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
31
ci4/app/Views/Shield/Email/email_activate_email.php
Normal file
31
ci4/app/Views/Shield/Email/email_activate_email.php
Normal file
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
|
||||
<head>
|
||||
<meta name="x-apple-disable-message-reformatting">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="format-detection" content="telephone=no, date=no, address=no, email=no">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title><?= lang('Auth.emailActivateSubject') ?></title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<p><?= lang('Auth.emailActivateMailBody') ?></p>
|
||||
<div style="text-align: center">
|
||||
<h1><?= $code ?></h1>
|
||||
</div>
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0" style="width: 100%;" width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="line-height: 20px; font-size: 20px; width: 100%; height: 20px; margin: 0;" align="left" width="100%" height="20">
|
||||
 
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<b><?= lang('Auth.emailInfo') ?></b>
|
||||
<p><?= lang('Auth.emailIpAddress') ?> <?= esc($ipAddress) ?></p>
|
||||
<p><?= lang('Auth.emailDevice') ?> <?= esc($userAgent) ?></p>
|
||||
<p><?= lang('Auth.emailDate') ?> <?= esc($date) ?></p>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
36
ci4/app/Views/Shield/Email/magic_link_email.php
Normal file
36
ci4/app/Views/Shield/Email/magic_link_email.php
Normal file
@ -0,0 +1,36 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
|
||||
<head>
|
||||
<meta name="x-apple-disable-message-reformatting">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="format-detection" content="telephone=no, date=no, address=no, email=no">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title><?= lang('Auth.magicLinkSubject') ?></title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0" style="border-radius: 6px; border-collapse: separate !important;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="line-height: 24px; font-size: 16px; border-radius: 6px; margin: 0;" align="center" bgcolor="#0d6efd">
|
||||
<a href="<?= url_to('verify-magic-link') ?>?token=<?= $token ?>" style="color: #ffffff; font-size: 16px; font-family: Helvetica, Arial, sans-serif; text-decoration: none; border-radius: 6px; line-height: 20px; display: inline-block; font-weight: normal; white-space: nowrap; background-color: #0d6efd; padding: 8px 12px; border: 1px solid #0d6efd;"><?= lang('Auth.login') ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0" style="width: 100%;" width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="line-height: 20px; font-size: 20px; width: 100%; height: 20px; margin: 0;" align="left" width="100%" height="20">
|
||||
 
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<b><?= lang('Auth.emailInfo') ?></b>
|
||||
<p><?= lang('Auth.emailIpAddress') ?> <?= esc($ipAddress) ?></p>
|
||||
<p><?= lang('Auth.emailDevice') ?> <?= esc($userAgent) ?></p>
|
||||
<p><?= lang('Auth.emailDate') ?> <?= esc($date) ?></p>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
38
ci4/app/Views/Shield/email_2fa_show.php
Normal file
38
ci4/app/Views/Shield/email_2fa_show.php
Normal file
@ -0,0 +1,38 @@
|
||||
<?= $this->extend(config('Auth')->views['layout']) ?>
|
||||
|
||||
<?= $this->section('title') ?><?= lang('Auth.email2FATitle') ?> <?= $this->endSection() ?>
|
||||
|
||||
<?= $this->section('main') ?>
|
||||
|
||||
<div class="container d-flex justify-content-center p-5">
|
||||
<div class="card col-12 col-md-5 shadow-sm">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title mb-5"><?= lang('Auth.email2FATitle') ?></h5>
|
||||
|
||||
<p><?= lang('Auth.confirmEmailAddress') ?></p>
|
||||
|
||||
<?php if (session('error')) : ?>
|
||||
<div class="alert alert-danger"><?= session('error') ?></div>
|
||||
<?php endif ?>
|
||||
|
||||
<form action="<?= url_to('auth-action-handle') ?>" method="post">
|
||||
<?= csrf_field() ?>
|
||||
|
||||
<!-- Email -->
|
||||
<div class="mb-2">
|
||||
<input type="email" class="form-control" name="email"
|
||||
inputmode="email" autocomplete="email" placeholder="<?= lang('Auth.email') ?>"
|
||||
<?php /** @var CodeIgniter\Shield\Entities\User $user */ ?>
|
||||
value="<?= old('email', $user->email) ?>" required>
|
||||
</div>
|
||||
|
||||
<div class="d-grid col-8 mx-auto m-3">
|
||||
<button type="submit" class="btn btn-primary btn-block"><?= lang('Auth.send') ?></button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= $this->endSection() ?>
|
||||
36
ci4/app/Views/Shield/email_2fa_verify.php
Normal file
36
ci4/app/Views/Shield/email_2fa_verify.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?= $this->extend(config('Auth')->views['layout']) ?>
|
||||
|
||||
<?= $this->section('title') ?><?= lang('Auth.email2FATitle') ?> <?= $this->endSection() ?>
|
||||
|
||||
<?= $this->section('main') ?>
|
||||
|
||||
<div class="container d-flex justify-content-center p-5">
|
||||
<div class="card col-12 col-md-5 shadow-sm">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title mb-5"><?= lang('Auth.emailEnterCode') ?></h5>
|
||||
|
||||
<p><?= lang('Auth.emailConfirmCode') ?></p>
|
||||
|
||||
<?php if (session('error') !== null) : ?>
|
||||
<div class="alert alert-danger"><?= session('error') ?></div>
|
||||
<?php endif ?>
|
||||
|
||||
<form action="<?= url_to('auth-action-verify') ?>" method="post">
|
||||
<?= csrf_field() ?>
|
||||
|
||||
<!-- Code -->
|
||||
<div class="mb-2">
|
||||
<input type="number" class="form-control" name="token" placeholder="000000"
|
||||
inputmode="numeric" pattern="[0-9]*" autocomplete="one-time-code" required>
|
||||
</div>
|
||||
|
||||
<div class="d-grid col-8 mx-auto m-3">
|
||||
<button type="submit" class="btn btn-primary btn-block"><?= lang('Auth.confirm') ?></button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= $this->endSection() ?>
|
||||
37
ci4/app/Views/Shield/email_activate_show.php
Normal file
37
ci4/app/Views/Shield/email_activate_show.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?= $this->extend(config('Auth')->views['layout']) ?>
|
||||
|
||||
<?= $this->section('title') ?><?= lang('Auth.emailActivateTitle') ?> <?= $this->endSection() ?>
|
||||
|
||||
<?= $this->section('main') ?>
|
||||
|
||||
<div class="container d-flex justify-content-center p-5">
|
||||
<div class="card col-12 col-md-5 shadow-sm">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title mb-5"><?= lang('Auth.emailActivateTitle') ?></h5>
|
||||
|
||||
<?php if (session('error')) : ?>
|
||||
<div class="alert alert-danger"><?= session('error') ?></div>
|
||||
<?php endif ?>
|
||||
|
||||
<p><?= lang('Auth.emailActivateBody') ?></p>
|
||||
|
||||
<form action="<?= url_to('auth-action-verify') ?>" method="post">
|
||||
<?= csrf_field() ?>
|
||||
|
||||
<!-- Code -->
|
||||
<div class="form-floating mb-2">
|
||||
<input type="text" class="form-control" id="floatingTokenInput" name="token" placeholder="000000" inputmode="numeric"
|
||||
pattern="[0-9]*" autocomplete="one-time-code" value="<?= old('token') ?>" required>
|
||||
<label for="floatingTokenInput"><?= lang('Auth.token') ?></label>
|
||||
</div>
|
||||
|
||||
<div class="d-grid col-8 mx-auto m-3">
|
||||
<button type="submit" class="btn btn-primary btn-block"><?= lang('Auth.send') ?></button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= $this->endSection() ?>
|
||||
116
ci4/app/Views/Shield/layout.php
Normal file
116
ci4/app/Views/Shield/layout.php
Normal file
@ -0,0 +1,116 @@
|
||||
<?php
|
||||
$session = session();
|
||||
$settings = $session->get('settings');
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html
|
||||
lang="<?= $settings['default_language'] ?? 'es' ?>"
|
||||
class="h-100"
|
||||
class="dark-style customizer-hide"
|
||||
dir="ltr"
|
||||
data-theme="theme-default"
|
||||
data-assets-path="<?= site_url('themes/vuexy/') ?>"
|
||||
data-template="vertical-menu-template-no-customizer"
|
||||
>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"
|
||||
/>
|
||||
<title><?= $this->renderSection('title') ?></title>
|
||||
|
||||
<?php
|
||||
$baseImgUrl = site_url('themes/vuexy/img/favicon');
|
||||
$baseThemeUrl = site_url('themes/vuexy');
|
||||
?>
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" type="image/x-icon" href="<?= $baseImgUrl . '/favicon.ico' ?>"/>
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="<?= $baseImgUrl . '/apple-icon-57x57.png' ?>">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="<?= $baseImgUrl . '/apple-icon-60x60.png' ?>">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="<?= $baseImgUrl . '/apple-icon-72x72.png' ?>">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="<?= $baseImgUrl . '/apple-icon-76x76.png' ?>">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="<?= $baseImgUrl . '/apple-icon-114x114.png' ?>">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="<?= $baseImgUrl . '/apple-icon-120x120.png' ?>">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="<?= $baseImgUrl . '/apple-icon-144x144.png' ?>">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="<?= $baseImgUrl . '/apple-icon-152x152.png' ?>">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="<?= $baseImgUrl . '/apple-icon-180x180.png' ?>">
|
||||
<link rel="icon" type="image/png" sizes="192x192" href="<?= $baseImgUrl . '/android-icon-192x192.png' ?>">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="<?= $baseImgUrl . '/favicon-32x32.png' ?>">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="<?= $baseImgUrl . '/favicon-96x96.png' ?>">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="<?= $baseImgUrl . '/favicon-16x16.png' ?>">
|
||||
<link rel="manifest" href="<?= $baseImgUrl . '/manifest.json' ?>">
|
||||
|
||||
<!-- Fonts -->
|
||||
<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"
|
||||
/>
|
||||
|
||||
<!-- Icons -->
|
||||
<link rel="stylesheet" href="<?= $baseThemeUrl . '/vendor/fonts/fontawesome.css' ?>"/>
|
||||
<link rel="stylesheet" href="<?= $baseThemeUrl . '/vendor/fonts/tabler-icons.css' ?>"/>
|
||||
<link rel="stylesheet" href="<?= $baseThemeUrl . '/vendor/fonts/flag-icons.css' ?>"/>
|
||||
|
||||
<!-- Core CSS -->
|
||||
<link rel="stylesheet" href="<?= $baseThemeUrl . '/vendor/css/rtl/core-dark.css' ?>"/>
|
||||
<link rel="stylesheet" href="<?= $baseThemeUrl . '/vendor/css/rtl/theme-default-dark.css' ?>"/>
|
||||
<link rel="stylesheet" href="<?= $baseThemeUrl . '/css/safekat.css' ?>"/>
|
||||
|
||||
<!-- Vendors CSS -->
|
||||
<link rel="stylesheet" href="<?= $baseThemeUrl . '/vendor/libs/perfect-scrollbar/perfect-scrollbar.css' ?>"/>
|
||||
<link rel="stylesheet" href="<?= $baseThemeUrl . '/vendor/libs/node-waves/node-waves.css' ?>"/>
|
||||
<link rel="stylesheet" href="<?= $baseThemeUrl . '/vendor/libs/typeahead-js/typeahead.css' ?>"/>
|
||||
<link rel="stylesheet" href="<?= $baseThemeUrl . '/vendor/libs/toastr/toastr.css' ?>"/>
|
||||
|
||||
<!-- Vendor -->
|
||||
<link rel="stylesheet" href="<?= $baseThemeUrl . '/vendor/libs/formvalidation/dist/css/formValidation.min.css' ?>"/>
|
||||
|
||||
<!-- Page CSS -->
|
||||
<link rel="stylesheet" href="<?= $baseThemeUrl . '/vendor/css/pages/page-auth.css' ?>"/>
|
||||
<!-- Helpers -->
|
||||
<script src="<?= $baseThemeUrl . '/vendor/js/helpers.js' ?>"></script>
|
||||
<script src="<?= $baseThemeUrl . '/js/config.js' ?>"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<?= $this->renderSection('main') ?>
|
||||
|
||||
|
||||
<?= $this->renderSection('pageScripts') ?>
|
||||
|
||||
<!-- Required vendors -->
|
||||
<!-- Core JS -->
|
||||
<script src="<?= $baseThemeUrl . '/vendor/libs/jquery/jquery.js' ?>"></script>
|
||||
<script src="<?= $baseThemeUrl . '/vendor/libs/popper/popper.js' ?>"></script>
|
||||
<script src="<?= $baseThemeUrl . '/vendor/js/bootstrap.js' ?>"></script>
|
||||
<script src="<?= $baseThemeUrl . '/vendor/libs/perfect-scrollbar/perfect-scrollbar.js' ?>"></script>
|
||||
<script src="<?= $baseThemeUrl . '/vendor/libs/node-waves/node-waves.js' ?>"></script>
|
||||
<script src="<?= $baseThemeUrl . '/vendor/libs/hammer/hammer.js' ?>"></script>
|
||||
<script src="<?= $baseThemeUrl . '/vendor/libs/i18n/i18n.js' ?>"></script>
|
||||
<script src="<?= $baseThemeUrl . '/vendor/libs/typeahead-js/typeahead.js' ?>"></script>
|
||||
<script src="<?= $baseThemeUrl . '/vendor/js/menu.js' ?>"></script>
|
||||
|
||||
<!-- Main JS -->
|
||||
<script src="<?= $baseThemeUrl . '/js/main.js' ?>"></script>
|
||||
|
||||
<!-- Custom JS -->
|
||||
<script>
|
||||
function pass() {
|
||||
"use strict";
|
||||
var passwordField = document.getElementById('password');
|
||||
var showPassIcon = document.getElementById('show_pass');
|
||||
|
||||
var isTextField = passwordField.type === 'text';
|
||||
|
||||
passwordField.type = isTextField ? 'password' : 'text';
|
||||
showPassIcon.innerHTML = isTextField ? '<i class="ti ti-eye"></i>' : '<i class="ti ti-eye-off"></i>';
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
136
ci4/app/Views/Shield/login.php
Normal file
136
ci4/app/Views/Shield/login.php
Normal file
@ -0,0 +1,136 @@
|
||||
<?= $this->extend(config('Auth')->views['layout']) ?>
|
||||
|
||||
<?= $this->section('title') ?><?= lang('Auth.login') ?><?= $this->endSection() ?>
|
||||
|
||||
<?= $this->section('main') ?>
|
||||
|
||||
<!-- Content -->
|
||||
<div class="authentication-wrapper authentication-cover authentication-bg">
|
||||
<div class="authentication-inner row">
|
||||
<!-- /Left Text -->
|
||||
<div class="d-none d-lg-flex col-lg-7 p-0">
|
||||
<div class="auth-cover-bg auth-cover-bg-color d-flex justify-content-center align-items-center">
|
||||
<img
|
||||
src="<?= site_url('themes/vuexy/img/safekat/login/auth-login-illustration-light.png') ?>"
|
||||
alt="auth-login-cover"
|
||||
class="img-fluid my-5 auth-illustration"
|
||||
/>
|
||||
|
||||
<img
|
||||
src="<?= site_url('themes/vuexy/img/illustrations/bg-shape-image-light.png'); ?>"
|
||||
alt="auth-login-cover"
|
||||
class="platform-bg"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Left Text -->
|
||||
|
||||
<!-- Login -->
|
||||
<div class="d-flex col-12 col-lg-5 align-items-center p-sm-5 p-4">
|
||||
<div class="w-px-400 mx-auto">
|
||||
<!-- Logo -->
|
||||
<div class="app-brand mb-4">
|
||||
<a href="<?= site_url('login'); ?>" class="app-brand-link gap-2">
|
||||
<span class="app-brand-logo">
|
||||
<img src="<?= site_url('themes/vuexy/img/safekat/logos/sk-logo.png') ?>">
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<!-- /Logo -->
|
||||
<h3 class="mb-1 fw-bold"><?= lang('Auth.login') ?></h3>
|
||||
|
||||
<?php if (session('error') !== null) : ?>
|
||||
<div class="alert alert-danger" role="alert"><?= session('error') ?></div>
|
||||
<?php elseif (session('errors') !== null) : ?>
|
||||
<div class="alert alert-danger" role="alert">
|
||||
<?php if (is_array(session('errors'))) : ?>
|
||||
<?php foreach (session('errors') as $error) : ?>
|
||||
<?= $error ?>
|
||||
<br>
|
||||
<?php endforeach ?>
|
||||
<?php else : ?>
|
||||
<?= session('errors') ?>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if (session('message') !== null) : ?>
|
||||
<div class="alert alert-success" role="alert"><?= session('message') ?></div>
|
||||
<?php endif ?>
|
||||
|
||||
<form id="formAuthentication" class="mb-3" action="<?= url_to('login') ?>" method="POST">
|
||||
<?= csrf_field() ?>
|
||||
<!-- Email -->
|
||||
<div class="mb-3">
|
||||
<label for="floatingEmailInput" class="form-label"><?= lang('Auth.email') ?></label>
|
||||
<input
|
||||
type="email"
|
||||
class="form-control"
|
||||
id="floatingEmailInput"
|
||||
name="email"
|
||||
inputmode="email"
|
||||
placeholder="<?= lang('Auth.email') ?>"
|
||||
value="<?= old('email') ?>"
|
||||
required
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Password -->
|
||||
<div class="mb-3 form-password-toggle">
|
||||
<div class="d-flex justify-content-between">
|
||||
<label class="form-label" for="password"><?= lang('Auth.password') ?></label>
|
||||
<?php if (setting('Auth.allowMagicLinkLogins')): ?>
|
||||
<a href="<?= url_to('magic-link') ?>">
|
||||
<small><?= lang('Auth.forgotPassword') ?></small>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="input-group input-group-merge">
|
||||
<input
|
||||
type="password"
|
||||
class="form-control"
|
||||
id="floatingPasswordInput"
|
||||
name="password"
|
||||
inputmode="text"
|
||||
autocomplete="current-password"
|
||||
placeholder="<?= lang('Auth.password') ?>"
|
||||
required
|
||||
onclick="pass()"
|
||||
/>
|
||||
<span id="show_pass" class="input-group-text cursor-pointer"><i
|
||||
class="ti ti-eye-off"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Remember me -->
|
||||
<?php if (setting('Auth.sessionConfig')['allowRemembering']): ?>
|
||||
<div class="mb-3">
|
||||
<div class="form-check">
|
||||
<input type="checkbox" name="remember"
|
||||
class="form-check-input" <?php if (old('remember')): ?> checked<?php endif ?>>
|
||||
<label class="form-check-label"
|
||||
for="remember"> <?= lang('Auth.rememberMe') ?> </label>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<button class="btn btn-primary d-grid w-100"><?= lang('Auth.login') ?></button>
|
||||
</form>
|
||||
|
||||
<?php if (setting('Auth.allowRegistration')) : ?>
|
||||
<p class="text-center">
|
||||
<span><?= lang('Auth.needAccount') ?></span>
|
||||
<a href="<?= url_to('register') ?>">
|
||||
<span><?= lang('Auth.register') ?></span>
|
||||
</a>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Login -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- / Content -->
|
||||
|
||||
<?= $this->endSection() ?>
|
||||
91
ci4/app/Views/Shield/magic_link_form.php
Normal file
91
ci4/app/Views/Shield/magic_link_form.php
Normal file
@ -0,0 +1,91 @@
|
||||
<?= $this->extend(config('Auth')->views['layout']) ?>
|
||||
|
||||
<?= $this->section('title') ?><?= lang('Auth.useMagicLink') ?> <?= $this->endSection() ?>
|
||||
|
||||
<?= $this->section('main') ?>
|
||||
|
||||
|
||||
<!-- Content -->
|
||||
<div class="authentication-wrapper authentication-cover authentication-bg">
|
||||
<div class="authentication-inner row">
|
||||
<!-- /Left Text -->
|
||||
<div class="d-none d-lg-flex col-lg-6 p-0">
|
||||
<div class="auth-cover-bg auth-cover-bg-color d-flex justify-content-center align-items-center">
|
||||
<img
|
||||
src="<?= site_url('themes/vuexy/img/safekat/login/auth-login-illustration-light.png') ?>"
|
||||
alt="auth-forgot-password-cover"
|
||||
class="img-fluid my-5 auth-illustration"
|
||||
/>
|
||||
|
||||
<img
|
||||
src="<?= site_url('themes/vuexy/img/illustrations/bg-shape-image-light.png'); ?>"
|
||||
alt="auth-forgot-password-cover"
|
||||
class="platform-bg"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Left Text -->
|
||||
|
||||
<!-- Forgot Password -->
|
||||
<div class="d-flex col-12 col-lg-6 align-items-center p-sm-5 p-4">
|
||||
<div class="w-px-500 mx-auto">
|
||||
<!-- Logo -->
|
||||
<div class="app-brand mb-4">
|
||||
<a href="index.html" class="app-brand-link gap-2">
|
||||
<span class="app-brand-logo">
|
||||
<img src="<?= site_url('themes/vuexy/img/safekat/logos/sk-logo.png') ?>"
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<!-- /Logo -->
|
||||
<h3 class="mb-1 fw-bold"><?= lang('Auth.useMagicLink') ?></h3>
|
||||
|
||||
<?php if (session('error') !== null) : ?>
|
||||
<div class="alert alert-danger" role="alert"><?= session('error') ?></div>
|
||||
<?php elseif (session('errors') !== null) : ?>
|
||||
<div class="alert alert-danger" role="alert">
|
||||
<?php if (is_array(session('errors'))) : ?>
|
||||
<?php foreach (session('errors') as $error) : ?>
|
||||
<?= $error ?>
|
||||
<br>
|
||||
<?php endforeach ?>
|
||||
<?php else : ?>
|
||||
<?= session('errors') ?>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<form id="sendForm" class="mb-3" action="<?= url_to('magic-link') ?>" method="post">
|
||||
<?= csrf_field() ?>
|
||||
<div class="mb-3">
|
||||
<label for="floatingEmailInput" class="form-label"><?= lang('Auth.email') ?></label>
|
||||
<input
|
||||
type="email"
|
||||
class="form-control"
|
||||
id="floatingEmailInput"
|
||||
name="email"
|
||||
inputmode="email"
|
||||
placeholder="<?= lang('Auth.email') ?>"
|
||||
value="<?= old('email', auth()->user()->email ?? null) ?>"
|
||||
required
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
|
||||
<button class="btn btn-primary d-grid w-100"><?= lang('Auth.send') ?></button>
|
||||
</form>
|
||||
<div class="text-center">
|
||||
<a href="<?= url_to('login') ?>" class="d-flex align-items-center justify-content-center">
|
||||
<i class="ti ti-chevron-left scaleX-n1-rtl"></i>
|
||||
<?= lang('Auth.backToLogin') ?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Forgot Password -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- / Content -->
|
||||
|
||||
|
||||
<?= $this->endSection() ?>
|
||||
19
ci4/app/Views/Shield/magic_link_message.php
Normal file
19
ci4/app/Views/Shield/magic_link_message.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?= $this->extend(config('Auth')->views['layout']) ?>
|
||||
|
||||
<?= $this->section('title') ?><?= lang('Auth.useMagicLink') ?> <?= $this->endSection() ?>
|
||||
|
||||
<?= $this->section('main') ?>
|
||||
|
||||
<div class="container d-flex justify-content-center p-5">
|
||||
<div class="card col-12 col-md-5 shadow-sm">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title mb-5"><?= lang('Auth.useMagicLink') ?></h5>
|
||||
|
||||
<p><b><?= lang('Auth.checkYourEmail') ?></b></p>
|
||||
|
||||
<p><?= lang('Auth.magicLinkDetails', [setting('Auth.magicLinkLifetime') / 60]) ?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= $this->endSection() ?>
|
||||
147
ci4/app/Views/Shield/register.php
Normal file
147
ci4/app/Views/Shield/register.php
Normal file
@ -0,0 +1,147 @@
|
||||
<?= $this->extend(config('Auth')->views['layout']) ?>
|
||||
|
||||
<?= $this->section('title') ?><?= lang('Auth.register') ?> <?= $this->endSection() ?>
|
||||
|
||||
<?= $this->section('main') ?>
|
||||
|
||||
<!-- Content -->
|
||||
|
||||
<div class="authentication-wrapper authentication-cover authentication-bg">
|
||||
<div class="authentication-inner row">
|
||||
<!-- /Left Text -->
|
||||
<div class="d-none d-lg-flex col-lg-7 p-0">
|
||||
<div class="auth-cover-bg auth-cover-bg-color d-flex justify-content-center align-items-center">
|
||||
<img
|
||||
src="<?= site_url('themes/vuexy/img/safekat/login/auth-login-illustration-light.png') ?>"
|
||||
alt="auth-register-cover"
|
||||
class="img-fluid my-5 auth-illustration"
|
||||
/>
|
||||
|
||||
<img
|
||||
src="<?= site_url('themes/vuexy/img/illustrations/bg-shape-image-light.png'); ?>"
|
||||
alt="auth-register-cover"
|
||||
class="platform-bg"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Left Text -->
|
||||
|
||||
<!-- Register -->
|
||||
<div class="d-flex col-12 col-lg-5 align-items-center p-sm-5 p-4">
|
||||
<div class="w-px-400 mx-auto">
|
||||
<!-- Logo -->
|
||||
<div class="app-brand mb-4">
|
||||
<a href="index.html" class="app-brand-link gap-2">
|
||||
<span class="app-brand-logo">
|
||||
<img src="<?= site_url('themes/vuexy/img/safekat/logos/sk-logo.png') ?>"
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<!-- /Logo -->
|
||||
<h3 class="mb-1 fw-bold"><?= lang('Auth.register') ?></h3>
|
||||
|
||||
<?php if (session('error') !== null) : ?>
|
||||
<div class="alert alert-danger" role="alert"><?= session('error') ?></div>
|
||||
<?php elseif (session('errors') !== null) : ?>
|
||||
<div class="alert alert-danger" role="alert">
|
||||
<?php if (is_array(session('errors'))) : ?>
|
||||
<?php foreach (session('errors') as $error) : ?>
|
||||
<?= $error ?>
|
||||
<br>
|
||||
<?php endforeach ?>
|
||||
<?php else : ?>
|
||||
<?= session('errors') ?>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<form id="sendForm" class="mb-3" action="<?= url_to('register') ?>" method="POST">
|
||||
<?= csrf_field() ?>
|
||||
|
||||
<!-- Email -->
|
||||
<div class="mb-3">
|
||||
<label for="floatingEmailInput" class="form-label"><?= lang('Auth.email') ?></label>
|
||||
<input
|
||||
type="email"
|
||||
class="form-control"
|
||||
id="floatingEmailInput"
|
||||
name="email"
|
||||
inputmode="email"
|
||||
autocomplete="email"
|
||||
placeholder="<?= lang('Auth.email') ?>"
|
||||
value="<?= old('email') ?>"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Username -->
|
||||
<div class="mb-3">
|
||||
<label for="floatingUsernameInput" class="form-label"><?= lang('Auth.username') ?></label>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="floatingUsernameInput"
|
||||
name="username"
|
||||
inputmode="text"
|
||||
autocomplete="username"
|
||||
placeholder=<?= lang('Auth.username') ?>
|
||||
value="<?= old('username') ?>"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Password -->
|
||||
<div class="mb-3 form-password-toggle">
|
||||
<label class="form-label" for="floatingPasswordInput"><?= lang('Auth.password') ?></label>
|
||||
<div class="input-group input-group-merge">
|
||||
<input
|
||||
type="password"
|
||||
class="form-control"
|
||||
id="floatingPasswordInput"
|
||||
name="password"
|
||||
inputmode="text"
|
||||
autocomplete="new-password"
|
||||
placeholder="<?= lang('Auth.password') ?>"
|
||||
onclick="pass()"
|
||||
required
|
||||
/>
|
||||
<span class="input-group-text cursor-pointer"><i class="ti ti-eye-off"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Password (Again) -->
|
||||
<div class="mb-3 form-password-toggle">
|
||||
<label class="form-label" for="floatingPasswordConfirmInput"><?= lang('Auth.passwordConfirm') ?></label>
|
||||
<div class="input-group input-group-merge">
|
||||
<input
|
||||
type="password"
|
||||
class="form-control"
|
||||
id="floatingPasswordConfirmInput"
|
||||
name="password_confirm"
|
||||
inputmode="text"
|
||||
autocomplete="new-password"
|
||||
placeholder="<?= lang('Auth.passwordConfirm') ?>"
|
||||
onclick="pass()"
|
||||
required
|
||||
/>
|
||||
<span class="input-group-text cursor-pointer"><i class="ti ti-eye-off"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
<button class="btn btn-primary d-grid w-100"><?= lang('Auth.register') ?></button>
|
||||
</form>
|
||||
|
||||
<p class="text-center"><?= lang('Auth.haveAccount') ?>
|
||||
<a href="<?= url_to('login') ?>">
|
||||
<span><?= lang('Auth.login') ?></span>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Register -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- / Content -->
|
||||
|
||||
<?= $this->endSection() ?>
|
||||
@ -3,17 +3,26 @@
|
||||
use CodeIgniter\CLI\CLI;
|
||||
|
||||
// The main Exception
|
||||
CLI::newLine();
|
||||
CLI::write('[' . get_class($exception) . ']', 'light_gray', 'red');
|
||||
CLI::newLine();
|
||||
CLI::write($message);
|
||||
CLI::newLine();
|
||||
CLI::write('at ' . CLI::color(clean_path($exception->getFile()) . ':' . $exception->getLine(), 'green'));
|
||||
CLI::newLine();
|
||||
|
||||
$last = $exception;
|
||||
|
||||
while ($prevException = $last->getPrevious()) {
|
||||
$last = $prevException;
|
||||
|
||||
CLI::write(' Caused by:');
|
||||
CLI::write(' [' . get_class($prevException) . ']', 'red');
|
||||
CLI::write(' ' . $prevException->getMessage());
|
||||
CLI::write(' at ' . CLI::color(clean_path($prevException->getFile()) . ':' . $prevException->getLine(), 'green'));
|
||||
CLI::newLine();
|
||||
}
|
||||
|
||||
// The backtrace
|
||||
if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE) {
|
||||
$backtraces = $exception->getTrace();
|
||||
$backtraces = $last->getTrace();
|
||||
|
||||
if ($backtraces) {
|
||||
CLI::write('Backtrace:', 'green');
|
||||
|
||||
@ -1,197 +1,197 @@
|
||||
:root {
|
||||
--main-bg-color: #fff;
|
||||
--main-text-color: #555;
|
||||
--dark-text-color: #222;
|
||||
--light-text-color: #c7c7c7;
|
||||
--brand-primary-color: #E06E3F;
|
||||
--light-bg-color: #ededee;
|
||||
--dark-bg-color: #404040;
|
||||
--main-bg-color: #fff;
|
||||
--main-text-color: #555;
|
||||
--dark-text-color: #222;
|
||||
--light-text-color: #c7c7c7;
|
||||
--brand-primary-color: #E06E3F;
|
||||
--light-bg-color: #ededee;
|
||||
--dark-bg-color: #404040;
|
||||
}
|
||||
|
||||
body {
|
||||
height: 100%;
|
||||
background: var(--main-bg-color);
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
|
||||
color: var(--main-text-color);
|
||||
font-weight: 300;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 100%;
|
||||
background: var(--main-bg-color);
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
|
||||
color: var(--main-text-color);
|
||||
font-weight: 300;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
h1 {
|
||||
font-weight: lighter;
|
||||
letter-spacing: 0.8;
|
||||
font-size: 3rem;
|
||||
color: var(--dark-text-color);
|
||||
margin: 0;
|
||||
font-weight: lighter;
|
||||
letter-spacing: 0.8;
|
||||
font-size: 3rem;
|
||||
color: var(--dark-text-color);
|
||||
margin: 0;
|
||||
}
|
||||
h1.headline {
|
||||
margin-top: 20%;
|
||||
font-size: 5rem;
|
||||
margin-top: 20%;
|
||||
font-size: 5rem;
|
||||
}
|
||||
.text-center {
|
||||
text-align: center;
|
||||
text-align: center;
|
||||
}
|
||||
p.lead {
|
||||
font-size: 1.6rem;
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
.container {
|
||||
max-width: 75rem;
|
||||
margin: 0 auto;
|
||||
padding: 1rem;
|
||||
max-width: 75rem;
|
||||
margin: 0 auto;
|
||||
padding: 1rem;
|
||||
}
|
||||
.header {
|
||||
background: var(--light-bg-color);
|
||||
color: var(--dark-text-color);
|
||||
background: var(--light-bg-color);
|
||||
color: var(--dark-text-color);
|
||||
}
|
||||
.header .container {
|
||||
padding: 1rem 1.75rem 1.75rem 1.75rem;
|
||||
padding: 1rem 1.75rem 1.75rem 1.75rem;
|
||||
}
|
||||
.header h1 {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 500;
|
||||
font-size: 2.5rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
.header p {
|
||||
font-size: 1.2rem;
|
||||
margin: 0;
|
||||
line-height: 2.5;
|
||||
font-size: 1.2rem;
|
||||
margin: 0;
|
||||
line-height: 2.5;
|
||||
}
|
||||
.header a {
|
||||
color: var(--brand-primary-color);
|
||||
margin-left: 2rem;
|
||||
display: none;
|
||||
text-decoration: none;
|
||||
color: var(--brand-primary-color);
|
||||
margin-left: 2rem;
|
||||
display: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
.header:hover a {
|
||||
display: inline;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.footer {
|
||||
background: var(--dark-bg-color);
|
||||
color: var(--light-text-color);
|
||||
background: var(--dark-bg-color);
|
||||
color: var(--light-text-color);
|
||||
}
|
||||
.footer .container {
|
||||
border-top: 1px solid #e7e7e7;
|
||||
margin-top: 1rem;
|
||||
text-align: center;
|
||||
border-top: 1px solid #e7e7e7;
|
||||
margin-top: 1rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.source {
|
||||
background: #343434;
|
||||
color: var(--light-text-color);
|
||||
padding: 0.5em 1em;
|
||||
border-radius: 5px;
|
||||
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||
font-size: 0.85rem;
|
||||
margin: 0;
|
||||
overflow-x: scroll;
|
||||
background: #343434;
|
||||
color: var(--light-text-color);
|
||||
padding: 0.5em 1em;
|
||||
border-radius: 5px;
|
||||
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||
font-size: 0.85rem;
|
||||
margin: 0;
|
||||
overflow-x: scroll;
|
||||
}
|
||||
.source span.line {
|
||||
line-height: 1.4;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.source span.line .number {
|
||||
color: #666;
|
||||
color: #666;
|
||||
}
|
||||
.source .line .highlight {
|
||||
display: block;
|
||||
background: var(--dark-text-color);
|
||||
color: var(--light-text-color);
|
||||
display: block;
|
||||
background: var(--dark-text-color);
|
||||
color: var(--light-text-color);
|
||||
}
|
||||
.source span.highlight .number {
|
||||
color: #fff;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.tabs {
|
||||
list-style: none;
|
||||
list-style-position: inside;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
margin-bottom: -1px;
|
||||
list-style: none;
|
||||
list-style-position: inside;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
margin-bottom: -1px;
|
||||
}
|
||||
.tabs li {
|
||||
display: inline;
|
||||
display: inline;
|
||||
}
|
||||
.tabs a:link,
|
||||
.tabs a:visited {
|
||||
padding: 0rem 1rem;
|
||||
line-height: 2.7;
|
||||
text-decoration: none;
|
||||
color: var(--dark-text-color);
|
||||
background: var(--light-bg-color);
|
||||
border: 1px solid rgba(0,0,0,0.15);
|
||||
border-bottom: 0;
|
||||
border-top-left-radius: 5px;
|
||||
border-top-right-radius: 5px;
|
||||
display: inline-block;
|
||||
padding: 0rem 1rem;
|
||||
line-height: 2.7;
|
||||
text-decoration: none;
|
||||
color: var(--dark-text-color);
|
||||
background: var(--light-bg-color);
|
||||
border: 1px solid rgba(0,0,0,0.15);
|
||||
border-bottom: 0;
|
||||
border-top-left-radius: 5px;
|
||||
border-top-right-radius: 5px;
|
||||
display: inline-block;
|
||||
}
|
||||
.tabs a:hover {
|
||||
background: var(--light-bg-color);
|
||||
border-color: rgba(0,0,0,0.15);
|
||||
background: var(--light-bg-color);
|
||||
border-color: rgba(0,0,0,0.15);
|
||||
}
|
||||
.tabs a.active {
|
||||
background: var(--main-bg-color);
|
||||
color: var(--main-text-color);
|
||||
background: var(--main-bg-color);
|
||||
color: var(--main-text-color);
|
||||
}
|
||||
.tab-content {
|
||||
background: var(--main-bg-color);
|
||||
border: 1px solid rgba(0,0,0,0.15);
|
||||
background: var(--main-bg-color);
|
||||
border: 1px solid rgba(0,0,0,0.15);
|
||||
}
|
||||
.content {
|
||||
padding: 1rem;
|
||||
padding: 1rem;
|
||||
}
|
||||
.hide {
|
||||
display: none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.alert {
|
||||
margin-top: 2rem;
|
||||
display: block;
|
||||
text-align: center;
|
||||
line-height: 3.0;
|
||||
background: #d9edf7;
|
||||
border: 1px solid #bcdff1;
|
||||
border-radius: 5px;
|
||||
color: #31708f;
|
||||
margin-top: 2rem;
|
||||
display: block;
|
||||
text-align: center;
|
||||
line-height: 3.0;
|
||||
background: #d9edf7;
|
||||
border: 1px solid #bcdff1;
|
||||
border-radius: 5px;
|
||||
color: #31708f;
|
||||
}
|
||||
ul, ol {
|
||||
line-height: 1.8;
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
th {
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #e7e7e7;
|
||||
padding-bottom: 0.5rem;
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #e7e7e7;
|
||||
padding-bottom: 0.5rem;
|
||||
}
|
||||
td {
|
||||
padding: 0.2rem 0.5rem 0.2rem 0;
|
||||
padding: 0.2rem 0.5rem 0.2rem 0;
|
||||
}
|
||||
tr:hover td {
|
||||
background: #f1f1f1;
|
||||
background: #f1f1f1;
|
||||
}
|
||||
td pre {
|
||||
white-space: pre-wrap;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.trace a {
|
||||
color: inherit;
|
||||
color: inherit;
|
||||
}
|
||||
.trace table {
|
||||
width: auto;
|
||||
width: auto;
|
||||
}
|
||||
.trace tr td:first-child {
|
||||
min-width: 5em;
|
||||
font-weight: bold;
|
||||
min-width: 5em;
|
||||
font-weight: bold;
|
||||
}
|
||||
.trace td {
|
||||
background: var(--light-bg-color);
|
||||
padding: 0 1rem;
|
||||
background: var(--light-bg-color);
|
||||
padding: 0 1rem;
|
||||
}
|
||||
.trace td pre {
|
||||
margin: 0;
|
||||
margin: 0;
|
||||
}
|
||||
.args {
|
||||
display: none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -1,118 +1,116 @@
|
||||
// Tabs
|
||||
|
||||
var tabLinks = new Array();
|
||||
var contentDivs = new Array();
|
||||
|
||||
function init()
|
||||
{
|
||||
// Grab the tab links and content divs from the page
|
||||
var tabListItems = document.getElementById('tabs').childNodes;
|
||||
console.log(tabListItems);
|
||||
for (var i = 0; i < tabListItems.length; i ++)
|
||||
{
|
||||
if (tabListItems[i].nodeName == "LI")
|
||||
{
|
||||
var tabLink = getFirstChildWithTagName(tabListItems[i], 'A');
|
||||
var id = getHash(tabLink.getAttribute('href'));
|
||||
tabLinks[id] = tabLink;
|
||||
contentDivs[id] = document.getElementById(id);
|
||||
}
|
||||
}
|
||||
// Grab the tab links and content divs from the page
|
||||
var tabListItems = document.getElementById('tabs').childNodes;
|
||||
console.log(tabListItems);
|
||||
for (var i = 0; i < tabListItems.length; i ++)
|
||||
{
|
||||
if (tabListItems[i].nodeName == "LI")
|
||||
{
|
||||
var tabLink = getFirstChildWithTagName(tabListItems[i], 'A');
|
||||
var id = getHash(tabLink.getAttribute('href'));
|
||||
tabLinks[id] = tabLink;
|
||||
contentDivs[id] = document.getElementById(id);
|
||||
}
|
||||
}
|
||||
|
||||
// Assign onclick events to the tab links, and
|
||||
// highlight the first tab
|
||||
var i = 0;
|
||||
// Assign onclick events to the tab links, and
|
||||
// highlight the first tab
|
||||
var i = 0;
|
||||
|
||||
for (var id in tabLinks)
|
||||
{
|
||||
tabLinks[id].onclick = showTab;
|
||||
tabLinks[id].onfocus = function () {
|
||||
this.blur()
|
||||
};
|
||||
if (i == 0)
|
||||
{
|
||||
tabLinks[id].className = 'active';
|
||||
}
|
||||
i ++;
|
||||
}
|
||||
for (var id in tabLinks)
|
||||
{
|
||||
tabLinks[id].onclick = showTab;
|
||||
tabLinks[id].onfocus = function () {
|
||||
this.blur()
|
||||
};
|
||||
if (i == 0)
|
||||
{
|
||||
tabLinks[id].className = 'active';
|
||||
}
|
||||
i ++;
|
||||
}
|
||||
|
||||
// Hide all content divs except the first
|
||||
var i = 0;
|
||||
// Hide all content divs except the first
|
||||
var i = 0;
|
||||
|
||||
for (var id in contentDivs)
|
||||
{
|
||||
if (i != 0)
|
||||
{
|
||||
console.log(contentDivs[id]);
|
||||
contentDivs[id].className = 'content hide';
|
||||
}
|
||||
i ++;
|
||||
}
|
||||
for (var id in contentDivs)
|
||||
{
|
||||
if (i != 0)
|
||||
{
|
||||
console.log(contentDivs[id]);
|
||||
contentDivs[id].className = 'content hide';
|
||||
}
|
||||
i ++;
|
||||
}
|
||||
}
|
||||
|
||||
function showTab()
|
||||
{
|
||||
var selectedId = getHash(this.getAttribute('href'));
|
||||
var selectedId = getHash(this.getAttribute('href'));
|
||||
|
||||
// Highlight the selected tab, and dim all others.
|
||||
// Also show the selected content div, and hide all others.
|
||||
for (var id in contentDivs)
|
||||
{
|
||||
if (id == selectedId)
|
||||
{
|
||||
tabLinks[id].className = 'active';
|
||||
contentDivs[id].className = 'content';
|
||||
}
|
||||
else
|
||||
{
|
||||
tabLinks[id].className = '';
|
||||
contentDivs[id].className = 'content hide';
|
||||
}
|
||||
}
|
||||
// Highlight the selected tab, and dim all others.
|
||||
// Also show the selected content div, and hide all others.
|
||||
for (var id in contentDivs)
|
||||
{
|
||||
if (id == selectedId)
|
||||
{
|
||||
tabLinks[id].className = 'active';
|
||||
contentDivs[id].className = 'content';
|
||||
}
|
||||
else
|
||||
{
|
||||
tabLinks[id].className = '';
|
||||
contentDivs[id].className = 'content hide';
|
||||
}
|
||||
}
|
||||
|
||||
// Stop the browser following the link
|
||||
return false;
|
||||
// Stop the browser following the link
|
||||
return false;
|
||||
}
|
||||
|
||||
function getFirstChildWithTagName(element, tagName)
|
||||
{
|
||||
for (var i = 0; i < element.childNodes.length; i ++)
|
||||
{
|
||||
if (element.childNodes[i].nodeName == tagName)
|
||||
{
|
||||
return element.childNodes[i];
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < element.childNodes.length; i ++)
|
||||
{
|
||||
if (element.childNodes[i].nodeName == tagName)
|
||||
{
|
||||
return element.childNodes[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getHash(url)
|
||||
{
|
||||
var hashPos = url.lastIndexOf('#');
|
||||
return url.substring(hashPos + 1);
|
||||
var hashPos = url.lastIndexOf('#');
|
||||
return url.substring(hashPos + 1);
|
||||
}
|
||||
|
||||
function toggle(elem)
|
||||
{
|
||||
elem = document.getElementById(elem);
|
||||
elem = document.getElementById(elem);
|
||||
|
||||
if (elem.style && elem.style['display'])
|
||||
{
|
||||
// Only works with the "style" attr
|
||||
var disp = elem.style['display'];
|
||||
}
|
||||
else if (elem.currentStyle)
|
||||
{
|
||||
// For MSIE, naturally
|
||||
var disp = elem.currentStyle['display'];
|
||||
}
|
||||
else if (window.getComputedStyle)
|
||||
{
|
||||
// For most other browsers
|
||||
var disp = document.defaultView.getComputedStyle(elem, null).getPropertyValue('display');
|
||||
}
|
||||
if (elem.style && elem.style['display'])
|
||||
{
|
||||
// Only works with the "style" attr
|
||||
var disp = elem.style['display'];
|
||||
}
|
||||
else if (elem.currentStyle)
|
||||
{
|
||||
// For MSIE, naturally
|
||||
var disp = elem.currentStyle['display'];
|
||||
}
|
||||
else if (window.getComputedStyle)
|
||||
{
|
||||
// For most other browsers
|
||||
var disp = document.defaultView.getComputedStyle(elem, null).getPropertyValue('display');
|
||||
}
|
||||
|
||||
// Toggle the state of the "display" style
|
||||
elem.style.display = disp == 'block' ? 'none' : 'block';
|
||||
// Toggle the state of the "display" style
|
||||
elem.style.display = disp == 'block' ? 'none' : 'block';
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1,84 +1,84 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>404 Page Not Found</title>
|
||||
<meta charset="utf-8">
|
||||
<title><?= lang('Errors.pageNotFound') ?></title>
|
||||
|
||||
<style>
|
||||
div.logo {
|
||||
height: 200px;
|
||||
width: 155px;
|
||||
display: inline-block;
|
||||
opacity: 0.08;
|
||||
position: absolute;
|
||||
top: 2rem;
|
||||
left: 50%;
|
||||
margin-left: -73px;
|
||||
}
|
||||
body {
|
||||
height: 100%;
|
||||
background: #fafafa;
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
color: #777;
|
||||
font-weight: 300;
|
||||
}
|
||||
h1 {
|
||||
font-weight: lighter;
|
||||
letter-spacing: 0.8;
|
||||
font-size: 3rem;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
color: #222;
|
||||
}
|
||||
.wrap {
|
||||
max-width: 1024px;
|
||||
margin: 5rem auto;
|
||||
padding: 2rem;
|
||||
background: #fff;
|
||||
text-align: center;
|
||||
border: 1px solid #efefef;
|
||||
border-radius: 0.5rem;
|
||||
position: relative;
|
||||
}
|
||||
pre {
|
||||
white-space: normal;
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
code {
|
||||
background: #fafafa;
|
||||
border: 1px solid #efefef;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 5px;
|
||||
display: block;
|
||||
}
|
||||
p {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
.footer {
|
||||
margin-top: 2rem;
|
||||
border-top: 1px solid #efefef;
|
||||
padding: 1em 2em 0 2em;
|
||||
font-size: 85%;
|
||||
color: #999;
|
||||
}
|
||||
a:active,
|
||||
a:link,
|
||||
a:visited {
|
||||
color: #dd4814;
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
div.logo {
|
||||
height: 200px;
|
||||
width: 155px;
|
||||
display: inline-block;
|
||||
opacity: 0.08;
|
||||
position: absolute;
|
||||
top: 2rem;
|
||||
left: 50%;
|
||||
margin-left: -73px;
|
||||
}
|
||||
body {
|
||||
height: 100%;
|
||||
background: #fafafa;
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
color: #777;
|
||||
font-weight: 300;
|
||||
}
|
||||
h1 {
|
||||
font-weight: lighter;
|
||||
letter-spacing: normal;
|
||||
font-size: 3rem;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
color: #222;
|
||||
}
|
||||
.wrap {
|
||||
max-width: 1024px;
|
||||
margin: 5rem auto;
|
||||
padding: 2rem;
|
||||
background: #fff;
|
||||
text-align: center;
|
||||
border: 1px solid #efefef;
|
||||
border-radius: 0.5rem;
|
||||
position: relative;
|
||||
}
|
||||
pre {
|
||||
white-space: normal;
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
code {
|
||||
background: #fafafa;
|
||||
border: 1px solid #efefef;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 5px;
|
||||
display: block;
|
||||
}
|
||||
p {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
.footer {
|
||||
margin-top: 2rem;
|
||||
border-top: 1px solid #efefef;
|
||||
padding: 1em 2em 0 2em;
|
||||
font-size: 85%;
|
||||
color: #999;
|
||||
}
|
||||
a:active,
|
||||
a:link,
|
||||
a:visited {
|
||||
color: #dd4814;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
<h1>404 - File Not Found</h1>
|
||||
<div class="wrap">
|
||||
<h1>404</h1>
|
||||
|
||||
<p>
|
||||
<?php if (! empty($message) && $message !== '(null)') : ?>
|
||||
<?= nl2br(esc($message)) ?>
|
||||
<?php else : ?>
|
||||
Sorry! Cannot seem to find the page you were looking for.
|
||||
<?php endif ?>
|
||||
</p>
|
||||
</div>
|
||||
<p>
|
||||
<?php if (ENVIRONMENT !== 'production') : ?>
|
||||
<?= nl2br(esc($message)) ?>
|
||||
<?php else : ?>
|
||||
<?= lang('Errors.sorryCannotFind') ?>
|
||||
<?php endif; ?>
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -1,397 +1,418 @@
|
||||
<?php $error_id = uniqid('error', true); ?>
|
||||
<?php
|
||||
use Config\Services;
|
||||
use CodeIgniter\CodeIgniter;
|
||||
|
||||
$errorId = uniqid('error', true);
|
||||
?>
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="robots" content="noindex">
|
||||
<meta charset="UTF-8">
|
||||
<meta name="robots" content="noindex">
|
||||
|
||||
<title><?= esc($title) ?></title>
|
||||
<style type="text/css">
|
||||
<?= preg_replace('#[\r\n\t ]+#', ' ', file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.css')) ?>
|
||||
</style>
|
||||
<title><?= esc($title) ?></title>
|
||||
<style>
|
||||
<?= preg_replace('#[\r\n\t ]+#', ' ', file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.css')) ?>
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
<?= file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.js') ?>
|
||||
</script>
|
||||
<script>
|
||||
<?= file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.js') ?>
|
||||
</script>
|
||||
</head>
|
||||
<body onload="init()">
|
||||
|
||||
<!-- Header -->
|
||||
<div class="header">
|
||||
<div class="container">
|
||||
<h1><?= esc($title), esc($exception->getCode() ? ' #' . $exception->getCode() : '') ?></h1>
|
||||
<p>
|
||||
<?= nl2br(esc($exception->getMessage())) ?>
|
||||
<a href="https://www.duckduckgo.com/?q=<?= urlencode($title . ' ' . preg_replace('#\'.*\'|".*"#Us', '', $exception->getMessage())) ?>"
|
||||
rel="noreferrer" target="_blank">search →</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Header -->
|
||||
<div class="header">
|
||||
<div class="container">
|
||||
<h1><?= esc($title), esc($exception->getCode() ? ' #' . $exception->getCode() : '') ?></h1>
|
||||
<p>
|
||||
<?= nl2br(esc($exception->getMessage())) ?>
|
||||
<a href="https://www.duckduckgo.com/?q=<?= urlencode($title . ' ' . preg_replace('#\'.*\'|".*"#Us', '', $exception->getMessage())) ?>"
|
||||
rel="noreferrer" target="_blank">search →</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Source -->
|
||||
<div class="container">
|
||||
<p><b><?= esc(static::cleanPath($file, $line)) ?></b> at line <b><?= esc($line) ?></b></p>
|
||||
<!-- Source -->
|
||||
<div class="container">
|
||||
<p><b><?= esc(clean_path($file)) ?></b> at line <b><?= esc($line) ?></b></p>
|
||||
|
||||
<?php if (is_file($file)) : ?>
|
||||
<div class="source">
|
||||
<?= static::highlightFile($file, $line, 15); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php if (is_file($file)) : ?>
|
||||
<div class="source">
|
||||
<?= static::highlightFile($file, $line, 15); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<div class="container">
|
||||
<?php
|
||||
$last = $exception;
|
||||
|
||||
<ul class="tabs" id="tabs">
|
||||
<li><a href="#backtrace">Backtrace</a></li>
|
||||
<li><a href="#server">Server</a></li>
|
||||
<li><a href="#request">Request</a></li>
|
||||
<li><a href="#response">Response</a></li>
|
||||
<li><a href="#files">Files</a></li>
|
||||
<li><a href="#memory">Memory</a></li>
|
||||
</ul>
|
||||
while ($prevException = $last->getPrevious()) {
|
||||
$last = $prevException;
|
||||
?>
|
||||
|
||||
<div class="tab-content">
|
||||
<pre>
|
||||
Caused by:
|
||||
<?= esc(get_class($prevException)), esc($prevException->getCode() ? ' #' . $prevException->getCode() : '') ?>
|
||||
|
||||
<!-- Backtrace -->
|
||||
<div class="content" id="backtrace">
|
||||
<?= nl2br(esc($prevException->getMessage())) ?>
|
||||
<a href="https://www.duckduckgo.com/?q=<?= urlencode(get_class($prevException) . ' ' . preg_replace('#\'.*\'|".*"#Us', '', $prevException->getMessage())) ?>"
|
||||
rel="noreferrer" target="_blank">search →</a>
|
||||
<?= esc(clean_path($prevException->getFile()) . ':' . $prevException->getLine()) ?>
|
||||
</pre>
|
||||
|
||||
<ol class="trace">
|
||||
<?php foreach ($trace as $index => $row) : ?>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
<!-- Trace info -->
|
||||
<?php if (isset($row['file']) && is_file($row['file'])) :?>
|
||||
<?php
|
||||
<?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE) : ?>
|
||||
<div class="container">
|
||||
|
||||
<ul class="tabs" id="tabs">
|
||||
<li><a href="#backtrace">Backtrace</a></li>
|
||||
<li><a href="#server">Server</a></li>
|
||||
<li><a href="#request">Request</a></li>
|
||||
<li><a href="#response">Response</a></li>
|
||||
<li><a href="#files">Files</a></li>
|
||||
<li><a href="#memory">Memory</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
|
||||
<!-- Backtrace -->
|
||||
<div class="content" id="backtrace">
|
||||
|
||||
<ol class="trace">
|
||||
<?php foreach ($trace as $index => $row) : ?>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
<!-- Trace info -->
|
||||
<?php if (isset($row['file']) && is_file($row['file'])) : ?>
|
||||
<?php
|
||||
if (isset($row['function']) && in_array($row['function'], ['include', 'include_once', 'require', 'require_once'], true)) {
|
||||
echo esc($row['function'] . ' ' . static::cleanPath($row['file']));
|
||||
echo esc($row['function'] . ' ' . clean_path($row['file']));
|
||||
} else {
|
||||
echo esc(static::cleanPath($row['file']) . ' : ' . $row['line']);
|
||||
echo esc(clean_path($row['file']) . ' : ' . $row['line']);
|
||||
}
|
||||
?>
|
||||
<?php else : ?>
|
||||
{PHP internal code}
|
||||
<?php endif; ?>
|
||||
<?php else: ?>
|
||||
{PHP internal code}
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Class/Method -->
|
||||
<?php if (isset($row['class'])) : ?>
|
||||
— <?= esc($row['class'] . $row['type'] . $row['function']) ?>
|
||||
<?php if (! empty($row['args'])) : ?>
|
||||
<?php $args_id = $error_id . 'args' . $index ?>
|
||||
( <a href="#" onclick="return toggle('<?= esc($args_id, 'attr') ?>');">arguments</a> )
|
||||
<div class="args" id="<?= esc($args_id, 'attr') ?>">
|
||||
<table cellspacing="0">
|
||||
<!-- Class/Method -->
|
||||
<?php if (isset($row['class'])) : ?>
|
||||
— <?= esc($row['class'] . $row['type'] . $row['function']) ?>
|
||||
<?php if (! empty($row['args'])) : ?>
|
||||
<?php $argsId = $errorId . 'args' . $index ?>
|
||||
( <a href="#" onclick="return toggle('<?= esc($argsId, 'attr') ?>');">arguments</a> )
|
||||
<div class="args" id="<?= esc($argsId, 'attr') ?>">
|
||||
<table cellspacing="0">
|
||||
|
||||
<?php
|
||||
<?php
|
||||
$params = null;
|
||||
// Reflection by name is not available for closure function
|
||||
if (substr($row['function'], -1) !== '}') {
|
||||
$mirror = isset($row['class']) ? new \ReflectionMethod($row['class'], $row['function']) : new \ReflectionFunction($row['function']);
|
||||
$mirror = isset($row['class']) ? new ReflectionMethod($row['class'], $row['function']) : new ReflectionFunction($row['function']);
|
||||
$params = $mirror->getParameters();
|
||||
}
|
||||
|
||||
foreach ($row['args'] as $key => $value) : ?>
|
||||
<tr>
|
||||
<td><code><?= esc(isset($params[$key]) ? '$' . $params[$key]->name : "#{$key}") ?></code></td>
|
||||
<td><pre><?= esc(print_r($value, true)) ?></pre></td>
|
||||
</tr>
|
||||
<?php endforeach ?>
|
||||
<tr>
|
||||
<td><code><?= esc(isset($params[$key]) ? '$' . $params[$key]->name : "#{$key}") ?></code></td>
|
||||
<td><pre><?= esc(print_r($value, true)) ?></pre></td>
|
||||
</tr>
|
||||
<?php endforeach ?>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
()
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</table>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
()
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (! isset($row['class']) && isset($row['function'])) : ?>
|
||||
— <?= esc($row['function']) ?>()
|
||||
<?php endif; ?>
|
||||
</p>
|
||||
<?php if (! isset($row['class']) && isset($row['function'])) : ?>
|
||||
— <?= esc($row['function']) ?>()
|
||||
<?php endif; ?>
|
||||
</p>
|
||||
|
||||
<!-- Source? -->
|
||||
<?php if (isset($row['file']) && is_file($row['file']) && isset($row['class'])) : ?>
|
||||
<div class="source">
|
||||
<?= static::highlightFile($row['file'], $row['line']) ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
<!-- Source? -->
|
||||
<?php if (isset($row['file']) && is_file($row['file']) && isset($row['class'])) : ?>
|
||||
<div class="source">
|
||||
<?= static::highlightFile($row['file'], $row['line']) ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
|
||||
<?php endforeach; ?>
|
||||
</ol>
|
||||
<?php endforeach; ?>
|
||||
</ol>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Server -->
|
||||
<div class="content" id="server">
|
||||
<?php foreach (['_SERVER', '_SESSION'] as $var) : ?>
|
||||
<?php
|
||||
<!-- Server -->
|
||||
<div class="content" id="server">
|
||||
<?php foreach (['_SERVER', '_SESSION'] as $var) : ?>
|
||||
<?php
|
||||
if (empty($GLOBALS[$var]) || ! is_array($GLOBALS[$var])) {
|
||||
continue;
|
||||
} ?>
|
||||
|
||||
<h3>$<?= esc($var) ?></h3>
|
||||
<h3>$<?= esc($var) ?></h3>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Key</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($GLOBALS[$var] as $key => $value) : ?>
|
||||
<tr>
|
||||
<td><?= esc($key) ?></td>
|
||||
<td>
|
||||
<?php if (is_string($value)) : ?>
|
||||
<?= esc($value) ?>
|
||||
<?php else: ?>
|
||||
<pre><?= esc(print_r($value, true)) ?></pre>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Key</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($GLOBALS[$var] as $key => $value) : ?>
|
||||
<tr>
|
||||
<td><?= esc($key) ?></td>
|
||||
<td>
|
||||
<?php if (is_string($value)) : ?>
|
||||
<?= esc($value) ?>
|
||||
<?php else: ?>
|
||||
<pre><?= esc(print_r($value, true)) ?></pre>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php endforeach ?>
|
||||
<?php endforeach ?>
|
||||
|
||||
<!-- Constants -->
|
||||
<?php $constants = get_defined_constants(true); ?>
|
||||
<?php if (! empty($constants['user'])) : ?>
|
||||
<h3>Constants</h3>
|
||||
<!-- Constants -->
|
||||
<?php $constants = get_defined_constants(true); ?>
|
||||
<?php if (! empty($constants['user'])) : ?>
|
||||
<h3>Constants</h3>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Key</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($constants['user'] as $key => $value) : ?>
|
||||
<tr>
|
||||
<td><?= esc($key) ?></td>
|
||||
<td>
|
||||
<?php if (is_string($value)) : ?>
|
||||
<?= esc($value) ?>
|
||||
<?php else: ?>
|
||||
<pre><?= esc(print_r($value, true)) ?></pre>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Key</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($constants['user'] as $key => $value) : ?>
|
||||
<tr>
|
||||
<td><?= esc($key) ?></td>
|
||||
<td>
|
||||
<?php if (is_string($value)) : ?>
|
||||
<?= esc($value) ?>
|
||||
<?php else: ?>
|
||||
<pre><?= esc(print_r($value, true)) ?></pre>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Request -->
|
||||
<div class="content" id="request">
|
||||
<?php $request = \Config\Services::request(); ?>
|
||||
<!-- Request -->
|
||||
<div class="content" id="request">
|
||||
<?php $request = Services::request(); ?>
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width: 10em">Path</td>
|
||||
<td><?= esc($request->uri) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>HTTP Method</td>
|
||||
<td><?= esc($request->getMethod(true)) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IP Address</td>
|
||||
<td><?= esc($request->getIPAddress()) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 10em">Is AJAX Request?</td>
|
||||
<td><?= $request->isAJAX() ? 'yes' : 'no' ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Is CLI Request?</td>
|
||||
<td><?= $request->isCLI() ? 'yes' : 'no' ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Is Secure Request?</td>
|
||||
<td><?= $request->isSecure() ? 'yes' : 'no' ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>User Agent</td>
|
||||
<td><?= esc($request->getUserAgent()->getAgentString()) ?></td>
|
||||
</tr>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width: 10em">Path</td>
|
||||
<td><?= esc($request->getUri()) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>HTTP Method</td>
|
||||
<td><?= esc(strtoupper($request->getMethod())) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IP Address</td>
|
||||
<td><?= esc($request->getIPAddress()) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 10em">Is AJAX Request?</td>
|
||||
<td><?= $request->isAJAX() ? 'yes' : 'no' ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Is CLI Request?</td>
|
||||
<td><?= $request->isCLI() ? 'yes' : 'no' ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Is Secure Request?</td>
|
||||
<td><?= $request->isSecure() ? 'yes' : 'no' ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>User Agent</td>
|
||||
<td><?= esc($request->getUserAgent()->getAgentString()) ?></td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<?php $empty = true; ?>
|
||||
<?php foreach (['_GET', '_POST', '_COOKIE'] as $var) : ?>
|
||||
<?php
|
||||
<?php $empty = true; ?>
|
||||
<?php foreach (['_GET', '_POST', '_COOKIE'] as $var) : ?>
|
||||
<?php
|
||||
if (empty($GLOBALS[$var]) || ! is_array($GLOBALS[$var])) {
|
||||
continue;
|
||||
} ?>
|
||||
|
||||
<?php $empty = false; ?>
|
||||
<?php $empty = false; ?>
|
||||
|
||||
<h3>$<?= esc($var) ?></h3>
|
||||
<h3>$<?= esc($var) ?></h3>
|
||||
|
||||
<table style="width: 100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Key</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($GLOBALS[$var] as $key => $value) : ?>
|
||||
<tr>
|
||||
<td><?= esc($key) ?></td>
|
||||
<td>
|
||||
<?php if (is_string($value)) : ?>
|
||||
<?= esc($value) ?>
|
||||
<?php else: ?>
|
||||
<pre><?= esc(print_r($value, true)) ?></pre>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<table style="width: 100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Key</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($GLOBALS[$var] as $key => $value) : ?>
|
||||
<tr>
|
||||
<td><?= esc($key) ?></td>
|
||||
<td>
|
||||
<?php if (is_string($value)) : ?>
|
||||
<?= esc($value) ?>
|
||||
<?php else: ?>
|
||||
<pre><?= esc(print_r($value, true)) ?></pre>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php endforeach ?>
|
||||
<?php endforeach ?>
|
||||
|
||||
<?php if ($empty) : ?>
|
||||
<?php if ($empty) : ?>
|
||||
|
||||
<div class="alert">
|
||||
No $_GET, $_POST, or $_COOKIE Information to show.
|
||||
</div>
|
||||
<div class="alert">
|
||||
No $_GET, $_POST, or $_COOKIE Information to show.
|
||||
</div>
|
||||
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php $headers = $request->getHeaders(); ?>
|
||||
<?php if (! empty($headers)) : ?>
|
||||
<?php $headers = $request->headers(); ?>
|
||||
<?php if (! empty($headers)) : ?>
|
||||
|
||||
<h3>Headers</h3>
|
||||
<h3>Headers</h3>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Header</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($headers as $value) : ?>
|
||||
<?php
|
||||
if (empty($value)) {
|
||||
continue;
|
||||
}
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Header</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($headers as $header) : ?>
|
||||
<tr>
|
||||
<td><?= esc($header->getName(), 'html') ?></td>
|
||||
<td><?= esc($header->getValueLine(), 'html') ?></td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
if (! is_array($value)) {
|
||||
$value = [$value];
|
||||
} ?>
|
||||
<?php foreach ($value as $h) : ?>
|
||||
<tr>
|
||||
<td><?= esc($h->getName(), 'html') ?></td>
|
||||
<td><?= esc($h->getValueLine(), 'html') ?></td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Response -->
|
||||
<?php
|
||||
$response = \Config\Services::response();
|
||||
<!-- Response -->
|
||||
<?php
|
||||
$response = Services::response();
|
||||
$response->setStatusCode(http_response_code());
|
||||
?>
|
||||
<div class="content" id="response">
|
||||
<table>
|
||||
<tr>
|
||||
<td style="width: 15em">Response Status</td>
|
||||
<td><?= esc($response->getStatusCode() . ' - ' . $response->getReason()) ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="content" id="response">
|
||||
<table>
|
||||
<tr>
|
||||
<td style="width: 15em">Response Status</td>
|
||||
<td><?= esc($response->getStatusCode() . ' - ' . $response->getReasonPhrase()) ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<?php $headers = $response->getHeaders(); ?>
|
||||
<?php if (! empty($headers)) : ?>
|
||||
<?php natsort($headers) ?>
|
||||
<?php $headers = $response->headers(); ?>
|
||||
<?php if (! empty($headers)) : ?>
|
||||
<?php natsort($headers) ?>
|
||||
|
||||
<h3>Headers</h3>
|
||||
<h3>Headers</h3>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Header</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($headers as $name => $value) : ?>
|
||||
<tr>
|
||||
<td><?= esc($name, 'html') ?></td>
|
||||
<td><?= esc($response->getHeaderLine($name), 'html') ?></td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Header</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach (array_keys($headers) as $name) : ?>
|
||||
<tr>
|
||||
<td><?= esc($name, 'html') ?></td>
|
||||
<td><?= esc($response->getHeaderLine($name), 'html') ?></td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Files -->
|
||||
<div class="content" id="files">
|
||||
<?php $files = get_included_files(); ?>
|
||||
<!-- Files -->
|
||||
<div class="content" id="files">
|
||||
<?php $files = get_included_files(); ?>
|
||||
|
||||
<ol>
|
||||
<?php foreach ($files as $file) :?>
|
||||
<li><?= esc(static::cleanPath($file)) ?></li>
|
||||
<?php endforeach ?>
|
||||
</ol>
|
||||
</div>
|
||||
<ol>
|
||||
<?php foreach ($files as $file) :?>
|
||||
<li><?= esc(clean_path($file)) ?></li>
|
||||
<?php endforeach ?>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- Memory -->
|
||||
<div class="content" id="memory">
|
||||
<!-- Memory -->
|
||||
<div class="content" id="memory">
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Memory Usage</td>
|
||||
<td><?= esc(static::describeMemory(memory_get_usage(true))) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 12em">Peak Memory Usage:</td>
|
||||
<td><?= esc(static::describeMemory(memory_get_peak_usage(true))) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Memory Limit:</td>
|
||||
<td><?= esc(ini_get('memory_limit')) ?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Memory Usage</td>
|
||||
<td><?= esc(static::describeMemory(memory_get_usage(true))) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 12em">Peak Memory Usage:</td>
|
||||
<td><?= esc(static::describeMemory(memory_get_peak_usage(true))) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Memory Limit:</td>
|
||||
<td><?= esc(ini_get('memory_limit')) ?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div> <!-- /tab-content -->
|
||||
</div> <!-- /tab-content -->
|
||||
|
||||
</div> <!-- /container -->
|
||||
</div> <!-- /container -->
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="footer">
|
||||
<div class="container">
|
||||
<div class="footer">
|
||||
<div class="container">
|
||||
|
||||
<p>
|
||||
Displayed at <?= esc(date('H:i:sa')) ?> —
|
||||
PHP: <?= esc(PHP_VERSION) ?> —
|
||||
CodeIgniter: <?= esc(\CodeIgniter\CodeIgniter::CI_VERSION) ?>
|
||||
</p>
|
||||
<p>
|
||||
Displayed at <?= esc(date('H:i:sa')) ?> —
|
||||
PHP: <?= esc(PHP_VERSION) ?> —
|
||||
CodeIgniter: <?= esc(CodeIgniter::CI_VERSION) ?> --
|
||||
Environment: <?= ENVIRONMENT ?>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -1,24 +1,24 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="robots" content="noindex">
|
||||
<meta charset="UTF-8">
|
||||
<meta name="robots" content="noindex">
|
||||
|
||||
<title>Whoops!</title>
|
||||
<title><?= lang('Errors.whoops') ?></title>
|
||||
|
||||
<style type="text/css">
|
||||
<?= preg_replace('#[\r\n\t ]+#', ' ', file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.css')) ?>
|
||||
</style>
|
||||
<style>
|
||||
<?= preg_replace('#[\r\n\t ]+#', ' ', file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.css')) ?>
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="container text-center">
|
||||
<div class="container text-center">
|
||||
|
||||
<h1 class="headline">Whoops!</h1>
|
||||
<h1 class="headline"><?= lang('Errors.whoops') ?></h1>
|
||||
|
||||
<p class="lead">We seem to have hit a snag. Please try again later...</p>
|
||||
<p class="lead"><?= lang('Errors.weHitASnag') ?></p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
|
||||
180
ci4/app/Views/themes/backend/vuexy/form/activity/index.php → ci4/app/Views/themes/backend/vuexy/form/activity/activityList.php
Executable file → Normal file
180
ci4/app/Views/themes/backend/vuexy/form/activity/index.php → ci4/app/Views/themes/backend/vuexy/form/activity/activityList.php
Executable file → Normal file
@ -1,6 +1,6 @@
|
||||
<?= $this->include("themes/_commonPartialsBs/select2bs5") ?>
|
||||
<?= $this->include("themes/_commonPartialsBs/datatables") ?>
|
||||
<?= $this->extend('themes/backend/vuexy/main/activities_layout') ?>
|
||||
<?= $this->extend('themes/backend/vuexy/main/defaultlayout') ?>
|
||||
|
||||
<?= $this->section('content'); ?>
|
||||
<!--Content Body-->
|
||||
@ -137,31 +137,25 @@
|
||||
<div class="col-sm-6">
|
||||
<h4 class="card-title"><?= $title['page']??'' ?></h4>
|
||||
</div>
|
||||
<?php if (session()->get('dashboard')=='admin') : ?>
|
||||
<div class="col-sm-6 justify-content-sm-end mt-2 mt-sm-0 d-flex">
|
||||
<a href="<?= site_url("activity/all")?>" class="btn btn-primary float-md-right">
|
||||
<?=lang("App.activity_all_btn")?>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<!-- CSRF token -->
|
||||
<input type="hidden" class="txt_csrfname" name="<?= csrf_token() ?>" value="<?= csrf_hash() ?>" />
|
||||
<!-- Table -->
|
||||
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
|
||||
<div class="table-responsive">
|
||||
<table id='table-grid' class="table table-striped nowrap" style="width:100%">
|
||||
<table id='activityTable' class="table table-striped table-hover" style="width:100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?=lang("App.activity_grid_user")?></th>
|
||||
<th><?=lang("App.activity_grid_level")?></th>
|
||||
<th><?=lang("App.activity_grid_event")?></th>
|
||||
<th><?=lang("App.activity_grid_ip")?></th>
|
||||
<th><?=lang("App.activity_grid_os")?></th>
|
||||
<th><?=lang("App.activity_grid_browser")?></th>
|
||||
<th><?=lang("App.activity_grid_created")?></th>
|
||||
<th><?=lang("Actividad.user")?></th>
|
||||
<th><?=lang("Actividad.level")?></th>
|
||||
<th><?=lang("Actividad.event")?></th>
|
||||
<th><?=lang("Actividad.ip")?></th>
|
||||
<th><?=lang("Actividad.os")?></th>
|
||||
<th><?=lang("Actividad.browser")?></th>
|
||||
<th><?=lang("Actividad.createdAt")?></th>
|
||||
<th class="text-nowrap"><?= lang('Basic.global.Action') ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@ -174,48 +168,112 @@
|
||||
<?= $this->endSection() ?>
|
||||
|
||||
<?= $this->section('additionalInlineJs') ?>
|
||||
"use strict";
|
||||
$(document).ready(function () {
|
||||
let dataFormat = [
|
||||
{
|
||||
targets: 1,
|
||||
render: function ( data, type, row ) {
|
||||
switch (data) {
|
||||
case 'error':
|
||||
return '<span class="badge bg-danger"><?=lang("App.activity_alert_error")?></span>';
|
||||
case 'recovery':
|
||||
return '<span class="badge bg-secondary"><?=lang("App.activity_alert_recovery")?></span>';
|
||||
case 'throttling':
|
||||
return '<span class="badge bg-warning"><?=lang("App.activity_alert_throttling")?></span>';
|
||||
case 'information':
|
||||
return '<span class="badge bg-primary"><?=lang("App.activity_alert_information")?></span>';
|
||||
default:
|
||||
return '<span class="badge bg-primary">'+data+'</span>';
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
targets: 2,
|
||||
render: function ( data, type, row ) {
|
||||
switch (data) {
|
||||
case 'login-authenticate':
|
||||
return '<?=lang("App.activity_alert_login_auth")?>';
|
||||
case 'recovery-password':
|
||||
return '<?=lang("App.activity_alert_recovery")?>';
|
||||
default:
|
||||
return data;
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
targets: 6,
|
||||
//render: $.fn.dataTable.render.moment('YYYY-MM-DD HH:mm:ss','<?=momentDateTimeJS()?>')
|
||||
|
||||
|
||||
const lastColNr = $('#activityTable').find("tr:first th").length - 1;
|
||||
const actionBtns = function(data) {
|
||||
return `<td class="text-right py-0 align-middle">
|
||||
<div class="btn-group btn-group-sm">
|
||||
<button class="btn btn-sm btn-danger btn-delete ms-1" data-id="${data.id}"><?= lang('Basic.global.Delete') ?></button>
|
||||
</div>
|
||||
</td>`;
|
||||
};
|
||||
theTable = $('#activityTable').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
autoWidth: true,
|
||||
responsive: true,
|
||||
scrollX: true,
|
||||
lengthMenu: [ 5, 10, 25, 50, 75, 100, 250, 500, 1000, 2500 ],
|
||||
pageLength: 10,
|
||||
lengthChange: true,
|
||||
"dom": 'lfBrtip',
|
||||
"buttons": [
|
||||
'copy', 'csv', 'excel', 'print', {
|
||||
extend: 'pdfHtml5',
|
||||
orientation: 'landscape',
|
||||
pageSize: 'A4'
|
||||
}
|
||||
];
|
||||
let order = [[6, "desc"]];
|
||||
let translate = '/themes/focus2/vendor/datatables/locales/<?=langJS()?>.json';
|
||||
let button = ["<?=lang("App.global_copy")?>","<?=lang("App.global_print")?>","<?=lang("App.global_excel")?>","<?=lang("App.global_pdf")?>"];
|
||||
let columns = [{ data: 'name' },{ data: 'level' },{ data: 'event' },{ data: 'ip' },{ data: 'os' },{ data: 'browser' },{ data: 'created_at' }];
|
||||
loadDataTableAjax('table-grid', '<?=site_url("ajax/getActivities".$all??"")?>', translate, true, true, order, columns,dataFormat, button);
|
||||
],
|
||||
stateSave: true,
|
||||
order: [[1, 'asc']],
|
||||
language: {
|
||||
url: "/themes/vuexy/vendors/libs/datatables-sk/plugins/i18n/es-ES.json"
|
||||
},
|
||||
ajax : $.fn.dataTable.pipeline( {
|
||||
url: '<?= route_to('dataTableOfActividad') ?>',
|
||||
method: 'POST',
|
||||
headers: {'X-Requested-With': 'XMLHttpRequest'},
|
||||
async: true,
|
||||
}),
|
||||
columnDefs: [
|
||||
{
|
||||
orderable: false,
|
||||
searchable: false,
|
||||
targets: [lastColNr]
|
||||
}
|
||||
],
|
||||
columns : [
|
||||
{ 'data': 'user' },
|
||||
{ 'data': 'level' },
|
||||
{ 'data': 'event' },
|
||||
{ 'data': 'ip' },
|
||||
{ 'data': 'os' },
|
||||
{ 'data': 'browser' },
|
||||
{ 'data': 'created_at' },
|
||||
{ 'data': actionBtns }
|
||||
]
|
||||
});
|
||||
|
||||
theTable.on( 'draw.dt', function () {
|
||||
const boolCols = [7];
|
||||
for (let coln of boolCols) {
|
||||
theTable.column(coln, { page: 'current' }).nodes().each( function (cell, i) {
|
||||
cell.innerHTML = cell.innerHTML == '1' ? '<i class="text-success bi bi-check-lg"></i>' : '';
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/*$(document).on('click', '.btn-delete', function(e) {
|
||||
Swal.fire({
|
||||
title: '<?= lang('Basic.global.sweet.sureToDeleteTitle', [mb_strtolower(lang('Paises.pais'))]) ?>',
|
||||
text: '<?= lang('Basic.global.sweet.sureToDeleteText') ?>',
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
confirmButtonText: '<?= lang('Basic.global.sweet.deleteConfirmationButton') ?>',
|
||||
cancelButtonText: '<?= lang('Basic.global.Cancel') ?>',
|
||||
cancelButtonColor: '#d33'
|
||||
})
|
||||
.then((result) => {
|
||||
const dataId = $(this).data('id');
|
||||
const row = $(this).closest('tr');
|
||||
if (result.value) {
|
||||
$.ajax({
|
||||
url: `<?= route_to('activityList') ?>/${dataId}`,
|
||||
method: 'DELETE',
|
||||
}).done((data, textStatus, jqXHR) => {
|
||||
Toast.fire({
|
||||
icon: 'success',
|
||||
title: data.msg ?? jqXHR.statusText,
|
||||
});
|
||||
|
||||
theTable.clearPipeline();
|
||||
theTable.row($(row)).invalidate().draw();
|
||||
}).fail((jqXHR, textStatus, errorThrown) => {
|
||||
Toast.fire({
|
||||
icon: 'error',
|
||||
title: jqXHR.responseJSON.messages.error,
|
||||
});
|
||||
})
|
||||
}
|
||||
});
|
||||
});*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<?= $this->endSection() ?>
|
||||
@ -1,234 +0,0 @@
|
||||
<!--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="fab fa-windows text-pink fa-3x"></i>
|
||||
</div>
|
||||
<div class="stat-content d-inline-block">
|
||||
<div class="stat-text text-pink"><?=strtoupper(lang("App.activity_top_windows"))?></div>
|
||||
<div class="stat-digit"><?=$logs['windows']??'0'?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="stat-widget-one card-body">
|
||||
<div class="d-inline-block">
|
||||
<i class="fab fa-apple text-pink fa-3x"></i>
|
||||
</div>
|
||||
<div class="stat-content d-inline-block">
|
||||
<div class="stat-text text-pink"><?=strtoupper(lang("App.activity_top_mac"))?></div>
|
||||
<div class="stat-digit"><?=$logs['mac']??'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="fab fa-linux text-pink fa-3x"></i>
|
||||
</div>
|
||||
<div class="stat-content d-inline-block">
|
||||
<div class="stat-text text-pink"><?=strtoupper(lang("App.activity_top_linux"))?></div>
|
||||
<div class="stat-digit"><?=$logs['linux']??'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="fab fa-android text-pink fa-3x"></i>
|
||||
</div>
|
||||
<div class="stat-content d-inline-block">
|
||||
<div class="stat-text text-pink"><?=strtoupper(lang("App.activity_top_mobile"))?></div>
|
||||
<div class="stat-digit"><?=($logs['android']??'0') + ($logs['iphone']??'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="fab fa-edge text-pink fa-3x"></i>
|
||||
</div>
|
||||
<div class="stat-content d-inline-block">
|
||||
<div class="stat-text text-pink"><?=strtoupper(lang("App.activity_top_edge"))?></div>
|
||||
<div class="stat-digit"><?=($logs['ie']??'0') + ($logs['edge']??'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="fab fa-safari text-pink fa-3x"></i>
|
||||
</div>
|
||||
<div class="stat-content d-inline-block">
|
||||
<div class="stat-text text-pink"><?=strtoupper(lang("App.activity_top_safari"))?></div>
|
||||
<div class="stat-digit"><?=$logs['safari']??'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="fab fa-firefox-browser text-pink fa-3x"></i>
|
||||
</div>
|
||||
<div class="stat-content d-inline-block">
|
||||
<div class="stat-text text-pink"><?=strtoupper(lang("App.activity_top_firefox"))?></div>
|
||||
<div class="stat-digit"><?=$logs['firefox']??'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="fab fa-chrome text-pink fa-3x"></i>
|
||||
</div>
|
||||
<div class="stat-content d-inline-block">
|
||||
<div class="stat-text text-pink"><?=strtoupper(lang("App.activity_top_chrome"))?></div>
|
||||
<div class="stat-digit"><?=$logs['chrome']??'0'?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-header row">
|
||||
<div class="col-sm-6">
|
||||
<h4 class="card-title"><?= $title['page']??'' ?></h4>
|
||||
</div>
|
||||
<?php if (session()->get('dashboard')=='admin') : ?>
|
||||
<div class="col-sm-6 justify-content-sm-end mt-2 mt-sm-0 d-flex">
|
||||
<a href="<?= site_url("activity/all")?>" class="btn btn-lg btn-primary float-md-right">
|
||||
<i class="fas fa-eye"></i> <?=lang("App.activity_all_btn")?></a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<!-- CSRF token -->
|
||||
<input type="hidden" class="txt_csrfname" name="<?= csrf_token() ?>" value="<?= csrf_hash() ?>" />
|
||||
<!-- Table -->
|
||||
<div class="table-responsive">
|
||||
<table id='table-grid' class="table table-striped nowrap" style="width:100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?=lang("App.activity_grid_user")?></th>
|
||||
<th><?=lang("App.activity_grid_level")?></th>
|
||||
<th><?=lang("App.activity_grid_event")?></th>
|
||||
<th><?=lang("App.activity_grid_ip")?></th>
|
||||
<th><?=lang("App.activity_grid_os")?></th>
|
||||
<th><?=lang("App.activity_grid_browser")?></th>
|
||||
<th><?=lang("App.activity_grid_created")?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
</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>
|
||||
<!-- Datatable -->
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/jquery.dataTables.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/pickers/daterange/moment.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/dataTables.datetime.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/dataTables.buttons.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/buttons.bootstrap4.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/jszip.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/pdfmake.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/vfs_fonts.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/buttons.html5.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/buttons.print.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/buttons.colVis.min.js")?>"></script>
|
||||
<!-- Alert -->
|
||||
<script src="<?=site_url("themes/focus2/vendor/sweetalert2/dist/sweetalert2.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/toastr/js/toastr.min.js")?>"></script>
|
||||
<!-- Custom -->
|
||||
<script src="<?=site_url("assets/js/main.js")?>"></script>
|
||||
<script>
|
||||
"use strict";
|
||||
$(document).ready(function () {
|
||||
let dataFormat = [
|
||||
{
|
||||
targets: 1,
|
||||
render: function ( data, type, row ) {
|
||||
switch (data) {
|
||||
case 'error':
|
||||
return '<span class="badge badge-danger"><?=lang("App.activity_alert_error")?></span>';
|
||||
case 'recovery':
|
||||
return '<span class="badge badge-secondary"><?=lang("App.activity_alert_recovery")?></span>';
|
||||
case 'throttling':
|
||||
return '<span class="badge badge-warning"><?=lang("App.activity_alert_throttling")?></span>';
|
||||
case 'information':
|
||||
return '<span class="badge badge-primary"><?=lang("App.activity_alert_information")?></span>';
|
||||
default:
|
||||
return '<span class="badge badge-primary">'+data+'</span>';
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
targets: 2,
|
||||
render: function ( data, type, row ) {
|
||||
switch (data) {
|
||||
case 'login-authenticate':
|
||||
return '<?=lang("App.activity_alert_login_auth")?>';
|
||||
case 'recovery-password':
|
||||
return '<?=lang("App.activity_alert_recovery")?>';
|
||||
default:
|
||||
return data;
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
targets: 6,
|
||||
render: $.fn.dataTable.render.moment('YYYY-MM-DD HH:mm:ss','<?=momentDateTimeJS()?>')
|
||||
}
|
||||
];
|
||||
let order = [[6, "desc"]];
|
||||
let translate = '/themes/focus2/vendor/datatables/locales/<?=langJS()?>.json';
|
||||
let button = ["<?=lang("App.global_copy")?>","<?=lang("App.global_print")?>","<?=lang("App.global_excel")?>","<?=lang("App.global_pdf")?>"];
|
||||
let columns = [{ data: 'name' },{ data: 'level' },{ data: 'event' },{ data: 'ip' },{ data: 'os' },{ data: 'browser' },{ data: 'created_at' }];
|
||||
loadDataTableAjax('table-grid', '<?=site_url("ajax/getActivities".$all??"")?>', translate, true, true, order, columns,dataFormat, button);
|
||||
});
|
||||
</script>
|
||||
@ -6,109 +6,89 @@
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card card-info">
|
||||
<h3 class="card-header"><?= $boxTitle ?? $pageTitle ?></h3>
|
||||
<h3 class="card-header"><?= lang("RolesPermisos.editRol") ?></h3>
|
||||
<div class="card-body">
|
||||
<?= formAlert() ?>
|
||||
<form id="groupForm" method="post" class="card-body" 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="row g-3">
|
||||
<div class="col-md-6">
|
||||
<input type="hidden"
|
||||
name="id"
|
||||
value="<?= old('id', $group->id) ?>"
|
||||
>
|
||||
<div class="col-md-4">
|
||||
<label for="title" class="form-label text-dark">
|
||||
<?= lang("App.group_field_title") ?>
|
||||
<?= lang("RolesPermisos.rolName") ?>
|
||||
</label>
|
||||
<input type="text" name="title" id="title" class="form-control"
|
||||
value="<?= old('title', $group->title) ?>">
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="dashboard" class="form-label text-dark">
|
||||
<?= lang("App.group_field_dashboard") ?>
|
||||
<div class="col-md-8">
|
||||
<label for="description" class="form-label text-dark">
|
||||
<?= lang("RolesPermisos.rolDescription") ?>
|
||||
</label>
|
||||
<?php $id_select = (isset($group)) ? $group->dashboard : set_value('dashboard'); ?>
|
||||
<select name="dashboard" id="dashboard" class="select2 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 class="col-md-6">
|
||||
<button type="button" name="select_all"
|
||||
id="select_all"
|
||||
class="btn btn-primary me-sm-3 me-1">
|
||||
<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-secondary ">
|
||||
<i class="la la-toggle-off"></i> <?= lang("App.group_btn_remove") ?>
|
||||
</button>
|
||||
<input type="text" name="description" id="description" class="form-control"
|
||||
value="<?= old('description', $group->description) ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-3 mt-3">
|
||||
<div class="col-md-12">
|
||||
<h5>Role Permissions</h5>
|
||||
<h5><?= lang("RolesPermisos.rolPermissions") ?></h5>
|
||||
<!-- Permission table -->
|
||||
<div class="table-responsive">
|
||||
<table class="table table-flush-spacing">
|
||||
<tbody>
|
||||
<?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"
|
||||
<?= ruleIsChecked($group->rules, $item['name'], $subitem) ? 'checked' : '' ?>
|
||||
>
|
||||
<label for="<?= $item['name'] . '_' . $subitem ?>"
|
||||
class="form-check-label"><?= getDictionary($subitem) ?></label>
|
||||
</div>
|
||||
</td>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
<?php endforeach; ?>
|
||||
<tr>
|
||||
<td class="text-nowrap fw-semibold" colspan="1">
|
||||
<?= lang("RolesPermisos.adminRol") ?>
|
||||
<i class="ti ti-info-circle" data-bs-toggle="tooltip"
|
||||
data-bs-placement="top"
|
||||
aria-label="<?= lang("RolesPermisos.adminRolTooltip") ?>"
|
||||
data-bs-original-title="<?= lang("RolesPermisos.adminRolTooltip") ?>">
|
||||
</i>
|
||||
</td>
|
||||
<td colspan="3">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="selectAll">
|
||||
<label class="form-check-label" for="selectAll">
|
||||
<?= lang("RolesPermisos.selectAll") ?>
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<?php foreach (getAllClass() as $item): ?>
|
||||
<?php if (empty($item['path'])): ?>
|
||||
<?php foreach ($permisos as $permiso): ?>
|
||||
<tr>
|
||||
<td colspan="4" class="text-nowrap fw-semibold">
|
||||
<?= $permiso->name ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php foreach ($permiso->rules as $key => $rules): ?>
|
||||
<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"
|
||||
<?= ruleIsChecked($group->rules, $item['name'], $subitem) ? 'checked' : '' ?>
|
||||
>
|
||||
<label for="<?= $item['name'] . '_' . $subitem ?>"
|
||||
class="form-check-label"><?= getDictionary($subitem) ?></label>
|
||||
</div>
|
||||
</td>
|
||||
<?php endif; ?>
|
||||
<td class="text-nowrap fw-semibold" >
|
||||
  <?= lang("RolesPermisos." . $key . "Section") ?>
|
||||
</td>
|
||||
<?php foreach ($rules as $rule): ?>
|
||||
<td>
|
||||
<div class="form-check">
|
||||
<input type="checkbox"
|
||||
id="<?= $key . '_' . $rule ?>"
|
||||
name="<?= $key . '_' . $rule ?>"
|
||||
class="form-check-input"
|
||||
<?= ruleIsChecked($group->rules, $key, $rule) ? 'checked' : '' ?>
|
||||
>
|
||||
<label for="<?= $key . '_' . $rule ?>" class="form-check-label">
|
||||
<?= lang("RolesPermisos." . $rule . "Permission") ?>
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
<?php endforeach; ?>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
<?php endforeach;
|
||||
endforeach;
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@ -131,15 +111,11 @@
|
||||
|
||||
<?= $this->section('additionalInlineJs') ?>
|
||||
|
||||
$('#select_all').on('click', function () {
|
||||
$(':checkbox').each(function() {
|
||||
this.checked = true;
|
||||
});
|
||||
});
|
||||
$('#remove_all').on('click', function () {
|
||||
$(':checkbox').each(function() {
|
||||
this.checked = false;
|
||||
});
|
||||
$('input[name="selectAll"]').click(function() {
|
||||
var checkedStatus = this.checked;
|
||||
$('input[type="checkbox"]').each(function() {
|
||||
this.checked = checkedStatus;
|
||||
});
|
||||
});
|
||||
|
||||
<?= $this->endSection() ?>
|
||||
@ -5,7 +5,7 @@
|
||||
<div class="col-md-12">
|
||||
<div class="card card-info">
|
||||
<div class="card-header">
|
||||
<h3 class="card-title"><?= lang('Group.grouplist') ?></h3>
|
||||
<h3 class="card-title"><?= lang('RolesPermisos.pageTitle') ?></h3>
|
||||
</div><!--//.card-header -->
|
||||
<div class="card-body">
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
@ -31,7 +31,7 @@
|
||||
>
|
||||
<?= lang('Basic.global.addNew') ?>
|
||||
</button>
|
||||
<p class="mb-0 mt-1">Añadir rol si no existe</p>
|
||||
<p class="mb-0 mt-1"><?= lang("RolesPermisos.addRol") ?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -43,12 +43,12 @@
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h6 class="fw-normal mb-2"><?= $model->getUsersWithRol($item->token); ?> usuarios en total</h6>
|
||||
<h6 class="fw-normal mb-2"><?= $model->getUsersWithRol($item->keyword); ?><?= lang("RolesPermisos.totalUsers") ?></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) ?>">
|
||||
<a href="<?= route_to('editGroup', $item->id) ?>">
|
||||
<span><?= lang('Basic.global.edit') ?></span>
|
||||
</a>
|
||||
</div>
|
||||
@ -56,7 +56,7 @@
|
||||
anchor('#confirm2delete', "<i class='ti ti-trash ti-md'></i>",
|
||||
[
|
||||
'class' => 'text-muted',
|
||||
'data-href' => route_to('deleteGroup', $item->id_group),
|
||||
'data-href' => route_to('deleteGroup', $item->id),
|
||||
'data-bs-toggle' => 'modal',
|
||||
'data-bs-target' => '#confirm2delete'
|
||||
]);
|
||||
|
||||
@ -1,76 +0,0 @@
|
||||
<div class="authincation h-100">
|
||||
<div class="container-fluid h-100">
|
||||
<div class="row justify-content-center h-100 align-items-center">
|
||||
<div class="col-md-4">
|
||||
<div class="authincation-content">
|
||||
<div class="row no-gutters">
|
||||
<div class="col-xl-12">
|
||||
<div class="auth-form">
|
||||
<h4 class="text-center mb-4"><?= lang("App.login_title_otp") ?></h4>
|
||||
<form action="<?=site_url("login/otp")?>" id="sendForm" method="post">
|
||||
<?= csrf_field() ?>
|
||||
<div class="form-group">
|
||||
<label><strong><?= lang("App.login_otp_code") ?></strong></label>
|
||||
<div><span><?= lang("App.login_otp_span") ?></span></div>
|
||||
<div id="otp" class="inputs d-flex flex-row justify-content-center mt-2">
|
||||
<input class="m-2 text-center form-control rounded" type="text" id="pin_1" name="pin_1" maxlength="1" />
|
||||
<input class="m-2 text-center form-control rounded" type="text" id="pin_2" name="pin_2" maxlength="1" />
|
||||
<input class="m-2 text-center form-control rounded" type="text" id="pin_3" name="pin_3" maxlength="1" />
|
||||
<input class="m-2 text-center form-control rounded" type="text" id="pin_4" name="pin_4" maxlength="1" />
|
||||
<input class="m-2 text-center form-control rounded" type="text" id="pin_5" name="pin_5" maxlength="1" />
|
||||
<input class="m-2 text-center form-control rounded" type="text" id="pin_6" name="pin_6" maxlength="1" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center mt-1 mb-2">
|
||||
<button type="button" class="btn btn-dark btn-block" onclick="window.location.href = '<?=site_url("login")?>';"><?= lang("App.login_come_back") ?></button>
|
||||
</div>
|
||||
<p class="text-primary" id="msg" style="display: none;"><i class="fas fa-spinner fa-pulse"></i> <?= lang("App.login_wait") ?></p>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="<?=site_url("themes/focus2/vendor/global/global.min.js")?>"></script>
|
||||
<script>
|
||||
"use strict";
|
||||
$(document).ready(function () {
|
||||
$('#pin_1').focus();
|
||||
});
|
||||
document.addEventListener("DOMContentLoaded", function(event) {
|
||||
function OTPInput() {
|
||||
const inputs = document.querySelectorAll('#otp > *[id]');
|
||||
for (let i = 0; i < inputs.length; i++) {
|
||||
inputs[i].addEventListener('keydown', function(event) {
|
||||
if (event.key === "Backspace") {
|
||||
inputs[i].value = '';
|
||||
if (i !== 0) inputs[i - 1].focus();
|
||||
} else {
|
||||
if (i === inputs.length - 1 && inputs[i].value !== '') {
|
||||
return true;
|
||||
} else if (event.keyCode > 47 && event.keyCode < 58) {
|
||||
inputs[i].value = event.key;
|
||||
if (i !== inputs.length - 1) inputs[i + 1].focus();
|
||||
event.preventDefault();
|
||||
} else if (event.keyCode > 64 && event.keyCode < 91) {
|
||||
inputs[i].value = String.fromCharCode(event.keyCode);
|
||||
if (i !== inputs.length - 1) inputs[i + 1].focus();
|
||||
event.preventDefault();
|
||||
} else if (event.keyCode > 95 && event.keyCode < 106) {
|
||||
inputs[i].value = event.key;
|
||||
if (i !== inputs.length - 1) inputs[i + 1].focus();
|
||||
event.preventDefault();
|
||||
}
|
||||
if(i === 5){
|
||||
load();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
OTPInput();
|
||||
});
|
||||
</script>
|
||||
@ -1,79 +0,0 @@
|
||||
<!-- Content -->
|
||||
|
||||
<div class="authentication-wrapper authentication-cover authentication-bg">
|
||||
<div class="authentication-inner row">
|
||||
<!-- /Left Text -->
|
||||
<div class="d-none d-lg-flex col-lg-7 p-0">
|
||||
<div class="auth-cover-bg auth-cover-bg-color d-flex justify-content-center align-items-center">
|
||||
<img
|
||||
src="<?=site_url('themes/vuexy/img/safekat/login/auth-login-illustration-light.png')?>"
|
||||
alt="auth-forgot-password-cover"
|
||||
class="img-fluid my-5 auth-illustration"
|
||||
/>
|
||||
|
||||
<img
|
||||
src="<?=site_url('themes/vuexy/img/illustrations/bg-shape-image-light.png'); ?>"
|
||||
alt="auth-forgot-password-cover"
|
||||
class="platform-bg"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Left Text -->
|
||||
|
||||
<!-- Forgot Password -->
|
||||
<div class="d-flex col-12 col-lg-5 align-items-center p-sm-5 p-4">
|
||||
<div class="w-px-400 mx-auto">
|
||||
<!-- Logo -->
|
||||
<div class="app-brand mb-4">
|
||||
<a href="index.html" class="app-brand-link gap-2">
|
||||
<span class="app-brand-logo">
|
||||
<img src="<?=site_url('themes/vuexy/img/branding/logo.png')?>"
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<!-- /Logo -->
|
||||
<h3 class="mb-1 fw-bold"><?= lang("App.login_title_forgot_password") ?> 🔒</h3>
|
||||
<p class="mb-4">Enter your email and we'll send you instructions to reset your password</p>
|
||||
<?= formAlert() ?>
|
||||
<form id="sendForm" class="mb-3" action="<?=site_url("integration/reset_password")?>" method="post">
|
||||
<?= csrf_field() ?>
|
||||
<div class="mb-3">
|
||||
<label for="email" class="form-label"><?= lang("App.login_email") ?></label>
|
||||
<input
|
||||
type="email"
|
||||
class="form-control"
|
||||
id="email"
|
||||
name="email"
|
||||
placeholder="<?= lang("App.login_email_ph") ?>"
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
<?php
|
||||
// TODO IMN remove recaptcha options?
|
||||
if($settings['captcha_recovery']??false): ?>
|
||||
<?php if($settings['captcha_gateway'] == 'recaptcha'): ?>
|
||||
<div class="text-center mt-2">
|
||||
<div class="g-recaptcha" style="display: inline-block" data-sitekey="<?=$settings['captcha_site_key']??''?>"></div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if($settings['captcha_gateway'] == 'hcaptcha'): ?>
|
||||
<div class="text-center mt-2">
|
||||
<div class="h-captcha" style="display: inline-block" data-sitekey="<?=$settings['captcha_site_key']??''?>"></div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
<button class="btn btn-primary d-grid w-100"><?= lang("App.login_request") ?></button>
|
||||
</form>
|
||||
<div class="text-center">
|
||||
<a href="<?=site_url("login")?>" class="d-flex align-items-center justify-content-center">
|
||||
<i class="ti ti-chevron-left scaleX-n1-rtl"></i>
|
||||
<?= lang("App.login_come_back") ?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Forgot Password -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- / Content -->
|
||||
@ -1,112 +0,0 @@
|
||||
<!-- Content -->
|
||||
|
||||
<div class="authentication-wrapper authentication-cover authentication-bg">
|
||||
<div class="authentication-inner row">
|
||||
<!-- /Left Text -->
|
||||
<div class="d-none d-lg-flex col-lg-7 p-0">
|
||||
<div class="auth-cover-bg auth-cover-bg-color d-flex justify-content-center align-items-center">
|
||||
<img
|
||||
src="<?=site_url('themes/vuexy/img/safekat/login/auth-login-illustration-light.png')?>"
|
||||
alt="auth-login-cover"
|
||||
class="img-fluid my-5 auth-illustration"
|
||||
/>
|
||||
|
||||
<img
|
||||
src="<?=site_url('themes/vuexy/img/illustrations/bg-shape-image-light.png'); ?>"
|
||||
alt="auth-login-cover"
|
||||
class="platform-bg"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Left Text -->
|
||||
|
||||
<!-- Login -->
|
||||
<div class="d-flex col-12 col-lg-5 align-items-center p-sm-5 p-4">
|
||||
<div class="w-px-400 mx-auto">
|
||||
<!-- Logo -->
|
||||
<div class="app-brand mb-4">
|
||||
<a href="<?= site_url('login'); ?>" class="app-brand-link gap-2">
|
||||
<span class="app-brand-logo">
|
||||
<img src="<?=site_url('themes/vuexy/img/branding/logo.png')?>"
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<!-- /Logo -->
|
||||
<h3 class="mb-1 fw-bold"><?= lang("App.login_title") ?> 👋</h3>
|
||||
|
||||
<form id="formAuthentication" class="mb-3" action="<?= site_url('login/authenticate'); ?>" method="POST">
|
||||
<?= csrf_field() ?>
|
||||
<div class="mb-3">
|
||||
<label for="email" class="form-label"><?= lang("App.login_email") ?></label>
|
||||
<input
|
||||
type="email"
|
||||
class="form-control"
|
||||
id="email"
|
||||
name="email"
|
||||
placeholder="<?= lang("App.login_email_ph") ?>"
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
<div class="mb-3 form-password-toggle">
|
||||
<div class="d-flex justify-content-between">
|
||||
<label class="form-label" for="password"><?= lang("App.login_password") ?></label>
|
||||
<?php if($settings['forgot_password']??false): ?>
|
||||
<a href="<?= site_url('login/forgot_password'); ?>">
|
||||
<small><?= lang("App.login_forgot_password") ?></small>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="input-group input-group-merge">
|
||||
<input
|
||||
type="password"
|
||||
id="password"
|
||||
class="form-control"
|
||||
name="password"
|
||||
placeholder="<?= lang("App.login_password_ph") ?>"
|
||||
aria-describedby="password"
|
||||
onclick="pass()"
|
||||
/>
|
||||
<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): ?>
|
||||
<div class="mb-3">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="remember" name="remember"" />
|
||||
<label class="form-check-label" for="remember"> <?= lang("App.login_remember_me") ?> </label>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<button class="btn btn-primary d-grid w-100"><?= lang("App.login_access") ?></button>
|
||||
<?php
|
||||
// IMN OJO, lo mismo eliminar TODO
|
||||
if($settings['captcha_login']??false): ?>
|
||||
<?php if($settings['captcha_gateway'] == 'recaptcha'): ?>
|
||||
<div class="text-center mt-2">
|
||||
<div class="g-recaptcha" style="display: inline-block" data-sitekey="<?=$settings['captcha_site_key']??''?>"></div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if($settings['captcha_gateway'] == 'hcaptcha'): ?>
|
||||
<div class="text-center mt-2">
|
||||
<div class="h-captcha" style="display: inline-block" data-sitekey="<?=$settings['captcha_site_key']??''?>"></div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</form>
|
||||
|
||||
<?php if($settings['registration']??false): ?>
|
||||
<p class="text-center">
|
||||
<span><?= lang("App.login_signup_desc") ?></span>
|
||||
<a href="<?= site_url('login/signup'); ?>">
|
||||
<span><?= lang("App.login_signup") ?></span>
|
||||
</a>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Login -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- / Content -->
|
||||
@ -1,86 +0,0 @@
|
||||
<!-- Content -->
|
||||
|
||||
<div class="authentication-wrapper authentication-cover authentication-bg">
|
||||
<div class="authentication-inner row">
|
||||
<!-- /Left Text -->
|
||||
<div class="d-none d-lg-flex col-lg-7 p-0">
|
||||
<div class="auth-cover-bg auth-cover-bg-color d-flex justify-content-center align-items-center">
|
||||
<img
|
||||
src="<?=site_url('themes/vuexy/img/safekat/login/auth-login-illustration-light.png')?>"
|
||||
alt="auth-reset-password-cover"
|
||||
class="img-fluid my-5 auth-illustration"
|
||||
/>
|
||||
|
||||
<img
|
||||
src="<?=site_url('themes/vuexy/img/illustrations/bg-shape-image-light.png'); ?>"
|
||||
alt="auth-reset-password-cover"
|
||||
class="platform-bg"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Left Text -->
|
||||
|
||||
<!-- Reset Password -->
|
||||
<div class="d-flex col-12 col-lg-5 align-items-center p-4 p-sm-5">
|
||||
<div class="w-px-400 mx-auto">
|
||||
<!-- Logo -->
|
||||
<div class="app-brand mb-4">
|
||||
<a href="index.html" class="app-brand-link gap-2">
|
||||
<span class="app-brand-logo">
|
||||
<img src="<?=site_url('themes/vuexy/img/branding/logo.png')?>"
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<!-- /Logo -->
|
||||
|
||||
<h3 class="mb-1 fw-bold"><?= lang("App.login_title_recovery") ?> 🔒</h3>
|
||||
<p class="mb-4">for <span class="fw-bold"><?=$user??''?></span></p>
|
||||
<?= formAlert() ?>
|
||||
<form id="sendForm" class="mb-3" action="<?=site_url("login/recovery_store")?>" method="post">
|
||||
<?= csrf_field() ?>
|
||||
<input type="hidden" name="token" value="<?=$token??''?>">
|
||||
<input type="hidden" name="user" value="<?=$user??''?>">
|
||||
<div class="mb-3 form-password-toggle">
|
||||
<label class="form-label" for="password"><?= lang("App.login_new_password") ?></label>
|
||||
<div class="input-group input-group-merge">
|
||||
<input
|
||||
type="password"
|
||||
id="password"
|
||||
class="form-control"
|
||||
name="password"
|
||||
placeholder="<?= lang("App.login_password_ph") ?>"
|
||||
aria-describedby="password"
|
||||
onclick="pass()"
|
||||
/>
|
||||
<span class="input-group-text cursor-pointer"><i class="ti ti-eye-off"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3 form-password-toggle">
|
||||
<label class="form-label" for="confirm-password">Confirm Password</label>
|
||||
<div class="input-group input-group-merge">
|
||||
<input
|
||||
type="password"
|
||||
id="confirm-password"
|
||||
class="form-control"
|
||||
name="confirm-password"
|
||||
placeholder="············"
|
||||
aria-describedby="password"
|
||||
/>
|
||||
<span class="input-group-text cursor-pointer"><i class="ti ti-eye-off"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
<button class="btn btn-primary d-grid w-100 mb-3"><?= lang("App.login_btn_recovery") ?></button>
|
||||
<div class="text-center">
|
||||
<a href="<?=site_url("login")?>">
|
||||
<i class="ti ti-chevron-left scaleX-n1-rtl"></i>
|
||||
<?= lang("App.login_come_back") ?>
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Reset Password -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- / Content -->
|
||||
@ -1,124 +0,0 @@
|
||||
<!-- Content -->
|
||||
|
||||
<div class="authentication-wrapper authentication-cover authentication-bg">
|
||||
<div class="authentication-inner row">
|
||||
<!-- /Left Text -->
|
||||
<div class="d-none d-lg-flex col-lg-7 p-0">
|
||||
<div class="auth-cover-bg auth-cover-bg-color d-flex justify-content-center align-items-center">
|
||||
<img
|
||||
src="<?=site_url('themes/vuexy/img/safekat/login/auth-login-illustration-light.png')?>"
|
||||
alt="auth-register-cover"
|
||||
class="img-fluid my-5 auth-illustration"
|
||||
/>
|
||||
|
||||
<img
|
||||
src="<?=site_url('themes/vuexy/img/illustrations/bg-shape-image-light.png'); ?>"
|
||||
alt="auth-register-cover"
|
||||
class="platform-bg"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Left Text -->
|
||||
|
||||
<!-- Register -->
|
||||
<div class="d-flex col-12 col-lg-5 align-items-center p-sm-5 p-4">
|
||||
<div class="w-px-400 mx-auto">
|
||||
<!-- Logo -->
|
||||
<div class="app-brand mb-4">
|
||||
<a href="index.html" class="app-brand-link gap-2">
|
||||
<span class="app-brand-logo">
|
||||
<img src="<?=site_url('themes/vuexy/img/branding/logo.png')?>"
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<!-- /Logo -->
|
||||
<h3 class="mb-1 fw-bold"><?= lang("App.login_title_signup") ?> 🚀</h3>
|
||||
<p class="mb-4">Make your app management easy and fun!</p>
|
||||
|
||||
<?= formAlert() ?>
|
||||
<form id="sendForm" class="mb-3" action="<?=site_url("login/store")?>" method="POST">
|
||||
<?= csrf_field() ?>
|
||||
<div class="mb-3">
|
||||
<label for="first_name" class="form-label"><?= lang("App.login_first_name") ?></label>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="first_name"
|
||||
name="first_name"
|
||||
placeholder=<?= lang("App.login_first_name_ph") ?>
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="last_name" class="form-label"><?= lang("App.login_last_name") ?></label>
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="last_name"
|
||||
name="last_name"
|
||||
placeholder=<?= lang("App.login_last_name_ph") ?>
|
||||
autofocus
|
||||
/>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="email" class="form-label"><?= lang("App.login_email") ?></label>
|
||||
<input type="text" class="form-control" id="email" name="email" placeholder="<?= lang("App.login_email_ph") ?>" />
|
||||
</div>
|
||||
<div class="mb-3 form-password-toggle">
|
||||
<label class="form-label" for="password"><?= lang("App.login_password") ?></label>
|
||||
<div class="input-group input-group-merge">
|
||||
<input
|
||||
type="password"
|
||||
id="btn_pass"
|
||||
class="form-control"
|
||||
name="password"
|
||||
placeholder="<?= lang("App.login_password_ph") ?>"
|
||||
aria-describedby="password"
|
||||
onclick="pass()"
|
||||
/>
|
||||
<span class="input-group-text cursor-pointer"><i class="ti ti-eye-off"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if($settings['terms_conditions']??false): ?>
|
||||
<div class="mb-3">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="accept" name="accept" <?= set_value('accept')=='on'?'checked':''?> />
|
||||
<label class="form-check-label" for="accept">
|
||||
I agree to
|
||||
<a href="javascript:void(0);"><?= lang("App.login_accept_terms") ?></a>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<button class="btn btn-primary d-grid w-100" onclick="validate()"><?= lang("App.login_register") ?></button>
|
||||
</form>
|
||||
|
||||
<p class="text-center">
|
||||
<a href="<?=site_url("login")?>">
|
||||
<span><?= lang("App.login_come_back") ?></span>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Register -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- / Content -->
|
||||
|
||||
<script>
|
||||
"use strict";
|
||||
function validate(){
|
||||
if(<?= $settings['terms_conditions']??0 ?> === 1){
|
||||
if(document.getElementById('accept').checked === true){
|
||||
load();
|
||||
}else{
|
||||
toastr.error('<?= lang("App.login_alert_terms") ?>','<?= lang("App.login_alert") ?>!',{positionClass: 'toast-top-center'})
|
||||
}
|
||||
}else{
|
||||
load();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@ -1,166 +0,0 @@
|
||||
<!--Style-->
|
||||
<link href="<?=site_url("themes/focus2/vendor/summernote/summernote.css")?>" rel="stylesheet">
|
||||
<!--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-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="row mx-0" style="width: 100%;">
|
||||
<div class="col-sm-6 p-md-0">
|
||||
<h4 class="card-title"><?= $title['page']??'' ?></h4>
|
||||
</div>
|
||||
<div class="col-sm-6 p-md-0 justify-content-sm-end mt-2 mt-sm-0 d-flex">
|
||||
<button type="button" class="btn btn-sm btn-secondary" data-toggle="modal" data-target="#tagModalCenter" title="<?=lang("App.template_label_tag")?>">
|
||||
<i class="fas fa-tags"></i>
|
||||
</button>
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="tagModalCenter">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title"><?=lang("App.template_modal_title")?></h5>
|
||||
<button type="button" class="close" data-dismiss="modal"><span>×</span></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p><?=lang("App.template_modal_subtitle")?></p>
|
||||
<?php foreach (keywordEmail()??[] as $item) : ?>
|
||||
<button type="button" class="btn btn-primary btn-sm mt-1 mr-1" onclick="copy('[<?=$item?>]')">[<?=$item?>]</button>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-dark" data-dismiss="modal"><?=lang("App.template_modal_btn_1")?></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<?= formAlert() ?>
|
||||
<form class="form" action="<?=site_url("notification/store")?>" method="post">
|
||||
<?= csrf_field() ?>
|
||||
<div class="form-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<div class="form-group">
|
||||
<label for="email_gateway" class="text-dark"><?=lang("App.notification_field_user")?></label>
|
||||
<?php $id_select = (isset($obj)) ? $obj['user_recipient'] : set_value('user_recipient');?>
|
||||
<select name="user_recipient" id="user_recipient" class="form-control">
|
||||
<option value="" <?= $id_select == "" ? 'selected' : '' ?>><?=lang("App.notification_field_user_all")?></option>
|
||||
<?php foreach($user??[] as $item): ?>
|
||||
<option value="<?=$item['token']?>" <?= $id_select == $item['token'] ? 'selected' : '' ?>><?=$item['first_name']?> - <?=$item['email']?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<div class="form-group">
|
||||
<label for="title" class="text-dark"><?=lang("App.notification_field_title")?></label>
|
||||
<input type="text" name="title" id="title" class="form-control" value="<?= (isset($obj)) ? $obj['title'] : set_value('title') ?>">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="form-group">
|
||||
<label class="text-dark"><?=lang("App.notification_field_body")?></label>
|
||||
<textarea class="form-control" id="body" name="body" rows="3"><?= (isset($obj)) ? $obj['body'] : set_value('body') ?></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<label class="text-primary"><?=lang("App.notification_field_send_msg")?></label>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="form-group">
|
||||
<label class="text-dark"><?=lang("App.notification_field_send_email")?></label>
|
||||
<div class="custom-control custom-switch">
|
||||
<input type="checkbox" id="send_email_notification" name="send_email_notification" class="custom-control-input" <?= $obj['send_email_notification']??false ? 'checked' : ''?>>
|
||||
<label for="send_email_notification" class="custom-control-label"><?=lang("App.notification_field_send_label")?></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-actions mt-2">
|
||||
<a href="<?= site_url($btn_return['route']??'#') ?>" class="<?= $btn_return['class']??''?>">
|
||||
<i class="<?= $btn_return['icon']??'' ?>"></i> <?= $btn_return['title']??'' ?>
|
||||
</a>
|
||||
<button type="submit" class="<?= $btn_submit['class']??''?>">
|
||||
<i class="<?= $btn_submit['icon']??'' ?>"></i> <?= $btn_submit['title']??'' ?>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</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>
|
||||
<script src="<?=site_url("themes/focus2/vendor/select2/js/select2.full.min.js")?>"></script>
|
||||
<!-- Summernote -->
|
||||
<script src="<?=site_url("themes/focus2/vendor/summernote/summernote.min.js")?>"></script>
|
||||
<!-- Alert -->
|
||||
<script src="<?=site_url("themes/focus2/vendor/sweetalert2/dist/sweetalert2.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/toastr/js/toastr.min.js")?>"></script>
|
||||
<!-- Form -->
|
||||
<script>
|
||||
"use strict";
|
||||
$(document).ready(function () {
|
||||
$('#title').focus();
|
||||
$("#user_recipient").select2();
|
||||
let configSummerNote = {
|
||||
height: 150, // set editor height
|
||||
minHeight: null, // set minimum height of editor
|
||||
maxHeight: null, // set maximum height of editor
|
||||
focus: true, // set focus to editable area after initializing summernote
|
||||
toolbar: [
|
||||
['style', ['style']],
|
||||
['font', ['bold', 'italic', 'underline', 'clear']],
|
||||
['fontname', ['fontname']],
|
||||
['color', ['color']],
|
||||
['para', ['ul', 'ol', 'paragraph']],
|
||||
['height', ['height']],
|
||||
['table', ['table']],
|
||||
['insert', ['link', 'picture', 'hr']],
|
||||
['view', ['codeview']]
|
||||
]
|
||||
}
|
||||
$("#body").summernote(configSummerNote);
|
||||
});
|
||||
$("#body").on("summernote.enter", function(we, e) {
|
||||
$(this).summernote("pasteHTML", "<br><br>");
|
||||
e.preventDefault();
|
||||
});
|
||||
function copy(copyText) {
|
||||
navigator.clipboard.writeText(copyText);
|
||||
toastr.success('<?= lang("App.template_modal_copy_msg") ?>','<?= lang("App.template_modal_copy") ?>!',{positionClass: 'toast-top-center'})
|
||||
$('#tagModalCenter').modal('hide')
|
||||
}
|
||||
</script>
|
||||
<?= toastAlert() ?>
|
||||
@ -1,149 +0,0 @@
|
||||
<!--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-12">
|
||||
<div class="card">
|
||||
<div class="card-header row">
|
||||
<div class="col-sm-6">
|
||||
<h4 class="card-title"><?= $title['page']??'' ?></h4>
|
||||
</div>
|
||||
<div class="col-sm-6 justify-content-sm-end mt-2 mt-sm-0 d-flex">
|
||||
<a href="<?= site_url($btn_add['route']??'#')?>" class="<?= $btn_add['class']??''?>">
|
||||
<i class="<?= $btn_add['icon']??'' ?>"></i> <?= $btn_add['title']??'' ?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<!-- CSRF token -->
|
||||
<input type="hidden" class="txt_csrfname" name="<?= csrf_token() ?>" value="<?= csrf_hash() ?>" />
|
||||
<!-- Table -->
|
||||
<div class="table-responsive">
|
||||
<table id='table-grid' class="table table-striped nowrap" style="width:100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?=lang("App.notification_grid_sender")?></th>
|
||||
<th><?=lang("App.notification_grid_recipient")?></th>
|
||||
<th><?=lang("App.notification_grid_title")?></th>
|
||||
<th><?=lang("App.notification_grid_email")?></th>
|
||||
<th><?=lang("App.notification_grid_view")?></th>
|
||||
<th><?=lang("App.notification_grid_created")?></th>
|
||||
<th><?=lang("App.user_grid_options")?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
</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>
|
||||
<!-- Datatable -->
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/jquery.dataTables.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/pickers/daterange/moment.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/dataTables.datetime.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/dataTables.buttons.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/buttons.bootstrap4.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/jszip.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/pdfmake.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/vfs_fonts.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/buttons.html5.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/buttons.print.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/datatables/js/buttons.colVis.min.js")?>"></script>
|
||||
<!-- Alert -->
|
||||
<script src="<?=site_url("themes/focus2/vendor/sweetalert2/dist/sweetalert2.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/toastr/js/toastr.min.js")?>"></script>
|
||||
<!-- Custom -->
|
||||
<script src="<?=site_url("assets/js/main.js")?>"></script>
|
||||
<script>
|
||||
"use strict";
|
||||
$(document).ready(function () {
|
||||
let dataFormat = [
|
||||
{
|
||||
targets: 3,
|
||||
render: function ( data, type, row ) {
|
||||
switch (data) {
|
||||
case '1':
|
||||
return '<span class="badge badge-success"><?=lang("App.notification_grid_yes")?></span>';
|
||||
default:
|
||||
return '<span class="badge badge-dark"><?=lang("App.notification_grid_no")?></span>';
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
targets: 4,
|
||||
render: function ( data, type, row ) {
|
||||
switch (data) {
|
||||
case '1':
|
||||
return '<span class="badge badge-success"><?=lang("App.notification_grid_yes")?></span>';
|
||||
default:
|
||||
return '<span class="badge badge-dark"><?=lang("App.notification_grid_no")?></span>';
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
targets: 5,
|
||||
render: function ( data, type, row ) {
|
||||
switch (data) {
|
||||
case '1':
|
||||
return '<span class="badge badge-success"><?=lang("App.notification_grid_yes")?></span>';
|
||||
default:
|
||||
return '<span class="badge badge-dark"><?=lang("App.notification_grid_no")?></span>';
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
targets: 6,
|
||||
render: $.fn.dataTable.render.moment('YYYY-MM-DD HH:mm:ss','<?=momentDateTimeJS()?>')
|
||||
}
|
||||
];
|
||||
let order = [[0, "asc"]];
|
||||
let translate = '/themes/focus2/vendor/datatables/locales/<?=langJS()?>.json';
|
||||
let button = ["<?=lang("App.global_copy")?>","<?=lang("App.global_print")?>","<?=lang("App.global_excel")?>","<?=lang("App.global_pdf")?>"];
|
||||
let columns = [{ data: 'sender' },{ data: 'recipient' },{ data: 'title' },{ data: 'is_send_email' },{ data: 'is_read' },{ data: 'created_at' },{ data: 'options' }];
|
||||
loadDataTableAjax('table-grid', '<?=site_url('ajax/getNotification')?>', translate, true, true, order, columns,dataFormat, button);
|
||||
});
|
||||
function delete_this(id){
|
||||
swal({
|
||||
title: "<?=lang("App.notification_delete_title")?>",
|
||||
text: "<?=lang("App.notification_delete_subtitle")?>",
|
||||
type: "warning",
|
||||
showCancelButton: !0,
|
||||
confirmButtonColor: "#f34141",
|
||||
confirmButtonText: "<?=lang("App.notification_delete_btn_ok")?>",
|
||||
cancelButtonText: "<?=lang("App.notification_delete_btn_cancel")?>",
|
||||
closeOnConfirm: !1
|
||||
}).then(function(isConfirm) {
|
||||
|
||||
if (isConfirm.value) {
|
||||
window.location.href = '<?=site_url("notification/delete/")?>'+id;
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
<?= sweetAlert() ?>
|
||||
@ -0,0 +1,431 @@
|
||||
<div class="row mt-4">
|
||||
|
||||
<!-- Navigation -->
|
||||
<div class="col-lg-3 col-md-4 col-12 mb-md-0 mb-3">
|
||||
<div class="d-flex justify-content-between flex-column mb-2 mb-md-0">
|
||||
<ul class="nav nav-align-left nav-pills flex-column">
|
||||
<li class="nav-item">
|
||||
<button class="nav-link active" data-bs-toggle="tab" data-bs-target="#general">
|
||||
<i class="ti ti-sitemap me-1 ti-sm"></i>
|
||||
<span class="align-middle fw-semibold"><?=lang("App.settings_label_general")?></span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#email">
|
||||
<i class="ti ti-mail me-1 ti-sm"></i>
|
||||
<span class="align-middle fw-semibold"><?=lang("App.settings_label_email")?></span>
|
||||
</button>
|
||||
</li>
|
||||
<?php /*
|
||||
<li class="nav-item">
|
||||
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#backup">
|
||||
<i class="ti ti-server me-1 ti-sm"></i>
|
||||
<span class="align-middle fw-semibold"><?=lang("App.settings_label_backup")?></span>
|
||||
</button>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#logs">
|
||||
<i class="ti ti-archive me-1 ti-sm"></i>
|
||||
<span class="align-middle fw-semibold"><?=lang("App.settings_label_logs")?></span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#cron">
|
||||
<i class="ti ti-rotate-clockwise me-1 ti-sm"></i>
|
||||
<span class="align-middle fw-semibold"><?=lang("App.settings_label_cron")?></span>
|
||||
</button>
|
||||
</li>
|
||||
*/ ?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Navigation -->
|
||||
|
||||
<!-- System Settings -->
|
||||
<div class="col-lg-9 col-md-8 col-12">
|
||||
<form class="form" action="<?= $formAction ?>" method="post">
|
||||
<?= csrf_field() ?>
|
||||
<div class="tab-content py-0">
|
||||
<!-- General Settings -->
|
||||
<div class="tab-pane fade show active" id="general" role="tabpanel">
|
||||
<div class="d-flex mb-3 gap-3">
|
||||
<div>
|
||||
<span class="badge bg-label-primary rounded-2 p-2">
|
||||
<i class="ti ti-sitemap ti-lg"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="mb-0">
|
||||
<span class="align-middle"><?=lang("App.settings_label_general_title")?></span>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="row card-body">
|
||||
DETALLES ESPECIFICOS DEL ERP (TBD)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /General Settings -->
|
||||
|
||||
<!-- Email Settings -->
|
||||
<div class="tab-pane fade show" id="email" role="tabpanel">
|
||||
<div class="d-flex mb-3 gap-3">
|
||||
<div>
|
||||
<span class="badge bg-label-primary rounded-2 p-2">
|
||||
<i class="ti ti-mail ti-lg"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="mb-0">
|
||||
<span class="align-middle"><?=lang("App.settings_label_email_title")?></span>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="row card-body">
|
||||
<div class="col-lg-12 mb-3">
|
||||
<label class="text-primary"><?=lang("App.settings_label_email_subtitle_1")?></label>
|
||||
</div>
|
||||
<div class="col-lg-3 mb-3">
|
||||
<label for="email_gateway" class="form-label"><?=lang("App.settings_field_email_gateway")?></label>
|
||||
<?php $id_select = (isset($obj)) ? $obj['email_gateway'] : set_value('email_gateway');?>
|
||||
<select name="email_gateway" id="email_gateway" class="select2 form-control">
|
||||
<option value="smtp" <?= $id_select == "smtp" ? 'selected' : '' ?>><?=lang("App.settings_field_email_gateway_smtp")?></option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-lg-3 mb-3">
|
||||
<label for="email_smtp" class="form-label"><?=lang("App.settings_field_email_smtp")?></label>
|
||||
<input
|
||||
type="text"
|
||||
id="email_smtp"
|
||||
name="email_smtp"
|
||||
class="form-control"
|
||||
placeholder="<?=lang("App.settings_field_email_smtp_ph")?>"
|
||||
value="<?= old('email_smtp', $settingsEntity->email_smtp) ?>"
|
||||
>
|
||||
</div>
|
||||
<div class="col-lg-3 mb-3">
|
||||
<label for="email_port" class="form-label"><?=lang("App.settings_field_email_port")?></label>
|
||||
<input
|
||||
type="number"
|
||||
id="email_port"
|
||||
name="email_port"
|
||||
class="form-control"
|
||||
placeholder="<?=lang("App.settings_field_email_port_ph")?>"
|
||||
value="<?= old('email_port', $settingsEntity->email_port) ?>"
|
||||
>
|
||||
</div>
|
||||
<div class="col-lg-3 mb-3">
|
||||
<label for="email_cert" class="form-label"><?=lang("App.settings_field_email_cert")?></label>
|
||||
<?php $id_select = (isset($settingsEntity)) ? $settingsEntity->email_cert : 'none';?>
|
||||
<select name="email_cert" id="email_cert" class="select2 form-control">
|
||||
<option value="none" <?= $id_select == "none" ? 'selected' : '' ?>><?=lang("App.settings_field_email_cert_none")?></option>
|
||||
<option value="ssl" <?= $id_select == "ssl" ? 'selected' : '' ?>><?=lang("App.settings_field_email_cert_ssl")?></option>
|
||||
<option value="tls" <?= $id_select == "tls" ? 'selected' : '' ?>><?=lang("App.settings_field_email_cert_tls")?></option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-lg-6 mb-3">
|
||||
<label for="email_address" class="form-label"><?=lang("App.settings_field_email_address")?></label>
|
||||
<input
|
||||
type="text"
|
||||
id="email_address"
|
||||
name="email_address"
|
||||
class="form-control"
|
||||
placeholder="<?=lang("App.settings_field_email_address_ph")?>"
|
||||
value="<?= old('email_address', $settingsEntity->email_address) ?>"
|
||||
>
|
||||
</div>
|
||||
<div class="col-lg-6 mb-3">
|
||||
<label for="email_pass" class="form-label"><?=lang("App.settings_field_email_pass")?></label>
|
||||
<input
|
||||
type="password"
|
||||
id="email_pass"
|
||||
name="email_pass"
|
||||
class="form-control"
|
||||
placeholder="<?=lang("App.settings_field_email_pass_ph")?>"
|
||||
value="<?= old('email_pass', $settingsEntity->email_pass) ?>"
|
||||
>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6 mb-3">
|
||||
<label for="email_name" class="form-label"><?=lang("App.settings_field_email_name")?></label>
|
||||
<input
|
||||
type="text"
|
||||
id="email_name"
|
||||
name="email_name" class="form-control"
|
||||
placeholder="<?=lang("App.settings_field_email_name_ph")?>"
|
||||
value="<?= old('email_name', $settingsEntity->email_name) ?>"
|
||||
>
|
||||
</div>
|
||||
<?php /*
|
||||
<div class="col-lg-12 mt-4 mb-3">
|
||||
<label class="text-primary"><?=lang("App.settings_field_test_send")?></label>
|
||||
</div>
|
||||
<div class="col-lg-6 mb-3">
|
||||
<label class="form-label"><?=lang("App.settings_field_email_address")?></label>
|
||||
<div class="input-group">
|
||||
<input
|
||||
type="email"
|
||||
id="send_email_test"
|
||||
name="send_email_test"
|
||||
class="form-control"
|
||||
placeholder="<?=lang("App.settings_field_email_address_ph")?>"
|
||||
>
|
||||
<div class="input-group-append">
|
||||
<button type="button" class="btn btn-outline-primary" onclick="send_test()"><?=lang("App.settings_field_test_send_btn")?></button>
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-primary" id="msg_email_test" style="display: none;"><i class="fas fa-spinner fa-pulse"></i> <?= lang("App.login_wait") ?></p>
|
||||
</div>
|
||||
*/ ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Email Settings -->
|
||||
|
||||
<?php /*
|
||||
<!-- Backup Settings -->
|
||||
<div class="tab-pane fade show" id="backup" role="tabpanel">
|
||||
<div class="d-flex mb-3 gap-3">
|
||||
<div>
|
||||
<span class="badge bg-label-primary rounded-2 p-2">
|
||||
<i class="ti ti-server ti-lg"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="mb-0">
|
||||
<span class="align-middle"><?=lang("App.settings_label_backup_title")?></span>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="row card-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 mb-3">
|
||||
<label class="text-primary"><?=lang("App.settings_label_backup_subtitle_1")?></label>
|
||||
</div>
|
||||
<div class="col-lg-4 mb-3">
|
||||
<label for="backup_storage" class="form-label"><?=lang("App.settings_field_backup_storage")?></label>
|
||||
<?php $id_select = (isset($obj)) ? $obj['backup_storage'] : set_value('backup_storage');?>
|
||||
<select name="backup_storage" id="backup_storage" class="select2 form-control">
|
||||
<option value="local" <?= $id_select == "local" ? 'selected' : '' ?>><?=lang("App.settings_field_storage_gateway_local")?></option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-lg-4 mb-3">
|
||||
<label for="backup_table" class="form-label"><?=lang("App.settings_field_backup_table")?></label>
|
||||
<?php $select = (isset($obj)) ? $obj['backup_table'] : set_value('backup_table');?>
|
||||
<select name="backup_table[]" id="backup_table" class="select2 form-control" multiple="multiple">
|
||||
<?php
|
||||
$select = explode(',',$select);
|
||||
foreach($select??[] as $id_select){
|
||||
if ($id_select == "all"){
|
||||
$all = 'selected';
|
||||
}
|
||||
}
|
||||
?>
|
||||
<option value="all" <?=$all??''?>><?=lang("App.settings_field_backup_table_all")?></option>
|
||||
<?php foreach ($tables??[] as $item) : ?>
|
||||
<?php foreach ($select??[] as $id_select) : ?>
|
||||
<?php
|
||||
if ($id_select == $item){
|
||||
$selItem = 'selected';
|
||||
}
|
||||
?>
|
||||
<?php endforeach; ?>
|
||||
<option value="<?=$item?>" <?=$selItem??''?>><?=lang("App.settings_field_backup_table")?> (<?=$item?>)</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-lg-4 mb-3">
|
||||
<label for="backup_time" class="form-label"><?=lang("App.settings_field_backup_time")?></label>
|
||||
<?php $id_select = (isset($obj)) ? $obj['backup_time'] : set_value('backup_time');?>
|
||||
<select name="backup_time" id="backup_time" class="select2 form-control">
|
||||
<?php for ($i = 0; $i <= 23; $i++) : ?>
|
||||
<option value="<?= $i < 10 ? '0'.$i.':00:00':$i.':00:00' ?>" <?= $id_select == "<?= $i < 10 ? '0'.$i.':00:00':$i.':00:00' ?>" ? 'selected' : '' ?>><?= $i < 10 ? '0'.$i.':00':$i.':00' ?></option>
|
||||
<option value="<?= $i < 10 ? '0'.$i.':30:00':$i.':30:00' ?>" <?= $id_select == "<?= $i < 10 ? '0'.$i.':30:00':$i.':30:00' ?>" ? 'selected' : '' ?>><?= $i < 10 ? '0'.$i.':30':$i.':30' ?></option>
|
||||
<?php endfor; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-lg-12 mb-3">
|
||||
<label for="backup_email" class="form-label"><?=lang("App.settings_field_backup_email")?></label>
|
||||
<input
|
||||
type="text"
|
||||
id="backup_email"
|
||||
min="1"
|
||||
name="backup_email"
|
||||
class="form-control"
|
||||
placeholder="<?=lang("App.settings_field_backup_email_ph")?>"
|
||||
value="<?= (isset($obj)) ? $obj['backup_email'] : set_value('backup_email');?>"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-lg-3 mb-3">
|
||||
<div class="small mb-3"><?=lang("App.settings_field_backup_notification_email")?></div>
|
||||
<label class="switch">
|
||||
<input
|
||||
type="checkbox"
|
||||
id="backup_notification_email"
|
||||
name="backup_notification_email"
|
||||
class="switch-input"
|
||||
<?= $obj['backup_notification_email']??false ? 'checked' : ''?>
|
||||
/>
|
||||
<span class="switch-toggle-slider">
|
||||
<span class="switch-on"></span>
|
||||
<span class="switch-off"></span>
|
||||
</span>
|
||||
<span class="switch-label"><?=lang("App.global_activate")?></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg-3 mb-3">
|
||||
<div class="small mb-3"><?=lang("App.settings_field_backup_automatic")?></div>
|
||||
<label class="switch">
|
||||
<input
|
||||
type="checkbox"
|
||||
id="backup_automatic"
|
||||
name="backup_automatic"
|
||||
class="switch-input"
|
||||
<?= $obj['backup_automatic']??false ? 'checked' : ''?>
|
||||
/>
|
||||
<span class="switch-toggle-slider">
|
||||
<span class="switch-on"></span>
|
||||
<span class="switch-off"></span>
|
||||
</span>
|
||||
<span class="switch-label"><?=lang("App.global_activate")?></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12 text-right mb-3">
|
||||
<a href="<?=site_url("integration/create_backup/1")?>" class="btn btn-primary mt-2">
|
||||
<i class="fas fa-download"></i> <?=lang("App.settings_label_backup_btn_1")?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Backup Settings -->
|
||||
|
||||
<!-- Logs Settings -->
|
||||
<div class="tab-pane fade show" id="logs" role="tabpanel">
|
||||
<div class="d-flex mb-3 gap-3">
|
||||
<div>
|
||||
<span class="badge bg-label-primary rounded-2 p-2">
|
||||
<i class="ti ti-archive ti-lg"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="mb-0">
|
||||
<span class="align-middle"><?=lang("App.settings_label_logs_title")?></span>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="row card-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 mb-3">
|
||||
<label class="text-primary"><?=lang("App.settings_label_logs_subtitle_1")?></label>
|
||||
</div>
|
||||
<div class="col-lg-3 mb-3">
|
||||
<div class="small mb-3"><?=lang("App.settings_field_remove_log")?></div>
|
||||
<label class="switch">
|
||||
<input
|
||||
type="checkbox"
|
||||
id="remove_log"
|
||||
name="remove_log"
|
||||
class="switch-input"
|
||||
<?= $obj['remove_log']??false ? 'checked' : ''?>
|
||||
/>
|
||||
<span class="switch-toggle-slider">
|
||||
<span class="switch-on"></span>
|
||||
<span class="switch-off"></span>
|
||||
</span>
|
||||
<span class="switch-label"><?=lang("App.global_activate")?></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-lg-3 mb-3">
|
||||
<label for="remove_log_time" class="form-label"><?=lang("App.settings_field_remove_log_time")?></label>
|
||||
<div class="input-group">
|
||||
<input
|
||||
type="number"
|
||||
id="remove_log_time"
|
||||
min="1"
|
||||
name="remove_log_time"
|
||||
class="form-control"
|
||||
placeholder="<?=lang("App.settings_field_remove_log_time_ph")?>"
|
||||
value="<?= (isset($obj)) ? $obj['remove_log_time'] : set_value('remove_log_time');?>"
|
||||
/>
|
||||
<span class="input-group-text"><?=lang("App.global_days")?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Logs Settings -->
|
||||
|
||||
<!-- Cron Settings -->
|
||||
<div class="tab-pane fade show" id="cron" role="tabpanel">
|
||||
<div class="d-flex mb-3 gap-3">
|
||||
<div>
|
||||
<span class="badge bg-label-primary rounded-2 p-2">
|
||||
<i class="ti ti-rotate-clockwise ti-lg"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="mb-0">
|
||||
<span class="align-middle"><?=lang("App.settings_label_cron_title")?></span>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="row card-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 mb-3">
|
||||
<label class="text-primary"><?=lang("App.settings_label_cron_subtitle_1")?></label>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-12 mb-3">
|
||||
<p class="form-label">
|
||||
<b><?=lang("App.settings_label_cron_timer")?></b>
|
||||
<br><?=lang("App.settings_label_cron_timer_time")?>
|
||||
<br><?=getenv('app.baseURL').'/cron'?>
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-lg-12 mb-3">
|
||||
<label class="text-primary"><?=lang("App.settings_label_cron_subtitle_2")?></label>
|
||||
<!-- CSRF token -->
|
||||
<input type="hidden" class="txt_csrfname" name="<?= csrf_token() ?>" value="<?= csrf_hash() ?>" />
|
||||
<!-- Table -->
|
||||
<table id='table-grid' class="table table-striped nowrap" style="width:100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?=lang("App.settings_grid_routine")?></th>
|
||||
<th><?=lang("App.settings_group_grid_error")?></th>
|
||||
<th><?=lang("App.settings_group_grid_created_at")?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Cron Settings -->
|
||||
*/ ?>
|
||||
|
||||
</div>
|
||||
<div class="tab-content pt-4">
|
||||
<button type="submit" class="btn btn-primary float-start me-sm-3 me-1">
|
||||
<?= lang("App.global_save") ?>
|
||||
</button>
|
||||
<a href="<?= site_url('/') ?>" class="btn btn-secondary">
|
||||
<?= lang("App.global_come_back") ?>
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!-- /System Settings -->
|
||||
|
||||
</div>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,182 +0,0 @@
|
||||
<!--Style-->
|
||||
<link href="<?=site_url("themes/focus2/vendor/summernote/summernote.css")?>" rel="stylesheet">
|
||||
<!--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>
|
||||
<form class="form" action="<?=site_url("settings/template_store")?>" method="post">
|
||||
<?= csrf_field() ?>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="row mx-0" style="width: 100%;">
|
||||
<div class="col-sm-6 p-md-0">
|
||||
<h4 class="card-title"><?=lang("App.template_subtitle_email")?></h4>
|
||||
</div>
|
||||
<div class="col-sm-6 p-md-0 justify-content-sm-end mt-2 mt-sm-0 d-flex">
|
||||
<button type="button" class="btn btn-sm btn-secondary" data-toggle="modal" data-target="#tagModalCenter" title="<?=lang("App.template_label_tag")?>">
|
||||
<i class="fas fa-tags"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="default-tab">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<?php $count=1; ?>
|
||||
<?php foreach ($template??[] as $item) : ?>
|
||||
<?php if ($item['type']=='email') : ?>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link <?=$count==1?'active':''?>" data-toggle="tab" href="#email_<?=$item['id_template']?>"><?=lang("App.".$item['name'])?></a>
|
||||
</li>
|
||||
<?php $count++; ?>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<?php $count=1; ?>
|
||||
<?php foreach ($template??[] as $item) : ?>
|
||||
<?php if ($item['type']=='email') : ?>
|
||||
<div class="tab-pane fade show <?=$count==1?'active':''?>" id="email_<?=$item['id_template']?>" role="tabpanel">
|
||||
<div class="row mt-4">
|
||||
<div class="col-lg-12">
|
||||
<div class="form-group">
|
||||
<label class="text-dark"><?=lang("App.template_label_title")?></label>
|
||||
<input type="text" id="title_email_<?=$item['id_template']?>" name="title_email_<?=$item['id_template']?>" class="form-control" placeholder="<?=lang("App.template_label_title_ph")?>" value="<?=$item['subject']?>">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-12">
|
||||
<div class="form-group">
|
||||
<label class="text-dark"><?=lang("App.template_label_message")?></label>
|
||||
<textarea class="form-control" id="body_email_<?=$item['id_template']?>" name="body_email_<?=$item['id_template']?>" rows="3"><?=$item['body']?></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php $count++; ?>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="form-actions">
|
||||
<a href="<?= site_url($btn_return['route']??'#') ?>" class="<?= $btn_return['class']??''?>">
|
||||
<i class="<?= $btn_return['icon']??'' ?>"></i> <?= $btn_return['title']??'' ?>
|
||||
</a>
|
||||
<button type="submit" class="<?= $btn_submit['class']??''?>">
|
||||
<i class="<?= $btn_submit['icon']??'' ?>"></i> <?= $btn_submit['title']??'' ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="tagModalCenter">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title"><?=lang("App.template_modal_title")?></h5>
|
||||
<button type="button" class="close" data-dismiss="modal"><span>×</span></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p><?=lang("App.template_modal_subtitle")?></p>
|
||||
<?php foreach (keywordEmail()??[] as $item) : ?>
|
||||
<button type="button" class="btn btn-primary btn-sm mt-1 mr-1" onclick="copy('[<?=$item?>]')">[<?=$item?>]</button>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-dark" data-dismiss="modal"><?=lang("App.template_modal_btn_1")?></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</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/select2/js/select2.full.min.js")?>"></script>
|
||||
<!-- Summernote -->
|
||||
<script src="<?=site_url("themes/focus2/vendor/summernote/summernote.min.js")?>"></script>
|
||||
<!-- Alert -->
|
||||
<script src="<?=site_url("themes/focus2/vendor/sweetalert2/dist/sweetalert2.min.js")?>"></script>
|
||||
<script src="<?=site_url("themes/focus2/vendor/toastr/js/toastr.min.js")?>"></script>
|
||||
<!-- Form -->
|
||||
<script>
|
||||
"use strict";
|
||||
$(document).ready(function () {
|
||||
$('#first_name').focus();
|
||||
$("#email_gateway").select2();
|
||||
$("#email_cert").select2();
|
||||
|
||||
let configSummerNote = {
|
||||
height: 150, // set editor height
|
||||
minHeight: null, // set minimum height of editor
|
||||
maxHeight: null, // set maximum height of editor
|
||||
focus: true, // set focus to editable area after initializing summernote
|
||||
toolbar: [
|
||||
['style', ['style']],
|
||||
['font', ['bold', 'italic', 'underline', 'clear']],
|
||||
['fontname', ['fontname']],
|
||||
['color', ['color']],
|
||||
['para', ['ul', 'ol', 'paragraph']],
|
||||
['height', ['height']],
|
||||
['table', ['table']],
|
||||
['insert', ['link', 'picture', 'hr']],
|
||||
['view', ['codeview']]
|
||||
]
|
||||
}
|
||||
<?php foreach ($template??[] as $item) : ?>
|
||||
$("#body_<?=$item['type']?>_<?=$item['id_template']?>").summernote(configSummerNote);
|
||||
<?php endforeach; ?>
|
||||
});
|
||||
<?php foreach ($template??[] as $item) : ?>
|
||||
$("#body_<?=$item['type']?>_<?=$item['id_template']?>").on("summernote.enter", function(we, e) {
|
||||
$(this).summernote("pasteHTML", "<br><br>");
|
||||
e.preventDefault();
|
||||
});
|
||||
<?php endforeach; ?>
|
||||
function copy(copyText) {
|
||||
navigator.clipboard.writeText(copyText);
|
||||
toastr.success('<?= lang("App.template_modal_copy_msg") ?>','<?= lang("App.template_modal_copy") ?>!',{positionClass: 'toast-top-center'})
|
||||
$('#tagModalCenter').modal('hide')
|
||||
}
|
||||
</script>
|
||||
<?= sweetAlert() ?>
|
||||
<?= toastAlert() ?>
|
||||
@ -0,0 +1,32 @@
|
||||
<?= $this->include("themes/_commonPartialsBs/select2bs5") ?>
|
||||
<?= $this->include("themes/_commonPartialsBs/sweetalert") ?>
|
||||
<?= $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">
|
||||
<?= view("themes/_commonPartialsBs/_alertBoxes") ?>
|
||||
<?= !empty($validation->getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?>
|
||||
<?= view("themes/backend/vuexy/form/settings/_settingsFormItems") ?>
|
||||
</div><!-- /.card-body -->
|
||||
|
||||
<div class="card-footer">
|
||||
|
||||
</div><!-- /.card-footer -->
|
||||
|
||||
</div><!-- //.card -->
|
||||
</div><!--//.col -->
|
||||
</div><!--//.row -->
|
||||
<?= $this->endSection() ?>
|
||||
|
||||
|
||||
<?= $this->section("additionalInlineJs") ?>
|
||||
|
||||
|
||||
|
||||
<?= $this->endSection() ?>
|
||||
@ -15,10 +15,11 @@
|
||||
<table id="tableOfUsers" class="table table-striped table-hover using-data-table" style="width: 100%;">
|
||||
<thead>
|
||||
<tr>
|
||||
<?php /*<th><?= lang('Users.idUser') ?></th> */?>
|
||||
<th><?= lang('Users.firstName') ?></th>
|
||||
<th><?= lang('Users.lastName') ?></th>
|
||||
<th><?= lang('Users.group') ?></th>
|
||||
<th><?= lang('Users.lastAccess') ?></th>
|
||||
<?php /*
|
||||
<th><?= lang('Users.group') ?></th>
|
||||
<th><?= lang('Users.mobile') ?></th>
|
||||
<th><?= lang('Users.email') ?></th>
|
||||
<th><?= lang('Users.address') ?></th>
|
||||
@ -27,34 +28,30 @@
|
||||
<th><?= lang('Users.country') ?></th>
|
||||
<th><?= lang('Users.zipCode') ?></th>
|
||||
<th><?= lang('Users.lastIp') ?></th>
|
||||
<th><?= lang('Users.lastAccess') ?></th>
|
||||
|
||||
<th><?= lang('Users.picture') ?></th>
|
||||
<th><?= lang('Users.language') ?></th>
|
||||
<th><?= lang('Users.blocked') ?></th>
|
||||
<th><?= lang('Users.emailConfirmed') ?></th>
|
||||
<?php /*
|
||||
<th><?= lang('Users.token') ?></th>
|
||||
<th><?= lang('Users.status') ?></th>
|
||||
<th><?= lang('Users.createdAt') ?></th>
|
||||
<th><?= lang('Users.updatedAt') ?></th>
|
||||
*/?>
|
||||
*/ ?>
|
||||
<th class="text-nowrap"><?= lang('Basic.global.Action') ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($userList as $item ) : ?>
|
||||
<tr>
|
||||
<?php /*
|
||||
<td class="align-middle text-center">
|
||||
<?=$item->id_user ?>
|
||||
</td>
|
||||
*/?>
|
||||
<td class="align-middle">
|
||||
<?= empty($item->first_name) || strlen($item->first_name) < 51 ? esc($item->first_name) : character_limiter(esc($item->first_name), 50) ?>
|
||||
</td>
|
||||
<td class="align-middle">
|
||||
<?= empty($item->last_name) || strlen($item->last_name) < 51 ? esc($item->last_name) : character_limiter(esc($item->last_name), 50) ?>
|
||||
</td>
|
||||
|
||||
<td class="align-middle text-nowrap">
|
||||
<?= empty($item->last_active) ? '' : date('d/m/Y H:m:s', strtotime($item->last_active)) ?>
|
||||
</td>
|
||||
|
||||
<?php /*
|
||||
|
||||
<td class="align-middle">
|
||||
<?= empty($user_model->getGroupsTitles($item->token)) || strlen($user_model->getGroupsTitles($item->token)) < 51 ? esc($user_model->getGroupsTitles($item->token)) : character_limiter($user_model->getGroupsTitles($item->token), 50) ?>
|
||||
@ -101,29 +98,11 @@
|
||||
<td class="align-middle">
|
||||
<?= esc($item->email_confirmed) ?>
|
||||
</td>
|
||||
<?php /*
|
||||
<td class="align-middle">
|
||||
<?= esc($item->token) ?>
|
||||
</td>
|
||||
<td class="align-middle text-center text-green">
|
||||
*/ ?>
|
||||
|
||||
<?php if ( $item->status ) { ?>
|
||||
|
||||
<i class="text-success bi bi-check-lg"></i>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
</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('editUser', $item->id_user), "<i class='ti ti-pencil ti-sm mx-2'></i>", ['class'=>'text-body', 'data-id'=>$item->id_user,]); ?>
|
||||
<?=anchor('#confirm2delete', "<i class='ti ti-trash ti-sm mx-2'></i>", ['class'=>'text-body', 'data-href'=>route_to('deleteUser', $item->id_user), 'data-bs-toggle'=>'modal', 'data-bs-target'=>'#confirm2delete']); ?>
|
||||
<?=anchor(route_to('editUser', $item->id), "<i class='ti ti-pencil ti-sm mx-2'></i>", ['class'=>'text-body', 'data-id'=>$item->id,]); ?>
|
||||
<?=anchor('#confirm2delete', "<i class='ti ti-trash ti-sm mx-2'></i>", ['class'=>'text-body', 'data-href'=>route_to('deleteUser', $item->id), 'data-bs-toggle'=>'modal', 'data-bs-target'=>'#confirm2delete']); ?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
@ -1,29 +0,0 @@
|
||||
<!-- Required vendors -->
|
||||
<!-- Core JS -->
|
||||
<script src="<?= site_url('themes/vuexy/vendor/libs/jquery/jquery.js') ?>"></script>
|
||||
<script src="<?= site_url('themes/vuexy/vendor/libs/popper/popper.js') ?>"></script>
|
||||
<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="<?= 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>
|
||||
|
||||
|
||||
<!-- Vendors JS -->
|
||||
<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 -->
|
||||
|
||||
<!-- Custom JS -->
|
||||
<script src="<?= site_url('assets/js/login.js'); ?>"></script>
|
||||
|
||||
<?= toastAlert() ?>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,103 +0,0 @@
|
||||
<?php
|
||||
$session = session();
|
||||
$token = $session->get('token') ?? '';
|
||||
$tfa = $session->get('tfa') ?? false;
|
||||
$settings = $session->get('settings');
|
||||
if (!empty($token) && $tfa == false) {
|
||||
echo "<script>window.location.href = '/'; </script>";
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html
|
||||
lang="<?= $settings['default_language'] ?? 'es' ?>"
|
||||
class="h-100"
|
||||
class="dark-style customizer-hide"
|
||||
dir="ltr"
|
||||
data-theme="theme-default"
|
||||
data-assets-path="<?= site_url('themes/vuexy/') ?>"
|
||||
data-template="vertical-menu-template-no-customizer"
|
||||
>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"
|
||||
/>
|
||||
|
||||
<title><?= $settings['title'] ?? '' ?><?= empty($title ?? '') ? '' : ' - ' . $title ?></title>
|
||||
|
||||
<meta name="description" content=""/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" type="image/x-icon" href="<?= site_url('themes/vuexy/img/favicon/favicon.ico') ?>"/>
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="<?= site_url('themes/vuexy/img/favicon/apple-icon-57x57.png') ?>">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="<?= site_url('themes/vuexy/img/favicon/apple-icon-60x60.png') ?>">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="<?= site_url('themes/vuexy/img/favicon/apple-icon-72x72.png') ?>">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="<?= site_url('themes/vuexy/img/favicon/apple-icon-76x76.png') ?>">
|
||||
<link rel="apple-touch-icon" sizes="114x114"
|
||||
href="<?= site_url('themes/vuexy/img/favicon/apple-icon-114x114.png') ?>">
|
||||
<link rel="apple-touch-icon" sizes="120x120"
|
||||
href="<?= site_url('themes/vuexy/img/favicon/apple-icon-120x120.png') ?>">
|
||||
<link rel="apple-touch-icon" sizes="144x144"
|
||||
href="<?= site_url('themes/vuexy/img/favicon/apple-icon-144x144.png') ?>">
|
||||
<link rel="apple-touch-icon" sizes="152x152"
|
||||
href="<?= site_url('themes/vuexy/img/favicon/apple-icon-152x152.png') ?>">
|
||||
<link rel="apple-touch-icon" sizes="180x180"
|
||||
href="<?= site_url('themes/vuexy/img/favicon/apple-icon-180x180.png') ?>">
|
||||
<link rel="icon" type="image/png" sizes="192x192"
|
||||
href="<?= site_url('themes/vuexy/img/favicon/android-icon-192x192.png') ?>">
|
||||
<link rel="icon" type="image/png" sizes="32x32"
|
||||
href="<?= site_url('themes/vuexy/img/favicon/favicon-32x32.png') ?>">
|
||||
<link rel="icon" type="image/png" sizes="96x96"
|
||||
href="<?= site_url('themes/vuexy/img/favicon/favicon-96x96.png') ?>">
|
||||
<link rel="icon" type="image/png" sizes="16x16"
|
||||
href="<?= site_url('themes/vuexy/img/favicon/favicon-16x16.png') ?>">
|
||||
<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
|
||||
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"
|
||||
/>
|
||||
|
||||
<!-- Icons -->
|
||||
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/fonts/fontawesome.css') ?>"/>
|
||||
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/fonts/tabler-icons.css') ?>"/>
|
||||
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/fonts/flag-icons.css') ?>"/>
|
||||
|
||||
<!-- Core CSS -->
|
||||
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/css/rtl/core-dark.css') ?>"/>
|
||||
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/css/rtl/theme-default-dark.css') ?>"/>
|
||||
<link rel="stylesheet" href="<?= site_url('themes/vuexy/css/safekat.css') ?>"/>
|
||||
|
||||
<!-- Vendors CSS -->
|
||||
<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') ?>"/>
|
||||
|
||||
<!-- Page CSS -->
|
||||
<!-- Page -->
|
||||
<link rel="stylesheet" href="<?= site_url('themes/vuexy/vendor/css/pages/page-auth.css') ?>"/>
|
||||
<!-- Helpers -->
|
||||
<script src="<?= site_url('themes/vuexy/vendor/js/helpers.js') ?>"></script>
|
||||
<script src="<?= site_url('themes/vuexy/js/config.js') ?>"></script>
|
||||
|
||||
<?php
|
||||
if ($settings['captcha_gateway'] == 'recaptcha') {
|
||||
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>";
|
||||
}
|
||||
?>
|
||||
</head>
|
||||
<body>
|
||||
@ -4,7 +4,7 @@ $token = $session->get('token') ?? '';
|
||||
$tfa = $session->get('tfa') ?? false;
|
||||
$settings = $session->get('settings');
|
||||
|
||||
$picture = session()->get('picture');
|
||||
$picture = "/assets/img/default-user.png";
|
||||
$pulse = session()->get('pulse');
|
||||
$notification = session()->get('notification');
|
||||
|
||||
@ -31,7 +31,7 @@ if (!empty($token) && $tfa == false) {
|
||||
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"
|
||||
/>
|
||||
|
||||
<title><?= lang("App.dashboard_title") ?> - <?= $settings['title'] ?? '' ?></title>
|
||||
<title><?= config('Safekat')->appName ?></title>
|
||||
|
||||
<meta name="description" content=""/>
|
||||
|
||||
@ -269,7 +269,7 @@ if (!empty($token) && $tfa == false) {
|
||||
<div class="dropdown-divider"></div>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="<?= site_url("login/logout") ?>">
|
||||
<a class="dropdown-item" href="<?= site_url("logout") ?>">
|
||||
<i class="ti ti-logout me-2 ti-sm"></i>
|
||||
<span class="align-middle"><?= lang("App.menu_logout") ?></span>
|
||||
</a>
|
||||
|
||||
@ -1,16 +1,7 @@
|
||||
<?php
|
||||
$session = session();
|
||||
$token = $session->get('token') ?? '';
|
||||
$tfa = $session->get('tfa') ?? false;
|
||||
$settings = $session->get('settings');
|
||||
|
||||
$picture = session()->get('picture');
|
||||
$pulse = session()->get('pulse');
|
||||
$notification = session()->get('notification');
|
||||
|
||||
if (!empty($token) && $tfa == false) {
|
||||
//echo "<script>window.location.href = '/'; </script>";
|
||||
}
|
||||
$picture = "/assets/img/default-user.png";
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
|
||||
@ -31,7 +22,7 @@ if (!empty($token) && $tfa == false) {
|
||||
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"
|
||||
/>
|
||||
|
||||
<title><?= lang("App.dashboard_title") ?> - <?= $settings['title'] ?? '' ?></title>
|
||||
<title><?= config('Safekat')->appName ?></title>
|
||||
|
||||
<meta name="description" content=""/>
|
||||
|
||||
@ -502,7 +493,7 @@ if (!empty($token) && $tfa == false) {
|
||||
<div class="dropdown-divider"></div>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="<?= site_url("login/logout") ?>">
|
||||
<a class="dropdown-item" href="<?= site_url("logout") ?>">
|
||||
<i class="ti ti-logout me-2 ti-sm"></i>
|
||||
<span class="align-middle"><?= lang("App.menu_logout") ?></span>
|
||||
</a>
|
||||
|
||||
@ -1,16 +1,7 @@
|
||||
<?php
|
||||
$session = session();
|
||||
$token = $session->get('token') ?? '';
|
||||
$tfa = $session->get('tfa') ?? false;
|
||||
$settings = $session->get('settings');
|
||||
|
||||
$picture = session()->get('picture');
|
||||
$pulse = session()->get('pulse');
|
||||
$notification = session()->get('notification');
|
||||
|
||||
if (!empty($token) && $tfa == false) {
|
||||
//echo "<script>window.location.href = '/'; </script>";
|
||||
}
|
||||
$picture = "/assets/img/default-user.png";
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
|
||||
@ -31,7 +22,7 @@ if (!empty($token) && $tfa == false) {
|
||||
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"
|
||||
/>
|
||||
|
||||
<title><?= lang("App.dashboard_title") ?> - <?= $settings['title'] ?? '' ?></title>
|
||||
<title><?= config('Safekat')->appName ?></title>
|
||||
|
||||
<meta name="description" content=""/>
|
||||
|
||||
@ -267,7 +258,7 @@ if (!empty($token) && $tfa == false) {
|
||||
<div class="dropdown-divider"></div>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="<?= site_url("login/logout") ?>">
|
||||
<a class="dropdown-item" href="<?= site_url("logout") ?>">
|
||||
<i class="ti ti-logout me-2 ti-sm"></i>
|
||||
<span class="align-middle"><?= lang("App.menu_logout") ?></span>
|
||||
</a>
|
||||
|
||||
@ -4,7 +4,7 @@ $token = $session->get('token') ?? '';
|
||||
$tfa = $session->get('tfa') ?? false;
|
||||
$settings = $session->get('settings');
|
||||
|
||||
$picture = session()->get('picture');
|
||||
$picture = "/assets/img/default-user.png";
|
||||
$pulse = session()->get('pulse');
|
||||
$notification = session()->get('notification');
|
||||
|
||||
@ -30,7 +30,7 @@ if (!empty($token) && $tfa == false) {
|
||||
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"
|
||||
/>
|
||||
|
||||
<title><?= lang("App.dashboard_title") ?> - <?= $settings['title'] ?? '' ?></title>
|
||||
<title><?= config('Safekat')->appName ?></title>
|
||||
|
||||
<meta name="description" content=""/>
|
||||
|
||||
@ -204,7 +204,7 @@ if (!empty($token) && $tfa == false) {
|
||||
<div class="dropdown-divider"></div>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="<?= site_url("login/logout") ?>">
|
||||
<a class="dropdown-item" href="<?= site_url("logout") ?>">
|
||||
<i class="ti ti-logout me-2 ti-sm"></i>
|
||||
<span class="align-middle"><?= lang("App.menu_logout") ?></span>
|
||||
</a>
|
||||
|
||||
@ -4,7 +4,7 @@ $token = $session->get('token') ?? '';
|
||||
$tfa = $session->get('tfa') ?? false;
|
||||
$settings = $session->get('settings');
|
||||
|
||||
$picture = session()->get('picture');
|
||||
$picture = "/assets/img/default-user.png";
|
||||
$pulse = session()->get('pulse');
|
||||
$notification = session()->get('notification');
|
||||
|
||||
@ -31,7 +31,7 @@ if (!empty($token) && $tfa == false) {
|
||||
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"
|
||||
/>
|
||||
|
||||
<title><?= lang("App.dashboard_title") ?> - <?= $settings['title'] ?? '' ?></title>
|
||||
<title><?= config('Safekat')->appName ?></title>
|
||||
|
||||
<meta name="description" content=""/>
|
||||
|
||||
@ -272,7 +272,7 @@ if (!empty($token) && $tfa == false) {
|
||||
<div class="dropdown-divider"></div>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="<?= site_url("login/logout") ?>">
|
||||
<a class="dropdown-item" href="<?= site_url("logout") ?>">
|
||||
<i class="ti ti-logout me-2 ti-sm"></i>
|
||||
<span class="align-middle"><?= lang("App.menu_logout") ?></span>
|
||||
</a>
|
||||
|
||||
@ -5,7 +5,7 @@ $tfa = $session->get('tfa') ?? false;
|
||||
$settings = $session->get('settings');
|
||||
|
||||
// Legacy TODO: check?
|
||||
$picture = session()->get('picture');
|
||||
$picture = "/assets/img/default-user.png";
|
||||
$pulse = session()->get('pulse');
|
||||
$notification = session()->get('notification');
|
||||
|
||||
@ -174,7 +174,7 @@ if (!empty($token) && $tfa == false) {
|
||||
<span class="ml-2"><?= lang("App.menu_activity") ?></span>
|
||||
</a>
|
||||
--->
|
||||
<a href="<?= site_url('login/logout'); ?>" class="dropdown-item">
|
||||
<a href="<?= site_url('logout'); ?>" class="dropdown-item">
|
||||
<i class="fas fa-sign-out-alt"></i>
|
||||
<span class="ml-2"><?= lang("App.menu_logout") ?></span>
|
||||
</a>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,7 @@ $token = $session->get('token') ?? '';
|
||||
$tfa = $session->get('tfa') ?? false;
|
||||
$settings = $session->get('settings');
|
||||
|
||||
$picture = session()->get('picture');
|
||||
$picture = "/assets/img/default-user.png";
|
||||
$pulse = session()->get('pulse');
|
||||
$notification = session()->get('notification');
|
||||
|
||||
@ -31,7 +31,7 @@ if (!empty($token) && $tfa == false) {
|
||||
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"
|
||||
/>
|
||||
|
||||
<title><?= lang("App.dashboard_title") ?> - <?= $settings['title'] ?? '' ?></title>
|
||||
<title><?= config('Safekat')->appName ?></title>
|
||||
|
||||
<meta name="description" content=""/>
|
||||
|
||||
@ -273,7 +273,7 @@ if (!empty($token) && $tfa == false) {
|
||||
<div class="dropdown-divider"></div>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="<?= site_url("login/logout") ?>">
|
||||
<a class="dropdown-item" href="<?= site_url("logout") ?>">
|
||||
<i class="ti ti-logout me-2 ti-sm"></i>
|
||||
<span class="align-middle"><?= lang("App.menu_logout") ?></span>
|
||||
</a>
|
||||
|
||||
@ -1,22 +1,16 @@
|
||||
<?php
|
||||
|
||||
$session = session();
|
||||
$viewMode = $session->get('view_mode');
|
||||
|
||||
if ($viewMode == config("Basics")->vista_maquetacion) {
|
||||
|
||||
include "menu_maquetacion.php";
|
||||
|
||||
}
|
||||
else if ($viewMode == config("Basics")->vista_digitalizacion) {
|
||||
|
||||
include "menu_digitalizacion.php";
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
include "menu_impresion.php";
|
||||
|
||||
switch ($viewMode) {
|
||||
case config("Safekat")->vista_maquetacion:
|
||||
include "menu_maquetacion.php";
|
||||
break;
|
||||
case config("Safekat")->vista_digitalizacion:
|
||||
include "menu_digitalizacion.php";
|
||||
break;
|
||||
default:
|
||||
include "menu_impresion.php";
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user