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')); } }