From 88f0853425e329936cbf0dbacc054498c1411f39 Mon Sep 17 00:00:00 2001 From: Jaime Jimenez Date: Wed, 3 May 2023 21:15:18 +0200 Subject: [PATCH] Menu lateral inicial creado --- ci4/app/Controllers/Clientes/Cliente.php | 4 +- .../Controllers/Clientes/Tarifacliente.php | 2 +- .../Controllers/Configuracion/Calendario.php | 2 +- ci4/app/Controllers/Configuracion/Correo.php | 2 +- .../Controllers/Configuracion/Formaspago.php | 2 +- .../Configuracion/Imposiciones.php | 2 +- ci4/app/Controllers/Configuracion/Maquina.php | 2 +- .../Configuracion/Papelgenerico.php | 2 +- .../{Serie.php => Seriefactura.php} | 4 +- .../Configuracion/Serviciocliente.php | 2 +- .../Configuracion/Tamanioformatos.php | 2 +- .../Configuracion/Tamaniolibros.php | 2 +- .../Configuracion/Tareaservicio.php | 2 +- .../Configuracion/Tiposimpresion.php | 2 +- ci4/app/Controllers/Configuracion/Trabajo.php | 2 +- .../Logistica.php | 4 +- ci4/app/Controllers/Facturacion/Albaran.php | 2 +- ci4/app/Controllers/Facturacion/Factura.php | 2 +- ci4/app/Controllers/Informes/Informe.php | 2 +- ci4/app/Controllers/Pedidos/Pedido.php | 2 +- .../Controllers/Presupuestos/Presupuesto.php | 2 +- .../Presupuestos/Presupuestomaquetacion.php | 2 +- .../Controllers/Produccion/Ordenmaquina.php | 2 +- .../Controllers/Produccion/Ordentrabajo.php | 2 +- .../Produccion/Ordentrabajomaquetacion.php | 2 +- .../Produccion/Pedidoproduccion.php | 2 +- ci4/app/Controllers/Proveedores/Proveedor.php | 2 +- .../Digitalizacion.php | 4 +- ci4/app/Controllers/Tarifas/Tarifaacabado.php | 2 +- ci4/app/Controllers/Tarifas/Tarifaenvio.php | 2 +- .../Controllers/Tarifas/Tarifaimpresion.php | 2 +- .../Controllers/Tarifas/Tarifamanipulado.php | 2 +- .../Controllers/Tarifas/Tarifapapelcompra.php | 2 +- .../Tarifas/Tarifapapeldefecto.php | 2 +- .../Tarifas/Tarifapreimpresion.php | 2 +- ci4/app/Controllers/Test.php | 113 ++++++++- ci4/app/Filters/LoginAuthFilter.php | 4 +- ci4/app/Helpers/general_helper.php | 21 +- ci4/app/Language/en/App.php | 89 +++++-- ci4/app/Language/es/App.php | 91 +++++-- .../themes/backend/focus2/form/group/form.php | 2 +- .../Views/themes/backend/focus2/main/menu.php | 233 ++++++++++++++++-- 42 files changed, 534 insertions(+), 97 deletions(-) rename ci4/app/Controllers/Configuracion/{Serie.php => Seriefactura.php} (72%) rename ci4/app/Controllers/{Logistica => Envioslogistica}/Logistica.php (73%) rename ci4/app/Controllers/{Digitalizacion => Serviciosdigitalizacion}/Digitalizacion.php (70%) diff --git a/ci4/app/Controllers/Clientes/Cliente.php b/ci4/app/Controllers/Clientes/Cliente.php index f3184a20..45015345 100644 --- a/ci4/app/Controllers/Clientes/Cliente.php +++ b/ci4/app/Controllers/Clientes/Cliente.php @@ -12,8 +12,8 @@ class Cliente extends BaseController } public function index() - { - echo 'Hola2'; + { + echo "Cliente"; } public function delete() diff --git a/ci4/app/Controllers/Clientes/Tarifacliente.php b/ci4/app/Controllers/Clientes/Tarifacliente.php index 345f239a..cb136439 100644 --- a/ci4/app/Controllers/Clientes/Tarifacliente.php +++ b/ci4/app/Controllers/Clientes/Tarifacliente.php @@ -13,7 +13,7 @@ class Tarifacliente extends BaseController public function index() { - echo 'Hola2'; + echo "Tarifa Cliente"; } public function delete() diff --git a/ci4/app/Controllers/Configuracion/Calendario.php b/ci4/app/Controllers/Configuracion/Calendario.php index acb93eae..82fa2c9f 100644 --- a/ci4/app/Controllers/Configuracion/Calendario.php +++ b/ci4/app/Controllers/Configuracion/Calendario.php @@ -13,7 +13,7 @@ class Calendario extends BaseController public function index() { - echo 'Hola2'; + echo 'Calendario'; } public function edit() diff --git a/ci4/app/Controllers/Configuracion/Correo.php b/ci4/app/Controllers/Configuracion/Correo.php index f935718e..c28e78b7 100644 --- a/ci4/app/Controllers/Configuracion/Correo.php +++ b/ci4/app/Controllers/Configuracion/Correo.php @@ -13,7 +13,7 @@ class Correo extends BaseController public function index() { - echo 'Hola2'; + echo 'Correo'; } diff --git a/ci4/app/Controllers/Configuracion/Formaspago.php b/ci4/app/Controllers/Configuracion/Formaspago.php index f4b8e09a..26d7f796 100644 --- a/ci4/app/Controllers/Configuracion/Formaspago.php +++ b/ci4/app/Controllers/Configuracion/Formaspago.php @@ -13,7 +13,7 @@ class Formaspago extends BaseController public function index() { - echo 'Hola2'; + echo 'Formas de pago'; } public function edit() diff --git a/ci4/app/Controllers/Configuracion/Imposiciones.php b/ci4/app/Controllers/Configuracion/Imposiciones.php index 2b9f27be..eb621786 100644 --- a/ci4/app/Controllers/Configuracion/Imposiciones.php +++ b/ci4/app/Controllers/Configuracion/Imposiciones.php @@ -13,7 +13,7 @@ class Imposiciones extends BaseController public function index() { - echo 'Hola2'; + echo 'Imposiciones'; } public function edit() diff --git a/ci4/app/Controllers/Configuracion/Maquina.php b/ci4/app/Controllers/Configuracion/Maquina.php index b8576303..2af78cb9 100644 --- a/ci4/app/Controllers/Configuracion/Maquina.php +++ b/ci4/app/Controllers/Configuracion/Maquina.php @@ -13,7 +13,7 @@ class Maquina extends BaseController public function index() { - echo 'Hola2'; + echo 'Maquina'; } public function edit() diff --git a/ci4/app/Controllers/Configuracion/Papelgenerico.php b/ci4/app/Controllers/Configuracion/Papelgenerico.php index a402faae..f8d9d19b 100644 --- a/ci4/app/Controllers/Configuracion/Papelgenerico.php +++ b/ci4/app/Controllers/Configuracion/Papelgenerico.php @@ -13,7 +13,7 @@ class Papelgenerico extends BaseController public function index() { - echo 'Hola2'; + echo 'Papel genérico'; } public function edit() diff --git a/ci4/app/Controllers/Configuracion/Serie.php b/ci4/app/Controllers/Configuracion/Seriefactura.php similarity index 72% rename from ci4/app/Controllers/Configuracion/Serie.php rename to ci4/app/Controllers/Configuracion/Seriefactura.php index 5f185e00..7215f566 100644 --- a/ci4/app/Controllers/Configuracion/Serie.php +++ b/ci4/app/Controllers/Configuracion/Seriefactura.php @@ -4,7 +4,7 @@ namespace App\Controllers\Configuracion; use App\Controllers\BaseController; -class Serie extends BaseController +class Seriefactura extends BaseController { function __construct() { @@ -13,7 +13,7 @@ class Serie extends BaseController public function index() { - echo 'Hola2'; + echo 'Serie factura'; } diff --git a/ci4/app/Controllers/Configuracion/Serviciocliente.php b/ci4/app/Controllers/Configuracion/Serviciocliente.php index 925471a5..730c2bc2 100644 --- a/ci4/app/Controllers/Configuracion/Serviciocliente.php +++ b/ci4/app/Controllers/Configuracion/Serviciocliente.php @@ -13,7 +13,7 @@ class Serviciocliente extends BaseController public function index() { - echo 'Hola2'; + echo 'Servicio cliente'; } public function edit() diff --git a/ci4/app/Controllers/Configuracion/Tamanioformatos.php b/ci4/app/Controllers/Configuracion/Tamanioformatos.php index 5076a27f..2497a343 100644 --- a/ci4/app/Controllers/Configuracion/Tamanioformatos.php +++ b/ci4/app/Controllers/Configuracion/Tamanioformatos.php @@ -13,7 +13,7 @@ class Tamanioformatos extends BaseController public function index() { - echo 'Hola2'; + echo 'Tamaño formatos'; } public function edit() diff --git a/ci4/app/Controllers/Configuracion/Tamaniolibros.php b/ci4/app/Controllers/Configuracion/Tamaniolibros.php index 3769b718..3ff02ba8 100644 --- a/ci4/app/Controllers/Configuracion/Tamaniolibros.php +++ b/ci4/app/Controllers/Configuracion/Tamaniolibros.php @@ -13,7 +13,7 @@ class Tamaniolibros extends BaseController public function index() { - echo 'Hola2'; + echo 'Tamaño libros'; } public function edit() diff --git a/ci4/app/Controllers/Configuracion/Tareaservicio.php b/ci4/app/Controllers/Configuracion/Tareaservicio.php index 7bfc2302..7be3eb10 100644 --- a/ci4/app/Controllers/Configuracion/Tareaservicio.php +++ b/ci4/app/Controllers/Configuracion/Tareaservicio.php @@ -13,7 +13,7 @@ class Tareaservicio extends BaseController public function index() { - echo 'Hola2'; + echo 'Tarea servicio'; } public function edit() diff --git a/ci4/app/Controllers/Configuracion/Tiposimpresion.php b/ci4/app/Controllers/Configuracion/Tiposimpresion.php index 6432df84..10510a2d 100644 --- a/ci4/app/Controllers/Configuracion/Tiposimpresion.php +++ b/ci4/app/Controllers/Configuracion/Tiposimpresion.php @@ -13,7 +13,7 @@ class Tiposimpresion extends BaseController public function index() { - echo 'Hola2'; + echo 'Tipos impresion'; } public function edit() diff --git a/ci4/app/Controllers/Configuracion/Trabajo.php b/ci4/app/Controllers/Configuracion/Trabajo.php index 603d455b..54a33842 100644 --- a/ci4/app/Controllers/Configuracion/Trabajo.php +++ b/ci4/app/Controllers/Configuracion/Trabajo.php @@ -13,7 +13,7 @@ class Trabajo extends BaseController public function index() { - echo 'Hola2'; + echo 'Trabajo'; } public function edit() diff --git a/ci4/app/Controllers/Logistica/Logistica.php b/ci4/app/Controllers/Envioslogistica/Logistica.php similarity index 73% rename from ci4/app/Controllers/Logistica/Logistica.php rename to ci4/app/Controllers/Envioslogistica/Logistica.php index 1083b02a..157d8a21 100644 --- a/ci4/app/Controllers/Logistica/Logistica.php +++ b/ci4/app/Controllers/Envioslogistica/Logistica.php @@ -1,6 +1,6 @@ '; + var_dump($this->validateControllerAccess()); + echo ''; } + + public function validateControllerAccess(){ + $request = \Config\Services::request(); + $uri = $uri = new \CodeIgniter\HTTP\URI('https://sk-jjo.imnavajas.es/envioslogistica/logistica'); + $language = \Config\Services::language(); + $language->setLocale(session()->lang); + + $getWhiteList = $this->whiteListController(); + + foreach ($getWhiteList as $item){ + if(strtolower($item) == $uri->getSegment(1)){ + return true; + } + } + + $getRules = json_decode(session()->get('rules')??'[]'); + + foreach ($this->whiteListMethod() as $item){ + if(strtolower($item) == $uri->getSegment(2)){ + return true; + } + } + + foreach ($getRules as $key=>$value){ + if($key=='Digitalizacion') { + echo 'Hola'; + } + if(strtolower($key) == $uri->getSegment(1)){ + if($uri->getTotalSegments() <= 1){ + return true; + } + foreach ($value as $item){ + if(strtolower($item) == $uri->getSegment(2)){ + return true; + } + } + } + else{ + foreach($this->controllerFolderWhiteList() as $folder){ + + if(strtolower($folder) == $uri->getSegment(1)){ + + if(strtolower($key) == $uri->getSegment(2)){ + if($uri->getTotalSegments() <= 2){ + return true; + } + + foreach ($value as $item){ + if(strtolower($item) == $uri->getSegment(3)){ + return true; + } + } + + } + } + } + + } + } + return false; + } + + public function whiteListController(){ + return [ + '', + 'BaseController', + 'Home', + 'Login', + 'Oauth', + 'Language', + 'Api', + 'Cron', + 'lang', + 'Ajax', + 'Integration', + 'Migrate', + 'Test', + + ]; + } + + public function whiteListMethod(){ + return [ + 'initController', + '__construct', + 'validateControllerAccess', + 'whiteListController', + 'whiteListMethod' + ]; + } + + public function controllerFolderWhiteList(){ + return [ + 'Catalogo', + 'Clientes', + 'Configuracion', + 'Digitalizacion', + 'Facturacion', + 'Informes', + 'EnviosLogistica', + 'Pedidos', + 'Presupuestos', + 'Produccion', + 'Proveedores', + 'Tarifas', + 'Usuarios', + ]; + } } \ No newline at end of file diff --git a/ci4/app/Filters/LoginAuthFilter.php b/ci4/app/Filters/LoginAuthFilter.php index fb508a47..5e5f558e 100644 --- a/ci4/app/Filters/LoginAuthFilter.php +++ b/ci4/app/Filters/LoginAuthFilter.php @@ -106,10 +106,10 @@ class LoginAuthFilter implements FilterInterface 'Catalogo', 'Clientes', 'Configuracion', - 'Digitalizacion', + 'ServiciosDigitalizacion', 'Facturacion', 'Informes', - 'Logistica', + 'EnviosLogistica', 'Pedidos', 'Presupuestos', 'Produccion', diff --git a/ci4/app/Helpers/general_helper.php b/ci4/app/Helpers/general_helper.php index dd9bc3e0..3d0dd4e9 100644 --- a/ci4/app/Helpers/general_helper.php +++ b/ci4/app/Helpers/general_helper.php @@ -185,7 +185,7 @@ function getDictionary($word=''){ 'Maquina' => lang("App.permisos_maquina"), 'Tamaniolibros' => lang("App.permisos_tamaniolibros"), 'Imposiciones' => lang("App.permisos_imposiciones"), - 'Serie' => lang("App.permisos_serie"), + 'Seriefactura' => lang("App.permisos_seriefactura"), 'Tamanioformatos' => lang("App.permisos_tamanioformatos"), 'Serviciocliente' => lang("App.permisos_serviciocliente"), 'Calendario' => lang("App.permisos_calendario"), @@ -197,7 +197,7 @@ function getDictionary($word=''){ 'Catalogo' => lang("App.permisos_catalogo"), - 'Clientes' => lang("App.permisos_clientes"), + 'Cliente' => lang("App.permisos_clientes"), 'Tarifacliente' => lang("App.permisos_tarifacliente"), 'Proveedores' => lang("App.permisos_proveedores"), @@ -253,6 +253,23 @@ function getMenuControl(){ } } +function allowMenuSection(array $array, array $keys, $method){ + try{ + $value = false; + foreach($keys as $key){ + if (count($temp=getArrayItem($array,'name',$key)) > 0){ + if (count(getArrayItem($temp,'methods','index',true)) > 0){ + $value = true; + } + } + } + return $value; + + } catch (Exception $e) { + return []; + } +} + function getArrayItem(array $array, $key, $word, $isArray=false) { try { diff --git a/ci4/app/Language/en/App.php b/ci4/app/Language/en/App.php index 58628bc5..120021fb 100644 --- a/ci4/app/Language/en/App.php +++ b/ci4/app/Language/en/App.php @@ -1,21 +1,5 @@ "Dashboard", - "menu_registration" => "Registration", - "menu_users" => "Users", - "menu_permission_group" => "Permission Group", - "menu_settings" => "Settings", - "menu_general" => "General", - "menu_logout" => "Logout", - "menu_profile" => "My Profile", - "menu_activity" => "Activities", - "menu_notification" => "Notifications", - "menu_list" => "List", - "menu_add" => "Add", - "menu_oauth" => "Authentications", - "menu_template" => "Templates", - // LANGUAGES "lang_en" => "English", "lang_es" => "Spanish", @@ -649,7 +633,7 @@ return [ "permisos_maquina" => "Machine", "permisos_tamaniolibros" => "Books size", "permisos_imposiciones" => "Impositions", - "permisos_serie" => "Serie", + "permisos_seriefactura" => "Billing series", "permisos_tamanioformatos" => "Format size", "permisos_serviciocliente" => "Customer service", "permisos_calendario" => "Calendar", @@ -668,7 +652,7 @@ return [ "permisos_informes" => "Reports", "permisos_facturación" => "Billing", - "permisos_albaran" => "Deluvery note", + "permisos_albaran" => "Delivery notes", "permisos_facturas" => "Invoices", "permisos_pedidos" => "Orders", @@ -680,4 +664,73 @@ return [ "permisos_ordenmaquina" => "Machine order", "permisos_pedidoproduccion" => "Orders", "permisos_ordentrabajo" => "Work order", + + + // MENUS + "menu_dashboard" => "Dashboard", + + "menu_clientes" => "Customers", + "menu_tarifacliente" => "Customer Fee", + + "menu_configuration" => "Settings", + "menu_calendario" => "Calendar", + "menu_correo" => "Mail", + "menu_formaspago" => "Payment methods", + "menu_imposiciones" => "Impositions", + "menu_maquina" => "Machines", + "menu_papelgenerico" => "Generic paper", + "menu_seriefactura" => "Billing series", + "menu_serviciocliente" => "Customer service", + "menu_tamanioformatos" => "Format size", + "menu_tamaniolibros" => "Books size", + "menu_tareasservicio" => "Service tasks", + "menu_tiposimpresion" => "Printing types", + "menu_trabajo" => "Works", + + "menu_digitalizacion" => "Digitalisation", + + "menu_logistica" => "Logistics", + + "menu_facturación" => "Billing", + "menu_albaran" => "Delivery notes", + "menu_facturas" => "Invoices", + + "menu_informes" => "Reports", + + "menu_pedidos" => "Orders", + + "menu_presupuestos" => "Budgets", + "menu_presupuestomaquetacion" => "Layout budgets", + + "menu_produccion" => "Production", + "menu_ordentrabajomaquetacion" => "Layout work order", + "menu_ordenmaquina" => "Machine order", + "menu_pedidoproduccion" => "Orders", + "menu_ordentrabajo" => "Work order", + + "menu_proveedores" => "Providers", + + "menu_tarifas" => "Rates", + "menu_tarifapreimpresion" => "Preprinting", + "menu_tarifamanipulado" => "Handling", + "menu_tarifapapelcompra" => "Paper", + "menu_tarifaacabado" => "Finish", + "menu_tarifapapeldefecto" => "Default paper", + "menu_tarifaenvio" => "Shipping", + "menu_tarifaimpresion" => "Printing", + + "menu_users" => "Users", + "menu_permission_group" => "Roles and permissions", + + "menu_registration" => "Registration", + "menu_settings" => "Settings", + "menu_general" => "General", + "menu_logout" => "Logout", + "menu_profile" => "My Profile", + "menu_activity" => "Activities", + "menu_notification" => "Notifications", + "menu_list" => "List", + "menu_add" => "Add", + "menu_oauth" => "Authentications", + "menu_template" => "Templates", ]; \ No newline at end of file diff --git a/ci4/app/Language/es/App.php b/ci4/app/Language/es/App.php index 0226a819..4646ffc3 100644 --- a/ci4/app/Language/es/App.php +++ b/ci4/app/Language/es/App.php @@ -1,21 +1,5 @@ "Panel", - "menu_registration" => "Registro", - "menu_users" => "Usuarios", - "menu_permission_group" => "Grupo Permisos", - "menu_settings" => "Ajustes", - "menu_general" => "General", - "menu_logout" => "Salir", - "menu_profile" => "Mi Perfil", - "menu_activity" => "Ocupaciones", - "menu_notification" => "Notificaciones", - "menu_list" => "Lista", - "menu_add" => "Agregar", - "menu_oauth" => "Autenticaciones", - "menu_template" => "Plantillas", - // LANGUAGES "lang_en" => "Inglés", "lang_es" => "Español", @@ -649,7 +633,7 @@ return [ "permisos_maquina" => "Máquina", "permisos_tamaniolibros" => "Tamaño libros", "permisos_imposiciones" => "Imposiciones", - "permisos_serie" => "Serie", + "permisos_seriefactura" => "Series facturas", "permisos_tamanioformatos" => "Tamaño de formatos", "permisos_serviciocliente" => "Servicio cliente", "permisos_calendario" => "Calendario", @@ -668,7 +652,7 @@ return [ "permisos_informes" => "Informes", "permisos_facturación" => "Facturación", - "permisos_albaran" => "Albarán", + "permisos_albaran" => "Albaranes", "permisos_facturas" => "Facturas", "permisos_pedidos" => "Pedidos", @@ -680,4 +664,75 @@ return [ "permisos_ordenmaquina" => "Orden máquina", "permisos_pedidoproduccion" => "Pedidos", "permisos_ordentrabajo" => "Orden de trabajo", + + + // MENUS + "menu_dashboard" => "Panel", + + "menu_clientes" => "Clientes", + "menu_tarifacliente" => "Tarifa Clientes", + + "menu_configuration" => "Configuracion", + "menu_calendario" => "Calendario", + "menu_correo" => "Correo", + "menu_formaspago" => "Metodos de pago", + "menu_imposiciones" => "Imposiciones", + "menu_maquina" => "Maquinas", + "menu_papelgenerico" => "Papel generico", + "menu_seriefactura" => "Series facturas", + "menu_serviciocliente" => "Servicio cliente", + "menu_tamanioformatos" => "Tamaño formatos", + "menu_tamaniolibros" => "Tamaño libros", + "menu_tareasservicio" => "Tareas Servicio", + "menu_tiposimpresion" => "Tipos de impresion", + "menu_trabajo" => "Trabajos", + + "menu_digitalizacion" => "Digitalización", + + "menu_logistica" => "Logistica", + + "menu_facturación" => "Facturación", + "menu_albaran" => "Albaranes", + "menu_facturas" => "Facturas", + + "menu_informes" => "Informes", + + "menu_pedidos" => "Pedidos", + + "menu_presupuestos" => "Presupuestos", + "menu_presupuestomaquetacion" => "Presupuestos maquetación", + + "menu_produccion" => "Producción", + "menu_ordentrabajomaquetacion" => "Orden de trabajo maquetación", + "menu_ordenmaquina" => "Orden máquina", + "menu_pedidoproduccion" => "Pedidos", + "menu_ordentrabajo" => "Orden de trabajo", + + "menu_proveedores" => "Proveedores", + + "menu_tarifas" => "Tarifas", + "menu_tarifapreimpresion" => "Preimpresión", + "menu_tarifamanipulado" => "Manipulado", + "menu_tarifapapelcompra" => "Papel compra", + "menu_tarifaacabado" => "Acabado", + "menu_tarifapapeldefecto" => "Papel defecto", + "menu_tarifaenvio" => "Envío", + "menu_tarifaimpresion" => "Impresión", + + "menu_users" => "Usuarios", + "menu_permission_group" => "Roles y permisos", + + "menu_registration" => "Registro", + "menu_settings" => "Ajustes", + "menu_general" => "General", + "menu_logout" => "Salir", + "menu_profile" => "Mi Perfil", + "menu_activity" => "Ocupaciones", + "menu_notification" => "Notificaciones", + "menu_list" => "Lista", + "menu_add" => "Agregar", + "menu_oauth" => "Autenticaciones", + "menu_template" => "Plantillas", + + ]; \ No newline at end of file diff --git a/ci4/app/Views/themes/backend/focus2/form/group/form.php b/ci4/app/Views/themes/backend/focus2/form/group/form.php index 00f7dd80..dd972e4e 100644 --- a/ci4/app/Views/themes/backend/focus2/form/group/form.php +++ b/ci4/app/Views/themes/backend/focus2/form/group/form.php @@ -28,7 +28,7 @@
-
" method="post"> + " method="post"> diff --git a/ci4/app/Views/themes/backend/focus2/main/menu.php b/ci4/app/Views/themes/backend/focus2/main/menu.php index 5f53a38c..1c612fc4 100644 --- a/ci4/app/Views/themes/backend/focus2/main/menu.php +++ b/ci4/app/Views/themes/backend/focus2/main/menu.php @@ -4,31 +4,234 @@