HEX
Server: Apache
System: Linux clpupre 5.4.0-90-generic #101-Ubuntu SMP Fri Oct 15 20:00:55 UTC 2021 x86_64
User: undanet (1000)
PHP: 7.4.3
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /home/undanet/www/PortalEmpleo/listarConvocatorias.php
<?php 

use PortalEmpleo\Entity\DboConvocatoria;
use PortalEmpleo\Entity\DboCandidatoconvocatoria;
use PortalEmpleo\Entity\DboEstadoconvocatoria;
use PortalEmpleo\Controller\ConvocatoriaController;
use PortalEmpleo\Utils\Load;

require __DIR__ . '/vendor/autoload.php';

session_start();

//include('src/Controller/UserController.php');
$controllerconvocatoria = new ConvocatoriaController();

if( pll_current_language() == 'en')
    $lang = 'en_GB';
else 
    $lang = 'es_ES';

$actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

if($_SERVER['REQUEST_METHOD'] == "POST")
{
    if(isset($_POST['accionConvocatoria']))
    {

        switch ($_POST['accionConvocatoria']) {
            case 'DetalleConvocatoria':
                if(isset($_POST['convocatoriaId']))
                {
                    $id = $_POST['convocatoriaId'];

                    if(isset($_POST['candidatoIdWP']))
                    {
                        call_user_func(array($controllerconvocatoria, 'detalleConvocatoria'), $id, isset($lang) ? $lang : 'es_ES', $_POST['candidatoIdWP']);
                    }
                    else
                    {
                        call_user_func(array($controllerconvocatoria, 'detalleConvocatoria'), $id, isset($lang) ? $lang : 'es_ES', null);
                    }
                }
                break;
            case 'Modificar':
                if(isset($_POST['convocatoriaId']))
                {
                    $id = $_POST['convocatoriaId'];
                    call_user_func(array($controllerconvocatoria, 'modificarConvocatoria'), $id, isset($lang) ? $lang : 'es_ES');
                }
                break;
            case 'ActualizarConvocatoria':
            case 'AltaConvocatoria':
                //Comprobar variables $_post
                //funcion para validar los datos
                $datosOK = "";
                $datosOK = validarConvocatoria();
                
                //llamar la controler para actualizar
                if($datosOK == "")
                {
                    //$id = $_POST['convocatoriaId'];
                    $convocat = construirConvocatoria();

                    if(isset($convocat))
                    {
                        call_user_func(array($controllerconvocatoria, 'actualizarConvocatoria'), $convocat, isset($lang) ? $lang : 'es_ES');
                    }
                }
                else
                {
                    echo '<BR><form method="post" action =""><input type="submit" id="btnListar" name="accionConvocatoria" value="ListarConvocatorias"></form>';
                }
                break;
            case 'ListarConvocatorias':
                    listarConvocatorias($controllerconvocatoria);
                break;
            case 'BuscarConvocatorias':
                    call_user_func(array($controllerconvocatoria, 'buscadorConvocatorias'), isset($lang) ? $lang : 'es_ES');
                break;
            /*case 'Eliminar':
                if(isset($_POST['userId']))
                {
                    $userId = $_POST['userId'];
                    call_user_func(array($controllerconvocatoria, 'eliminarUsuario'), $userId);
                }
                break;*/
            case 'Nueva Convocatoria':
                    call_user_func(array($controllerconvocatoria, 'nuevaConvocatoria'),isset($lang) ? $lang : 'es_ES');
                break;
            case 'Inscribirse':
            case 'Register':
                    if(isset($_POST['convocatoriaId']) && isset($_POST['candidatoIdWP']))
                    {
                        $idConvocatoria = $_POST['convocatoriaId'];
                        $idCandidatoWP = $_POST['candidatoIdWP'];
                        call_user_func(array($controllerconvocatoria, 'inscripcionConvocatoria'), $idConvocatoria, $idCandidatoWP, isset($lang) ? $lang : 'es_ES');
                    }
                    elseif(isset($_POST['candidatoIdWP']))
                    {
                        $idCandidatoWP = $_POST['candidatoIdWP'];
                        call_user_func(array($controllerconvocatoria, 'inscripcionConvocatoria'), null, $idCandidatoWP, isset($lang) ? $lang : 'es_ES');
                    }
                break;
            case 'InscribirCandidato':
                    $datosOK = "";
                    $datosOK = validarCandidatoConvocatoria();

                    if($datosOK == "")
                    {
                        $cndcvt = construirCandidatoConvocatoria();
                        
                        if(isset($cndcvt))
                        {
                            $idCandidatoWP = $_POST['candidatoIdWP'];

                            $lfiles = [];
                            
                            foreach ($_FILES as $ctl => $file) {
                                if (strlen(trim($file['name']))>0)
                                {
                                    if (!strlen(stripos($ctl, "fl")) > 0) {
                                        $file['name'] = $ctl . '_' . $file['name'];
                                    }
                                    array_push($lfiles, $file);
                                }
                            }

                            if(count($lfiles) > 0 && is_numeric($_POST['txtCdt']) && is_numeric($_POST['convocatoriaId']) && is_numeric($_POST['candidatoIdWP']))
                            {
                                //$result = uploadFiles($lfiles, $_POST['txtCdt'], $_POST['convocatoriaId']);
                                $result = uploadFiles($lfiles, $_POST['candidatoIdWP'], $_POST['convocatoriaId']);
                            }

                            if(count($lfiles) <= 0)  //Si no hay ficheros (usa lo del perfil)
                            {
                                call_user_func(array($controllerconvocatoria, 'insertarCandidatoConvocatoria'), $cndcvt, $idCandidatoWP, isset($lang) ? $lang : 'es_ES');   
                            }
                            else
                            {
                                if($result!= -1) //Si hay ficheros y no hay error en la subida
                                {
                                    if($lang=='en' || $lang=='en_GB')
                                    {
                                        echo '<script language="javascript">alert("Files uploaded successfully");</script>';
                                    }
                                    else
                                    {
                                        echo '<script language="javascript">alert("Archivos subidos con éxito");</script>';
                                    }
                                    call_user_func(array($controllerconvocatoria, 'insertarCandidatoConvocatoria'), $cndcvt, $idCandidatoWP, isset($lang) ? $lang : 'es_ES');
                                }
                                else
                                {
                                    if($lang=='en' || $lang=='en_GB')
                                    {
                                        echo '<br>An error has occurred when processing your attached files. Please, check the size of the files (not up from 10MB) and check that all files extension are allowed';
                                    }
                                    else
                                    {
                                        echo '<br>Se ha producido un error al subir los ficheros adjuntos. Por favor, revise el tamaño de los archivos (no superior a 10MB) y la extensión de los mismos';
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        echo $datosOK;
                    }
                break;
            case 'CandidaturaEspontanea':
                    $datosOK = "";
                    $datosOK = validarCandidaturaEspontanea();

                    if($datosOK == "")
                    {
                        $cndcvt = construirCandidaturaEspontanea();
                            
                        if(isset($cndcvt))
                        {
                            $idCandidatoWP = $_POST['candidatoIdWP'];
                            call_user_func(array($controllerconvocatoria, 'insertarCandidaturaEspontanea'), $cndcvt, $idCandidatoWP, isset($lang) ? $lang : 'es_ES');
                        }
                    }
                    else
                    {
                        echo $datosOK;
                    }
                break;    
            default:
                    listarConvocatorias($controllerconvocatoria);
                break;
        }
    }
    else
    {
        listarConvocatorias($controllerconvocatoria);
        /*echo 'asdasdasdasds';
        if(isset($_POST['username-114']) && isset($_POST['user_password-114']) && $_POST['nologin'])
        {
            $credentials = array();
            $credentials['user_login'] = $_POST['username-114'];
            $credentials['user_password'] = $_POST['user_password-114'];
            $credentials['remember'] = true;

            $new_user = wp_signon( $credentials, '' );

            $_POST['username-114']=null;
            $_POST['user_password-114']=null;

            header("LOCATION:$actual_link");
        }
        else
        {
            listarConvocatorias($controllerconvocatoria);
        }*/
    }
}
else
{
    if(isset($_POST['accionConvocatoria']) && isset($_POST['convocatoriaId']))
    {
        $id = $_POST['convocatoriaId'];
        call_user_func(array($controllerconvocatoria, 'detalleConvocatoria'), $id, isset($lang) ? $lang : 'es_ES');
    }
    else
    {
        listarConvocatorias($controllerconvocatoria);
    }
}

$todaynow = new DateTime('now');
call_user_func(array($controllerconvocatoria, 'modificarEstados'), $todaynow, isset($lang) ? $lang : 'es_ES');

function listarConvocatorias($controller)
{
    if(isset($_POST['convocatoriaId']))
    {
        unset($_POST['convocatoriaId']);
    }

	call_user_func(array($controller, 'listarConvocatorias'), isset($lang) ? $lang : 'es_ES');
}

function validarConvocatoria()
{
    /*
        idconvocatoria->
        *referencia->$_POST['txtReferencia']
        *puestotrabajo->$_POST['txtPuestoTrabajo']
        *centro->$_POST['txtCentro']
        *fechainicio->$_POST['dtFechaInicio']
        *fechafin->$_POST['dtFechaFin']
        *fechaultimaactualizacion->$_POST['dtFechaUltimaActualizacion']
        *rutaarchivoconvocatoria->$_POST['flPDFConvocatoria']
        *rutaarchivoresolucionfinal->$_POST['flPDFResolucionFinal']
        *urlweb->$_POST['txtWeb']
        *codigoestadoconvocatoria->$_POST['slctEstadoConvocatoria']
        *caducada-> comparar la fechafin con la actual o la de la ultima actualizacion
        *baja->
        *descripcion->$_POST['txtDescripcion']
    */

    $msgError = "";

    //Validar Referencia
    if(!isset($_POST['txtReferencia']))
    {
        $msgError = $msgError . "El campo Referencia debe estar informado<BR>"; 
    }
    else if ($_POST['txtReferencia']==null || strlen(trim($_POST['txtReferencia']))<=0)
    {
        $msgError = $msgError . "El campo Referencia debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar PuestoTrabajo
    if(!isset($_POST['txtPuestoTrabajo']))
    {
        $msgError = $msgError . "El campo Puesto de Trabajo debe estar informado<BR>"; 
    }
    else if ($_POST['txtPuestoTrabajo']==null || strlen(trim($_POST['txtPuestoTrabajo']))<=0)
    {
        $msgError = $msgError . "El campo Puesto de Trabajo debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar Centro
    if(!isset($_POST['txtCentro']))
    {
        $msgError = $msgError . "El campo Centro debe estar informado<BR>"; 
    }
    else if ($_POST['txtCentro']==null || strlen(trim($_POST['txtCentro']))<=0)
    {
        $msgError = $msgError . "El campo Centro debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar FechaInicio
    if(!isset($_POST['dtFechaInicio']))
    {
        $msgError = $msgError . "El campo Fecha de Inicio debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar FechaFin
    if(!isset($_POST['dtFechaFin']))
    {
        $msgError = $msgError . "El campo Fecha Fin debe estar informado o contener un valor válido<BR>"; 
    }
    
    //Validar Fechas
    if(isset($_POST['dtFechaInicio']) && isset($_POST['dtFechaFin']))
    {
        if ($_POST['dtFechaFin'] <= $_POST['dtFechaInicio'])
        {
            $msgError = $msgError . "El campo Fecha Fin debe ser posterior a la fecha de inicio<BR>"; 
        }
    }

    //Validar FechaUltimaActualizacion
    if ($_POST['dtFechaUltimaActualizacion']==null)
    {
        $msgError = $msgError . "El campo Fecha de la última actualización debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar PDFConvocatoria
    if(!isset($_POST['flPDFConvocatoria']))
    {
        $msgError = $msgError . "El campo PDF Convocatoria debe estar informado<BR>"; 
    }
    else if ($_POST['flPDFConvocatoria']==null || strlen(trim($_POST['flPDFConvocatoria']))<=0)
    {
        $msgError = $msgError . "El campo PDF Convocatoria debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar UrlWeb
    if(!isset($_POST['txtWeb']))
    {
        $msgError = $msgError . "El campo Web debe estar informado<BR>"; 
    }
    else if ($_POST['txtWeb']==null || strlen(trim($_POST['txtWeb']))<=3)
    {
        $msgError = $msgError . "El campo Web debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar EstadoConvocatoria
    if(!isset($_POST['slctEstadoConvocatoria']))
    {
        $msgError = $msgError . "El campo Estado Convocatoria debe estar informado<BR>"; 
    }
    else if ($_POST['slctEstadoConvocatoria']==null || !is_numeric($_POST['slctEstadoConvocatoria']))
    {
        $msgError = $msgError . "El campo Estado Convocatoria debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar Descripcion
    if(!isset($_POST['txtDescripcion']))
    {
        $msgError = $msgError . "El campo Descripcion debe estar informado<BR>"; 
    }
    else if ($_POST['txtDescripcion']==null || strlen(trim($_POST['txtDescripcion']))<=3)
    {
        $msgError = $msgError . "El campo Descripcion debe estar informado o contener un valor válido<BR>"; 
    }

    return $msgError;
}

function construirConvocatoria()
{
    try
    {
        /*
            idconvocatoria->
            *referencia->$_POST['txtReferencia']
            *puestotrabajo->$_POST['txtPuestoTrabajo']
            *centro->$_POST['txtCentro']
            *fechainicio->$_POST['dtFechaInicio']
            *fechafin->$_POST['dtFechaFin']
            *fechaultimaactualizacion->$_POST['dtFechaUltimaActualizacion']
            *rutaarchivoconvocatoria->$_POST['flPDFConvocatoria']
            *rutaarchivoresolucionfinal->$_POST['flPDFResolucionFinal']
            *urlweb->$_POST['txtWeb']
            *codigoestadoconvocatoria->$_POST['slctEstadoConvocatoria']
            *caducada-> comparar la fechafin con la actual o la de la ultima actualizacion
            *baja->
            *descripcion->$_POST['txtDescripcion']
        */
        $convocatoria = new DboConvocatoria();
        
        //Comprobamos si es una actualizacion o un alta 
        if(isset($_SESSION['data']))
        {
            $convocatoria->setIdconvocatoria(($_SESSION['data']->getIdconvocatoria()));
            $convocatoria->setReferencia(($_SESSION['data']->getReferencia()!=$_POST['txtReferencia']) ? $_POST['txtReferencia'] : $_SESSION['data']->getReferencia());
            $convocatoria->setPuestotrabajo(($_SESSION['data']->getPuestotrabajo()!=$_POST['txtPuestoTrabajo']) ? $_POST['txtPuestoTrabajo'] : $_SESSION['data']->getPuestotrabajo());
            $convocatoria->setCentro(($_SESSION['data']->getCentro()!=$_POST['txtCentro']) ? $_POST['txtCentro'] : $_SESSION['data']->getCentro());
            $convocatoria->setFechainicio(($_SESSION['data']->getFechainicio()!=$_POST['dtFechaInicio']) ? DateTime::createFromFormat('Y-m-d', strval($_POST['dtFechaInicio'])) : $_SESSION['data']->getFechainicio());
            $convocatoria->setFechafin(($_SESSION['data']->getFechafin()!=$_POST['dtFechaFin']) ? DateTime::createFromFormat('Y-m-d', strval($_POST['dtFechaFin'])) : $_SESSION['data']->setFechafin());
            $convocatoria->setFechaultimaactualizacion(($_SESSION['data']->getFechaultimaactualizacion()!=$_POST['dtFechaUltimaActualizacion']) ? DateTime::createFromFormat('Y-m-d', strval($_POST['dtFechaUltimaActualizacion'])) : $_SESSION['data']->getFechaultimaactualizacion());
            $convocatoria->setRutaarchivoconvocatoria(($_SESSION['data']->getRutaarchivoconvocatoria()!=$_POST['flPDFConvocatoria']) ? $_POST['flPDFConvocatoria'] : $_SESSION['data']->getRutaarchivoconvocatoria());
            $convocatoria->setRutaarchivoresolucionfinal(($_SESSION['data']->getRutaarchivoresolucionfinal()!=$_POST['flPDFResolucionFinal']) ? $_POST['flPDFResolucionFinal'] : $_SESSION['data']->getRutaarchivoresolucionfinal());
            $convocatoria->setUrlweb(($_SESSION['data']->getUrlweb()!=$_POST['txtWeb']) ? $_POST['txtWeb'] : $_SESSION['data']->getUrlweb());
            $convocatoria->setCodigoestadoconvocatoria($_POST['slctEstadoConvocatoria']);
            $convocatoria->setCaducada($convocatoria->getFechafin()<$convocatoria->getFechaultimaactualizacion());
            $convocatoria->setBaja(false);
            $convocatoria->setDescripcion(($_SESSION['data']->getDescripcion()!=$_POST['txtDescripcion']) ? $_POST['txtDescripcion'] : $_SESSION['data']->getDescripcion());

        }
        else
        {
            $convocatoria->setReferencia($_POST['txtReferencia']);
            $convocatoria->setPuestotrabajo($_POST['txtPuestoTrabajo']);
            $convocatoria->setCentro($_POST['txtCentro']);
            $convocatoria->setFechainicio(DateTime::createFromFormat('Y-m-d', strval($_POST['dtFechaInicio'])));
            $convocatoria->setFechafin(DateTime::createFromFormat('Y-m-d', strval($_POST['dtFechaFin'])));
            $convocatoria->setFechaultimaactualizacion(DateTime::createFromFormat('Y-m-d', strval($_POST['dtFechaUltimaActualizacion'])));
            $convocatoria->setRutaarchivoconvocatoria($_POST['flPDFConvocatoria']);
            $convocatoria->setRutaarchivoresolucionfinal($_POST['flPDFResolucionFinal']);
            $convocatoria->setUrlweb($_POST['txtWeb']);
            $convocatoria->setCodigoestadoconvocatoria($_POST['slctEstadoConvocatoria']);
            $convocatoria->setCaducada($convocatoria->getFechafin()<$convocatoria->getFechaultimaactualizacion());
            $convocatoria->setBaja(false);
            $convocatoria->setDescripcion($_POST['txtDescripcion']);
        }
    }
    catch (Exception $exception)
    {
        $convocatoria = null;
        echo "construirConvocatoria(): " . $exception->getMessage();
    }
    finally
    {
        return $convocatoria;
    }
}

function validarCandidatoConvocatoria()
{
    /*
        *IdCandidatoConvocatoria->
        *CodigoCandidato-> se usa el de WP por seguridad $_POST['candidatoIdWP']
        *CodigoConvocatoria->$_POST['convocatoriaId']
        *FechaInscripcion->la actual
        *PuestoTrabajo->$_POST['slctPuestoTrabajo']
        *RutaCV->$_FILES['flCV'] o si no añade uno diferente $_POST['txtflCV']
        RutaCP->$_FILES['flCartaPresentacion'] o si no añade uno diferente $_POST['txtflCartaPresentacion']
        *Baja->
    */

    $msgError = "";

    //Validar CodigoCandidato
    if(!isset($_POST['candidatoIdWP']))
    {
        $msgError = $msgError . "El campo candidatoIdWP debe estar informado<BR>"; 
    }
    else if ($_POST['candidatoIdWP']==null || !is_numeric($_POST['candidatoIdWP']))
    {
        $msgError = $msgError . "El campo candidatoIdWP debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar CodigoConvocatoria
    if(!isset($_POST['convocatoriaId']))
    {
        $msgError = $msgError . "El campo CodigoConvocatoria debe estar informado<BR>"; 
    }
    else if ($_POST['convocatoriaId']==null || !is_numeric($_POST['convocatoriaId']))
    {
        $msgError = $msgError . "El campo CodigoConvocatoria debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar PuestoTrabajo
    if(!isset($_POST['slctPuestoTrabajo']))
    {
        $msgError = $msgError . "El campo PuestoTrabajo debe estar informado<BR>"; 
    }
    else if ($_POST['slctPuestoTrabajo']==null || strlen(trim($_POST['slctPuestoTrabajo']))<=0)
    {
        $msgError = $msgError . "El campo PuestoTrabajo debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar RutaCV
    if(!isset($_FILES['flCV']) && !isset($_POST['txtflCV']))
    {
        $msgError = $msgError . "El campo ruta CV debe estar informado<BR>"; 
    }
    else
    {
        if(isset($_FILES['flCV']))
        {
            if (strlen(trim($_FILES['flCV']['name']))<=0 && strlen(trim($_POST['txtflCV']))<=0)
            {
                $msgError = $msgError . "El campo ruta CV debe estar informado o contener un valor válido<BR>"; 
            }
        }
        if(isset($_POST['txtflCV']))
        {
            if ($_POST['txtflCV']==null || strlen(trim($_POST['txtflCV']))<=0)
            {
                $msgError = $msgError . "El campo ruta CV input debe estar informado o contener un valor válido<BR>"; 
            }
        }
    }

    return $msgError;
}

function construirCandidatoConvocatoria()
{
    try
    {
        /*
            *IdCandidatoConvocatoria->
            *CodigoCandidato->$_POST['txtCdt']
            *CodigoConvocatoria->$_POST['convocatoriaId']
            *FechaInscripcion->la actual
            *PuestoTrabajo->$_POST['slctPuestoTrabajo']
            *RutaCV->$_FILES['flCV'] o si no añade uno diferente $_POST['txtflCV']
            RutaCP->$_FILES['flCartaPresentacion'] o si no añade uno diferente $_POST['txtflCartaPresentacion']
            *Baja->
        */
        $cdtcvt = new DboCandidatoconvocatoria();
        
        //$cdtcvt->setCodigocandidato($_POST['txtCdt']);
        $cdtcvt->setCodigoconvocatoria($_POST['convocatoriaId']);
        $datenow = new DateTime('now');
        $cdtcvt->setFechainscripcion($datenow);
        $cdtcvt->setPuestotrabajo($_POST['slctPuestoTrabajo']);

        if(!isset($_FILES['flCV']) || strlen(trim($_FILES['flCV']['name']))<=0) //Cuando no ha modificado el CV que tenia
        {
            $cdtcvt->setRutacv($_POST['txtflCV']);
        }
        elseif (isset($_FILES['flCV']) && strlen(trim($_FILES['flCV']['name']))>0) 
        {
            $load = new Load();
            if($load->loadEnv() == null || !isset($_ENV))
            {
                throw $this->createNotFoundException(
                    'No se han podido cargar las variables de entorno.'
                );
            }

            //subimos el fichero
            $_FILES['flCV']['name'] = clean($_FILES['flCV']['name']);    //limpiamos las rutas
            $cdtcvt->setRutacv('//'.$_ENV['CANDIDATE_FILES_DIR']. '/' .$_POST['candidatoIdWP']. '//C'. $_POST['convocatoriaId'] .'//'.$_FILES['flCV']['name']);
            $fileOrigen = $_FILES['flCV'];
            $fileDestino = $_SERVER["DOCUMENT_ROOT"].$_ENV['FILES_DIR'].$cdtcvt->getRutacv();
            include(__DIR__ . "/src/Utils/file_uploader.php");

            if(isset($retorno) && $retorno==true)
            {
                //Ha ido bien
                //destruimos el retorno para otra subida
                unset($retorno);
            }
            else
            {
                echo $error;
                //Algo ha ido mal
                if(isset($retorno))
                {
                    unset($retorno);
                    $cdtcvt = null;
                    return $cdtcvt;
                }
            }
        }
        
        if (isset($_FILES['flCartaPresentacion']) && strlen(trim($_FILES['flCartaPresentacion']['name']))>0) 
        {
            $load = new Load();
            if($load->loadEnv() == null || !isset($_ENV))
            {
                throw $this->createNotFoundException(
                    'No se han podido cargar las variables de entorno.'
                );
            }

            //subimos el fichero
            $_FILES['flCartaPresentacion']['name'] = clean($_FILES['flCartaPresentacion']['name']);    //limpiamos las rutas
            $cdtcvt->setRutacp('//'.$_ENV['CANDIDATE_FILES_DIR']. '/' .$_POST['candidatoIdWP']. '//C'. $_POST['convocatoriaId'] .'//'.$_FILES['flCartaPresentacion']['name']);
            $fileOrigen = $_FILES['flCartaPresentacion'];
            $fileDestino = $_SERVER["DOCUMENT_ROOT"].$_ENV['FILES_DIR'].$cdtcvt->getRutacp();
            include(__DIR__ . "/src/Utils/file_uploader.php");

            if(!isset($retorno) || $retorno==false)
            {
                echo $error;
                //Algo ha ido mal
                if(isset($retorno))
                {
                    unset($retorno);
                    $cdtcvt = null;
                    return $cdtcvt;
                }
            }
        }
        else
        {
            if(isset($_POST['chkCPPerfil']) && $_POST['chkCPPerfil']==true)
            {
                $cdtcvt->setRutacp($_POST['txtflCartaPresentacion']);
            }
            else
            {
                $cdtcvt->setRutacp(null);
            }
        }

        $cdtcvt->setBaja(false);
    }
    catch (Exception $exception)
    {
        $cdtcvt = null;
        echo "construirCandidatoConvocatoria(): " . $exception->getMessage();
    }
    finally
    {
        return $cdtcvt;
    }
}

function validarCandidaturaEspontanea()
{
    /*
        *IdCandidatoConvocatoria->
        *CodigoCandidato-> se usa el de WP por seguridad $_POST['candidatoIdWP']
        *CodigoConvocatoria->
        *FechaInscripcion->la actual
        *PuestoTrabajo->$_POST['slctPerfil']   //antes $_POST['txtPuestoTrabajo']
        *RutaCV->$_FILES['flCV'] o si no añade uno diferente $_POST['txtflCV']
        RutaCP->$_FILES['flCartaPresentacion'] o si no añade uno diferente $_POST['txtflCartaPresentacion']
        *Baja->
    */

    $msgError = "";

    //Validar CodigoCandidato
    if(!isset($_POST['candidatoIdWP']))
    {
        $msgError = $msgError . "El campo candidatoIdWP debe estar informado<BR>"; 
    }
    else if ($_POST['candidatoIdWP']==null || !is_numeric($_POST['candidatoIdWP']))
    {
        $msgError = $msgError . "El campo candidatoIdWP debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar RutaCV
    if(!isset($_FILES['flCV']) && !isset($_POST['txtflCV']))
    {
        $msgError = $msgError . "El campo ruta CV debe estar informado<BR>"; 
    }
    else
    {
        if(isset($_FILES['flCV']))
        {
            if (strlen(trim($_FILES['flCV']['name']))<=0 && strlen(trim($_POST['txtflCV']))<=0)
            {
                $msgError = $msgError . "El campo ruta CV debe estar informado o contener un valor válido<BR>"; 
            }
        }
        if(isset($_POST['txtflCV']))
        {
            if ($_POST['txtflCV']==null || strlen(trim($_POST['txtflCV']))<=0)
            {
                $msgError = $msgError . "El campo ruta CV input debe estar informado o contener un valor válido<BR>"; 
            }
        }
    }

    return $msgError;
}

function construirCandidaturaEspontanea()
{
    try
    {
        /*
            *IdCandidatoConvocatoria->
            *CodigoCandidato->$_POST['txtCdt']
            *CodigoConvocatoria->
            *FechaInscripcion->la actual
            *PuestoTrabajo->$_POST['slctPerfil']  //ANTES $_POST['txtPuestoTrabajo']
            *RutaCV->$_FILES['flCV'] o si no añade uno diferente $_POST['txtflCV']
            RutaCP->$_FILES['flCartaPresentacion'] o si no añade uno diferente $_POST['txtflCartaPresentacion']
            *Baja->
        */
        $cdtcvt = new DboCandidatoconvocatoria();
        
        //$cdtcvt->setCodigocandidato($_POST['txtCdt']);
        //$cdtcvt->setCodigoconvocatoria(null);
        $datenow = new DateTime('now');
        $cdtcvt->setFechainscripcion($datenow);
        $cdtcvt->setPuestotrabajo($_POST['slctPerfil']);//ANTES $cdtcvt->setPuestotrabajo($_POST['txtPuestoTrabajo']);

        if(!isset($_FILES['flCV']) || strlen(trim($_FILES['flCV']['name']))<=0) //Cuando no ha modificado el CV que tenia
        {
            $cdtcvt->setRutacv($_POST['txtflCV']);
        }
        elseif (isset($_FILES['flCV']) && strlen(trim($_FILES['flCV']['name']))>0) 
        {
            $load = new Load();
            if($load->loadEnv() == null || !isset($_ENV))
            {
                throw $this->createNotFoundException(
                    'No se han podido cargar las variables de entorno.'
                );
            }

            //subimos el fichero
            $_FILES['flCV']['name'] = clean($_FILES['flCV']['name']);    //limpiamos las rutas
            $cdtcvt->setRutacv('//'.$_ENV['CANDIDATE_FILES_DIR']. '/' .$_POST['candidatoIdWP']. '//CE//'.$_FILES['flCV']['name']);
            $fileOrigen = $_FILES['flCV'];
            $fileDestino = $_SERVER["DOCUMENT_ROOT"].$_ENV['FILES_DIR'].$cdtcvt->getRutacv();

            include(__DIR__ . "/src/Utils/file_uploader.php");

            if(isset($retorno) && $retorno==true)
            {
                //Ha ido bien
                //destruimos el retorno para otra subida
                unset($retorno);
            }
            else
            {
                echo $error;
                //Algo ha ido mal
                if(isset($retorno))
                {
                    unset($retorno);
                    $cdtcvt = null;
                    return $cdtcvt;
                }
            }
        }
        
        if (isset($_FILES['flCartaPresentacion']) && strlen(trim($_FILES['flCartaPresentacion']['name']))>0) 
        {
            $load = new Load();
            if($load->loadEnv() == null || !isset($_ENV))
            {
                throw $this->createNotFoundException(
                    'No se han podido cargar las variables de entorno.'
                );
            }

            //subimos el fichero
            $_FILES['flCartaPresentacion']['name'] = clean($_FILES['flCartaPresentacion']['name']);    //limpiamos las rutas
            $cdtcvt->setRutacp('//'.$_ENV['CANDIDATE_FILES_DIR']. '/' .$_POST['candidatoIdWP']. '//CE//'.$_FILES['flCartaPresentacion']['name']);
            $fileOrigen = $_FILES['flCartaPresentacion'];
            $fileDestino = $_SERVER["DOCUMENT_ROOT"].$_ENV['FILES_DIR'].$cdtcvt->getRutacp();
            include(__DIR__ . "/src/Utils/file_uploader.php");

            if(!isset($retorno) || $retorno==false)
            {
                echo $error;
                //Algo ha ido mal
                if(isset($retorno))
                {
                    unset($retorno);
                    $cdtcvt = null;
                    return $cdtcvt;
                }
            }
        }
        else
        {
            if(isset($_POST['chkCPPerfil']) && $_POST['chkCPPerfil']==true)
            {
                $cdtcvt->setRutacp($_POST['txtflCartaPresentacion']);
            }
            else
            {
                $cdtcvt->setRutacp(null);
            }
        }

        $cdtcvt->setBaja(false);
    }
    catch (Exception $exception)
    {
        $cdtcvt = null;
        echo "construirCandidaturaEspontanea(): " . $exception->getMessage();
    }
    finally
    {
        return $cdtcvt;
    }
}

function uploadFiles($lfiles, $idCandidatoWP, $idConvocatoria) 
{
    $load = new Load();
    if($load->loadEnv() == null || !isset($_ENV))
    {
        throw $this->createNotFoundException(
            'No se han podido cargar las variables de entorno.'
        );
    }

    foreach ($lfiles as $fil) {
        $fil['name'] = clean($fil['name']); //limpiamos las rutas
        $ruta = '//' . $_ENV['CANDIDATE_FILES_DIR']. '/' . $idCandidatoWP . '//C'. $idConvocatoria .'//'.$fil['name'];
        $fileOrigen = $fil;
        $fileDestino = $_SERVER["DOCUMENT_ROOT"].$_ENV['FILES_DIR'].$ruta;
        $permiteImagenes = true;
        if(isset($retorno))
        {
            unset($retorno);
        }
        include(__DIR__ . "/src/Utils/file_uploader.php");
        unset($permiteImagenes);

        if(!isset($retorno) || $retorno==false)
        {
            //move_uploaded_file() del file_uploader devuelve false pero el archivo se sube con éxito. Se da por bueno
            if($retorno==false && !file_exists($fileDestino))
            {
                echo $error;
                //Algo ha ido mal
                if(isset($retorno))
                {
                    unset($retorno);
                    return -1;
                }
            }
        }
    }
}

function clean($string) 
{
    $string = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $string);

    $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
    $string = preg_replace('/[^A-Za-z0-9\-\_\.]/', '', $string); // Removes special chars.
    $string = preg_replace('/_+/', '_', $string); // Replaces multiple slack down with single one

    return preg_replace('/-+/', '-', $string); // Replaces multiple hyphens with single one
}
?>