- Agregar constante TABLE_DEFAULTS para tabla de valores por defecto - Modificar get_table_name() para aceptar parámetro table_type - Actualizar create_tables() para crear ambas tablas con estructura idéntica - Modificar todos los métodos (get_config, save_config, delete_config, list_components) para aceptar table_type - Actualizar Settings Manager get_defaults() para leer desde tabla defaults usando DB Manager - Mantener compatibilidad hacia atrás con valor por defecto 'components' Arquitectura final: - wp_apus_theme_components_defaults = Valores por defecto del tema (escritura algoritmo) - wp_apus_theme_components = Personalizaciones del usuario (escritura admin panel) - Una sola clase (APUS_DB_Manager) maneja ambas tablas con misma estructura
157 lines
3.5 KiB
PHP
157 lines
3.5 KiB
PHP
<?php
|
|
/**
|
|
* Settings Manager Class
|
|
*
|
|
* CRUD de configuraciones por componentes
|
|
*
|
|
* @package Apus_Theme
|
|
* @since 2.0.0
|
|
*/
|
|
|
|
if (!defined('ABSPATH')) {
|
|
exit;
|
|
}
|
|
|
|
class APUS_Settings_Manager {
|
|
|
|
const OPTION_NAME = 'apus_theme_settings';
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
public function __construct() {
|
|
add_action('wp_ajax_apus_get_settings', array($this, 'ajax_get_settings'));
|
|
add_action('wp_ajax_apus_save_settings', array($this, 'ajax_save_settings'));
|
|
}
|
|
|
|
/**
|
|
* Obtener configuraciones
|
|
*/
|
|
public function get_settings() {
|
|
$settings = get_option(self::OPTION_NAME, array());
|
|
$defaults = $this->get_defaults();
|
|
|
|
return wp_parse_args($settings, $defaults);
|
|
}
|
|
|
|
/**
|
|
* Guardar configuraciones
|
|
*/
|
|
public function save_settings($data) {
|
|
// Validar
|
|
$validator = new APUS_Validator();
|
|
$validation = $validator->validate($data);
|
|
|
|
if (!$validation['valid']) {
|
|
return array(
|
|
'success' => false,
|
|
'message' => 'Error de validación',
|
|
'errors' => $validation['errors']
|
|
);
|
|
}
|
|
|
|
// Sanitizar
|
|
$sanitized = $this->sanitize_settings($data);
|
|
|
|
// Agregar metadata
|
|
$sanitized['version'] = APUS_ADMIN_PANEL_VERSION;
|
|
$sanitized['updated_at'] = current_time('mysql');
|
|
|
|
// Guardar
|
|
update_option(self::OPTION_NAME, $sanitized, false);
|
|
|
|
return array(
|
|
'success' => true,
|
|
'message' => 'Configuración guardada correctamente'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Valores por defecto
|
|
* Lee los defaults desde la tabla wp_apus_theme_components_defaults
|
|
*/
|
|
public function get_defaults() {
|
|
$db_manager = new APUS_DB_Manager();
|
|
$component_names = $db_manager->list_components('defaults');
|
|
|
|
$defaults = array(
|
|
'version' => APUS_ADMIN_PANEL_VERSION,
|
|
'components' => array()
|
|
);
|
|
|
|
// Obtener configuraciones de cada componente desde la tabla de defaults
|
|
foreach ($component_names as $component_name) {
|
|
$defaults['components'][$component_name] = $db_manager->get_config($component_name, null, 'defaults');
|
|
}
|
|
|
|
return $defaults;
|
|
}
|
|
|
|
/**
|
|
* Sanitizar configuraciones
|
|
* NOTA: Los sanitizers de componentes se ejecutarán aquí cuando se implementen
|
|
*/
|
|
public function sanitize_settings($data) {
|
|
$sanitized = array(
|
|
'components' => array()
|
|
);
|
|
|
|
// Los componentes se sanitizarán aquí cuando se ejecute el algoritmo
|
|
|
|
return $sanitized;
|
|
}
|
|
|
|
/**
|
|
* AJAX: Obtener configuraciones
|
|
*/
|
|
public function ajax_get_settings() {
|
|
// Verificar nonce usando check_ajax_referer (método recomendado para AJAX)
|
|
check_ajax_referer('apus_admin_nonce', 'nonce');
|
|
|
|
if (!current_user_can('manage_options')) {
|
|
wp_send_json_error('Permisos insuficientes');
|
|
}
|
|
|
|
$settings = $this->get_settings();
|
|
wp_send_json_success($settings);
|
|
}
|
|
|
|
/**
|
|
* AJAX: Guardar configuraciones
|
|
*/
|
|
public function ajax_save_settings() {
|
|
// Verificar nonce usando check_ajax_referer (método recomendado para AJAX)
|
|
check_ajax_referer('apus_admin_nonce', 'nonce');
|
|
|
|
if (!current_user_can('manage_options')) {
|
|
wp_send_json_error('Permisos insuficientes');
|
|
}
|
|
|
|
// Los datos vienen como JSON string en $_POST['components']
|
|
if (!isset($_POST['components'])) {
|
|
wp_send_json_error('Datos inválidos - falta components');
|
|
}
|
|
|
|
$components = json_decode(stripslashes($_POST['components']), true);
|
|
|
|
if (!is_array($components)) {
|
|
wp_send_json_error('Datos inválidos - components no es un array válido');
|
|
}
|
|
|
|
$data = array(
|
|
'components' => $components
|
|
);
|
|
|
|
$result = $this->save_settings($data);
|
|
|
|
if ($result['success']) {
|
|
wp_send_json_success($result);
|
|
} else {
|
|
wp_send_json_error($result);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Instanciar clase
|
|
new APUS_Settings_Manager();
|