Plugins bloques
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
<?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';
|
||||
}
|
||||
Reference in New Issue
Block a user