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/dump/data/PortalEmpleo/src/Views/GestionarConvocatorias.php
<?php 

use PortalEmpleo\Entity\DboConvocatoria;
use PortalEmpleo\Entity\DboConvocatoriamerito;
use PortalEmpleo\Entity\DboConvocatoriarequisito;
use PortalEmpleo\Entity\DboConvocatoriaresolucion;
use PortalEmpleo\Entity\DboEstadoconvocatoria;
use PortalEmpleo\Entity\DboTribunalconvocatoria;
use PortalEmpleo\Entity\DboTribunalvaloracion;
use PortalEmpleo\Controller\ConvocatoriaController;
use PortalEmpleo\Utils\Load;

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

session_start();

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

if(isset($_GET['lang'])){
    switch ($_GET['lang']) {
        case 'en':
        case 'en_GB':
            $lang = 'en_GB';
            break;
        
        default:
            $lang = 'es_ES';
            break;
    }
}

if($_SERVER['REQUEST_METHOD'] == "POST")
{
    //echo '-->'.$_POST['accionConvocatoria'].'<--';
    if(isset($_POST['accionConvocatoria']))
    {
        switch ($_POST['accionConvocatoria']) {
            case 'Modify':
            case 'Modificar':
                if(isset($_POST['convocatoriaId']))
                {
                    $id = $_POST['convocatoriaId'];
                    call_user_func(array($controllerconvocatoria, 'modificarConvocatoria'), $id, isset($lang) ? $lang : 'es_ES');
                }
                break;
            case 'Update':    
            case 'ActualizarConvocatoria':
            case 'Add':
            case 'AltaConvocatoria':
                //Comprobar variables $_post
                //funcion para validar los datos
                $datosOK = "";
                $datosOK = validarConvocatoria();

                if($datosOK == "")
                {
                    $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 'Calls List':
            case 'ListarConvocatorias':
                listarConvocatoriasAdmin($controllerconvocatoria, isset($lang) ? $lang : 'es_ES');
                break;
            /*case 'Eliminar':
                if(isset($_POST['userId']))
                {
                    $userId = $_POST['userId'];
                    call_user_func(array($controllerconvocatoria, 'eliminarUsuario'), $userId);
                }
                break;*/
            case 'Add a new call':
            case 'Nueva Convocatoria':
                call_user_func(array($controllerconvocatoria, 'nuevaConvocatoria'),isset($lang) ? $lang : 'es_ES');
                break;
            case 'AddResolucion':
                    //funcion para validar los datos
                    $datosOK = "";
                    $datosOK = validarResolucion();

                    if($datosOK == "")
                    {
                        $cvtResol = construirResolucion();

                        if(isset($cvtResol))
                        {
                            call_user_func(array($controllerconvocatoria, 'nuevaResolucion'), $cvtResol, isset($lang) ? $lang : 'es_ES');
                        }
                    }
                break;
            case 'QuitarResolucion':
                if(isset($_POST['txtResolucion']))
                {
                    $id = $_POST['txtResolucion'];
                    call_user_func(array($controllerconvocatoria, 'quitarResolucion'), $id, isset($lang) ? $lang : 'es_ES');
                }
                break;
            case 'AddRequisito':
                $datosOK = "";
                $datosOK = validarRequisito();

                //llamar la controler para actualizar
                if($datosOK == "")
                {
                    $cvtReqs = construirRequisito();

                    if(isset($cvtReqs))
                    {
                        call_user_func(array($controllerconvocatoria, 'nuevoRequisito'), $cvtReqs, isset($lang) ? $lang : 'es_ES');
                    }
                }
                break;
            case 'QuitarRequisito':
                if(isset($_POST['txtReq']))
                {
                    $id = $_POST['txtReq'];
                    call_user_func(array($controllerconvocatoria, 'quitarRequisito'), $id, isset($lang) ? $lang : 'es_ES');
                }
                break;
            case 'AddMerito':
                $datosOK = "";
                $datosOK = validarMerito();

                //llamar la controler para actualizar
                if($datosOK == "")
                {
                    $cvtMert = construirMerito();

                    if(isset($cvtMert))
                    {
                        call_user_func(array($controllerconvocatoria, 'nuevoMerito'), $cvtMert, isset($lang) ? $lang : 'es_ES');
                    }
                }
                break;
            case 'QuitarMerito':
                if(isset($_POST['txtMerit']))
                {
                    $id = $_POST['txtMerit'];
                    call_user_func(array($controllerconvocatoria, 'quitarMerito'), $id, isset($lang) ? $lang : 'es_ES');
                }
                break;
            case 'ListarConvocatoriasReferencia':
                    call_user_func(array($controllerconvocatoria, 'listarConvocatoriaCandidatos'),isset($lang) ? $lang : 'es_ES', null);
                break;
            case 'View Candidates':
            case 'Consultar Candidatos':
                    if(isset($_POST['slctConvocatorias']))
                    {
                        $idConvocatoria = $_POST['slctConvocatorias'];
                        call_user_func(array($controllerconvocatoria, 'listarConvocatoriaCandidatos'),isset($lang) ? $lang : 'es_ES', $idConvocatoria);
                    }
                break;
            case 'ListarTribunalReferencia':
                    call_user_func(array($controllerconvocatoria, 'listarConvocatoriaTribunal'),isset($lang) ? $lang : 'es_ES', null);
                break;
            case 'View Evaluation Committee':
            case 'Consultar Tribunal':
                    if(isset($_POST['slctConvocatorias']))
                    {
                        $idConvocatoria = $_POST['slctConvocatorias'];
                        call_user_func(array($controllerconvocatoria, 'listarConvocatoriaTribunal'),isset($lang) ? $lang : 'es_ES', $idConvocatoria);
                    }
                break;
            case 'Create Committee':
            case 'Crear Tribunal':
            case 'Edit Committee':
            case 'Modificar Tribunal':
                    if(isset($_POST['slctConvocatorias']))
                    {
                        $idConvocatoria = $_POST['slctConvocatorias'];
                        call_user_func(array($controllerconvocatoria, 'modificarConvocatoriaTribunal'),isset($lang) ? $lang : 'es_ES', $idConvocatoria);
                    }
                break;
            case 'GuardarTribunal':
                    if(isset($_POST['txtConvocatoria']) && is_numeric($_POST['txtConvocatoria']) && $_POST['txtConvocatoria']>0)
                    {
                        $idConvocatoria = $_POST['txtConvocatoria'];

                        $lusuarios = array();
                        foreach ($_SESSION['data']['lusuariosWP'] as $usuario) {
                            array_push($lusuarios, $usuario->getDisplayName());
                        }

                        $datosOK = "";
                        $datosOK = validarTribunal($lusuarios);

                        //llamar la controler para actualizar
                        if($datosOK == "")
                        {
                            //obtener Roles
                            $lroles = call_user_func(array($controllerconvocatoria, 'obtenerRoles'), isset($lang) ? $lang : 'es_ES');

                            if(isset($lroles))
                            {
                                $cvtTrbnl = construirTribunal($lroles);

                                if(isset($cvtTrbnl))
                                {
                                    call_user_func(array($controllerconvocatoria, 'insertarTribunalConvocatoria'), $idConvocatoria, $cvtTrbnl, isset($lang) ? $lang : 'es_ES');

                                    //Redirigir al Consultar Tribunal para el id de cvt que toca
                                    call_user_func(array($controllerconvocatoria, 'listarConvocatoriaTribunal'),isset($lang) ? $lang : 'es_ES', $idConvocatoria);
                                }
                            }
                        }
                        else
                        {
                            echo $datosOK;
                            call_user_func(array($controllerconvocatoria, 'modificarConvocatoriaTribunal'),isset($lang) ? $lang : 'es_ES', $idConvocatoria);
                        }
                    }
                    else
                    {
                        call_user_func(array($controllerconvocatoria, 'listarConvocatoriaTribunal'),isset($lang) ? $lang : 'es_ES', null);
                    }
                break;
            case 'Cancelar':
                    if(isset($_POST['txtConvocatoria']) && is_numeric($_POST['txtConvocatoria']) && $_POST['txtConvocatoria']>0)
                    {
                        $idConvocatoria = $_POST['txtConvocatoria'];

                        //Redirigir al Consultar Tribunal para el id de cvt que toca
                        call_user_func(array($controllerconvocatoria, 'listarConvocatoriaTribunal'),isset($lang) ? $lang : 'es_ES', $idConvocatoria);
                    }
                break;
            case 'Valoraciones Tribunal':
                    if(isset($_POST['codigoUsuarioWP']) && is_numeric($_POST['codigoUsuarioWP']))
                    {
                        $codigoUsuarioWP = $_POST['codigoUsuarioWP'];
                        call_user_func(array($controllerconvocatoria, 'listarValoracionesConvocatoria'),isset($lang) ? $lang : 'es_ES', null, null, null, $codigoUsuarioWP);
                    }
                break;
            case 'Select this Call':
            case 'Seleccionar Convocatoria':
                    if(isset($_POST['slctConvocatorias']) && isset($_POST['codigoUsuarioWP']))
                    {
                        $idConvocatoria = $_POST['slctConvocatorias'];
                        $codigoUsuarioWP = $_POST['codigoUsuarioWP'];
                        call_user_func(array($controllerconvocatoria, 'listarValoracionesConvocatoria'),isset($lang) ? $lang : 'es_ES', $idConvocatoria, null, null, $codigoUsuarioWP);
                    }
                break;
            case 'Select Requirement':
            case 'Seleccionar Requisito':
                    if(isset($_POST['slctConvocatorias']) && isset($_POST['slctRequisitos']) && isset($_POST['codigoUsuarioWP']))
                    {
                        $idConvocatoria = $_POST['slctConvocatorias'];
                        $idRequisito = $_POST['slctRequisitos'];
                        $codigoUsuarioWP = $_POST['codigoUsuarioWP'];
                        if(isset($_POST['slctMeritos']))
                        {
                            $_POST['slctMeritos'] = null;
                            unset($_POST['slctMeritos']);
                        }
                        call_user_func(array($controllerconvocatoria, 'listarValoracionesConvocatoria'),isset($lang) ? $lang : 'es_ES', $idConvocatoria, $idRequisito, null, $codigoUsuarioWP);
                    }
                break;
            case 'Select Merit':
            case 'Seleccionar Merito':
            case 'Seleccionar Mérito':
                    if(isset($_POST['slctConvocatorias']) && isset($_POST['slctMeritos']) && isset($_POST['codigoUsuarioWP']))
                    {
                        $idConvocatoria = $_POST['slctConvocatorias'];
                        $idMerito = $_POST['slctMeritos'];
                        $codigoUsuarioWP = $_POST['codigoUsuarioWP'];
                        if(isset($_POST['slctRequisitos']))
                        {
                            $_POST['slctRequisitos'] = null;
                            unset($_POST['slctRequisitos']);
                        }
                        call_user_func(array($controllerconvocatoria, 'listarValoracionesConvocatoria'),isset($lang) ? $lang : 'es_ES', $idConvocatoria, null, $idMerito, $codigoUsuarioWP);
                    }
                break;
            case 'Submit Comment':
            case 'Enviar Comentario':
                    $datosOK = "";
                    $datosOK = validarValoracion();

                    //llamar la controler para actualizar
                    if($datosOK == "")
                    {
                        $trbnlVlc = construirValoracion();

                        if(isset($trbnlVlc))
                        {
                            if(isset($_POST['codigoUsuarioWP']))
                            {
                                $codigoUsuarioWP = $_POST['codigoUsuarioWP'];
                                call_user_func(array($controllerconvocatoria, 'insertarTribunalValoracion'), $trbnlVlc, $codigoUsuarioWP, isset($lang) ? $lang : 'es_ES');
                            }
                        }   
                    }
                    else
                    {
                        echo $datosOK;
                    }

                    //ir al Seleccionar Mérito o Seleccionar Requisito según corresponda
                    if(isset($_POST['slctConvocatorias']) && isset($_POST['slctRequisitos']) && isset($_POST['codigoUsuarioWP']))
                    {
                        $idConvocatoria = $_POST['slctConvocatorias'];
                        $idRequisito = $_POST['slctRequisitos'];
                        $codigoUsuarioWP = $_POST['codigoUsuarioWP'];
                        if(isset($_POST['slctMeritos']))
                        {
                            $_POST['slctMeritos'] = null;
                            unset($_POST['slctMeritos']);
                        }
                        call_user_func(array($controllerconvocatoria, 'listarValoracionesConvocatoria'),isset($lang) ? $lang : 'es_ES', $idConvocatoria, $idRequisito, null, $codigoUsuarioWP);
                    }
                    else if(isset($_POST['slctConvocatorias']) && isset($_POST['slctMeritos']) && isset($_POST['codigoUsuarioWP']))
                    {
                        $idConvocatoria = $_POST['slctConvocatorias'];
                        $idMerito = $_POST['slctMeritos'];
                        $codigoUsuarioWP = $_POST['codigoUsuarioWP'];
                        if(isset($_POST['slctRequisitos']))
                        {
                            $_POST['slctRequisitos'] = null;
                            unset($_POST['slctRequisitos']);
                        }
                        call_user_func(array($controllerconvocatoria, 'listarValoracionesConvocatoria'),isset($lang) ? $lang : 'es_ES', $idConvocatoria, null, $idMerito, $codigoUsuarioWP);
                    }
                break;
            default:
                    listarConvocatoriasAdmin($controllerconvocatoria, isset($lang) ? $lang : 'es_ES');
                break;
        }
        unset($_POST['accionConvocatoria']);
    }
    else
    {
        listarConvocatoriasAdmin($controllerconvocatoria, isset($lang) ? $lang : 'es_ES');
    }
}
else
{
    listarConvocatoriasAdmin($controllerconvocatoria, isset($lang) ? $lang : 'es_ES');
}

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

	call_user_func(array($controller, 'listarConvocatoriasAdmin'), $lang);
}

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());
            
            //Sólo se puede modificar la resolucion Final en las actualizaciones
            $convocatoria->setRutaarchivoconvocatoria($_SESSION['data']->getRutaarchivoconvocatoria());
            //$convocatoria->setRutaarchivoresolucionfinal(($_SESSION['data']->getRutaarchivoresolucionfinal()!=$_POST['flPDFResolucionFinal']) ? $_POST['flPDFResolucionFinal'] : $_SESSION['data']->getRutaarchivoresolucionfinal());
            if(!isset($_FILES['flPDFResolucionFinal']) || strlen(trim($_FILES['flPDFResolucionFinal']['name']))<=0) //Cuando no ha modificado el que tenia
            {
                if(($_SESSION['data']->getRutaarchivoresolucionfinal()!=null) && strlen(trim($_SESSION['data']->getRutaarchivoresolucionfinal()))>0)
                {
                    $convocatoria->setRutaarchivoresolucionfinal($_SESSION['data']->getRutaarchivoresolucionfinal());
                }
            }
            elseif (isset($_FILES['flPDFResolucionFinal']) && strlen(trim($_FILES['flPDFResolucionFinal']['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['flPDFResolucionFinal']['name'] = clean($_FILES['flPDFResolucionFinal']['name']);    //limpiamos las rutas
                $convocatoria->setRutaarchivoresolucionfinal('//'.$_ENV['CALL_FILES_DIR'].'/'.clean($convocatoria->getReferencia()).'//'.$_FILES['flPDFResolucionFinal']['name']);
                $fileOrigen = $_FILES['flPDFResolucionFinal'];
                $fileDestino = $_SERVER["DOCUMENT_ROOT"].$_ENV['FILES_DIR'].$convocatoria->getRutaarchivoresolucionfinal();
                include(__DIR__ . "/../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);
                        $convocatoria = null;
                        return $convocatoria;
                    }
                }
            }
            
            
            $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'])));

            //En las Altas es oblogatorio que esté informado
            //$convocatoria->setRutaarchivoconvocatoria($_POST['flPDFConvocatoria']);
            if(!isset($_FILES['flPDFConvocatoria']) || strlen(trim($_FILES['flPDFConvocatoria']['name']))<=0) 
            {
                throw $this->createNotFoundException(
                    'El campo PDF Convocatoria debe estar informado o contener un valor válido<BR>'
                );
            }
            elseif (isset($_FILES['flPDFConvocatoria']) && strlen(trim($_FILES['flPDFConvocatoria']['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['flPDFConvocatoria']['name'] = clean($_FILES['flPDFConvocatoria']['name']);    //limpiamos las rutas
                $convocatoria->setRutaarchivoconvocatoria('//'.$_ENV['CALL_FILES_DIR'].'/'.clean($convocatoria->getReferencia()).'//'.$_FILES['flPDFConvocatoria']['name']);
                $fileOrigen = $_FILES['flPDFConvocatoria'];
                $fileDestino = $_SERVER["DOCUMENT_ROOT"].$_ENV['FILES_DIR'].$convocatoria->getRutaarchivoconvocatoria();
                include(__DIR__ . "/../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);
                        $convocatoria = null;
                        return $convocatoria;
                    }
                }
            }
            
            //$convocatoria->setRutaarchivoresolucionfinal($_POST['flPDFResolucionFinal']);
            if (isset($_FILES['flPDFResolucionFinal']) && strlen(trim($_FILES['flPDFResolucionFinal']['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['flPDFResolucionFinal']['name'] = clean($_FILES['flPDFResolucionFinal']['name']);    //limpiamos las rutas
                $convocatoria->setRutaarchivoresolucionfinal('//'.$_ENV['CALL_FILES_DIR'].'/'.clean($convocatoria->getReferencia()).'//'.$_FILES['flPDFResolucionFinal']['name']);
                $fileOrigen = $_FILES['flPDFResolucionFinal'];
                $fileDestino = $_SERVER["DOCUMENT_ROOT"].$_ENV['FILES_DIR'].$convocatoria->getRutaarchivoresolucionfinal();
                include(__DIR__ . "/../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);
                        $convocatoria = null;
                        return $convocatoria;
                    }
                }
            }

            $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 validarResolucion()
{
    /*
        idconvocatoriaresolucion->
        *codigoconvocatoria->$_POST['txtCvtResolucion']
        *descripcion->$_POST['txtDescripcion']
        *fecharesolucion->la actual
        *rutaficheroresolucion->$_FILES['flResolucion']
        *baja->
    */

    $msgError = "";

    //Validar CodigoConvocatoria
    if(!isset($_POST['txtCvtResolucion']))
    {
        $msgError = $msgError . "El campo CodigoConvocatoria debe estar informado<BR>"; 
    }
    else if ($_POST['txtCvtResolucion']==null || strlen(trim($_POST['txtCvtResolucion']))<=0 || !is_numeric($_POST['txtCvtResolucion']))
    {
        $msgError = $msgError . "El campo CodigoConvocatoria 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']))<=0)
    {
        $msgError = $msgError . "El campo Descripcion debe estar informado o contener un valor válido<BR>"; 
    }

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

    return $msgError;
}

function construirResolucion()
{
    try
    {
        /*
            idconvocatoriaresolucion->
            *codigoconvocatoria->$_POST['txtCvtResolucion']
            *descripcion->$_POST['txtDescripcion']
            *fecharesolucion->la actual
            *rutaficheroresolucion->$_FILES['flResolucion']
            *baja->
        */
        $rslc = new DboConvocatoriaresolucion();

        $rslc->setCodigoconvocatoria($_POST['txtCvtResolucion']);
        $rslc->setDescripcion($_POST['txtDescripcion']);
        $datenow = new DateTime('now');
        $rslc->setFecharesolucion($datenow);

        if (isset($_FILES['flResolucion']) && strlen(trim($_FILES['flResolucion']['name']))>0 && isset($_POST['txtCvtReferencia'])) 
        {
            $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['flResolucion']['name'] = clean($_FILES['flResolucion']['name']);    //limpiamos las rutas
            $rslc->setRutaficheroresolucion('//'.$_ENV['CALL_FILES_DIR'].'/'.clean($_POST['txtCvtReferencia']).'//'.$_FILES['flResolucion']['name']);
            $fileOrigen = $_FILES['flResolucion'];
            $fileDestino = $_SERVER["DOCUMENT_ROOT"].$_ENV['FILES_DIR'].$rslc->getRutaficheroresolucion();
            include(__DIR__ . "/../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);
                    return null;
                }
            }
        }
        else 
        {
            return null;
        }
        
        $rslc->setBaja(false);
    }
    catch (Exception $exception)
    {
        $rslc = null;
        echo "construirResolucion(): " . $exception->getMessage();
    }
    finally
    {
        return $rslc;
    }
}

function validarRequisito()
{
    /*
        idconvocatoriarequisito->
        *codigoconvocatoria->$_POST['txtCvtRequisito']
        *requisito->$_POST['txtRequisito']
        descripcion->$_POST['txtReqDescripcion']
        *baja->
        obligatorio->$_POST['chkObligatorio']
    */

    $msgError = "";

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

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

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

    return $msgError;
}

function construirRequisito()
{
    try
    {
        /*
            idconvocatoriarequisito->
            *codigoconvocatoria->$_POST['txtCvtRequisito']
            *requisito->$_POST['txtRequisito']
            descripcion->$_POST['txtReqDescripcion']
            *baja->
            obligatorio->$_POST['chkObligatorio']
        */
        $rqst = new DboConvocatoriarequisito();

        $rqst->setCodigoconvocatoria($_POST['txtCvtRequisito']);
        $rqst->setRequisito($_POST['txtRequisito']);
        $rqst->setDescripcion($_POST['txtReqDescripcion']);
        $rqst->setBaja(false);
        if(isset($_POST['chkObligatorio']) && $_POST['chkObligatorio'] == true)
        {
            $rqst->setObligatorio($_POST['chkObligatorio']);
        }
        else
        {
            $rqst->setObligatorio(false);
        }
    }
    catch (Exception $exception)
    {
        $rqst = null;
        echo "construirRequisito(): " . $exception->getMessage();
    }
    finally
    {
        return $rqst;
    }
}

function validarMerito()
{
    /*
        idconvocatoriamerito->
        *codigoconvocatoria->$_POST['txtCvtMerito']
        *merito->$_POST['txtMerito']
        descripcion->$_POST['txtMeritDescripcion']
        *baja->
    */

    $msgError = "";

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

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

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

    return $msgError;
}

function construirMerito()
{
    try
    {
        /*
			idconvocatoriamerito->
			*codigoconvocatoria->$_POST['txtCvtMerito']
			*merito->$_POST['txtMerito']
			descripcion->$_POST['txtMeritDescripcion']
			*baja->
		*/
        $mrt = new DboConvocatoriamerito();

        $mrt->setCodigoconvocatoria($_POST['txtCvtMerito']);
        $mrt->setMerito($_POST['txtMerito']);
        $mrt->setDescripcion($_POST['txtMeritDescripcion']);
        $mrt->setBaja(false);
    }
    catch (Exception $exception)
    {
        $mrt = null;
        echo "construirMerito(): " . $exception->getMessage();
    }
    finally
    {
        return $mrt;
    }
}

function validarTribunal($lstUsuarios)
{
    /*
        Presidente -> $_POST['txtPresidente']
        Presidente Suplente -> $_POST['txtPresidenteSubs']
            AsumeRolPrincipal -> $_POST['chkPresidenteSubs']
        Secretario -> $_POST['txtSecretario']
        Secretario Suplente -> $_POST['txtSecretarioSubs']
            AsumeRolPrincipal -> $_POST['chkSecretarioSubs']
        Vocal -> $_POST['txtVocal1']
        Vocal Suplente -> $_POST['txtVocal1Subs']
            AsumeRolPrincipal -> $_POST['chkVocal1Subs']
        Vocal 2 -> $_POST['txtVocal2']
        Vocal 2 Suplente -> $_POST['txtVocal2Subs']
            AsumeRolPrincipal -> $_POST['chkVocal2Subs']
    */

    $msgError = "";

    //Validar Presidente
    if(!isset($_POST['txtPresidente']))
    {
        $msgError = $msgError . "El rol de Presidente/a debe estar asignado<BR>"; 
    }
    else if ($_POST['txtPresidente']==null || strlen(trim($_POST['txtPresidente']))<=0 || !in_array($_POST['txtPresidente'], $lstUsuarios))
    {
        $msgError = $msgError . "El rol de Presidente/a debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar Presidente Suplente
    if(!isset($_POST['txtPresidenteSubs']))
    {
        $msgError = $msgError . "El rol de Suplente de Presidente/a debe estar asignado<BR>"; 
    }
    else if ($_POST['txtPresidenteSubs']==null || strlen(trim($_POST['txtPresidenteSubs']))<=0 || !in_array($_POST['txtPresidenteSubs'], $lstUsuarios))
    {
        $msgError = $msgError . "El rol de Suplente de Presidente/a debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar Secretario
    if(!isset($_POST['txtSecretario']))
    {
        $msgError = $msgError . "El rol de Secretario/a debe estar asignado<BR>"; 
    }
    else if ($_POST['txtSecretario']==null || strlen(trim($_POST['txtSecretario']))<=0 || !in_array($_POST['txtSecretario'], $lstUsuarios))
    {
        $msgError = $msgError . "El rol de Secretario/a debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar Secretario Suplente
    if(!isset($_POST['txtSecretarioSubs']))
    {
        $msgError = $msgError . "El rol de Suplente de Secretario/a debe estar asignado<BR>"; 
    }
    else if ($_POST['txtSecretarioSubs']==null || strlen(trim($_POST['txtSecretarioSubs']))<=0 || !in_array($_POST['txtSecretarioSubs'], $lstUsuarios))
    {
        $msgError = $msgError . "El rol de Suplente de Secretario/a debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar Vocal
    if(!isset($_POST['txtVocal1']))
    {
        $msgError = $msgError . "El rol de Vocal debe estar asignado<BR>"; 
    }
    else if ($_POST['txtVocal1']==null || strlen(trim($_POST['txtVocal1']))<=0 || !in_array($_POST['txtVocal1'], $lstUsuarios))
    {
        $msgError = $msgError . "El rol de Vocal debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar Vocal Suplente
    if(!isset($_POST['txtVocal1Subs']))
    {
        $msgError = $msgError . "El rol de Suplente de Vocal debe estar asignado<BR>"; 
    }
    else if ($_POST['txtVocal1Subs']==null || strlen(trim($_POST['txtVocal1Subs']))<=0 || !in_array($_POST['txtVocal1Subs'], $lstUsuarios))
    {
        $msgError = $msgError . "El rol de Suplente de Vocal debe estar informado o contener un valor válido<BR>"; 
    }

    //Validar Vocal 2 Suplente (solo si el Vocal 2 existe)
    if(isset($_POST['txtVocal2']) && strlen(trim($_POST['txtVocal2']))>0)
    {
        //Validar Vocal 2
        if (!in_array($_POST['txtVocal2'], $lstUsuarios))
        {
            $msgError = $msgError . "El rol de Vocal 2 debe estar informado o contener un valor válido<BR>"; 
        }
        if(!isset($_POST['txtVocal2Subs']))
        {
            $msgError = $msgError . "El rol de Suplente de Vocal 2 debe estar asignado<BR>"; 
        }
        else if ($_POST['txtVocal2Subs']==null || strlen(trim($_POST['txtVocal2Subs']))<=0 || !in_array($_POST['txtVocal2Subs'], $lstUsuarios))
        {
            $msgError = $msgError . "El rol de Suplente de Vocal 2 debe estar informado o contener un valor válido<BR>"; 
        }
    }

    return $msgError;
}

function construirTribunal($lstRoles)
{
    try
    {
        /*
			idtribunalconvocatoria->
            *codigousuarioWP
			*codigoconvocatoria
            *codigorol
			*essuplente
			*asumerolprincipal
			*baja->
		*/

        $trbnlcvt = array ();

        foreach ($_SESSION['data']['lusuariosWP'] as $usuarioWP) {
            if($usuarioWP->getDisplayName()== $_POST['txtPresidente'])
            {
                $idPresidente = $usuarioWP->getId();
            }
            if($usuarioWP->getDisplayName()== $_POST['txtPresidenteSubs'])
            {
                $idPresidenteSubs = $usuarioWP->getId();
            }
            if($usuarioWP->getDisplayName()== $_POST['txtSecretario'])
            {
                $idSecretario = $usuarioWP->getId();
            }
            if($usuarioWP->getDisplayName()== $_POST['txtSecretarioSubs'])
            {
                $idSecretarioSubs = $usuarioWP->getId();
            }
            if($usuarioWP->getDisplayName()== $_POST['txtVocal1'])
            {
                $idVocal1 = $usuarioWP->getId();
            }
            if($usuarioWP->getDisplayName()== $_POST['txtVocal1Subs'])
            {
                $idVocal1Subs = $usuarioWP->getId();
            }

            if(isset($_POST['txtVocal2']) && strlen(trim($_POST['txtVocal2']))>0)
            {
                if($usuarioWP->getDisplayName()== $_POST['txtVocal2'])
                {
                    $idVocal2 = $usuarioWP->getId();
                }
                if($usuarioWP->getDisplayName()== $_POST['txtVocal2Subs'])
                {
                    $idVocal2Subs = $usuarioWP->getId();
                }
            }
        }

        foreach ($lstRoles as $rol) {
            if($rol->getRol() == "Presidente" || $rol->getRol() == "President")
            {
                $idRolPte = $rol->getIdrol();
            }
            if($rol->getRol() == "Secretario/a" || $rol->getRol() == "Secretary")
            {
                $idRolScrtr = $rol->getIdrol();
            }
            if($rol->getRol() == "Vocal" || $rol->getRol() == "Officer")
            {
                $idRolVocal = $rol->getIdrol();
            }
        }
        
        $presidente = new DboTribunalconvocatoria();
        $presidente->setCodigousuariowp($idPresidente);
        $presidente->setCodigoconvocatoria($_POST['txtConvocatoria']);
        $presidente->setCodigorol($idRolPte);
        $presidente->setEssuplente(false);
        $presidente->setAsumerolprincipal(false);
        $presidente->setBaja(false);
        array_push($trbnlcvt, $presidente);

        $presidenteSubs = new DboTribunalconvocatoria();
        $presidenteSubs->setCodigousuariowp($idPresidenteSubs);
        $presidenteSubs->setCodigoconvocatoria($_POST['txtConvocatoria']);
        $presidenteSubs->setCodigorol($idRolPte);
        $presidenteSubs->setEssuplente(true);
        if(isset($_POST['chkPresidenteSubs']) && $_POST['chkPresidenteSubs'])
        {
            $presidenteSubs->setAsumerolprincipal(true);
        }
        else
        {
            $presidenteSubs->setAsumerolprincipal(false);
        }
        $presidenteSubs->setBaja(false);
        array_push($trbnlcvt, $presidenteSubs);

        $secretario = new DboTribunalconvocatoria();
        $secretario->setCodigousuariowp($idSecretario);
        $secretario->setCodigoconvocatoria($_POST['txtConvocatoria']);
        $secretario->setCodigorol($idRolScrtr);
        $secretario->setEssuplente(false);
        $secretario->setAsumerolprincipal(false);
        $secretario->setBaja(false);
        array_push($trbnlcvt, $secretario);

        $secretarioSubs = new DboTribunalconvocatoria();
        $secretarioSubs->setCodigousuariowp($idSecretarioSubs);
        $secretarioSubs->setCodigoconvocatoria($_POST['txtConvocatoria']);
        $secretarioSubs->setCodigorol($idRolScrtr);
        $secretarioSubs->setEssuplente(true);
        if(isset($_POST['chkSecretarioSubs']) && $_POST['chkSecretarioSubs'])
        {
            $secretarioSubs->setAsumerolprincipal(true);
        }
        else
        {
            $secretarioSubs->setAsumerolprincipal(false);
        }
        $secretarioSubs->setBaja(false);
        array_push($trbnlcvt, $secretarioSubs);

        $vocal1 = new DboTribunalconvocatoria();
        $vocal1->setCodigousuariowp($idVocal1);
        $vocal1->setCodigoconvocatoria($_POST['txtConvocatoria']);
        $vocal1->setCodigorol($idRolVocal);
        $vocal1->setEssuplente(false);
        $vocal1->setAsumerolprincipal(false);
        $vocal1->setBaja(false);
        array_push($trbnlcvt, $vocal1);

        $vocal1Subs = new DboTribunalconvocatoria();
        $vocal1Subs->setCodigousuariowp($idVocal1Subs);
        $vocal1Subs->setCodigoconvocatoria($_POST['txtConvocatoria']);
        $vocal1Subs->setCodigorol($idRolVocal);
        $vocal1Subs->setEssuplente(true);
        if(isset($_POST['chkVocal1Subs']) && $_POST['chkVocal1Subs'])
        {
            $vocal1Subs->setAsumerolprincipal(true);
        }
        else
        {
            $vocal1Subs->setAsumerolprincipal(false);
        }
        $vocal1Subs->setBaja(false);
        array_push($trbnlcvt, $vocal1Subs);

        if(isset($_POST['txtVocal2']) && strlen(trim($_POST['txtVocal2']))>0)
        {
            $vocal2 = new DboTribunalconvocatoria();
            $vocal2->setCodigousuariowp($idVocal2);
            $vocal2->setCodigoconvocatoria($_POST['txtConvocatoria']);
            $vocal2->setCodigorol($idRolVocal);
            $vocal2->setEssuplente(false);
            $vocal2->setAsumerolprincipal(false);
            $vocal2->setBaja(false);
            array_push($trbnlcvt, $vocal2);

            $vocal2Subs = new DboTribunalconvocatoria();
            $vocal2Subs->setCodigousuariowp($idVocal2Subs);
            $vocal2Subs->setCodigoconvocatoria($_POST['txtConvocatoria']);
            $vocal2Subs->setCodigorol($idRolVocal);
            $vocal2Subs->setEssuplente(true);
            if(isset($_POST['chkVocal2Subs']) && $_POST['chkVocal2Subs'])
            {
                $vocal2Subs->setAsumerolprincipal(true);
            }
            else
            {
                $vocal2Subs->setAsumerolprincipal(false);
            }
            $vocal2Subs->setBaja(false);
            array_push($trbnlcvt, $vocal2Subs);
        }

    }
    catch (Exception $exception)
    {
        $trbnlcvt = null;
        echo "construirTribunal(): " . $exception->getMessage();
    }
    finally
    {
        return $trbnlcvt;
    }
}

function validarValoracion()
{
    /*
        IdTribunalValoracion->
        *CodigoConvocatoria->$_POST['slctConvocatorias']
        *CodigoCandidato->$_POST['txtCandidato']
        CodigoTribunalConvocatoria->
        CodigoConvocatoriaRequisito->$_POST['slctRequisitos']
        CodigoConvocatoriaMerito->$_POST['slctMeritos']
        *Comentario->$_POST['txtComentario'.$_POST['txtCandidato']]
        *Fecha->
        Conclusion-> FALTA IMPLEMENTAR
        *Baja->
    */

    $msgError = "";

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

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

    //Validar Requisito y Merito
    if(!isset($_POST['slctRequisitos']) && !isset($_POST['slctMeritos']))
    {
        $msgError = $msgError . "El campo Requisito o Mérito debe estar informado<BR>";
    }

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

    return $msgError;
}

function construirValoracion()
{
    try
    {
        /*
            IdTribunalValoracion->
            *CodigoConvocatoria->$_POST['slctConvocatorias']
            *CodigoCandidato->$_POST['txtCandidato']
            CodigoTribunalConvocatoria->
            CodigoConvocatoriaRequisito->$_POST['slctRequisitos']
            CodigoConvocatoriaMerito->$_POST['slctMeritos']
            *Comentario->$_POST['txtComentario'.$_POST['txtCandidato']]
            *Fecha-> la actual
            Conclusion-> FALTA IMPLEMENTAR
            *Baja->
        */
        $vlc = new DboTribunalvaloracion();

        $vlc->setCodigoconvocatoria($_POST['slctConvocatorias']);
        $vlc->setCodigocandidato($_POST['txtCandidato']);
        if(isset($_POST['slctRequisitos']) && $_POST['slctRequisitos']!=null)
        {
            $vlc->setCodigoconvocatoriarequisito($_POST['slctRequisitos']);
        }
        else if(isset($_POST['slctMeritos']) && $_POST['slctMeritos']!=null)
        {
            $vlc->setCodigoconvocatoriamerito($_POST['slctMeritos']);
        }
        else
        {
            throw $this->createNotFoundException(
                'El campo Requisito o Mérito debe estar informado'
            );
        }
        $vlc->setComentario($_POST['txtComentario'.$_POST['txtCandidato']]);
        $datenow = new DateTime('now');
        $vlc->setFecha($datenow);
        $vlc->setBaja(false);
    }
    catch (Exception $exception)
    {
        $vlc = null;
        echo "construirValoracion(): " . $exception->getMessage();
    }
    finally
    {
        return $vlc;
    }
}

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.

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