Última modificación:
--/--/----
Subido por:
--
\nDeny from all\n");
}
// Registrar el hook de activación
register_activation_hook(__FILE__, 'crear_directorios_repositorio');
// AJAX para subir archivos
add_action('wp_ajax_subir_archivo_repositorio', 'manejar_subida_archivo');
add_action('wp_ajax_nopriv_subir_archivo_repositorio', 'manejar_subida_archivo_noauth');
function manejar_subida_archivo() {
// Verificar nonce y permisos
if (!wp_verify_nonce($_POST['nonce'], 'repositorio_nonce') ||
!current_user_can('upload_files')) {
wp_die('Acceso no autorizado');
}
$carpeta_id = intval($_POST['carpeta_id']);
$archivos = $_FILES['archivos'];
// Validar carpeta
if ($carpeta_id < 1 || $carpeta_id > 9) {
wp_send_json_error('Carpeta inválida');
}
// Directorio destino
$upload_dir = wp_upload_dir();
$destino = $upload_dir['basedir'] . "/repositorio-isp/carpeta-{$carpeta_id}/";
$resultados = array();
// Procesar cada archivo
foreach ($archivos['name'] as $index => $name) {
if ($archivos['error'][$index] === UPLOAD_ERR_OK) {
$tmp_name = $archivos['tmp_name'][$index];
$nombre_final = sanitize_file_name($name);
$destino_final = $destino . $nombre_final;
// Mover archivo
if (move_uploaded_file($tmp_name, $destino_final)) {
// Registrar en base de datos
$archivo_id = registrar_archivo_db($carpeta_id, $nombre_final, $destino_final);
$resultados[] = array(
'success' => true,
'id' => $archivo_id,
'nombre' => $nombre_final,
'url' => str_replace($upload_dir['basedir'], $upload_dir['baseurl'], $destino_final)
);
}
}
}
wp_send_json_success($resultados);
}
function manejar_subida_archivo_noauth() {
wp_send_json_error('Debes iniciar sesión');
}
// Registrar archivo en la base de datos
function registrar_archivo_db($carpeta_id, $nombre, $ruta) {
global $wpdb;
$tabla = $wpdb->prefix . 'repositorio_archivos';
$wpdb->insert($tabla, array(
'carpeta_id' => $carpeta_id,
'nombre' => $nombre,
'ruta' => $ruta,
'tamaño' => filesize($ruta),
'usuario_id' => get_current_user_id(),
'fecha_subida' => current_time('mysql')
));
return $wpdb->insert_id;
}
// Crear tabla en la base de datos
function crear_tabla_repositorio() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
$tabla = $wpdb->prefix . 'repositorio_archivos';
$sql = "CREATE TABLE IF NOT EXISTS $tabla (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
carpeta_id INT NOT NULL,
nombre VARCHAR(255) NOT NULL,
ruta TEXT NOT NULL,
tipo VARCHAR(50),
tamaño BIGINT,
usuario_id BIGINT UNSIGNED NOT NULL,
fecha_subida DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY carpeta_id (carpeta_id),
KEY usuario_id (usuario_id),
KEY fecha_subida (fecha_subida)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
// Shortcode para insertar el repositorio
add_shortcode('repositorio_isp_documental', 'mostrar_repositorio_isp');
function mostrar_repositorio_isp() {
// Solo mostrar si el usuario tiene permiso
if (!current_user_can('read')) {
return '
Debes iniciar sesión para acceder al repositorio.
';
}
ob_start();
?>