<?php

/*
 * Copyright (C) 2021 Ángel Benítez Hernández, Echedey López Romero
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

function GenerarValoresCampo(&$Datos, $NombreCampo) {
    $ValoresCampo = [];

    foreach ($Datos as $Clave => $Valor) {
        array_push($ValoresCampo, $Valor[$NombreCampo]);
    }

    return $ValoresCampo;
}

function DatosCanarias($Fichero, &$ValoresDependientes, $NombreCampo, $NoId = false, $NuevaId = '') {
    $Datos = json_decode(file_get_contents($Fichero), true);
    $DatosCanarias = [];

    $ValoresCampo = GenerarValoresCampo($ValoresDependientes, $NombreCampo);

    foreach ($Datos as $Clave => $Valor) {
        if (in_array($Valor[$NombreCampo], $ValoresCampo, true)) {
            if ($NoId === true && $NuevaId !== '') {
                $Valor[$NuevaId] = "$Clave";
                array_push($DatosCanarias, $Valor);
            } else {
                array_push($DatosCanarias, $Valor);
            }
        }
    }

    return $DatosCanarias;
}

function CrearSelect(&$Datos, $Nombre, $CampoValor, $CampoNombre, $Seleccionado, $Desactivado = false) {
    $HTML = '';

    if (!$Desactivado) {
        $HTML .= '<select name="' . $Nombre . '" class="form-control"
          id="' . $Nombre . '" required="">' . PHP_EOL;
    } else {
        $HTML .= '<select name="' . $Nombre . '" class="form-control"
          id="' . $Nombre . '" disabled required="">' . PHP_EOL;
    }
    $HTML .= '<option value="">-- Seleccione --</option>' . PHP_EOL;

    foreach ($Datos as $Clave => $Valor) {
        if ($Valor[$CampoValor] === $Seleccionado) {
            $HTML .= '<option value="' . $Valor[$CampoValor] . '" selected="">'
                    . $Valor[$CampoNombre] . '</option>' . PHP_EOL;
        } else {
            $HTML .= '<option value="' . $Valor[$CampoValor] . '">'
                    . $Valor[$CampoNombre] . '</option>' . PHP_EOL;
        }
    }

    $HTML .= '</select>' . PHP_EOL;

    return $HTML;
}

function GenerarValoresPosibles(&$Datos, $Contenido, $NombreCampo) {
    $ValoresPosibles = [];

    foreach ($Datos as $Clave => $Valor) {
        if ($Valor[$NombreCampo] === $Contenido) {
            array_push($ValoresPosibles, $Valor);
        }
    }

    return $ValoresPosibles;
}

function ComprobarValorArray(&$Datos, $Contenido, $NombreCampo) {
    $Existe = false;

    foreach ($Datos as $Clave => $Valor) {
        if ($Valor[$NombreCampo] === $Contenido) {
            $Existe = true;
        }
    }

    return $Existe;
}

/*
function DevolverNombreArray(&$Datos, $Contenido, $NombreCampo, $NombreCampo2) {
    $Nombre = '';

    foreach ($Datos as $Clave => $Valor) {
        if ($Valor[$NombreCampo] === $Contenido) {
            $Nombre = $Valor[$NombreCampo2];
        }
    }

    return $Nombre;
}
*/

function FiltrarValor($Dato) { // Filtrado basico
    $Dato = trim($Dato);
    $Dato = stripslashes($Dato);
    $Dato = htmlspecialchars($Dato);

    return $Dato;
}

