Files
2026-09-01 10:46:29 -03:00

84 lines
2.7 KiB
PHP
Executable File

<?php
namespace Modules\SystemConfig\Controllers;
use App\Controllers\BaseAdminController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Modules\SystemConfig\Models\SystemConfig;
use Kernel\View;
class CustomizerController extends BaseAdminController
{
/**
* Show customizer for a specific theme
*/
public function index(Request $request, string $themeSlug): Response
{
$user = $this->getCurrentUser();
if (!$user) {
return new RedirectResponse(url('login'));
}
$baseDir = dirname(dirname(dirname(dirname(__DIR__))));
$themePath = $baseDir . '/themes/' . $themeSlug;
$customizerFile = $themePath . '/customizer.json';
if (!is_file($customizerFile)) {
return new Response("O tema " . ucfirst($themeSlug) . " não possui opções de personalização.", 404);
}
$config = json_decode(file_get_contents($customizerFile), true);
// Get current values from DB
$dbKey = 'theme_settings_' . $themeSlug;
$savedSettings = json_decode(SystemConfig::get($dbKey, '{}'), true);
// Merge defaults with saved values
foreach ($config['sections'] as &$section) {
foreach ($section['fields'] as &$field) {
$field['value'] = $savedSettings[$field['id']] ?? $field['default'];
}
}
return $this->renderAdminView('systemconfig/views/admin/customizer/index.twig', [
'title' => 'Personalizar Tema: ' . ucfirst($themeSlug),
'theme' => $themeSlug,
'config' => $config,
'saved' => $savedSettings
]);
}
/**
* Save customizer settings
*/
public function save(Request $request, string $themeSlug): Response
{
$user = $this->getCurrentUser();
if (!$user) {
return new RedirectResponse(url('login'));
}
$settings = $request->request->all();
// Remove CSRF or other non-setting fields if present
unset($settings['_token']);
$dbKey = 'theme_settings_' . $themeSlug;
$config = SystemConfig::where('system_config_key', $dbKey)->first();
if (!$config) {
$config = new SystemConfig();
$config->system_config_key = $dbKey;
$config->system_config_type = 'json';
$config->system_config_is_public = true;
}
$config->system_config_value = json_encode($settings, JSON_UNESCAPED_UNICODE);
$config->system_config_updated_by = $user->users_id ?? 1;
$config->save();
return new RedirectResponse(url('admin/themes/' . $themeSlug . '/customize?success=1'));
}
}