Continuo migrando, estoy perfilando activity y los settings

This commit is contained in:
imnavajas
2024-05-01 22:13:00 +02:00
parent dce9e08cf6
commit 54de3402f3
62 changed files with 698 additions and 425 deletions

6
.idea/safekat.iml generated
View File

@ -1,7 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/ci4" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/ci4/app" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/ci4/app/ThirdParty/DatatablesEditor/" isTestSource="false" packagePrefix="DataTables\" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>

View File

@ -54,7 +54,6 @@ Events::on('pre_system', static function () {
}
});
/*
Events::on('login', static function ($user) {
helper('logger');
getSystemSettings();
@ -65,4 +64,3 @@ Events::on('logout', static function ($user) {
helper('logger');
setLog('information','user-logout', $user->id);
});
*/

View File

@ -15,6 +15,18 @@ $routes->get('/', 'Home::index');
$routes->get('lang/{locale}', 'Language::index');
$routes->get('viewmode/(:alpha)', 'Viewmode::index/$1');
$routes->group('activity', ['namespace' => 'App\Controllers\Sistema'], function ($routes) {
$routes->get('', 'Actividad::index', ['as' => 'activityList']);
$routes->post('datatable', 'Actividad::datatable', ['as' => 'dataTableOfActividad']);
});
$routes->group('settings', ['namespace' => 'App\Controllers\Sistema'], function ($routes) {
$routes->get('', 'Ajustes::settings', ['as' => 'settingsEdit']);
$routes->post('', 'Ajustes::settings', ['as' => 'settingsPost']);
});
/*
* --------------------------------------------------------------------
* Route Definitions

View File

@ -37,7 +37,7 @@ class BaseController extends Controller
*
* @var array
*/
protected $helpers = ['general','jwt'];
protected $helpers = ['general', 'go_common'];
/**
* Constructor.
@ -57,24 +57,7 @@ class BaseController extends Controller
$language->setLocale($session->lang);
// Set TimeZone
if(empty($session->get('settings'))){
$settingsModel = new SettingsModel();
$settings = $settingsModel->select('default_timezone')->first()??[];
date_default_timezone_set($settings['default_timezone']??'America/Sao_Paulo');
}else{
date_default_timezone_set($session->get('settings')['default_timezone']??'America/Sao_Paulo');
}
date_default_timezone_set('Europe/Madrid');
// Get notification
if(!empty($session->get('token'))) {
$notificationModel = new NotificationModel();
$pulse = $notificationModel->where('user_recipient',$session->get('token'))->where('is_read',false)->countAllResults() ?? 0;
$notification = $notificationModel->select('token,title,is_read,created_at')->where('user_recipient',$session->get('token'))->orderBy('created_at','desc')->findAll(5) ?? [];
$session->set('notification', $notification);
$session->set('pulse', $pulse);
}else{
$session->set('notification', []);
$session->set('pulse', 0);
}
}
}

View File

@ -8,7 +8,7 @@ use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
abstract class GoBaseResourceController extends \CodeIgniter\RESTful\ResourceController
abstract class BaseResourceController extends \CodeIgniter\RESTful\ResourceController
{
/**
*
@ -48,7 +48,7 @@ abstract class GoBaseResourceController extends \CodeIgniter\RESTful\ResourceCon
*
* @var string
*/
protected static $viewPath;
protected static string $viewPath;
/**
@ -85,7 +85,7 @@ abstract class GoBaseResourceController extends \CodeIgniter\RESTful\ResourceCon
*
* @var array
*/
protected $helpers = ['session', 'go_common', 'form', 'text', 'general','jwt']; //JJO
protected $helpers = ['session', 'go_common', 'form', 'text', 'general']; //JJO
/**
* Initializer method.

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Clientes;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -19,7 +19,7 @@ use App\Models\Configuracion\FormaPagoModel;
use App\Models\Configuracion\PaisModel;
class Cliente extends \App\Controllers\GoBaseResourceController
class Cliente extends \App\Controllers\BaseResourceController
{
protected $modelName = ClienteModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Clientes;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -14,7 +14,7 @@ use DataTables\Editor;
use DataTables\Editor\Field;
use DataTables\Editor\Validate;
class Clientecontactos extends \App\Controllers\GoBaseResourceController
class Clientecontactos extends \App\Controllers\BaseResourceController
{
protected $modelName = ClienteContactoModel::class;

View File

@ -10,7 +10,7 @@ use DataTables\Editor;
use DataTables\Editor\Field;
use DataTables\Editor\Validate;
class Clientedirecciones extends \App\Controllers\GoBaseResourceController
class Clientedirecciones extends \App\Controllers\BaseResourceController
{
protected $modelName = ClienteDireccionesModel::class;
protected $format = 'json';

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Clientes;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
use App\Entities\Clientes\ClientePlantillaPreciosEntity;
@ -9,7 +9,7 @@ use App\Entities\Clientes\ClientePlantillaPreciosEntity;
use App\Models\Clientes\ClientePlantillaPreciosModel;
class Clienteplantillaprecios extends \App\Controllers\GoBaseResourceController
class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
{
protected $modelName = ClientePlantillaPreciosModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Clientes;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
use App\Entities\Clientes\ClientePlantillaPreciosLineasEntity;
@ -13,7 +13,7 @@ use DataTables\Editor;
use DataTables\Editor\Field;
use DataTables\Editor\Validate;
class Clienteplantillaprecioslineas extends \App\Controllers\GoBaseResourceController
class Clienteplantillaprecioslineas extends \App\Controllers\BaseResourceController
{
protected $modelName = ClientePlantillaPreciosLineasModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Clientes;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
use App\Entities\Clientes\ClientePreciosEntity;
@ -12,7 +12,7 @@ use DataTables\Editor;
use DataTables\Editor\Field;
use DataTables\Editor\Validate;
class ClientePrecios extends \App\Controllers\GoBaseResourceController
class ClientePrecios extends \App\Controllers\BaseResourceController
{
protected $modelName = ClientePreciosModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Clientes;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Clientes\ClienteUsuariosModel;
use App\Models\Collection;
@ -15,7 +15,7 @@ use DataTables\Editor;
use DataTables\Editor\Field;
use DataTables\Editor\Validate;
class Clienteusuarios extends \App\Controllers\GoBaseResourceController
class Clienteusuarios extends \App\Controllers\BaseResourceController
{
protected $modelName = ClienteUsuariosModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Compras;
use stdClass;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -9,7 +9,7 @@ use App\Entities\Compras\ProveedorEntity;
use App\Models\Compras\ProveedorModel;
class Proveedores extends \App\Controllers\GoBaseResourceController {
class Proveedores extends \App\Controllers\BaseResourceController {
protected $modelName = ProveedorModel::class;
protected $format = 'json';

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Compras;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -9,7 +9,7 @@ use App\Entities\Compras\ProveedorTipoEntity;
use App\Models\Compras\ProveedorTipoModel;
class ProveedoresTipos extends \App\Controllers\GoBaseResourceController {
class ProveedoresTipos extends \App\Controllers\BaseResourceController {
protected $modelName = ProveedorTipoModel::class;
protected $format = 'json';

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Configuracion;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -11,7 +11,7 @@ use App\Models\Configuracion\PaisModel;
use App\Models\Configuracion\ComunidadAutonomaModel;
class Comunidadesautonomas extends \App\Controllers\GoBaseResourceController
class Comunidadesautonomas extends \App\Controllers\BaseResourceController
{
protected $modelName = ComunidadAutonomaModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Configuracion;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -9,7 +9,7 @@ use App\Entities\Configuracion\FormaPagoEntity;
use App\Models\Configuracion\FormaPagoModel;
class Formaspagos extends \App\Controllers\GoBaseResourceController
class Formaspagos extends \App\Controllers\BaseResourceController
{
protected $modelName = FormaPagoModel::class;

View File

@ -2,7 +2,7 @@
use App\Entities\Usuarios\UserGroupEntity;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Usuarios\UserGroupModel;
use App\Models\Usuarios\GroupUserModel;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Configuracion;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -9,7 +9,7 @@ use App\Entities\Configuracion\Imposicion;
use App\Models\Configuracion\ImposicionModel;
class Imposiciones extends \App\Controllers\GoBaseResourceController
class Imposiciones extends \App\Controllers\BaseResourceController
{
protected $modelName = ImposicionModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Configuracion;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -9,7 +9,7 @@ use App\Entities\Configuracion\Maquina;
use App\Models\Configuracion\MaquinaModel;
class Maquinas extends \App\Controllers\GoBaseResourceController
class Maquinas extends \App\Controllers\BaseResourceController
{
protected $modelName = MaquinaModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Configuracion;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -13,7 +13,7 @@ use
DataTables\Editor\Field;
class Maquinascalles extends \App\Controllers\GoBaseResourceController
class Maquinascalles extends \App\Controllers\BaseResourceController
{
protected static $controllerSlug = 'maquinascalles';

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Configuracion;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -11,7 +11,7 @@ use App\Models\Configuracion\MaquinaModel;
use App\Models\Configuracion\MaquinasDefectoModel;
class Maquinasdefecto extends \App\Controllers\GoBaseResourceController
class Maquinasdefecto extends \App\Controllers\BaseResourceController
{
protected $modelName = MaquinasDefectoModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Configuracion;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -24,7 +24,7 @@ use
DataTables\Editor\Validate,
DataTables\Editor\ValidateOptions;
class Maquinaspapelesimpresion extends \App\Controllers\GoBaseResourceController {
class Maquinaspapelesimpresion extends \App\Controllers\BaseResourceController {
protected $modelName = MaquinasPapelesImpresionModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Configuracion;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -15,7 +15,7 @@ use
DataTables\Editor,
DataTables\Editor\Field;
class Maquinastarifasimpresion extends \App\Controllers\GoBaseResourceController
class Maquinastarifasimpresion extends \App\Controllers\BaseResourceController
{
protected $modelName = MaquinasTarifasImpresionModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Configuracion;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -9,7 +9,7 @@ use App\Entities\Configuracion\PaisEntity;
use App\Models\Configuracion\PaisModel;
class Paises extends \App\Controllers\GoBaseResourceController
class Paises extends \App\Controllers\BaseResourceController
{
protected $modelName = PaisModel::class;

View File

@ -3,7 +3,7 @@
namespace App\Controllers\Configuracion;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -11,7 +11,7 @@ use App\Entities\Configuracion\PapelGenerico;
use App\Models\Configuracion\PapelGenericoModel;
class Papelesgenericos extends \App\Controllers\GoBaseResourceController
class Papelesgenericos extends \App\Controllers\BaseResourceController
{
protected $modelName = PapelGenericoModel::class;

View File

@ -3,7 +3,7 @@
namespace App\Controllers\Configuracion;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
// DataTables PHP library
@ -36,7 +36,7 @@ use App\Models\Configuracion\MaquinasPapelesImpresionModel;
use App\Models\Configuracion\MaquinaModel;
class Papelesimpresion extends \App\Controllers\GoBaseResourceController
class Papelesimpresion extends \App\Controllers\BaseResourceController
{
protected $modelName = PapelImpresionModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Configuracion;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -9,7 +9,7 @@ use App\Entities\Configuracion\PapelFormatoEntity;
use App\Models\Configuracion\PapelFormatoModel;
class Papelformato extends \App\Controllers\GoBaseResourceController {
class Papelformato extends \App\Controllers\BaseResourceController {
protected $modelName = PapelFormatoModel::class;
protected $format = 'json';

View File

@ -19,7 +19,7 @@ use
DataTables\Editor\ValidateOptions;
class Papelimpresionmargenes extends \App\Controllers\GoBaseResourceController
class Papelimpresionmargenes extends \App\Controllers\BaseResourceController
{
protected $modelName = PapelImpresionMargenModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Configuracion;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -23,7 +23,7 @@ use
DataTables\Editor\ValidateOptions;
class Papelimpresiontipologias extends \App\Controllers\GoBaseResourceController {
class Papelimpresiontipologias extends \App\Controllers\BaseResourceController {
protected $modelName = PapelImpresionTipologiaModel::class;
protected $format = 'json';

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Configuracion;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -11,7 +11,7 @@ use App\Models\Configuracion\PaisModel;
use App\Models\Configuracion\ProvinciaModel;
class Provincias extends \App\Controllers\GoBaseResourceController
class Provincias extends \App\Controllers\BaseResourceController
{
protected $modelName = ProvinciaModel::class;

View File

@ -2,7 +2,7 @@
namespace App\Controllers\Presupuestos;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Entities\Configuracion\Maquina;
use App\Models\Collection;
@ -19,7 +19,7 @@ use App\Models\Configuracion\PapelImpresionModel;
use App\Models\Configuracion\MaquinaModel;
use Exception;
class Buscador extends \App\Controllers\GoBaseResourceController
class Buscador extends \App\Controllers\BaseResourceController
{
protected $modelName = "BuscadorModel";

View File

@ -2,7 +2,7 @@
namespace App\Controllers\Presupuestos;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Entities\Configuracion\Maquina;
use App\Models\Collection;
@ -24,7 +24,7 @@ use App\Models\Configuracion\PapelImpresionModel;
use App\Models\Configuracion\MaquinaModel;
use Exception;
class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
class Cosidotapablanda extends \App\Controllers\BaseResourceController
{
protected $modelName = "PresupuestoModel";

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Presupuestos;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -10,7 +10,7 @@ use App\Models\Presupuestos\PresupuestoAcabadosModel;
class Presupuestoacabados extends \App\Controllers\GoBaseResourceController
class Presupuestoacabados extends \App\Controllers\BaseResourceController
{
protected $modelName = PresupuestoAcabadosModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Presupuestos;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -10,7 +10,7 @@ use App\Models\Presupuestos\PresupuestoDireccionesModel;
class Presupuestodirecciones extends \App\Controllers\GoBaseResourceController
class Presupuestodirecciones extends \App\Controllers\BaseResourceController
{
protected $modelName = PresupuestoDireccionesModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Presupuestos;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -10,7 +10,7 @@ use DataTables\Editor;
use DataTables\Editor\Field;
use DataTables\Editor\Validate;
class Presupuestoencuadernaciones extends \App\Controllers\GoBaseResourceController
class Presupuestoencuadernaciones extends \App\Controllers\BaseResourceController
{
protected $modelName = PresupuestoEncuadernacionesModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Presupuestos;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -11,7 +11,7 @@ use App\Models\Clientes\ClienteModel;
use App\Models\Presupuestos\PresupuestoManipuladosModel;
class Presupuestomanipulados extends \App\Controllers\GoBaseResourceController
class Presupuestomanipulados extends \App\Controllers\BaseResourceController
{
protected $modelName = PresupuestoManipuladosModel::class;

View File

@ -6,7 +6,7 @@ use App\Models\Collection;
use App\Models\Presupuestos\PresupuestoPreimpresionesModel;
class Presupuestopreimpresiones extends \App\Controllers\GoBaseResourceController
class Presupuestopreimpresiones extends \App\Controllers\BaseResourceController
{
protected $modelName = PresupuestoPreimpresionesModel::class;

View File

@ -6,7 +6,7 @@ use App\Models\Collection;
use App\Models\Presupuestos\PresupuestoServiciosExtraModel;
class Presupuestoserviciosextra extends \App\Controllers\GoBaseResourceController
class Presupuestoserviciosextra extends \App\Controllers\BaseResourceController
{
protected $modelName = PresupuestoServiciosExtraModel::class;

View File

@ -3,13 +3,13 @@
namespace App\Controllers\Presupuestos;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
use App\Services\PresupuestoService;
class Presupuestotiradasalternativas extends \App\Controllers\GoBaseResourceController
class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceController
{
protected $modelName = PresupuestoManipuladosModel::class;

View File

@ -0,0 +1,84 @@
<?php namespace App\Controllers\Sistema;
use App\Controllers\BaseResourceController;
use App\Entities\Sistema\ActivityEntity;
use App\Models\CollectionModel;
use App\Models\Sistema\ActivityModel;
class Actividad extends BaseResourceController
{
protected $modelName = ActivityModel::class;
protected $format = 'json';
protected static $controllerSlug = 'activity';
protected static string $viewPath = 'themes/backend/vuexy/form/activity/';
protected static $indexRoute = 'activityList';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
$this->viewData['pageTitle'] = lang('Paises.moduleTitle');
// Breadcrumbs
$this->viewData['breadcrumb'] = [
['title' => "Home", 'route' => "javascript:void(0);", 'active' => false],
['title' => lang("App.menu_activity"), 'route' => route_to('activityList'), 'active' => true]
];
parent::initController($request, $response, $logger);
}
public function index()
{
$viewData = [
'pageSubTitle' => lang('Basic.global.ManageAllRecords', [lang('Paises.pais')]),
'activityEntity' => new ActivityEntity(),
'usingServerSideDataTable' => true,
'logs' => $this->model->getLogs()->get()->getResultArray()[0] // MEJORAR!!!
];
$viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class
return view(static::$viewPath . static::$indexRoute, $viewData);
}
public function datatable()
{
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
if (!isset($reqData['draw']) || !isset($reqData['columns'])) {
$errstr = 'No data available in response to this specific request.';
$response = $this->respond(CollectionModel::datatable([], 0, 0, $errstr), 400, $errstr);
return $response;
}
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$search = $reqData['search']['value'];
$requestedOrder = $reqData['order']['0']['column'] ?? 1;
$order = ActivityModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 1];
$dir = $reqData['order']['0']['dir'] ?? 'asc';
$resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
return $this->respond(CollectionModel::datatable(
$resourceData,
$this->model->getResource()->countAllResults(),
$this->model->getResource($search)->countAllResults()
));
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
}

View File

@ -0,0 +1,100 @@
<?php namespace App\Controllers\Sistema;
use App\Controllers\BaseResourceController;
use App\Models\Sistema\SettingsModel;
class Ajustes extends BaseResourceController
{
protected $modelName = SettingsModel::class;
protected $format = 'json';
protected static $controllerSlug = 'settings';
protected static string $viewPath = 'themes/vuexy/form/settings/';
protected static string $formViewName = 'settingsForm';
protected $indexRoute = 'settingForm';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
$this->viewData['pageTitle'] = lang('Provincias.moduleTitle');
$this->viewData['usingSweetAlert'] = true;
parent::initController($request, $response, $logger);
}
public function settings()
{
$id = 1;
$settingsEntity = $this->model->find($id);
if (!$settingsEntity) :
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Provincias.provincia')), $id]);
return $this->redirect2listView('sweet-error', $message);
endif;
if ($this->request->is('post')) :
$postData = $this->request->getPost();
$sanitizedData = $this->sanitized($postData, true);
$noException = true;
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
if ($this->canValidate()) :
try {
$successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData);
} catch (\Exception $e) {
$noException = false;
$this->dealWithException($e);
}
else:
$this->viewData['warningMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Provincias.provincia'))]);
$this->session->setFlashdata('formErrors', $this->model->errors());
endif;
$settingsEntity->fill($sanitizedData);
$thenRedirect = false;
endif;
if ($noException && $successfulResult) :
$id = $settingsEntity->id ?? $id;
$message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.';
if ($thenRedirect) :
if (!empty($this->indexRoute)) :
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
else:
return $this->redirect2listView('sweet-success', $message);
endif;
else:
$this->session->setFlashData('sweet-success', $message);
endif;
endif; // $noException && $successfulResult
endif; // ($requestMethod === 'post')
$this->viewData['settingsEntity'] = $settingsEntity;
$this->viewData['formAction'] = route_to('settingsEdit');
$this->viewData['tables'] = db_connect()->listTables();
return $this->displayForm(__METHOD__, $id);
} // end function settings(...)
}

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\tarifas;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -9,7 +9,7 @@ use App\Entities\Tarifas\TarifaacabadoEntity;
use App\Models\Tarifas\TarifaacabadoModel;
class Tarifaacabado extends \App\Controllers\GoBaseResourceController
class Tarifaacabado extends \App\Controllers\BaseResourceController
{
protected $modelName = TarifaacabadoModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Tarifas;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -24,7 +24,7 @@ use
use function PHPUnit\Framework\isEmpty;
class Tarifaacabadolineas extends \App\Controllers\GoBaseResourceController
class Tarifaacabadolineas extends \App\Controllers\BaseResourceController
{
protected $modelName = TarifaAcabadoLineaModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Tarifas;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -21,7 +21,7 @@ use
DataTables\Editor\ValidateOptions;
class Tarifaencuadernacionlineas extends \App\Controllers\GoBaseResourceController
class Tarifaencuadernacionlineas extends \App\Controllers\BaseResourceController
{
protected $modelName = TarifaEncuadernacionLineaModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Tarifas;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -21,7 +21,7 @@ use
DataTables\Editor\ValidateOptions;
class Tarifaencuadernacionlineashoras extends \App\Controllers\GoBaseResourceController
class Tarifaencuadernacionlineashoras extends \App\Controllers\BaseResourceController
{
protected $modelName = TarifaEncuadernacionLineaHorasModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Tarifas;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -25,7 +25,7 @@ use
DataTables\Editor\ValidateOptions;
class Tarifaencuadernaciontiradas extends \App\Controllers\GoBaseResourceController
class Tarifaencuadernaciontiradas extends \App\Controllers\BaseResourceController
{
protected static $controllerSlug = 'tarifaencuadernaciontiradas';

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Tarifas;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -21,7 +21,7 @@ use
DataTables\Editor\ValidateOptions;
class Tarifamanipuladolineas extends \App\Controllers\GoBaseResourceController
class Tarifamanipuladolineas extends \App\Controllers\BaseResourceController
{
protected $modelName = TarifaManipuladoLineaModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Tarifas;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -13,7 +13,7 @@ use App\Models\Compras\ProveedorTipoModel;
use App\Models\Tarifas\TarifaEncuadernacionDimensionesModel;
class Tarifasencuadernacion extends \App\Controllers\GoBaseResourceController
class Tarifasencuadernacion extends \App\Controllers\BaseResourceController
{
protected $modelName = TarifaEncuadernacionModel::class;

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Tarifas;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -15,7 +15,7 @@ use App\Models\Tarifas\TarifaEnvioModel;
use App\Models\Tarifas\TarifaEnvioPrecioModel;
use App\Models\Tarifas\TarifaEnvioZonaModel;
class Tarifasenvios extends \App\Controllers\GoBaseResourceController {
class Tarifasenvios extends \App\Controllers\BaseResourceController {
protected $modelName = TarifaEnvioModel::class;
protected $format = 'json';

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Tarifas;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -17,7 +17,7 @@ use
DataTables\Editor,
DataTables\Editor\Field;
class Tarifasenviosprecios extends \App\Controllers\GoBaseResourceController {
class Tarifasenviosprecios extends \App\Controllers\BaseResourceController {
protected $modelName = TarifaEnvioPrecioModel::class;
protected $format = 'json';

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Tarifas;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -18,7 +18,7 @@ use
DataTables\Editor\Validate,
DataTables\Editor\Field;
class Tarifasenvioszonas extends \App\Controllers\GoBaseResourceController {
class Tarifasenvioszonas extends \App\Controllers\BaseResourceController {
protected $modelName = TarifaEnvioZonaModel::class;
protected $format = 'json';

View File

@ -1,7 +1,7 @@
<?php namespace App\Controllers\Tarifas;
use App\Controllers\GoBaseResourceController;
use App\Controllers\BaseResourceController;
use App\Models\Collection;
@ -9,7 +9,7 @@ use App\Entities\Tarifas\TarifaManipuladoEntity;
use App\Models\Tarifas\TarifaManipuladoModel;
class Tarifasmanipulado extends \App\Controllers\GoBaseResourceController
class Tarifasmanipulado extends \App\Controllers\BaseResourceController
{
protected $modelName = TarifaManipuladoModel::class;

View File

@ -0,0 +1,24 @@
<?php
namespace App\Entities\Sistema;
use CodeIgniter\Entity\Entity;
class ActivityEntity extends Entity
{
protected $attributes = [
"id" => null,
"user_id" => null,
"level" => null,
"event" => null,
"ip" => null,
"os" => null,
"browser" => null,
"detail" => null,
"created_at" => null,
"updated_at" => null,
];
protected $casts = [
];
}

View File

@ -0,0 +1,32 @@
<?php
namespace App\Entities\Sistema;
use CodeIgniter\Entity\Entity;
class SettingsEntity extends Entity
{
protected $attributes = [
"email_gateway" => null,
"email_name" => null,
"email_address" => null,
"email_smtp" => null,
"email_port" => null,
"email_pass" => null,
"email_cert" => null,
"remove_log" => null,
"remove_log_time" => null,
"remove_log_latest" => null,
"storage_gateway" => null,
"backup_storage" => null,
"backup_table" => null,
"backup_email" => null,
"backup_notification_email" => null,
"backup_automatic" => null,
"backup_time" => null,
"backup_latest" => null,
];
protected $casts = [
];
}

View File

@ -165,4 +165,18 @@ if (!function_exists('newUUID')) {
return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
}
}
if (!function_exists('getSystemSettings')) {
function getSystemSettings()
{
// Get Settings
$session = session();
$settingsBase = new \App\Models\Sistema\SettingsModel();
$settings = $settingsBase->first() ?? [];
$session->set('settings', $settings);
if (empty($session->get('lang'))) {
$session->set('lang', 'es');
}
}
}

View File

@ -0,0 +1,41 @@
<?php
if (!function_exists('setLog')) {
function setLog($level, $event, $user_id = 0)
{
$activity_model = new \App\Models\Sistema\ActivityModel();
$request = \Config\Services::request();
$ip = $request->getIPAddress();
$agent = $request->getUserAgent();
$currentAgent = identifyAgent($agent);
$activity_model->save([
'user_id' => $user_id,
'level' => $level,
'event' => $event,
'ip' => $ip,
'os' => $agent->getPlatform(),
'browser' => $currentAgent,
'detail' => $agent
]);
}
}
if (!function_exists('identifyAgent')) {
function identifyAgent($agent)
{
if ($agent->isBrowser()) {
return $agent->getBrowser() . ' ' . $agent->getVersion();
}
if ($agent->isRobot()) {
return $agent->getRobot();
}
if ($agent->isMobile()) {
return $agent->getMobile();
}
return 'Unidentified User Agent';
}
}

View File

@ -0,0 +1,39 @@
<?php
namespace App\Models;
class CollectionModel
{
/**
* Generate a data table response.
*
* @param array $data The data to be displayed in the table.
* @param int $recordsTotal The total number of records without filtering.
* @param int $recordsFiltered The total number of records after filtering.
* @param string|null $error An optional error message to be included in the response.
* @return array The data table response containing the draw count, total records, filtered records,
* the data, and a CSRF token (in case it is regenerated).
*/
public static function datatable(array $data, int $recordsTotal, int $recordsFiltered, string $error = null)
{
$req = service('request');
$reqData = $req->getPostGet('data') ?? [];
$draw = $reqData['draw'] ?? $req->getPostGet('draw') ?? 1;
$response = [
'draw' => $draw,
'recordsTotal' => $recordsTotal,
'recordsFiltered' => $recordsFiltered,
'data' => $data,
'token' => csrf_hash(), // in case the CSRF token is regenerated
];
if (!empty($error)) {
$response['error'] = $error;
}
return $response;
}
}

