feat: mejorar DB Manager para soportar ambas tablas (components y defaults)
- 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
This commit is contained in:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user