diff --git a/admin/includes/class-db-manager.php b/admin/includes/class-db-manager.php index 7097609e..259d2c6b 100644 --- a/admin/includes/class-db-manager.php +++ b/admin/includes/class-db-manager.php @@ -19,6 +19,11 @@ class APUS_DB_Manager { */ const TABLE_COMPONENTS = 'apus_theme_components'; + /** + * Nombre de la tabla de defaults (sin prefijo) + */ + const TABLE_DEFAULTS = 'apus_theme_components_defaults'; + /** * Versión de la base de datos */ @@ -39,9 +44,17 @@ class APUS_DB_Manager { /** * Obtener nombre completo de tabla con prefijo + * + * @param string $table_type Tipo de tabla: 'components' (personalizaciones) o 'defaults' (valores por defecto) + * @return string Nombre completo de la tabla con prefijo */ - public function get_table_name() { + public function get_table_name($table_type = 'components') { global $wpdb; + + if ($table_type === 'defaults') { + return $wpdb->prefix . self::TABLE_DEFAULTS; + } + return $wpdb->prefix . self::TABLE_COMPONENTS; } @@ -59,14 +72,18 @@ class APUS_DB_Manager { /** * Crear tablas personalizadas + * Crea tanto la tabla de componentes (personalizaciones) como la de defaults */ public function create_tables() { global $wpdb; $charset_collate = $wpdb->get_charset_collate(); - $table_name = $this->get_table_name(); + require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); - $sql = "CREATE TABLE $table_name ( + $success = true; + + // Estructura común para ambas tablas + $table_structure = "( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, component_name VARCHAR(50) NOT NULL, config_key VARCHAR(100) NOT NULL, @@ -81,25 +98,42 @@ class APUS_DB_Manager { INDEX idx_updated (updated_at) ) $charset_collate;"; - require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); - dbDelta($sql); + // Crear tabla de componentes (personalizaciones del usuario) + $table_components = $this->get_table_name('components'); + $sql_components = "CREATE TABLE $table_components $table_structure"; + dbDelta($sql_components); - // Verificar si la tabla se creó correctamente - if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") === $table_name) { - error_log("APUS DB Manager: Tabla $table_name creada/actualizada exitosamente"); - return true; + if ($wpdb->get_var("SHOW TABLES LIKE '$table_components'") === $table_components) { + error_log("APUS DB Manager: Tabla $table_components creada/actualizada exitosamente"); } else { - error_log("APUS DB Manager: Error al crear tabla $table_name"); - return false; + error_log("APUS DB Manager: Error al crear tabla $table_components"); + $success = false; } + + // Crear tabla de defaults (valores por defecto del tema) + $table_defaults = $this->get_table_name('defaults'); + $sql_defaults = "CREATE TABLE $table_defaults $table_structure"; + dbDelta($sql_defaults); + + if ($wpdb->get_var("SHOW TABLES LIKE '$table_defaults'") === $table_defaults) { + error_log("APUS DB Manager: Tabla $table_defaults creada/actualizada exitosamente"); + } else { + error_log("APUS DB Manager: Error al crear tabla $table_defaults"); + $success = false; + } + + return $success; } /** * Verificar si una tabla existe + * + * @param string $table_type Tipo de tabla: 'components' o 'defaults' + * @return bool True si la tabla existe */ - public function table_exists() { + public function table_exists($table_type = 'components') { global $wpdb; - $table_name = $this->get_table_name(); + $table_name = $this->get_table_name($table_type); return $wpdb->get_var("SHOW TABLES LIKE '$table_name'") === $table_name; } @@ -111,11 +145,12 @@ class APUS_DB_Manager { * @param mixed $config_value Valor de configuración * @param string $data_type Tipo de dato (string, boolean, integer, json) * @param string $version Versión del tema + * @param string $table_type Tipo de tabla: 'components' (personalizaciones) o 'defaults' (valores por defecto) * @return bool|int ID del registro o false en caso de error */ - public function save_config($component_name, $config_key, $config_value, $data_type = 'string', $version = null) { + public function save_config($component_name, $config_key, $config_value, $data_type = 'string', $version = null, $table_type = 'components') { global $wpdb; - $table_name = $this->get_table_name(); + $table_name = $this->get_table_name($table_type); // Convertir valor según tipo if ($data_type === 'json' && is_array($config_value)) { @@ -149,11 +184,12 @@ class APUS_DB_Manager { * * @param string $component_name Nombre del componente * @param string $config_key Clave específica (opcional) + * @param string $table_type Tipo de tabla: 'components' (personalizaciones) o 'defaults' (valores por defecto) * @return array|mixed Configuración completa o valor específico */ - public function get_config($component_name, $config_key = null) { + public function get_config($component_name, $config_key = null, $table_type = 'components') { global $wpdb; - $table_name = $this->get_table_name(); + $table_name = $this->get_table_name($table_type); if ($config_key !== null) { // Obtener un valor específico @@ -210,11 +246,12 @@ class APUS_DB_Manager { * * @param string $component_name Nombre del componente * @param string $config_key Clave específica (opcional) + * @param string $table_type Tipo de tabla: 'components' (personalizaciones) o 'defaults' (valores por defecto) * @return bool Éxito de la operación */ - public function delete_config($component_name, $config_key = null) { + public function delete_config($component_name, $config_key = null, $table_type = 'components') { global $wpdb; - $table_name = $this->get_table_name(); + $table_name = $this->get_table_name($table_type); if ($config_key !== null) { return $wpdb->delete( @@ -238,11 +275,12 @@ class APUS_DB_Manager { /** * Listar todos los componentes con configuraciones * + * @param string $table_type Tipo de tabla: 'components' (personalizaciones) o 'defaults' (valores por defecto) * @return array Lista de nombres de componentes */ - public function list_components() { + public function list_components($table_type = 'components') { global $wpdb; - $table_name = $this->get_table_name(); + $table_name = $this->get_table_name($table_type); return $wpdb->get_col( "SELECT DISTINCT component_name FROM $table_name ORDER BY component_name" diff --git a/admin/includes/class-settings-manager.php b/admin/includes/class-settings-manager.php index b75e2581..485761f9 100644 --- a/admin/includes/class-settings-manager.php +++ b/admin/includes/class-settings-manager.php @@ -68,15 +68,23 @@ class APUS_Settings_Manager { /** * Valores por defecto - * NOTA: Los defaults se cargarán desde la tabla wp_apus_theme_components_defaults + * Lee los defaults desde la tabla wp_apus_theme_components_defaults */ public function get_defaults() { - return array( + $db_manager = new APUS_DB_Manager(); + $component_names = $db_manager->list_components('defaults'); + + $defaults = array( 'version' => APUS_ADMIN_PANEL_VERSION, - 'components' => array( - // Los componentes se agregarán aquí cuando se ejecute el algoritmo - ) + '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; } /**