Prepare modules

This commit is contained in:
2025-03-22 12:44:30 -06:00
parent 099267ee07
commit 7d8566350d
137 changed files with 3723 additions and 4325 deletions

View File

@ -7,48 +7,57 @@ use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Schema;
use Koneko\VuexyAdmin\Models\Setting;
/**
* Servicio para gestionar la configuración y personalización del template administrativo.
*
* Esta clase maneja las configuraciones del template VuexyAdmin, incluyendo variables
* de personalización, logos, favicons y otras configuraciones de la interfaz.
* Implementa un sistema de caché para optimizar el rendimiento.
*/
class AdminTemplateService
{
protected $cacheTTL = 60 * 24 * 30; // 30 días en minutos
/** @var int Tiempo de vida del caché en minutos (60 * 24 * 30 = 30 días) */
protected $cacheTTL = 60 * 24 * 30;
public function updateSetting(string $key, string $value): bool
{
$setting = Setting::updateOrCreate(
['key' => $key],
['value' => trim($value)]
);
return $setting->save();
}
public function getAdminVars($adminSetting = false): array
/**
* Obtiene las variables de configuración del admin.
*
* @param string $setting Clave específica de configuración a obtener
* @return array Configuraciones del admin o valor específico si se proporciona $setting
*/
public function getAdminVars(string $setting = ''): array
{
try {
// Verificar si el sistema está inicializado (la tabla `migrations` existe)
if (!Schema::hasTable('migrations')) {
return $this->getDefaultAdminVars($adminSetting);
return $this->getDefaultAdminVars($setting);
}
// Cargar desde el caché o la base de datos si está disponible
return Cache::remember('admin_settings', $this->cacheTTL, function () use ($adminSetting) {
$settings = Setting::global()
->where('key', 'LIKE', 'admin_%')
$adminVars = Cache::remember('admin_settings', $this->cacheTTL, function () {
$settings = Setting::withVirtualValue()
->where('key', 'LIKE', 'admin.%')
->pluck('value', 'key')
->toArray();
$adminSettings = $this->buildAdminVarsArray($settings);
return $adminSetting
? $adminSettings[$adminSetting]
: $adminSettings;
return $this->buildAdminVarsArray($settings);
});
return $setting ? ($adminVars[$setting] ?? []) : $adminVars;
} catch (\Exception $e) {
// En caso de error, devolver valores predeterminados
return $this->getDefaultAdminVars($adminSetting);
return $this->getDefaultAdminVars($setting);
}
}
private function getDefaultAdminVars($adminSetting = false): array
/**
* Obtiene las variables predeterminadas del admin.
*
* @param string $setting Clave específica de configuración a obtener
* @return array Configuraciones predeterminadas o valor específico si se proporciona $setting
*/
private function getDefaultAdminVars(string $setting = ''): array
{
$defaultSettings = [
'title' => config('koneko.appTitle', 'Default Title'),
@ -59,27 +68,41 @@ class AdminTemplateService
'image_logo' => $this->getImageLogoPaths([]),
];
return $adminSetting
? $defaultSettings[$adminSetting] ?? null
return $setting
? $defaultSettings[$setting] ?? null
: $defaultSettings;
}
/**
* Construye el array de variables del admin a partir de las configuraciones.
*
* @param array $settings Array asociativo de configuraciones
* @return array Array estructurado con las variables del admin
*/
private function buildAdminVarsArray(array $settings): array
{
return [
'title' => $settings['admin_title'] ?? config('koneko.appTitle'),
'title' => $settings['admin.title'] ?? config('koneko.appTitle'),
'author' => config('koneko.author'),
'description' => config('koneko.description'),
'description' => $settings['admin.description'] ?? config('koneko.description'),
'favicon' => $this->getFaviconPaths($settings),
'app_name' => $settings['admin_app_name'] ?? config('koneko.appName'),
'app_name' => $settings['admin.app_name'] ?? config('koneko.appName'),
'image_logo' => $this->getImageLogoPaths($settings),
];
}
/**
* Obtiene las variables de personalización de Vuexy.
*
* Combina las configuraciones predeterminadas con las almacenadas en la base de datos,
* aplicando las transformaciones necesarias para tipos específicos como booleanos.
*
* @return array Array asociativo con las variables de personalización
*/
public function getVuexyCustomizerVars()
{
// Obtener valores de la base de datos
$settings = Setting::global()
$settings = Setting::withVirtualValue()
->where('key', 'LIKE', 'vuexy_%')
->pluck('value', 'key')
->toArray();
@ -96,7 +119,7 @@ class AdminTemplateService
$value = $settings[$vuexyKey] ?? $defaultValue;
// Forzar booleanos para claves específicas
if (in_array($key, ['displayCustomizer', 'footerFixed', 'menuFixed', 'menuCollapsed', 'showDropdownOnHover'])) {
if (in_array($key, ['hasCustomizer', 'displayCustomizer', 'footerFixed', 'menuFixed', 'menuCollapsed', 'showDropdownOnHover'])) {
$value = filter_var($value, FILTER_VALIDATE_BOOLEAN);
}
@ -106,12 +129,15 @@ class AdminTemplateService
}
/**
* Obtiene los paths de favicon en distintos tamaños.
* Genera las rutas para los diferentes tamaños de favicon.
*
* @param array $settings Array asociativo de configuraciones
* @return array Array con las rutas de los favicons en diferentes tamaños
*/
private function getFaviconPaths(array $settings): array
{
$defaultFavicon = config('koneko.appFavicon');
$namespace = $settings['admin_favicon_ns'] ?? null;
$namespace = $settings['admin.favicon_ns'] ?? null;
return [
'namespace' => $namespace,
@ -125,30 +151,43 @@ class AdminTemplateService
}
/**
* Obtiene los paths de los logos en distintos tamaños.
* Genera las rutas para los diferentes tamaños y versiones del logo.
*
* @param array $settings Array asociativo de configuraciones
* @return array Array con las rutas de los logos en diferentes tamaños y modos
*/
private function getImageLogoPaths(array $settings): array
{
$defaultLogo = config('koneko.appLogo');
return [
'small' => $this->getImagePath($settings, 'admin_image_logo_small', $defaultLogo),
'medium' => $this->getImagePath($settings, 'admin_image_logo_medium', $defaultLogo),
'large' => $this->getImagePath($settings, 'admin_image_logo', $defaultLogo),
'small_dark' => $this->getImagePath($settings, 'admin_image_logo_small_dark', $defaultLogo),
'medium_dark' => $this->getImagePath($settings, 'admin_image_logo_medium_dark', $defaultLogo),
'large_dark' => $this->getImagePath($settings, 'admin_image_logo_dark', $defaultLogo),
'small' => $this->getImagePath($settings, 'admin.image.logo_small', $defaultLogo),
'medium' => $this->getImagePath($settings, 'admin.image.logo_medium', $defaultLogo),
'large' => $this->getImagePath($settings, 'admin.image.logo', $defaultLogo),
'small_dark' => $this->getImagePath($settings, 'admin.image.logo_small_dark', $defaultLogo),
'medium_dark' => $this->getImagePath($settings, 'admin.image.logo_medium_dark', $defaultLogo),
'large_dark' => $this->getImagePath($settings, 'admin.image.logo_dark', $defaultLogo),
];
}
/**
* Obtiene un path de imagen o retorna un valor predeterminado.
* Obtiene la ruta de una imagen específica desde las configuraciones.
*
* @param array $settings Array asociativo de configuraciones
* @param string $key Clave de la configuración
* @param string $default Valor predeterminado si no se encuentra la configuración
* @return string Ruta de la imagen
*/
private function getImagePath(array $settings, string $key, string $default): string
{
return $settings[$key] ?? $default;
}
/**
* Limpia el caché de las variables del admin.
*
* @return void
*/
public static function clearAdminVarsCache()
{
Cache::forget("admin_settings");