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';
|
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
|
* Versión de la base de datos
|
||||||
*/
|
*/
|
||||||
@@ -39,9 +44,17 @@ class APUS_DB_Manager {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtener nombre completo de tabla con prefijo
|
* 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;
|
global $wpdb;
|
||||||
|
|
||||||
|
if ($table_type === 'defaults') {
|
||||||
|
return $wpdb->prefix . self::TABLE_DEFAULTS;
|
||||||
|
}
|
||||||
|
|
||||||
return $wpdb->prefix . self::TABLE_COMPONENTS;
|
return $wpdb->prefix . self::TABLE_COMPONENTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,14 +72,18 @@ class APUS_DB_Manager {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Crear tablas personalizadas
|
* Crear tablas personalizadas
|
||||||
|
* Crea tanto la tabla de componentes (personalizaciones) como la de defaults
|
||||||
*/
|
*/
|
||||||
public function create_tables() {
|
public function create_tables() {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
$charset_collate = $wpdb->get_charset_collate();
|
$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,
|
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
component_name VARCHAR(50) NOT NULL,
|
component_name VARCHAR(50) NOT NULL,
|
||||||
config_key VARCHAR(100) NOT NULL,
|
config_key VARCHAR(100) NOT NULL,
|
||||||
@@ -81,25 +98,42 @@ class APUS_DB_Manager {
|
|||||||
INDEX idx_updated (updated_at)
|
INDEX idx_updated (updated_at)
|
||||||
) $charset_collate;";
|
) $charset_collate;";
|
||||||
|
|
||||||
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
// Crear tabla de componentes (personalizaciones del usuario)
|
||||||
dbDelta($sql);
|
$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_components'") === $table_components) {
|
||||||
if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") === $table_name) {
|
error_log("APUS DB Manager: Tabla $table_components creada/actualizada exitosamente");
|
||||||
error_log("APUS DB Manager: Tabla $table_name creada/actualizada exitosamente");
|
|
||||||
return true;
|
|
||||||
} else {
|
} else {
|
||||||
error_log("APUS DB Manager: Error al crear tabla $table_name");
|
error_log("APUS DB Manager: Error al crear tabla $table_components");
|
||||||
return false;
|
$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
|
* 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;
|
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;
|
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 mixed $config_value Valor de configuración
|
||||||
* @param string $data_type Tipo de dato (string, boolean, integer, json)
|
* @param string $data_type Tipo de dato (string, boolean, integer, json)
|
||||||
* @param string $version Versión del tema
|
* @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
|
* @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;
|
global $wpdb;
|
||||||
$table_name = $this->get_table_name();
|
$table_name = $this->get_table_name($table_type);
|
||||||
|
|
||||||
// Convertir valor según tipo
|
// Convertir valor según tipo
|
||||||
if ($data_type === 'json' && is_array($config_value)) {
|
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 $component_name Nombre del componente
|
||||||
* @param string $config_key Clave específica (opcional)
|
* @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
|
* @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;
|
global $wpdb;
|
||||||
$table_name = $this->get_table_name();
|
$table_name = $this->get_table_name($table_type);
|
||||||
|
|
||||||
if ($config_key !== null) {
|
if ($config_key !== null) {
|
||||||
// Obtener un valor específico
|
// Obtener un valor específico
|
||||||
@@ -210,11 +246,12 @@ class APUS_DB_Manager {
|
|||||||
*
|
*
|
||||||
* @param string $component_name Nombre del componente
|
* @param string $component_name Nombre del componente
|
||||||
* @param string $config_key Clave específica (opcional)
|
* @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
|
* @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;
|
global $wpdb;
|
||||||
$table_name = $this->get_table_name();
|
$table_name = $this->get_table_name($table_type);
|
||||||
|
|
||||||
if ($config_key !== null) {
|
if ($config_key !== null) {
|
||||||
return $wpdb->delete(
|
return $wpdb->delete(
|
||||||
@@ -238,11 +275,12 @@ class APUS_DB_Manager {
|
|||||||
/**
|
/**
|
||||||
* Listar todos los componentes con configuraciones
|
* 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
|
* @return array Lista de nombres de componentes
|
||||||
*/
|
*/
|
||||||
public function list_components() {
|
public function list_components($table_type = 'components') {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
$table_name = $this->get_table_name();
|
$table_name = $this->get_table_name($table_type);
|
||||||
|
|
||||||
return $wpdb->get_col(
|
return $wpdb->get_col(
|
||||||
"SELECT DISTINCT component_name FROM $table_name ORDER BY component_name"
|
"SELECT DISTINCT component_name FROM $table_name ORDER BY component_name"
|
||||||
|
|||||||
@@ -68,15 +68,23 @@ class APUS_Settings_Manager {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Valores por defecto
|
* 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() {
|
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,
|
'version' => APUS_ADMIN_PANEL_VERSION,
|
||||||
'components' => array(
|
'components' => array()
|
||||||
// Los componentes se agregarán aquí cuando se ejecute el algoritmo
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user