Files
tangente-bloques-en-transicion/bloques-actuaciones-import/bloques-actuaciones-import.php
Jose Ibáñez 26d7f11378 Plugins bloques
2026-02-13 13:13:06 +01:00

83 lines
2.8 KiB
PHP

<?php
/**
* Plugin Name: Importar Actuaciones desde CSV
* Description: Importador idempotente de Actuaciones (Bloques en Transición) desde CSV con mapeo interactivo de categorías.
* Version: 1.1.0
* Author: Freepress Coop
* License: GPL-2.0+
* Text Domain: bloques-actuaciones-import
* Requires Plugins: bloques-transicion
* Requires at least: 6.0
* Requires PHP: 8.0
*/
if (!defined('ABSPATH')) {
exit;
}
define('BLOQUES_IMPORT_VERSION', '1.1.0');
define('BLOQUES_IMPORT_DIR', plugin_dir_path(__FILE__));
define('BLOQUES_IMPORT_URL', plugin_dir_url(__FILE__));
require_once BLOQUES_IMPORT_DIR . 'includes/class-bloques-actuaciones-importer.php';
add_action('admin_menu', 'bloques_import_register_menu', 20);
function bloques_import_register_menu() {
if (!defined('BLOQUES_PLUGIN_DIR')) {
return;
}
add_submenu_page(
'bloques-dashboard',
__('Importar Actuaciones CSV', 'bloques-actuaciones-import'),
__('📥 Importar CSV', 'bloques-actuaciones-import'),
'manage_options',
'bloques-import-actuaciones',
'bloques_import_render_page'
);
}
function bloques_import_render_page() {
$step = 'upload'; // upload | mapping | done
$message = '';
$message_type = '';
$import_errors = [];
$analysis = null;
// ── PASO 2: el usuario ha confirmado mapeos → importar ──
if (
isset($_POST['bloques_import_step']) &&
$_POST['bloques_import_step'] === 'import' &&
wp_verify_nonce($_POST['bloques_import_nonce'] ?? '', 'bloques_import_actuaciones')
) {
$csv_path = sanitize_text_field($_POST['csv_path'] ?? '');
$geocode = !empty($_POST['reverse_geocode']);
$ini_map = array_map('sanitize_text_field', (array) ($_POST['ini_map'] ?? []));
$linea_map = array_map('sanitize_text_field', (array) ($_POST['linea_map'] ?? []));
$result = Bloques_Actuaciones_Importer::import($csv_path, $ini_map, $linea_map, $geocode);
$message = $result['message'];
$message_type = $result['success'] ? 'success' : 'error';
$import_errors = $result['errors'] ?? [];
$step = 'done';
}
// ── PASO 1: subir CSV → analizar y mostrar mapeos ──
elseif (
isset($_POST['bloques_import_step']) &&
$_POST['bloques_import_step'] === 'analyze' &&
wp_verify_nonce($_POST['bloques_import_nonce'] ?? '', 'bloques_import_actuaciones')
) {
$analysis = Bloques_Actuaciones_Importer::analyze($_FILES['csv_file'] ?? null);
if (!$analysis['success']) {
$message = $analysis['message'];
$message_type = 'error';
$step = 'upload';
} else {
$step = 'mapping';
}
}
include BLOQUES_IMPORT_DIR . 'templates/admin/import-page.php';
}