83 lines
2.8 KiB
PHP
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';
|
|
}
|