Files
tangente-bloques-en-transicion/bloques-transicion/includes/class-data-seeder.php
T

234 lines
7.7 KiB
PHP
Raw Normal View History

2026-02-13 13:13:06 +01:00
<?php
/**
* Carga de datos iniciales (Iniciativas y Líneas de Trabajo)
*
* @package Bloques_Transicion
*/
if (!defined('ABSPATH')) {
exit;
}
class Bloques_Data_Seeder {
/**
* Cargar todos los datos iniciales
*/
public static function seed_all() {
$result_iniciativas = self::seed_iniciativas();
$result_lineas = self::seed_lineas_trabajo();
$result_tipos = self::seed_tipos_evento();
return $result_iniciativas && $result_lineas && $result_tipos;
}
/**
* Cargar Iniciativas
*/
public static function seed_iniciativas() {
$iniciativas = [
[
'name' => 'Oficina de Transición Justa',
'slug' => 'oficina-transicion-justa',
'description' => 'Acompañamiento técnico, asesoramiento y formación para personas y comunidades interesadas en impulsar iniciativas de cambio.',
'meta' => [
'ubicacion_texto' => 'Puente y Villa de Vallecas',
'estado' => 'Abierta - consultas permanentes',
'color' => '#1E6B52',
],
],
[
'name' => 'Coles en transición',
'slug' => 'coles-transicion',
'description' => 'Acompañamiento en la elaboración e implementación de planes de adaptación climática en centros educativos y otras iniciativas de cambio con participación de la comunidad escolar.',
'meta' => [
'ubicacion_texto' => '7 centros en Puente y Villa de Vallecas',
'estado' => 'En marcha',
'color' => '#4A9B7F',
],
],
[
'name' => 'Comunidad energética',
'slug' => 'comunidad-energetica',
'description' => 'Acompañamiento en la creación de la Comunidad Energética Vallekana para producir, compartir y gestionar energía renovable.',
'meta' => [
'ubicacion_texto' => 'Puente de Vallecas',
'estado' => 'En proceso de constitución',
'color' => '#F4A261',
],
],
[
'name' => 'Creación de redes',
'slug' => 'creacion-redes',
'description' => 'Intercambio de conocimientos y participación. Acompañamiento e impulso del funcionamiento y la creación de redes locales y estatales multiactor para el aprendizaje y la puesta en marcha de acciones hacia la transición justa.',
'meta' => [
'ubicacion_texto' => 'Madrid, Cataluña y Valencia',
'estado' => 'En proceso',
'color' => '#E76F51',
],
],
];
return self::insert_terms($iniciativas, 'iniciativa');
}
/**
* Cargar Líneas de Trabajo
*/
public static function seed_lineas_trabajo() {
$lineas = [
[
'name' => 'Energía',
'slug' => 'energia',
'description' => 'Rehabilitación edificios, comunidades energéticas y autoconsumo renovable',
'meta' => [
'color' => '#F4A261',
],
],
[
'name' => 'Cuidados',
'slug' => 'cuidados',
'description' => 'Redes de apoyo mutuo y espacios vecinales',
'meta' => [
'color' => '#E9C46A',
],
],
[
'name' => 'Alimentación',
'slug' => 'alimentacion',
'description' => 'Alimentación sostenible y saludable y redes de consumo',
'meta' => [
'color' => '#2A9D8F',
],
],
[
'name' => 'Movilidad',
'slug' => 'movilidad',
'description' => 'Movilidad sostenible, uso de la bicicleta y espacio público',
'meta' => [
'color' => '#264653',
],
],
[
'name' => 'Renaturalización',
'slug' => 'renaturalizacion',
'description' => 'Renaturalización de comunidades y patios escolares',
'meta' => [
'color' => '#1E6B52',
],
],
[
'name' => 'Reutilización',
'slug' => 'reutilizacion',
'description' => 'Economía circular y consumo colaborativo',
'meta' => [
'color' => '#E76F51',
],
],
];
return self::insert_terms($lineas, 'linea_trabajo');
}
/**
* Cargar Tipos de Evento
*/
public static function seed_tipos_evento() {
$tipos = [
[
'name' => 'Online',
'slug' => 'online',
'description' => 'Evento que se realiza de forma virtual',
],
[
'name' => 'Presencial',
'slug' => 'presencial',
'description' => 'Evento que se realiza de forma presencial',
],
];
return self::insert_terms($tipos, 'tipo_evento');
}
/**
* Insertar términos en una taxonomía
*/
private static function insert_terms($terms, $taxonomy) {
$success = true;
foreach ($terms as $term_data) {
// Verificar si ya existe
$existing = term_exists($term_data['slug'], $taxonomy);
if ($existing) {
$term_id = is_array($existing) ? $existing['term_id'] : $existing;
// Actualizar descripción si existe
wp_update_term($term_id, $taxonomy, [
'description' => $term_data['description'] ?? '',
]);
} else {
// Crear nuevo término
$result = wp_insert_term(
$term_data['name'],
$taxonomy,
[
'slug' => $term_data['slug'],
'description' => $term_data['description'] ?? '',
]
);
if (is_wp_error($result)) {
$success = false;
continue;
}
$term_id = $result['term_id'];
}
// Guardar meta datos con ACF si está disponible
if (!empty($term_data['meta']) && function_exists('update_field')) {
foreach ($term_data['meta'] as $key => $value) {
update_field($key, $value, $taxonomy . '_' . $term_id);
}
}
}
return $success;
}
/**
* Eliminar todos los datos del plugin
*/
public static function clear_all() {
// Eliminar términos de iniciativas
$iniciativas = get_terms([
'taxonomy' => 'iniciativa',
'hide_empty' => false,
]);
foreach ($iniciativas as $term) {
wp_delete_term($term->term_id, 'iniciativa');
}
// Eliminar términos de líneas de trabajo
$lineas = get_terms([
'taxonomy' => 'linea_trabajo',
'hide_empty' => false,
]);
foreach ($lineas as $term) {
wp_delete_term($term->term_id, 'linea_trabajo');
}
// Eliminar tipos de evento
$tipos = get_terms([
'taxonomy' => 'tipo_evento',
'hide_empty' => false,
]);
foreach ($tipos as $term) {
wp_delete_term($term->term_id, 'tipo_evento');
}
return true;
}
}