<?php
ob_start();

include 'sesion.php';
include 'concha.php';

/*
    borrar_archivo_nota.php

    Borra:
    1. El registro de la tabla archivos
    2. El archivo físico del servidor si la ruta pertenece al mismo sitio

    Parámetros esperados:
    borrar_archivo_nota.php?ID=123&ID_nota=37
*/

$ID = isset($_GET['ID']) ? (int)$_GET['ID'] : 0;
$ID_nota = isset($_GET['ID_nota']) ? (int)$_GET['ID_nota'] : 0;

function volver_panel()
{
    $fallback = 'index_principal.php';

    if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != '') {
        $ref = $_SERVER['HTTP_REFERER'];

        $host_actual = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '';

        if ($host_actual != '') {
            $host_ref = parse_url($ref, PHP_URL_HOST);

            if ($host_ref == $host_actual) {
                header("Location: " . $ref);
                exit;
            }
        }
    }

    header("Location: " . $fallback);
    exit;
}

function limpiar_ruta_archivo($ruta)
{
    $ruta = trim($ruta);
    $ruta = str_replace("\\", "/", $ruta);
    $ruta = preg_replace('/[\?#].*$/', '', $ruta);
    return $ruta;
}

function host_permitido($host_url)
{
    global $dom, $hostdom;

    $host_url = strtolower(trim((string)$host_url));

    if ($host_url == '') {
        return true;
    }

    $hosts_validos = array();

    if (isset($_SERVER['HTTP_HOST']) && $_SERVER['HTTP_HOST'] != '') {
        $hosts_validos[] = strtolower($_SERVER['HTTP_HOST']);
    }

    if (isset($dom) && $dom != '') {
        $h = parse_url($dom, PHP_URL_HOST);
        if ($h != '') {
            $hosts_validos[] = strtolower($h);
        }
    }

    if (isset($hostdom) && $hostdom != '') {
        $h = parse_url($hostdom, PHP_URL_HOST);
        if ($h != '') {
            $hosts_validos[] = strtolower($h);
        }
    }

    $hosts_validos = array_unique($hosts_validos);

    foreach ($hosts_validos as $h) {
        if ($host_url == $h) {
            return true;
        }
    }

    return false;
}

function obtener_ruta_relativa($ruta)
{
    $ruta = limpiar_ruta_archivo($ruta);

    if ($ruta == '') {
        return '';
    }

    $host_url = parse_url($ruta, PHP_URL_HOST);
    $path_url = parse_url($ruta, PHP_URL_PATH);

    if ($host_url != '') {
        if (!host_permitido($host_url)) {
            return '';
        }

        $ruta_relativa = $path_url;
    } else {
        $ruta_relativa = $ruta;
    }

    $ruta_relativa = ltrim($ruta_relativa, '/');

    if ($ruta_relativa == '') {
        return '';
    }

    if (strpos($ruta_relativa, '../') !== false || strpos($ruta_relativa, '..\\') !== false) {
        return '';
    }

    return $ruta_relativa;
}

function borrar_archivo_fisico($ruta)
{
    global $rutadom;

    $ruta_relativa = obtener_ruta_relativa($ruta);

    if ($ruta_relativa == '') {
        return false;
    }

    $rutas_posibles = array();

    if (isset($rutadom) && $rutadom != '') {
        $rutas_posibles[] = rtrim($rutadom, '/') . '/' . $ruta_relativa;
    }

    $rutas_posibles[] = $ruta_relativa;
    $rutas_posibles[] = '../' . $ruta_relativa;

    foreach ($rutas_posibles as $archivo_fisico) {
        $archivo_fisico = str_replace("//", "/", $archivo_fisico);

        if (file_exists($archivo_fisico) && is_file($archivo_fisico)) {
            @chmod($archivo_fisico, 0666);

            if (@unlink($archivo_fisico)) {
                return true;
            }
        }
    }

    return false;
}

if ($ID <= 0 || $ID_nota <= 0) {
    volver_panel();
}

$sql = "SELECT * FROM archivos WHERE ID = '$ID' AND ID_nota = '$ID_nota' LIMIT 1";
$consulta = $conn->query($sql);

if ($consulta && $consulta->num_rows > 0) {

    $row = $consulta->fetch_assoc();

    $ruta = isset($row['ruta']) ? $row['ruta'] : '';

    if ($ruta != '') {
        borrar_archivo_fisico($ruta);
    }

    $sql_delete = "DELETE FROM archivos WHERE ID = '$ID' AND ID_nota = '$ID_nota' LIMIT 1";
    $conn->query($sql_delete);
}

if ($consulta) {
    $consulta->free_result();
}

volver_panel();
?>