function ValidarRepresentacion($Dato, &$Respuestas, &$Errores) {
    if ($Dato === 'estudiante' || $Dato === 'representante') {
        $Respuestas['representacion'] = $Dato;
    } else {
        $Mensaje = 'Se debe especificar si quien rellena el formulario es '
                . 'estudiante o representante.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarDocumento($Dato, &$ValoresPosibles, &$Respuestas, &$Errores) {
    if (ComprobarValorArray($ValoresPosibles, $Dato, 'id')) {
        $Respuestas['documento'] = $Dato;
    } else {
        $Mensaje = 'Se debe especificar si el documento es NIF o NIE.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarIdentificacion($Dato, $DatoDependiente, &$Respuestas, &$Errores) {
    // Ej: 12345678Z / Z1234567X
    if ($DatoDependiente === 'nif') { // Ej: 12345678Z
        if (preg_match('/^[0-9]{8}[A-Za-z]{1}$/', $Dato)) {
            $Respuestas['identificacion'] = $Dato;
        } else {
            $Mensaje = 'El número del documento debe tener un número de 8 '
                    . 'dígitos y una letra.';
            array_push($Errores, $Mensaje);
        }
    } else if ($DatoDependiente === 'nie') { // Ej: Z1234567X
        if (preg_match('/^[A-Za-z]{1}[0-9]{7}[A-Za-z]{1}$/', $Dato)) {
            $Respuestas['identificacion'] = $Dato;
        } else {
            $Mensaje = 'El número del documento debe tener 1 letra, un número '
                    . 'de 8 dígitos y otra letra.';
            array_push($Errores, $Mensaje);
        }
    }
}

function ValidarNombre($Dato, &$Respuestas, &$Errores) { // a-zA-Zá-ÚÁ-Ú
    if (preg_match('/^[a-zA-ZñÑáéíóúÁÉÍÓÚü\s]{2,50}$/', $Dato)) {
        $Respuestas['nombre'] = $Dato;
    } else {
        $Mensaje = 'El nombre no debe tener ningun número y debe tener entre 2 '
                . 'y 50 caracteres.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarPrimerApellido($Dato, &$Respuestas, &$Errores) {
    if (preg_match('/^[a-zA-ZñÑáéíóúÁÉÍÓÚü\s]{2,50}$/', $Dato)) {
        $Respuestas['primer_apellido'] = $Dato;
    } else {
        $Mensaje = 'El primer apellido no debe tener ningun número y debe '
                . 'tener entre 2 y 50 caracteres.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarSegundoApellido($Dato, &$Respuestas, &$Errores) {
    if (preg_match('/^[a-zA-ZñÑáéíóúÁÉÍÓÚü\s]{2,50}$/', $Dato)) {
        $Respuestas['segundo_apellido'] = $Dato;
    } else {
        $Mensaje = 'El segundo apellido no debe tener ningun número y debe '
                . 'tener entre 2 y 50 caracteres.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarCalidadDe($Dato, &$ValoresPosibles, &$Respuestas, &$Errores) {
    if (ComprobarValorArray($ValoresPosibles, $Dato, 'id')) {
        $Respuestas['calidad_de'] = $Dato;
    } else {
        $Mensaje = 'Se debe especificar si los números de teléfono son de '
                . 'madre, padre, tutor legal o estudiante mayor de edad.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarTelefonoFijo($Dato, &$Respuestas, &$Errores) {
    if (preg_match('/^[0-9]{9}$/', $Dato)) {
        $Respuestas['telefono_fijo'] = $Dato;
    } else {
        $Mensaje = 'El telefono fijo no debe tener ninguna letra y ser un '
                . 'número de 9 dígitos.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarTelefonoMovil($Dato, &$Respuestas, &$Errores) {
    if (preg_match("/^[0-9]{9}$/", $Dato)) {
        $Respuestas['telefono_movil'] = $Dato;
    } else {
        $Mensaje = 'El telefono movil no debe tener ninguna letra y ser un '
                . 'número de 9 dígitos.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarEmail($Dato, &$Respuestas, &$Errores) {
    $RegEx = '/^(([^<>()\[\]\\.,;:\s@”]+(\.[^<>()\[\]\\.,;:\s@”]+)*)|(“.+”))@((\[[0–9]{1,3}\.[0–9]{1,3}\.[0–9]{1,3}\.[0–9]{1,3}])|(([a-zA-Z\-0–9]+\.)+[a-zA-Z]{2,}))$/';
    if (preg_match($RegEx, $Dato)) {
        $Respuestas['email'] = $Dato;
    } else {
        $Mensaje = 'Se debe de especificar un formato de correo electrónico '
                . 'correcto. Ejemplo: nombre@ejemplo.com';
        array_push($Errores, $Mensaje);
    }
}

function ValidarTipoVia($Dato, &$ValoresPosibles, &$Respuestas, &$Errores) {
    if (ComprobarValorArray($ValoresPosibles, $Dato, 'id')) {
        $Respuestas['tipo_via'] = $Dato;
    } else {
        $Mensaje = 'Se debe especificar si el tipo de vía es una avenida, '
                . 'calle, carretera, urbanizacion, paseo, plaza, ronda, travesia u '
                . 'otros.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarNombreVia($Dato, $DatoDependiente, &$Respuestas, &$Errores) {
    if ($DatoDependiente !== '') {
        if (preg_match('/^[a-zA-ZñÑáéíóúÁÉÍÓÚü\s]{2,50}$/', $Dato)) {
            $Respuestas['nombre_via'] = $Dato;
        } else {
            $Mensaje = 'El nombre de la via no debe tener ningun número y debe '
                    . 'tener entre 2 y 50 carácteres.';
            array_push($Errores, $Mensaje);
        }
    }
}

function ValidarNumero($Dato, &$Respuestas, &$Errores) {
    if (preg_match('/^[0-9]{1,3}$/', $Dato)) {
        $Respuestas['numero'] = $Dato;
    } else {
        $Mensaje = 'El numero no debe tener ninguna letra y debe tener entre 1 '
                . 'y 3 dígitos.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarBloque($Dato, &$Respuestas, &$Errores) {
    if (preg_match('/^[0-9]{1,2}$/', $Dato)) {
        $Respuestas['bloque'] = $Dato;
    } else {
        $Mensaje = 'El bloque no debe tener ninguna letra y debe tener entre 1 '
                . 'y 2 números.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarEscalera($Dato, &$Respuestas, &$Errores) {
    if (preg_match('/^[0-9]{1}[a-zA-Z0-9]{1,3}$/', $Dato)) {
        $Respuestas['escalera'] = $Dato;
    } else {
        $Mensaje = 'La escalera debe estar formado por un número numérico y '
                . 'entre 1 y 3 carácteres alfanuméricos.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarPiso($Dato, &$Respuestas, &$Errores) {
    if (preg_match('/^[0-9]{1,3}$/', $Dato)) {
        $Respuestas['piso'] = $Dato;
    } else {
        $Mensaje = 'El piso no debe tener ninguna letra y debe tener entre 1 y '
                . '2 números.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarPortal($Dato, &$Respuestas, &$Errores) {
    if (preg_match('/^[0-9][a-zA-Z0-9]{1,3}$/', $Dato)) {
        $Respuestas['portal'] = $Dato;
    } else {
        $Mensaje = 'El portal debe estar formado por un número numérico y '
                . 'entre 1 y 3 carácteres alfanumericos.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarLetra($Dato, &$Respuestas, &$Errores) {
    if (preg_match('/^[a-zA-Z]{1,2}$/', $Dato)) {
        $Respuestas['letra'] = $Dato;
    } else {
        $Mensaje = 'La letra no debe tener ningun número y debe tener entre 1 '
                . 'y 2 carácteres.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarPuerta($Dato, &$Respuestas, &$Errores) {
    if (preg_match('/^[0-9]{1,2}[a-zA-Z0-9]{1,2}$/', $Dato)) {
        $Respuestas['puerta'] = $Dato;
    } else {
        $Mensaje = 'La puerta debe estar formada por un número de 1 o 2 '
                . 'dígitos y 1 o 2 letras.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarComplemento($Dato, &$Respuestas, &$Errores) {
    if (preg_match('/^[a-zA-ZñÑáéíóúÁÉÍÓÚü\s]{2,50}$/', $Dato)) {
        $Respuestas['complemento'] = $Dato;
    } else {
        $Mensaje = 'El complemento no debe tener ningún número y debe tener '
                . 'entre 2 y 50 carácteres.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarFecha($Dato, &$Respuestas, &$Errores) { // https://www.php.net/manual/en/function.checkdate.php
    if (preg_match('/^[0-9]{4}[-][0-9]{2}[-][0-9]{2}$/', $Dato)) {
        $Fecha = explode('-', $Dato, 3);

        if (checkdate($Fecha[1], $Fecha[2], $Fecha[0])) {
            $Respuestas['fecha'] = $Dato;
        } else {
            $Mensaje = 'La fecha debe ser válida.';
            array_push($Errores, $Mensaje);
        }
    } else {
        $Mensaje = 'El formato de la fecha debe ser DD/MM/AAAA '
                . '(día, mes y año).';
        array_push($Errores, $Mensaje);
    }
}

function ValidarPais($Dato, &$ValoresPosibles, &$Respuestas, &$Errores) {
    if (ComprobarValorArray($ValoresPosibles, $Dato, 'id')) {
        $Respuestas['pais'] = $Dato;
    } else {
        $Mensaje = 'Se debe especificar el país.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarProvincia($Dato, $DatoDependiente, &$ValoresDependientes, &$ValoresPosibles, &$Respuestas, &$Errores) {
    if ($DatoDependiente === $ValoresDependientes[0]['id']) {
        if (ComprobarValorArray($ValoresPosibles, $Dato, 'provincia_id')) {
            $Respuestas['provincia'] = $Dato;
        } else {
            $Mensaje = 'Se debe seleccionar una provincia correspondiente para '
                    . 'el país seleccionado.';
            array_push($Errores, $Mensaje);
        }
    }
}

function ValidarIsla($Dato, &$ValoresPosibles, &$Respuestas, &$Errores) {
    if (count($ValoresPosibles) !== 0) {
        if (ComprobarValorArray($ValoresPosibles, $Dato, 'isla_id')) {
            $Respuestas['isla'] = $Dato;
        } else {
            $Mensaje = 'Se debe seleccionar una isla correspondiente para la '
                    . 'provincia seleccionada.';
            array_push($Errores, $Mensaje);
        }
    }
}

function ValidarMunicipio($Dato, &$ValoresPosibles, &$Respuestas, &$Errores) {
    if (count($ValoresPosibles) !== 0) {
        if (ComprobarValorArray($ValoresPosibles, $Dato, 'municipio_id')) {
            $Respuestas['municipio'] = $Dato;
        } else {
            $Mensaje = 'Se debe seleccionar un municipio correspondiente para '
                    . 'la isla seleccionada.';
            array_push($Errores, $Mensaje);
        }
    }
}

function ValidarLocalidad($Dato, &$ValoresPosibles, &$Respuestas, &$Errores) {
    if (count($ValoresPosibles) !== 0) {
        if (ComprobarValorArray($ValoresPosibles, $Dato, 'localidad_id')) {
            $Respuestas['localidad'] = $Dato;
        } else {
            $Mensaje = 'Se debe seleccionar una localidad correspondiente para '
                    . 'el municipio seleccionado.';
            array_push($Errores, $Mensaje);
        }
    }
}

function ValidarCP($Dato, $DatoDependiente, &$ValoresPosibles, &$Respuestas, &$Errores) {
    if ($DatoDependiente !== '' && count($ValoresPosibles) !== 0) {
        if (ComprobarValorArray($ValoresPosibles, $Dato, 'cp_id')) {
            $Respuestas['cp'] = $Dato;
        } else {
            $Mensaje = 'Se debe seleccionar el código postal correspondiente '
                    . 'para el municipio seleccionado.';
            array_push($Errores, $Mensaje);
        }
    }
}

function ValidarHorfandad($Dato, &$Respuestas) {
    if ($Dato === 'si') {
        $Respuestas['horfandad'] = $Dato;
    }
}

function ValidarTutelaGuarda($Dato, &$Respuestas) {
    if ($Dato === 'si') {
        $Respuestas['tutela_guarda'] = $Dato;
    }
}

function ValidarObservaciones($Dato, &$Respuestas, &$Errores) {
    if (preg_match('/^[0-9a-zA-ZñÑáéíóúÁÉÍÓÚü,.*-_«»\s]{0,2000}$/', $Dato)) {
        $Respuestas['observaciones'] = $Dato;
    } else {
        $Mensaje = 'Se deben usar caracteres alfanuméricos y los caracteres '
                . 'especiales <strong>, . * - _ « »</strong> para describir '
                . 'las observaciones.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarItinerario($Dato, &$Respuestas, &$Errores) {
    if ($Dato === 'salud' || $Dato === 'tecnologico') {
        $Respuestas['itinerario'] = $Dato;
    } else {
        $Mensaje = 'Se debe seleccionar el itinerario de Ciencias de la Salud '
                . 'o el Cientifico-Tecnológico.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarLenguaLiteratura1($Dato, &$Respuestas, &$Errores) {
    if ($Dato === 'si') {
        $Respuestas['lengua_literatura_1'] = $Dato;
    } else {
        $Mensaje = 'Se debe seleccionar la asignatura de Lengua Castellana y '
                . 'Literatura I en el Bloque 1.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarFilosofia($Dato, &$Respuestas, &$Errores) {
    if ($Dato === 'si') {
        $Respuestas['filosofia'] = $Dato;
    } else {
        $Mensaje = 'Se debe seleccionar la asignatura de Filosofía en el '
                . 'Bloque 1.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarEdFisica($Dato, &$Respuestas, &$Errores) {
    if ($Dato === 'si') {
        $Respuestas['ed_fisica'] = $Dato;
    } else {
        $Mensaje = 'Se debe seleccionar la asignatura de Educación Física '
                . 'en el Bloque 1.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarMatematicas1($Dato, &$Respuestas, &$Errores) {
    if ($Dato === 'si') {
        $Respuestas['matematicas_1'] = $Dato;
    } else {
        $Mensaje = 'Se debe seleccionar la asignatura de Matemáticas I '
                . 'en el Bloque 1.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarFisicaQuimica($Dato, &$Respuestas, &$Errores) {
    if ($Dato === 'si') {
        $Respuestas['fisica_quimica'] = $Dato;
    } else {
        $Mensaje = 'Se debe seleccionar la asignatura de Física y Química '
                . 'en el Bloque 1.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarTutoria($Dato, &$Respuestas, &$Errores) {
    if ($Dato === 'si') {
        $Respuestas['tutoria'] = $Dato;
    } else {
        $Mensaje = 'Se debe seleccionar la asignatura de Tutoría en el Bloque '
                . '1.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarOptativa1($Dato, &$Respuestas, &$Errores) {
    if (($Dato === 'ingles_1') || ($Dato === 'italiano_1')) {
        $Respuestas['optativa_1'] = $Dato;
    } else {
        $Mensaje = 'Se debe seleccionar Inglés o Italiano como Primera '
                . 'Lengua Extranjera I en el Bloque 2.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarOptativa2($Dato, $DatoDependiente, &$Respuestas, &$Errores) {
    if ($DatoDependiente === 'salud') {
        if ($Dato === 'biologia_geologia') {
            $Respuestas['optativa_2'] = $Dato;
        } else {
            $Mensaje = 'Se debe seleccionar Biología y Geología para el '
                    . 'Itinerario de Ciencias de la Salud, en el Bloque 3.';
            array_push($Errores, $Mensaje);
        }
    } else if ($DatoDependiente === 'tecnologico') {
        if ($Dato === 'dibujo_1') {
            $Respuestas['optativa_2'] = $Dato;
        } else {
            $Mensaje = 'Se debe seleccionar Dibujo Técnico I para el '
                    . 'Itinerario de Científico-Tecnológico, en el Bloque 3.';
            array_push($Errores, $Mensaje);
        }
    }
}

function ValidarOptativa3($Dato, $DatoDependiente, $DatoDependiente2,
        &$Respuestas, &$Errores) {
    if ($DatoDependiente === 'salud') {
        if ($DatoDependiente2 === 'ingles_1') {
            if ($Dato === 'tecnologia_1' || $Dato === 'cultura_cientifica' || $Dato === 'dibujo_1') {
                $Respuestas['optativa_3'] = $Dato;
            } else {
                $Mensaje = 'Se debe seleccionar entre Tecnología Industrial I, '
                        . 'Cultura Científica, Dibujo Técnico I para el Itinerario '
                        . 'de Ciencias de la Salud, en el Bloque 4.';
                array_push($Errores, $Mensaje);
            }
        } else if ($DatoDependiente2 == 'italiano_1') {
            if ($Dato === 'tecnologia_1' || $Dato === 'cultura_cientifica' || $Dato === 'ingles_1' || $Dato === 'dibujo_1') {
                $Respuestas['optativa_3'] = $Dato;
            } else {
                $Mensaje = 'Se debe seleccionar entre Tecnología Industrial I, '
                        . 'Cultura Científica, Inglés como Segunda Lengua Extranjera I '
                        . 'y Dibujo Técnico I para el Itinerario de Ciencias de la '
                        . 'Salud y teniendo Italiano como Primera Lengua Extranjera '
                        . 'I, en el Bloque 4.';
                array_push($Errores, $Mensaje);
            }
        }
    } else if ($DatoDependiente === 'tecnologico') {
        if ($DatoDependiente2 === 'ingles_1') {
            if ($Dato === 'tecnologia_1' || $Dato === 'cultura_cientifica' || $Dato === 'biologia_geologia') {
                $Respuestas['optativa_3'] = $Dato;
            } else {
                $Mensaje = 'Se debe seleccionar entre Tecnología Industrial I, '
                        . 'Cultura Científica y Biología y Geología para el Itinerario '
                        . 'Científico-Tecnológico, en el Bloque 4.';
                array_push($Errores, $Mensaje);
            }
        } else if ($DatoDependiente2 === 'italiano_1') {
            if ($Dato === 'tecnologia_1' || $Dato === 'cultura_cientifica' || $Dato === 'ingles_1' || $Dato === 'biologia_geologia') {
                $Respuestas['optativa_3'] = $Dato;
            } else {
                $Mensaje = 'Se debe seleccionar entre Tecnología Industrial I, '
                        . 'Cultura Científica, Inglés como Segunda Lengua Extranjera I '
                        . 'y Biología y Geología para el Itinerario Científico-'
                        . 'Tecnológico y teniendo Italiano como Primera Lengua '
                        . 'Extranjera I, en el Bloque 4.';
                array_push($Errores, $Mensaje);
            }
        }
    }
}

function ValidarOptativa4($Dato, &$Respuestas, &$Errores) {
    if ($Dato === 'religion_catolica' || $Dato === 'tic_1') {
        $Respuestas['optativa_4'] = $Dato;
    } else {
        $Mensaje = 'Se debe seleccionar entre Religión Católica y Tecnologías '
                . 'de la Información y Comunicación 1 en el Bloque 5.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarTratamiento($Dato, &$Respuestas, &$Errores) {
    if ($Dato === 'consiente' || $Dato === 'no_consiente') {
        $Respuestas['tratamiento'] = $Dato;
    } else {
        $Mensaje = 'Se debe seleccionar si hay o no consentimiento para el '
                . 'tratamiento de datos general.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarDifusionWeb($Dato, &$Respuestas, &$Errores) {
    if ($Dato === 'consiente' || $Dato === 'no_consiente') {
        $Respuestas['difusion_web'] = $Dato;
    } else {
        $Mensaje = 'Se debe seleccionar si hay o no consentimiento para la '
                . 'difusión de datos en el sitio web.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarDifusionApp($Dato, &$Respuestas, &$Errores) {
    if ($Dato === 'consiente' || $Dato === 'no_consiente') {
        $Respuestas['difusion_app'] = $Dato;
    } else {
        $Mensaje = 'Se debe seleccionar si hay o no consentimiento para la '
                . 'difusión de datos en la app.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarDifusionFacebook($Dato, &$Respuestas, &$Errores) {
    if ($Dato === 'consiente' || $Dato === 'no_consiente') {
        $Respuestas['difusion_facebook'] = $Dato;
    } else {
        $Mensaje = 'Se debe seleccionar si hay o no consentimiento para la '
                . 'difusión de datos en Facebook.';
        array_push($Errores, $Mensaje);
    }
}

function ValidarFichero($Dato, $NombreCampo, &$Respuestas, &$Errores) {
    //Variables de configuracion
    $DirectorioSubida = './almacen/documentos/';
    $TamanioMaximo = '10'; //En MBs
    $ExtensionesValidas = [
        'jpg',
        'jpeg',
        'png',
        'txt',
        'odt',
        'doc',
        'docx',
        'pdf'
    ];
    $MIMEsValidos = [
        'image/jpeg',
        'image/jpeg',
        'image/png',
        'text/plain',
        'application/vnd.oasis.opendocument.text',
        'application/msword',
        'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'application/pdf',
    ];

    //Variables de archivo
    $NombreFichero = $Dato['name'];
    $TamanioFichero = $Dato['size'];
    $DirectorioTemp = $Dato['tmp_name'];
    $TipoFichero = $Dato['type'];
    $ArrayFichero = pathinfo($NombreFichero);
    $Extension = '';

    if (isset($ArrayFichero['extension'])){
        $Extension = $ArrayFichero['extension'];
    }

    $Error = $Dato['error'];
    $SeSube = true;

    // Gestion de errores
    if ($Error === 0) {
        // Comprobamos la extensión del archivo
        if (!in_array($Extension, $ExtensionesValidas)) {
            $Mensaje = 'La extensión del fichero <strong>' . $NombreFichero . '</strong> no es válida.';
            array_push($Errores, $Mensaje);
            $SeSube = false;
        }

        // Comprobamos el tamaño del archivo
        if ($TamanioFichero > ($TamanioMaximo * 1000000 /*Conversion a MBytes*/)) {
            $Mensaje = 'El fichero <strong>' . $NombreFichero . '</strong> debe de tener un tamaño inferior a 10 MBs.';
            array_push($Errores, $Mensaje);
            $SeSube = false;
        }

        // Comprobamos el tipo MIME del archivo
        if (!in_array($TipoFichero, $MIMEsValidos)) {
            $Mensaje = 'El tipo MIME del fichero <strong>' . $NombreFichero . '</strong> no es válido.';
            array_push($Errores, $Mensaje);
            $SeSube = false;
        }
    } else {
        if ($Error === 3) {
            $Mensaje = 'El fichero <strong>' . $NombreFichero . '</strong> solo se ha subido parcialmente.';
            array_push($Errores, $Mensaje);
            $SeSube = false;
        } else if ($Error === 4) {
            $Mensaje = 'No se ha subido ningun fichero.';
            array_push($Errores, $Mensaje);
            $SeSube = false;
        } else {
            $Mensaje = 'Error general al subir el fichero <strong>' . $NombreFichero . '</strong>.';
            array_push($Errores, $Mensaje);
            $SeSube = false;
        }
    }

    // Se sube el archivo
    if ($SeSube && count($Errores) === 0) {
        $Respuestas[$NombreCampo] = $Respuestas['identificacion'] . '-' . $NombreFichero;
        move_uploaded_file($DirectorioTemp, ($DirectorioSubida . $Respuestas[$NombreCampo]));
    }
}


function GuardarRespuestas(&$Respuestas, $Direccion) {
    $JSON = json_encode($Respuestas);
    file_put_contents($Direccion, $JSON);
}

function ImprimirErrores(&$Errores) {
    $HTML = '';
    $HTML .= '<div class="container p-3 rounded errores">' . PHP_EOL;
    $HTML .= '<div class="row mb-1">' . PHP_EOL;
    $HTML .= '<div class="col-12 text-center">' . PHP_EOL;
    $HTML .= '<span class="font-weight-bold">Errores</span>' . PHP_EOL;
    $HTML .= '</div>' . PHP_EOL;
    $HTML .= '</div>' . PHP_EOL;
    $HTML .= '<div class="row">' . PHP_EOL;
    $HTML .= '<div class="col-12">' . PHP_EOL;
    $HTML .= '<ul class="px-0 mb-0">' . PHP_EOL;

    foreach ($Errores as $Error) {
        $HTML .= '<li class="mx-4">' . $Error . '</li>' . PHP_EOL;
    }

    $HTML .= '</ul>' . PHP_EOL;
    $HTML .= '</div>' . PHP_EOL;
    $HTML .= '</div>' . PHP_EOL;
    $HTML .= '</div>' . PHP_EOL;

    return $HTML;
}
