84 lines
2.7 KiB
PHP
Executable File
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'));
|
|
}
|
|
}
|