View File

@ -1,20 +0,0 @@
<?php
namespace App\Models;
class CountriesModel extends BaseModel
{
protected $table = 'auth_countries';
protected $primaryKey = 'id_country';
protected $allowedFields = [
'phone',
'code',
'name',
'symbol',
'capital',
'currency',
'continent',
'continent_code',
'alpha_3',
'data_lang'
];
}

View File

@ -0,0 +1,100 @@
<?php
namespace App\Models\Sistema;
use App\Models\BaseModel;
class ActivityModel extends BaseModel
{
protected $table = 'auth_activity';
protected $primaryKey = 'id';
/**
* Whether primary key uses auto increment.
*
* @var bool
*/
protected $useAutoIncrement = true;
protected $returnType = "App\Entities\Sistema\ActivityEntity";
const SORTABLE = [
1 => "t1.id",
2 => "t2.username",
3 => "t1.level",
4 => "t1.event",
5 => "t1.ip",
6 => "t1.os",
7 => "t1.browser",
8 => "t1.detail"
];
protected $allowedFields = [
'user_id',
'level',
'event',
'ip',
'os',
'browser',
'detail'
];
protected $useTimestamps = true;
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
/**
* Retrieves a resource from the database based on the given search string.
*
* @param string $search The search string to filter the resource by. Defaults to an empty string.
* @return mixed The resource query builder instance if search string is empty, otherwise the filtered resource query builder instance.
*/
public function getResource(string $search = "")
{
$builder = $this->db
->table($this->table . " t1")
->select(
"t1.id AS id, t2.username AS user, t1.level AS level, t1.event AS event, t1.ip AS ip, t1.os AS os,
t1.browser AS browser, t1.created_at AS created_at"
)
->join("users t2", "t1.user_id = t2.id", "left")
->orderBy('t1.created_at', 'DESC');
return empty($search)
? $builder
: $builder
->groupStart()
->like("t1.id", $search)
->orLike("t2.username", $search)
->orLike("t1.level", $search)
->orLike("t1.event", $search)
->orLike("t1.ip", $search)
->orLike("t1.os", $search)
->orLike("t1.browser", $search)
->orLike("t1.created_at", $search)
->groupEnd();
}
public function getLogs()
{
$builder = $this->db
->table($this->table . " t1")
->select(
'SUM( IF( os LIKE "%Windows%", 1, 0 ) ) AS windows,
SUM( IF( os = "Mac OS X", 1, 0 ) ) AS mac,
SUM( IF( os = "Linux", 1, 0 ) ) AS linux,
SUM( IF( os = "Android", 1, 0 ) ) AS android,
SUM( IF( os = "iOS", 1, 0 ) ) AS iphone,
SUM( IF( browser LIKE "%Chrome%", 1, 0 ) ) AS chrome,
SUM( IF( browser LIKE "%Firefox%", 1, 0 ) ) AS firefox,
SUM( IF( browser LIKE "%Safari%", 1, 0 ) ) AS safari,
SUM( IF( browser LIKE "%Internet Explorer%", 1, 0 ) ) AS ie,
SUM( IF( browser LIKE "%Edge%", 1, 0 ) ) AS edge,
SUM( IF( browser LIKE "%Opera%", 1, 0 ) ) AS opera'
);
return $builder;
}
}

View File

@ -0,0 +1,38 @@
<?php
namespace App\Models\Sistema;
use App\Models\BaseModel;
class SettingsModel extends BaseModel
{
protected $table = 'auth_settings';
protected $primaryKey = 'id';
protected $returnType = "App\Entities\Sistema\SettingsEntity";
const SORTABLE = [
];
protected $allowedFields = [
'email_gateway',
'email_name',
'email_address',
'email_smtp',
'email_port',
'email_pass',
'email_cert',
'remove_log',
'remove_log_time',
'remove_log_latest',
'storage_gateway',
'backup_storage',
'backup_table',
'backup_email',
'backup_notification_email',
'backup_automatic',
'backup_time',
'backup_latest'
];
protected $useTimestamps = true;
protected $updatedField = 'updated_at';
}

View 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/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() ?>

View File

@ -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>