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

use PortalEmpleo\Entity\DboConvocatoria;
use PortalEmpleo\Entity\DboConvocatoriamerito;
use PortalEmpleo\Entity\DboConvocatoriarequisito;
use PortalEmpleo\Entity\DboConvocatoriaresolucion;
use PortalEmpleo\Entity\DboTribunalconvocatoria;
use PortalEmpleo\Entity\DboTribunalvaloracion;
use PortalEmpleo\Entity\DboTribunalAprobacionRequisito;
use PortalEmpleo\Entity\DboTribunalAprobacionMerito;
use PortalEmpleo\Entity\DboTribunalAprobacionExamen;
use PortalEmpleo\Entity\DboImpugnacion;
use PortalEmpleo\Entity\DboImpugnacionDoc;
use PortalEmpleo\Controller\ConvocatoriaController;
use PortalEmpleo\Utils\Load;

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

session_start();

$controllerconvocatoria = new ConvocatoriaController();
$lang = pll_current_language() == 'en' ? 'en_GB' : 'es_ES';

if ($_SERVER['REQUEST_METHOD'] == "POST") {
    if (isset($_POST['accionConvocatoria'])) {
        switch ($_POST['accionConvocatoria']) {
            case 'Modify':
            case 'Modificar':

                if (isset($_POST['convocatoriaId'])) {
                    $id = $_POST['convocatoriaId'];
                    call_user_func(
                        [$controllerconvocatoria, 'modificarConvocatoria',],
                        $id,
                        $lang
                    );
                }
                break;
            case 'Update':
            case 'ActualizarConvocatoria':
            case 'Add':
            case 'AltaConvocatoria':
                //Comprobar variables $_post
                //funcion para validar los datos
                $datosOK = "";
                $datosOK = validarConvocatoria();

                if ($datosOK == "") {
                    $desc = $_POST['txtReferencia'] . ' ';
                    $desc .= $lang == 'en_GB'
                        ? $_POST['txtDescripcionen']
                        : $_POST['txtDescripcion'];

                    // cambio manual para fase de meritos
                    if ($_POST['slctEstadoConvocatoria'] == 4
                        && $_POST['currentstate'] != 4) {
                        if ($_POST['tieneExamen'] == 'si') {
                            sendEmailCandidatos(
                                explode(",", $_POST['allcandidatossuperadosemail']),
                                'resexa',
                                $desc
                            );
                        } else {
                            sendEmailCandidatos(
                                explode(",", $_POST['allcandidatossuperadosemail']),
                                'resreq',
                                $desc
                            );
                        }
                        sendEmailTribunal(
                            $_POST['alltribunalemail'], 'startMerits', $desc
                        );
                    }

                    // cambio manual para fase de examen
                    if ($_POST['slctEstadoConvocatoria'] == 13
                        && $_POST['currentstate'] != 13) {
                        sendEmailCandidatos(
                            explode(",", $_POST['allcandidatossuperadosemail']),
                            'resreq',
                            $desc
                        );
                        sendEmailTribunal(
                            $_POST['alltribunalemail'], 'startExam', $desc
                        );
                    }

                    $isnotsendedemailflag = true;

                    //cambio manual para la fase final
                    if (($_POST['slctEstadoConvocatoria'] == 6
                         || $_POST['slctEstadoConvocatoria'] == 7)
                        && ($_POST['currentstate'] != 6
                            || $_POST['currentstate'] != 7)) {
                        $isnotsendedemailflag = false;

                        sendEmailCandidatos(
                            explode(",", $_POST['allcandidatossuperadosemail']),
                            'resmer',
                            $desc
                        );
                    }

                    // cambia automatico, al subir la resoluion de requisitos y el estado actual es 10, a la fase de meritos si no tiene examen
                    if (isset($_POST['cambioresolucionreq'])
                        && $_POST['cambioresolucionreq'] == 'si'
                        && $_POST['currentstate'] == 10
                        && $_POST['tieneExamen'] == 'no') {
                        $_POST['slctEstadoConvocatoria'] = 4;

                        sendEmailCandidatos(
                            explode(",", $_POST['allcandidatossuperadosemail']),
                            'resreq',
                            $desc
                        );
                        sendEmailTribunal($_POST['alltribunalemail'], 'startMerits', $desc);

                        // cambia automatico, al subir la resoluion de requisitos y el estado actual es 10, a la fase de examen si tiene examen
                    } else {
                        if (isset($_POST['cambioresolucionreq'])
                            && $_POST['cambioresolucionreq'] == 'si'
                            && $_POST['currentstate'] == 10
                            && $_POST['tieneExamen'] == 'si') {
                            /*aqui tengo examen entonces en vez de pasar a la fase de meritos tengo q pasar a la fase de examen*/
                            $_POST['slctEstadoConvocatoria'] = 13;

                            sendEmailCandidatos(
                                explode(",", $_POST['allcandidatossuperadosemail']),
                                'resreq',
                                $desc);
                            sendEmailTribunal(
                                $_POST['alltribunalemail'], 'startExam', $desc
                            );
                        }
                    }

                    // cambia automatico a la fase de meritos y envia correo si subes el documento resolucion de examen y el estado actual es 15
                    if (isset($_POST['cambioresolucionexam'])
                        && $_POST['cambioresolucionexam'] == 'si'
                        && $_POST['currentstate'] == 15) {
                        $_POST['slctEstadoConvocatoria'] = 4;

                        sendEmailCandidatos(
                            explode(",", $_POST['allcandidatossuperadosemail']),
                            'resexa',
                            $desc
                        );
                        sendEmailTribunal(
                            $_POST['alltribunalemail'], 'startMerits', $desc
                        );
                    }

                    // cambia automatico y envia correo si subes el documento resolucion final y el estado actual es 12
                    if (isset($_POST['cambioresolucionfinal'])
                        && $_POST['cambioresolucionfinal'] == 'si'
                        && $_POST['currentstate'] == 12
                        && $isnotsendedemailflag) {
                        $_POST['slctEstadoConvocatoria'] =
                            ($_POST['alguientieneumbralsuperado'] == 'si')
                                ? 6
                                : 7;

                        sendEmailCandidatos(
                            explode(",", $_POST['allcandidatossuperadosemail']),
                            'resmer',
                            $desc
                        );
                    }

                    $convocat = construirConvocatoria();

                    if ($_POST['slctEstadoConvocatoria'] == 2
                        && $_POST['currentstate'] == 1) {
                        sendEmailTribunal(
                            $_POST['alltribunalemail'], 'startReqs', $desc
                        );
                    }

                    if (isset($convocat)) {
                        call_user_func([
                            $controllerconvocatoria, 'actualizarConvocatoria',
                        ], $convocat, $lang);
                    }
                } else {
                    echo '<span class="error">' . $datosOK . '</span>';
                    call_user_func([
                        $controllerconvocatoria, 'nuevaConvocatoria',
                    ], $lang);
                    //echo '<BR><form method="post" action =""><input type="submit" id="btnListar" name="accionConvocatoria" value="ListarConvocatorias"></form>';
                }
                break;
            case 'Calls List':
            case 'ListarConvocatorias':
                listarConvocatoriasAdmin(
                    $controllerconvocatoria, $lang
                );
                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([
                    $controllerconvocatoria, 'nuevaConvocatoria',
                ], $lang);
                break;
            case 'AddResolucion':
                //funcion para validar los datos
                $datosOK = "";
                $datosOK = validarResolucion();

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

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

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

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

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

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

                    $lusuarios = [];
                    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(
                            [$controllerconvocatoria, 'obtenerRoles',],
                            $lang
                        );

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

                            if (isset($cvtTrbnl)) {
                                call_user_func([
                                    $controllerconvocatoria,
                                    'insertarTribunalConvocatoria',
                                ], $idConvocatoria, $cvtTrbnl, $lang);

                                if ($_POST['isnew'] == 'isnew') {

                                    foreach ($cvtTrbnl as $miembrotribunal) {

                                        if (!$miembrotribunal->getEssuplente()
                                            && !user_can(($miembrotribunal->getCodigousuariowp())->getId(), 'administrator')) {

                                            $customrole =
                                                (($miembrotribunal->getCodigorol())->getIdrol()
                                                 == 1)
                                                    ? __('president', 'panoramic_child')
                                                    : ((($miembrotribunal->getCodigorol())->getIdrol()
                                                        == 2)
                                                    ? __('secretary', 'panoramic_child')
                                                    : ((($miembrotribunal->getCodigorol())->getIdrol()
                                                        == 3)
                                                        ? __('Officer', 'panoramic_child')
                                                        : __('Officer 2', 'panoramic_child')));

                                            $currentuser =
                                                get_user_by('id', ($miembrotribunal->getCodigousuariowp())->getId());
                                            $mailto = $currentuser->user_email;
                                            $subject =
                                                __('You are included like tribunal member', 'panoramic_child');
                                            $message = '<p>'
                                                       . __('Hello', 'panoramic_child')
                                                       . '</p>' . '<p>'
                                                       . sprintf(__('Based on the resolution of the Director of the CLPU dated %s, I inform you that you are part of the Selection Tribunal as a %s in the following vacancy published on our website: %s', 'panoramic_child'), $_POST['txtConvocatoriaFechaInicio'], $customrole, $_POST['txtConvocatoriaRef'])
                                                       . '</p><p>'
                                                       . __('Greetings', 'panoramic_child')
                                                       . '</p>';
                                            sendEmailto($mailto, $subject, $message);

                                            //echo $mailto . '<br>' . $subject . '<br>' . $message;
                                        }

                                    }

                                }

                                //Redirigir al Consultar Tribunal para el id de cvt que toca
                                call_user_func([
                                    $controllerconvocatoria,
                                    'listarConvocatoriaTribunal',
                                ], $lang, $idConvocatoria);
                            }
                        }
                    } else {
                        echo $datosOK;
                        call_user_func(
                            [
                                $controllerconvocatoria,
                                'modificarConvocatoriaTribunal',
                            ],
                            $lang,
                            $idConvocatoria
                        );
                    }
                } else {
                    call_user_func([
                        $controllerconvocatoria, 'listarConvocatoriaTribunal',
                    ], $lang, 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([
                        $controllerconvocatoria, 'listarConvocatoriaTribunal',
                    ], $lang, $idConvocatoria);
                }
                break;
            case 'Valoraciones Tribunal':
                if (isset($_POST['codigoUsuarioWP'])
                    && is_numeric($_POST['codigoUsuarioWP'])) {
                    $codigoUsuarioWP = $_POST['codigoUsuarioWP'];
                    call_user_func([
                        $controllerconvocatoria,
                        'listarValoracionesConvocatoria',
                    ], $lang, 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([
                        $controllerconvocatoria,
                        'listarValoracionesConvocatoria',
                    ], $lang, $idConvocatoria, null, null, $codigoUsuarioWP);
                }
                break;
            case 'GestionarValoraciones':
                if (isset($_POST['slctConvocatorias'])
                    && isset($_POST['codigoUsuarioWP'])) {
                    $idConvocatoria = $_POST['slctConvocatorias'];
                    $codigoUsuarioWP = $_POST['codigoUsuarioWP'];
                    call_user_func([
                        $controllerconvocatoria,
                        'GestionarValoracionesConvocatoria',
                    ], $lang, $idConvocatoria, null, null, $codigoUsuarioWP);
                }
                break;
            case 'AprobacionesRequisisto':
                if (isset($_POST['slctConvocatorias'])
                    && isset($_POST['codigoUsuarioWP'])) {
                    $idConvocatoria = $_POST['slctConvocatorias'];
                    $codigoUsuarioWP = $_POST['codigoUsuarioWP'];
                    call_user_func([
                        $controllerconvocatoria, 'AprobacionesRequisisto',
                    ], $lang, $idConvocatoria, $codigoUsuarioWP);
                }
                break;

            case 'AprobacionesMerito':
                if (isset($_POST['slctConvocatorias'])
                    && isset($_POST['codigoUsuarioWP'])) {
                    $idConvocatoria = $_POST['slctConvocatorias'];
                    $codigoUsuarioWP = $_POST['codigoUsuarioWP'];
                    call_user_func([
                        $controllerconvocatoria, 'AprobacionesMeritos',
                    ], $lang, $idConvocatoria, $codigoUsuarioWP);
                }
                break;

            case 'AprobacionesExamen':
                if (isset($_POST['slctConvocatorias'])
                    && isset($_POST['codigoUsuarioWP'])) {
                    $idConvocatoria = $_POST['slctConvocatorias'];
                    $codigoUsuarioWP = $_POST['codigoUsuarioWP'];
                    call_user_func([
                        $controllerconvocatoria, 'AprobacionesExamenes',
                    ], $lang, $idConvocatoria, $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([
                        $controllerconvocatoria,
                        'listarValoracionesConvocatoria',
                    ], $lang, $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([
                        $controllerconvocatoria,
                        'listarValoracionesConvocatoria',
                    ], $lang, $idConvocatoria, null, $idMerito, $codigoUsuarioWP);
                }
                break;

            case 'insertvalidation':

                $response = "ok";
                $datosformulario = $_POST['data'];
                $idEstado = 2;
                $reqaprobados = true;
                foreach ($datosformulario as $dato) {
                    if (str_replace(' ', '', $dato['comment']) == '') {
                        $response =
                            __('Error: at least one empty comment', 'panoramic_child');
                        break;
                    }
                    $trbnlVlc = new DboTribunalvaloracion();

                    if ($dato['id_valoracion'] != 0) {
                        $trbnlVlc->setIdtribunalvaloracion($dato['id_valoracion']);
                    }
                    $trbnlVlc->setCodigoconvocatoria($_POST['codigoconvocatoria']);
                    $trbnlVlc->setCodigocandidato($_POST['codigocandidato']);
                    $trbnlVlc->setCodigotribunalconvocatoria($_POST['codigotribunalconvocatoria']);

                    if ($_POST['fase'] == 'requisitos') {
                        $trbnlVlc->setCodigoconvocatoriarequisito($dato['req']);
                    }

                    if ($_POST['fase'] == 'meritos') {
                        $trbnlVlc->setCodigoconvocatoriamerito($dato['req']);
                    }
                    $trbnlVlc->setComentario($dato['comment']);
                    $datenow =
                        new DateTime('now', new DateTimeZone('Europe/Madrid'));
                    $trbnlVlc->setFecha($datenow);

                    $trbnlVlc->setEsconcluyente(
                        current_user_can('administrator')
                    );

                    if ($_POST['fase'] == 'requisitos') {

                        $boolean_eval_pass = $dato['eval_pass'] == 'si';
                        $trbnlVlc->setEstasuperado($boolean_eval_pass);

                        if (!$boolean_eval_pass) {
                            $reqaprobados = false;
                        }
                    }

                    if ($_POST['fase'] == 'meritos') {

                        if (!is_numeric($dato['puntuacion'])) {
                            $response =
                                __('Error: at least one score is not a number', 'panoramic_child');
                            break;
                        }
                        $trbnlVlc->setpuntuacion($dato['puntuacion']);
                    }
                    $trbnlVlc->setBaja(false);

                    if (isset($trbnlVlc)) {
                        call_user_func([
                            $controllerconvocatoria,
                            'insertarTribunalValoracion',
                        ], $trbnlVlc, $lang);
                    }
                }

                if ($_POST['entrevista'] != 'false') {
                    call_user_func([
                        $controllerconvocatoria, 'insertarEntrevista',
                    ], $_POST['codigocandidato'], $_POST['codigoconvocatoria'], $_POST['entrevista']);
                }

                if (current_user_can('administrator')
                    && $_POST['fase'] == 'requisitos') {
                    call_user_func([
                        $controllerconvocatoria,
                        'actualizarRequisitosSuperados',
                    ], $_POST['codigocandidato'], $_POST['codigoconvocatoria'], $reqaprobados);
                }

                if ($_POST['islastcomment'] == 'true') {

                    if ($_POST['fase'] == 'requisitos') {
                        $idEstado = 3;
                    }

                    if ($_POST['fase'] == 'meritos') {
                        $idEstado = 11;
                    }
                    call_user_func([
                        $controllerconvocatoria, 'cambiarEstadoConvocatoria',
                    ], $_POST['codigoconvocatoria'], $idEstado);
                }

                if (isset($_POST['commentimpugnacionrequisitos'])) {
                    $impugnacion = new DboImpugnacion();

                    if ($_POST['impugnacionid'] != 0) {
                        $impugnacion->setIdImpugnacion($_POST['impugnacionid']);
                    }
                    $impugnacion->setComentario($_POST['commentimpugnacionrequisitos']);
                    $datenow =
                        new DateTime('now', new DateTimeZone('Europe/Madrid'));
                    $impugnacion->setFecha($datenow);
                    $impugnacion->setCodigoconvocatoria($_POST['codigoconvocatoria']);
                    $impugnacion->setCodigocandidato($_POST['codigocandidato']);
                    $impugnacion->setBaja(false);
                    $impugnacion->setEsRequisito(true);

                    if (isset($impugnacion)) {
                        call_user_func([
                            $controllerconvocatoria, 'insertarImpugnacion',
                        ], $impugnacion, $lang);
                    }
                }

                if (isset($_POST['commentimpugnacionmeritos'])) {
                    $impugnacion = new DboImpugnacion();

                    if ($_POST['impugnacionid'] != 0) {
                        $impugnacion->setIdImpugnacion($_POST['impugnacionid']);
                    }
                    $impugnacion->setComentario($_POST['commentimpugnacionmeritos']);
                    $datenow =
                        new DateTime('now', new DateTimeZone('Europe/Madrid'));
                    $impugnacion->setFecha($datenow);
                    $impugnacion->setCodigoconvocatoria($_POST['codigoconvocatoria']);
                    $impugnacion->setCodigocandidato($_POST['codigocandidato']);
                    $impugnacion->setBaja(false);
                    $impugnacion->setEsRequisito(false);

                    call_user_func(
                        [$controllerconvocatoria, 'insertarImpugnacion',],
                        $impugnacion,
                        $lang
                    );

                }
                echo $response;
                break;

            case 'insertexamen':

                $response = "ok";
                $trbnlVlc = new DboTribunalvaloracion();

                if ($_POST['valoracionid'] != 0) {
                    $trbnlVlc->setIdtribunalvaloracion($_POST['valoracionid']);
                }

                $trbnlVlc->setCodigoconvocatoria($_POST['codigoconvocatoria']);
                $trbnlVlc->setCodigocandidato($_POST['codigocandidato']);
                $trbnlVlc->setCodigotribunalconvocatoria($_POST['codigotribunalconvocatoria']);
                $trbnlVlc->setComentario('');
                $trbnlVlc->setEsconcluyente(false);
                $trbnlVlc->setBaja(false);


                $trbnlVlc->setExamennota($_POST['nota']);
                $datenow =
                    new DateTime('now', new DateTimeZone('Europe/Madrid'));
                $trbnlVlc->setFecha($datenow);

                if (!is_numeric($_POST['nota'])) {
                    $response =
                        __('Error: at least one score is not a number', 'panoramic_child');
                }

                if ($response == "ok"
                    && $_POST['nota'] > $_POST['puntuacionmaxima']) {
                    $response =
                        __('Error: the note can not be higher than the maximum score', 'panoramic_child');
                }

                if ($response == "ok") {
                    call_user_func(
                        [
                            $controllerconvocatoria,
                            'insertarTribunalValoracion',
                        ],
                        $trbnlVlc,
                        $lang
                    );


                    if ($_POST['allfilled'] == 'true') {
                        call_user_func([
                            $controllerconvocatoria,
                            'cambiarEstadoConvocatoria',
                        ], $_POST['codigoconvocatoria'], 14);
                    }

                    if ($_POST['nota'] < $_POST['puntuacioncorte']) {
                        call_user_func([
                            $controllerconvocatoria, 'actualizarExamensuperado',
                        ], $_POST['codigocandidato'], $_POST['codigoconvocatoria'], false);
                    }
                }
                echo $response;

                break;

            case 'aprobarrequisito':

                $response = "ok";

                $trbnlVlc = new DboTribunalAprobacionRequisito();

                if ($_POST['idaprobacionrequisito'] != 0) {
                    $trbnlVlc->setIdTribunalAprobacionRequisto($_POST['idaprobacionrequisito']);
                }

                $trbnlVlc->setCodigoconvocatoria($_POST['codigoconvocatoria']);

                $trbnlVlc->setCodigotribunalconvocatoria($_POST['codigotribunalconvocatoria']);

                $boolean_eval_pass = $_POST['aprobado'] == 'si';

                $trbnlVlc->setEstaAprobado($boolean_eval_pass);

                $datenow =
                    new DateTime('now', new DateTimeZone('Europe/Madrid'));
                $trbnlVlc->setFecha($datenow);
                $trbnlVlc->setBaja(false);

                call_user_func(
                    [$controllerconvocatoria, 'insertarAprobacionRequisitos',],
                    $trbnlVlc,
                    $lang
                );

                echo $response;
                break;

            case 'aprobarmerito':

                $response = "ok";

                $trbnlVlc = new DboTribunalAprobacionMerito();

                if ($_POST['idaprobacionmerito'] != 0) {
                    $trbnlVlc->setIdTribunalAprobacionMerito($_POST['idaprobacionmerito']);
                }

                $trbnlVlc->setCodigoconvocatoria($_POST['codigoconvocatoria']);

                $trbnlVlc->setCodigotribunalconvocatoria($_POST['codigotribunalconvocatoria']);

                $boolean_eval_pass = $_POST['aprobado'] == 'si';

                $trbnlVlc->setEstaAprobado($boolean_eval_pass);

                $datenow =
                    new DateTime('now', new DateTimeZone('Europe/Madrid'));
                $trbnlVlc->setFecha($datenow);
                $trbnlVlc->setBaja(false);

                call_user_func(
                    [$controllerconvocatoria, 'insertarAprobacionMeritos',],
                    $trbnlVlc,
                    $lang
                );

                echo $response;
                break;

            case 'aprobarexamen':

                $response = "ok";

                $trbnlVlc = new DboTribunalAprobacionExamen();

                if ($_POST['idaprobacionexamen'] != 0) {
                    $trbnlVlc->setIdTribunalAprobacionExamen($_POST['idaprobacionexamen']);
                }

                $trbnlVlc->setCodigoconvocatoria($_POST['codigoconvocatoria']);

                $trbnlVlc->setCodigotribunalconvocatoria($_POST['codigotribunalconvocatoria']);

                $boolean_eval_pass = $_POST['aprobado'] == 'si';
                $trbnlVlc->setEstaAprobado($boolean_eval_pass);

                $datenow =
                    new DateTime('now', new DateTimeZone('Europe/Madrid'));
                $trbnlVlc->setFecha($datenow);
                $trbnlVlc->setBaja(false);

                call_user_func(
                    [$controllerconvocatoria, 'insertarAprobacionExamen',],
                    $trbnlVlc, $lang
                );
                echo $response;
                break;

            case 'to_next_fase':

                call_user_func([
                    $controllerconvocatoria, 'cambiarEstadoConvocatoria',
                ], $_POST['codigoconvocatoria'], $_POST['fase']);

                if ($_POST['fase'] == 15) {
                    $datenow = new DateTime($_POST['examinatiodate']);
                    call_user_func([
                        $controllerconvocatoria, 'insertarFechaExamen',
                    ], $_POST['codigoconvocatoria'], $datenow);
                }
                break;

            case 'dateresolreq':

                $datenow =
                    new DateTime('now', new DateTimeZone('Europe/Madrid'));
                call_user_func([
                    $controllerconvocatoria, 'insertarFechaResReq',
                ], $_POST['codigoconvocatoria'], $datenow);

                break;

            case 'dateresolexam':

                $datenow =
                    new DateTime('now', new DateTimeZone('Europe/Madrid'));
                call_user_func([
                    $controllerconvocatoria, 'insertarFechaResExamen',
                ], $_POST['codigoconvocatoria'], $datenow);

                break;

            case 'dateresolfinal':

                $datenow =
                    new DateTime('now', new DateTimeZone('Europe/Madrid'));
                call_user_func([
                    $controllerconvocatoria, 'insertarFechaResFinal',
                ], $_POST['codigoconvocatoria'], $datenow);

                break;

            case 'AddImpugnacionDoc':

                $aux = 'flImpugna-merito-' . $_POST['slctCandidato'];

                $impugnaciondoc = new DboImpugnacionDoc();
                $datenow =
                    new DateTime('now', new DateTimeZone('Europe/Madrid'));
                $impugnaciondoc->setFecha($datenow);

                $impugnaciondoc->setCodigoconvocatoria($_POST['slctConvocatorias']);
                $impugnaciondoc->setCodigocandidato($_POST['slctCandidato']);

                $impugnaciondoc->setBaja(false);
                $impugnaciondoc->setEsRequisito(false);

                if (isset($_FILES[$aux])
                    && strlen(trim($_FILES[$aux]['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[$aux]['name'] =
                        clean($_FILES[$aux]['name']);    //limpiamos las rutas
                    $impugnaciondoc->setRutaDoc('//Impugnaciones//'
                                                . clean($_POST['slctConvocatoriasRef'])
                                                . '//'
                                                . clean($_POST['slctCandidato'])
                                                . '//' . $_FILES[$aux]['name']);
                    $fileOrigen = $_FILES[$aux];
                    $fileDestino =
                        $_SERVER["DOCUMENT_ROOT"] . $_ENV['FILES_DIR']
                        . $impugnaciondoc->getRutaDoc();
                    include(__DIR__ . "/../Utils/file_uploader.php");

                    if (isset($retorno) && $retorno == true) {
                        //Ha ido bien
                        //destruimos el retorno para otra subida
                        unset($retorno);
                    } else {
                        //Algo ha ido mal
                        if (isset($retorno)) {
                            unset($retorno);
                            $convocatoria = null;
                            return null;
                        }
                    }
                }


                if (isset($impugnaciondoc)) {

                    call_user_func([
                        $controllerconvocatoria, 'insertarImpugnacionDoc',
                    ], $impugnaciondoc, $lang);

                }

                if (isset($_POST['slctConvocatorias'])) {
                    $idConvocatoria = $_POST['slctConvocatorias'];

                    call_user_func([
                        $controllerconvocatoria, 'listarConvocatoriaCandidatos',
                    ], $lang, $idConvocatoria);
                    echo $idConvocatoria;
                }

                break;

            case 'AddImpugnacionDocRequ':

                $aux = 'flImpugna-requisisito-' . $_POST['slctCandidato'];

                $impugnaciondoc = new DboImpugnacionDoc();
                $datenow =
                    new DateTime('now', new DateTimeZone('Europe/Madrid'));
                $impugnaciondoc->setFecha($datenow);

                $impugnaciondoc->setCodigoconvocatoria($_POST['slctConvocatorias']);
                $impugnaciondoc->setCodigocandidato($_POST['slctCandidato']);

                $impugnaciondoc->setBaja(false);
                $impugnaciondoc->setEsRequisito(true);


                if (isset($_FILES[$aux])
                    && strlen(trim($_FILES[$aux]['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[$aux]['name'] =
                        clean($_FILES[$aux]['name']);    //limpiamos las rutas
                    $impugnaciondoc->setRutaDoc('//Impugnaciones//'
                        . clean($_POST['slctConvocatoriasRef'])
                        . '//'
                        . clean($_POST['slctCandidato'])
                        . '//' . $_FILES[$aux]['name']);
                    $fileOrigen = $_FILES[$aux];
                    $fileDestino =
                        $_SERVER["DOCUMENT_ROOT"] . $_ENV['FILES_DIR']
                        . $impugnaciondoc->getRutaDoc();
                    include(__DIR__ . "/../Utils/file_uploader.php");

                    if (isset($retorno) && $retorno == true) {
                        unset($retorno);
                    } else {
                        if (isset($retorno)) {
                            unset($retorno);
                            $convocatoria = null;
                            return null;
                        }
                    }
                }

                if (isset($impugnaciondoc)) {

                    call_user_func([
                        $controllerconvocatoria, 'insertarImpugnacionDoc',
                    ], $impugnaciondoc, $lang);

                }

                if (isset($_POST['slctConvocatorias'])) {
                    $idConvocatoria = $_POST['slctConvocatorias'];
                    call_user_func([
                        $controllerconvocatoria, 'listarConvocatoriaCandidatos',
                    ], $lang, $idConvocatoria);
                    echo $idConvocatoria;
                }

                break;


            case 'DelImpugnacionDoc':

                call_user_func([
                    $controllerconvocatoria, 'removeImpugnacionDoc',
                ], $_POST['idimpugna']);

                if (isset($_POST['slctConvocatorias'])) {
                    $idConvocatoria = $_POST['slctConvocatorias'];
                    call_user_func([
                        $controllerconvocatoria, 'listarConvocatoriaCandidatos',
                    ], $lang, $idConvocatoria);
                    echo $idConvocatoria;
                }

                break;

            case 'ImpugnarRequisitos':

                call_user_func([
                    $controllerconvocatoria, 'ImpugnarRequisitos',
                ], $_POST['slctCandidato'], $_POST['slctConvocatorias']);

                call_user_func([
                    $controllerconvocatoria, 'cambiarEstadoConvocatoria',
                ], $_POST['slctConvocatorias'], 4);

                if (isset($_POST['slctConvocatorias'])) {
                    $idConvocatoria = $_POST['slctConvocatorias'];
                    call_user_func([
                        $controllerconvocatoria, 'listarConvocatoriaCandidatos',
                    ], $lang, $idConvocatoria);
                    echo $idConvocatoria;
                }


                break;

            case 'ImpugnarMeritos':

                call_user_func([
                    $controllerconvocatoria, 'ImpugnarMeritos',
                ], $_POST['slctCandidato'], $_POST['slctConvocatorias']);

                if (isset($_POST['slctConvocatorias'])) {
                    $idConvocatoria = $_POST['slctConvocatorias'];
                    call_user_func([
                        $controllerconvocatoria, 'listarConvocatoriaCandidatos',
                    ], $lang, $idConvocatoria);
                    echo $idConvocatoria;
                }
                break;

            case 'accionPdfPage':

                call_user_func([
                    $controllerconvocatoria, 'pdfPage',
                ], $lang, $_POST['slctConvocatorias']);

                break;

            case 'saveToReadInPdf':

                $data = call_user_func(
                    [$controllerconvocatoria, 'pdfPage',],
                    $lang,
                    $_POST['codigoconvocatoria'],
                    0,
                    true
                );
                $mailData = [];
                $isSendEmail = $_POST['isRes'] == 'true'
                    ? '&isem'
                    : '';
                $keyOption = $_POST['tipopdf'] . $_POST['codigoconvocatoria'];

                if ($_POST['isRes'] == 'true') {
                    $data['ftext1'] = $_POST['ftext1'];
                    $data['ftext2'] = $_POST['ftext2'];
                    $data['ftext3'] = $_POST['ftext3'];
                    $data['ftext4'] = $_POST['ftext4'];
                    $mailData['mailto'] = $_POST['recipient'];
                    $mailData['subject'] = $_POST['subject'];
                    $mailData['message'] = $_POST['message'];
                    update_option($keyOption . '_mail', $mailData);
                }

                $path = '/pdftemplates/dwl/';
                $pdfName = '';

                switch ($_POST['tipopdf']) {
                    case 'acreq':
                        $path .= 'actaprimmerafase';
                        $pdfName = __('Act_Req', 'panoramic_child') . '_'
                                   . str_replace('/', '_', $data['convocatoria']->getReferencia());
                        break;
                    case 'acexa':
                        $path .= 'actaexamenfase';
                        $pdfName = __('Act_Exa', 'panoramic_child') . '_'
                                   . str_replace('/', '_', $data['convocatoria']->getReferencia());
                        break;
                    case 'acmer':
                        $path .= 'actasegundafase';
                        $pdfName = __('Act_Mer', 'panoramic_child') . '_'
                                   . str_replace('/', '_', $data['convocatoria']->getReferencia());
                        break;
                    case 'vareq':
                        $path .= 'valoracionesreq';
                        $pdfName = __('Val_Req', 'panoramic_child') . '_'
                                   . str_replace('/', '_', $data['convocatoria']->getReferencia());
                        break;
                    case 'vaexa':
                        $path .= 'valoracionesexam';
                        $pdfName = __('Val_Exa', 'panoramic_child') . '_'
                                   . str_replace('/', '_', $data['convocatoria']->getReferencia());
                        break;
                    case 'vamer':
                        $path .= 'valoracionesmer';
                        $pdfName = __('Val_Mer', 'panoramic_child') . '_'
                                   . str_replace('/', '_', $data['convocatoria']->getReferencia());
                        break;
                    case 'resreq':
                        $datenow =
                            new DateTime('now', new DateTimeZone('Europe/Madrid'));
                        call_user_func([
                            $controllerconvocatoria, 'insertarFechaResReq',
                        ], $data['convocatoria']->getIdconvocatoria(), $datenow);

                        $path .= 'resolprimmerafase';
                        $pdfName = __('Res_req', 'panoramic_child') . '_'
                                   . str_replace('/', '_', $data['convocatoria']->getReferencia());
                        break;
                    case 'resexa':
                        $datenow =
                            new DateTime('now', new DateTimeZone('Europe/Madrid'));
                        call_user_func([
                            $controllerconvocatoria, 'insertarFechaResExamen',
                        ], $data['convocatoria']->getIdconvocatoria(), $datenow);

                        $path .= 'resolexam';
                        $pdfName = __('Res_exa', 'panoramic_child') . '_'
                                   . str_replace('/', '_', $data['convocatoria']->getReferencia());
                        break;
                    case 'resmer':
                        $datenow =
                            new DateTime('now', new DateTimeZone('Europe/Madrid'));
                        call_user_func([
                            $controllerconvocatoria, 'insertarFechaResFinal',
                        ], $data['convocatoria']->getIdconvocatoria(), $datenow);

                        $path .= 'resolfinal';
                        $pdfName = __('Res_mer', 'panoramic_child') . '_'
                                   . str_replace('/', '_', $data['convocatoria']->getReferencia());
                        break;
                }
                $path .= '.php';

                ob_start();
                include(__DIR__ . $path);
                $value = ob_get_clean();


                update_option($keyOption, $value);

                echo get_site_url() . '?download=pdf&option=' . $keyOption
                     . '&pdfname=' . $pdfName . $isSendEmail;

                break;

            default:
                listarConvocatoriasAdmin($controllerconvocatoria, $lang);
                break;
        }
        unset($_POST['accionConvocatoria']);
    } else {
        listarConvocatoriasAdmin($controllerconvocatoria, $lang);
    }
} else {
    listarConvocatoriasAdmin($controllerconvocatoria, $lang);
}

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

    call_user_func([
        $controller, 'listarConvocatoriasAdmin',
    ], $lang, get_current_user_id());
}

function validarConvocatoria(): string
{
    $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>";
        }
    }
    //Validar Descripcion
    if (!isset($_POST['txtDescripcionen'])) {
        $msgError = $msgError . "El campo Descripcion debe estar informado<BR>";
    } else {
        if ($_POST['txtDescripcionen'] == null
            || strlen(trim($_POST['txtDescripcionen'])) <= 3) {
            $msgError = $msgError
                        . "El campo Descripcion debe estar informado o contener un valor válido<BR>";
        }
    }
    if (isset($_POST['examen_obligatorio'])) {
        if (!isset($_POST['totalPuntos']) || $_POST['totalPuntos'] <= 0) {
            $msgError = $msgError
                        . "El campo Número total de puntos debe estar informado o contener un valor válido<BR>";
        }
        if (!isset($_POST['puntuacionCorte'])
            || $_POST['puntuacionCorte'] <= 0) {
            $msgError = $msgError
                        . "El campo Puntuación de corte del examen debe estar informado o contener un valor válido<BR>";
        }
        if (!isset($_POST['puntuacionMaxima'])
            || $_POST['puntuacionMaxima'] <= 0) {
            $msgError = $msgError
                        . "El campo Puntuación máxima del examen debe estar informado o contener un valor válido<BR>";
        }
        if (!isset($_POST['ponderacionExamen'])
            || $_POST['ponderacionExamen'] <= 0) {
            $msgError = $msgError
                        . "El campo Ponderación de examen debe estar informado o contener un valor válido<BR>";
        }
        if (!isset($_POST['ponderacionMeritos'])
            || $_POST['ponderacionMeritos'] <= 0) {
            $msgError = $msgError
                        . "El campo Ponderación de méritos debe estar informado o contener un valor válido<BR>";
        }
        if (isset($_POST['ponderacionMeritos'])
            && isset($_POST['ponderacionExamen'])
            && ($_POST['ponderacionMeritos'] + $_POST['ponderacionExamen']
                != 100)) {
            $msgError = $msgError
                        . "Los campos de Ponderación deben completar el 100%<BR>";
        }
    }

    return $msgError;
}

function construirConvocatoria()
{
    try {
        $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 H:i:s', strval($_POST['dtFechaFin']) . ' 23:59:59'
                    )
                    : $_SESSION['data']->setFechafin());
            $convocatoria->setFechaultimaactualizacion(
                $_SESSION['data']->getFechaultimaactualizacion() != $_POST['dtFechaUltimaActualizacion']
                    ? DateTime::createFromFormat(
                        'Y-m-d', strval($_POST['dtFechaUltimaActualizacion'])
                    )
                    : $_SESSION['data']->getFechaultimaactualizacion()
            );

            // doocumentos convocatoria
            if (!isset($_FILES['flPDFConvocatoria'])
                || strlen(trim($_FILES['flPDFConvocatoria']['name'])) <= 0
            ) {
                if (($_SESSION['data']->getRutaarchivoconvocatoria() != null)
                    && strlen(trim($_SESSION['data']->getRutaarchivoconvocatoria())) > 0
                ) {
                    $convocatoria->setRutaarchivoconvocatoria(
                        $_SESSION['data']->getRutaarchivoconvocatoria()
                    );
                }
            } elseif (isset($_FILES['flPDFConvocatoria'])
                      && strlen(trim($_FILES['flPDFConvocatoria']['name'])) > 0
            ) {
                $load = new Load();

                if ($load->loadEnv() == null || !isset($_ENV)) {
                    throw new Exception(
                        'No se han podido cargar las variables de entorno.'
                    );
                }

                $_FILES['flPDFConvocatoria']['name'] =
                    clean($_FILES['flPDFConvocatoria']['name']);
                $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) {
                    unset($retorno);
                } else {
                    if (isset($retorno)) {
                        unset($retorno);
                        $convocatoria = null;
                        return null;
                    }
                }
            }

            if (!isset($_FILES['flPDFEspecifico'])
                || strlen(trim($_FILES['flPDFEspecifico']['name'])) <= 0) {
                if (($_SESSION['data']->getRutaarchivoespecifico() != null)
                    && strlen(trim($_SESSION['data']->getRutaarchivoespecifico()))
                       > 0
                ) {
                    $convocatoria->setRutaarchivoespecifico(
                        $_SESSION['data']->getRutaarchivoespecifico()
                    );
                }
            } elseif (isset($_FILES['flPDFEspecifico'])
                      && strlen(trim($_FILES['flPDFEspecifico']['name'])) > 0
            ) {
                $load = new Load();

                if ($load->loadEnv() == null || !isset($_ENV)) {
                    throw new Exception(
                        'No se han podido cargar las variables de entorno.'
                    );
                }

                $_FILES['flPDFEspecifico']['name'] =
                    clean($_FILES['flPDFEspecifico']['name']);    //limpiamos las rutas
                $convocatoria->setRutaarchivoespecifico('//'
                    . $_ENV['CALL_FILES_DIR']
                    . '/'
                    . clean($convocatoria->getReferencia())
                    . '//'
                    . $_FILES['flPDFEspecifico']['name']);
                $fileOrigen = $_FILES['flPDFEspecifico'];
                $fileDestino = $_SERVER["DOCUMENT_ROOT"] . $_ENV['FILES_DIR']
                    . $convocatoria->getRutaarchivoespecifico();
                include(__DIR__ . "/../Utils/file_uploader.php");

                if (isset($retorno) && $retorno == true) {
                    unset($retorno);
                } else {
                    if (isset($retorno)) {
                        unset($retorno);
                        $convocatoria = null;
                        return null;
                    }
                }
            }

            if (!isset($_FILES['flPDFRequisitos'])
                || strlen(trim($_FILES['flPDFRequisitos']['name'])) <= 0
            ) {
                if (($_SESSION['data']->getRutaarchivorequisitos() != null)
                    && strlen(trim($_SESSION['data']->getRutaarchivorequisitos()))
                       > 0
                ) {
                    $convocatoria->setRutaarchivorequisitos($_SESSION['data']->getRutaarchivorequisitos());
                }
            } elseif (isset($_FILES['flPDFRequisitos'])
                      && strlen(trim($_FILES['flPDFRequisitos']['name'])) > 0
            ) {
                $load = new Load();
                if ($load->loadEnv() == null || !isset($_ENV)) {
                    throw new Exception(
                        'No se han podido cargar las variables de entorno.'
                    );
                }

                $_FILES['flPDFRequisitos']['name'] =
                    clean($_FILES['flPDFRequisitos']['name']);
                $convocatoria->setRutaarchivorequisitos('//'
                    . $_ENV['CALL_FILES_DIR']
                    . '/'
                    . clean($convocatoria->getReferencia())
                    . '//'
                    . $_FILES['flPDFRequisitos']['name']);
                $fileOrigen = $_FILES['flPDFRequisitos'];
                $fileDestino = $_SERVER["DOCUMENT_ROOT"] . $_ENV['FILES_DIR']
                    . $convocatoria->getRutaarchivorequisitos();
                include(__DIR__ . "/../Utils/file_uploader.php");

                if (isset($retorno) && $retorno == true) {
                    unset($retorno);
                } else {
                    if (isset($retorno)) {
                        unset($retorno);
                        $convocatoria = null;
                        return null;
                    }
                }
            }

            if (!isset($_FILES['flPDFExamen'])
                || strlen(trim($_FILES['flPDFExamen']['name'])) <= 0
            ) {
                if (($_SESSION['data']->getRutaarchivoexamen() != null)
                    && strlen(trim($_SESSION['data']->getRutaarchivoexamen())) > 0
                ) {
                    $convocatoria->setRutaarchivoexamen($_SESSION['data']->getRutaarchivoexamen());
                }
            } elseif (isset($_FILES['flPDFExamen'])
                      && strlen(trim($_FILES['flPDFExamen']['name'])) > 0) {
                $load = new Load();
                if ($load->loadEnv() == null || !isset($_ENV)) {
                    throw new Exception(
                        'No se han podido cargar las variables de entorno.'
                    );
                }

                $_FILES['flPDFExamen']['name'] =
                    clean($_FILES['flPDFExamen']['name']);
                $convocatoria->setRutaarchivoexamen('//'
                    . $_ENV['CALL_FILES_DIR']
                    . '/'
                    . clean($convocatoria->getReferencia())
                    . '//'
                    . $_FILES['flPDFExamen']['name']);
                $fileOrigen = $_FILES['flPDFExamen'];
                $fileDestino = $_SERVER["DOCUMENT_ROOT"] . $_ENV['FILES_DIR']
                    . $convocatoria->getRutaarchivoexamen();
                include(__DIR__ . "/../Utils/file_uploader.php");

                if (isset($retorno) && $retorno == true) {
                    unset($retorno);
                } else {
                    if (isset($retorno)) {
                        unset($retorno);
                        $convocatoria = null;
                        return null;
                    }
                }
            }

            if (!isset($_FILES['flPDFResolucionFinal'])
                || strlen(trim($_FILES['flPDFResolucionFinal']['name'])) <= 0
            ) {
                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 new Exception(
                        'No se han podido cargar las variables de entorno.'
                    );
                }

                $_FILES['flPDFResolucionFinal']['name'] =
                    clean($_FILES['flPDFResolucionFinal']['name']);
                $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) {
                    unset($retorno);
                } else {
                    if (isset($retorno)) {
                        unset($retorno);
                        $convocatoria = null;
                        return null;
                    }
                }
            }

            $convocatoria->setUrlweb(
                $_SESSION['data']->getUrlweb() != $_POST['txtWeb']
                    ? $_POST['txtWeb']
                    : $_SESSION['data']->getUrlweb()
            );
            $convocatoria->setUmbraldepuntuacion(
                $_SESSION['data']->getUmbraldepuntuacion() != $_POST['txtUmbradePuntuacion']
                    ? $_POST['txtUmbradePuntuacion']
                    : $_SESSION['data']->getUmbraldepuntuacion()
            );

            $convocatoria->setCodigoestadoconvocatoria($_POST['slctEstadoConvocatoria']);
            $convocatoria->setCaducada(
                $convocatoria->getFechafin() <
                    $convocatoria->getFechaultimaactualizacion()
            );

            $bajavar = $_SESSION['data']->getBaja() != $_POST['chkbaja']
                ? $_POST['chkbaja']
                : $_SESSION['data']->getBaja();

            if ($bajavar) {
                $convocatoria->setBaja(true);
            } else {
                $convocatoria->setBaja(false);
            }
            $convocatoria->setDescripcion(
                $_SESSION['data']->getDescripcion() != $_POST['txtDescripcion']
                    ? $_POST['txtDescripcion']
                    : $_SESSION['data']->getDescripcion()
            );
            $convocatoria->setDescripcionEn(
                $_SESSION['data']->getDescripcionEn() != $_POST['txtDescripcionen']
                    ? $_POST['txtDescripcionen']
                    : $_SESSION['data']->getDescripcionEn()
            );
            $convocatoria->setDescripcionEn(
                $_SESSION['data']->getDescripcionEn() != $_POST['txtDescripcionen']
                    ? $_POST['txtDescripcionen']
                    : $_SESSION['data']->getDescripcionEn()
            );

            if ($_SESSION['data']->getTieneExamen()) {
                $convocatoria->setTieneExamen(true);
                $convocatoria->setTotalPuntos($_POST['totalPuntos']);
                $convocatoria->setPuntuacionCorte($_POST['puntuacionCorte']);
                $convocatoria->setPuntuacionMaxima($_POST['puntuacionMaxima']);
                $convocatoria->setPuntuacionMaximaMeritos($_POST['puntuacionMaximaMeritos']);
                $convocatoria->setPonderacionExamen($_POST['ponderacionExamen']);
                $convocatoria->setPonderacionMeritos($_POST['ponderacionMeritos']);
            } else {
                $convocatoria->setTieneExamen(false);
                $convocatoria->setTotalPuntos(0);
                $convocatoria->setPuntuacionCorte(0);
                $convocatoria->setPuntuacionMaxima(0);
                $convocatoria->setPuntuacionMaximaMeritos(0);
                $convocatoria->setPonderacionExamen(0);
                $convocatoria->setPonderacionMeritos(0);
            }

            if (isset($_POST['substitute_check'])) {
                $convocatoria->setSustituto($_POST['substitute']);
            } else {
                $convocatoria->setSustituto(null);
            }
			$convocatoria->setPlazaAdjudicada(
                $_SESSION['data']->getPlazaAdjudicada() != $_POST['plazaAdjudicada']
                    ? $_POST['plazaAdjudicada']
                    : $_SESSION['data']->getPlazaAdjudicada()
			);
		} 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 H:i:s', strval($_POST['dtFechaFin']) . ' 23:59:59'
            ));
            $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 new Exception(
                    '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 new Exception(
                        'No se han podido cargar las variables de entorno.'
                    );
                }

                $_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) {
                    unset($retorno);
                } else {
                    if (isset($retorno)) {
                        unset($retorno);
                        $convocatoria = null;
                        return null;
                    }
                }
            }

            // doocumentos especificos
            if (isset($_FILES['flPDFEspecifico'])
                && strlen(trim($_FILES['flPDFEspecifico']['name'])) > 0
            ) {
                $load = new Load();
                if ($load->loadEnv() == null || !isset($_ENV)) {
                    throw new Exception(
                        'No se han podido cargar las variables de entorno.'
                    );
                }

                //subimos el fichero
                $_FILES['flPDFEspecifico']['name'] =
                    clean($_FILES['flPDFEspecifico']['name']);    //limpiamos las rutas
                $convocatoria->setRutaarchivoespecifico('//'
                    . $_ENV['CALL_FILES_DIR']
                    . '/'
                    . clean($convocatoria->getReferencia())
                    . '//'
                    . $_FILES['flPDFEspecifico']['name']);
                $fileOrigen = $_FILES['flPDFEspecifico'];
                $fileDestino = $_SERVER["DOCUMENT_ROOT"] . $_ENV['FILES_DIR']
                    . $convocatoria->getRutaarchivoespecifico();
                include(__DIR__ . "/../Utils/file_uploader.php");

                if (isset($retorno) && $retorno == true) {
                    unset($retorno);
                } else {
                    if (isset($retorno)) {
                        unset($retorno);
                        $convocatoria = null;
                        return null;
                    }
                }
            }


            if (isset($_FILES['flPDFResolucionFinal'])
                && strlen(trim($_FILES['flPDFResolucionFinal']['name'])) > 0
            ) {
                $load = new Load();
                if ($load->loadEnv() == null || !isset($_ENV)) {
                    throw new Exception(
                        '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) {
                    unset($retorno);
                } else {
                    if (isset($retorno)) {
                        unset($retorno);
                        $convocatoria = null;
                        return null;
                    }
                }
            }

            $convocatoria->setUrlweb($_POST['txtWeb']);
            $convocatoria->setUmbraldepuntuacion($_POST['txtUmbradePuntuacion']);
            $convocatoria->setCodigoestadoconvocatoria($_POST['slctEstadoConvocatoria']);
            $convocatoria->setCaducada(
                $convocatoria->getFechafin() <
                $convocatoria->getFechaultimaactualizacion()
            );

            if (isset($_POST['chkbaja'])) {
                $convocatoria->setBaja(true);
            } else {
                $convocatoria->setBaja(false);
            }
            $convocatoria->setDescripcion($_POST['txtDescripcion']);
            $convocatoria->setDescripcionEn($_POST['txtDescripcionen']);
            if (isset($_POST['examen_obligatorio'])) {
                $convocatoria->setTieneExamen(true);
                $convocatoria->setTotalPuntos($_POST['totalPuntos']);
                $convocatoria->setPuntuacionCorte($_POST['puntuacionCorte']);
                $convocatoria->setPuntuacionMaxima($_POST['puntuacionMaxima']);
                $convocatoria->setPuntuacionMaximaMeritos($_POST['puntuacionMaximaMeritos']);
                $convocatoria->setPonderacionExamen($_POST['ponderacionExamen']);
                $convocatoria->setPonderacionMeritos($_POST['ponderacionMeritos']);
            } else {
                $convocatoria->setTieneExamen(false);
                $convocatoria->setTotalPuntos(0);
                $convocatoria->setPuntuacionCorte(0);
                $convocatoria->setPuntuacionMaxima(0);
                $convocatoria->setPuntuacionMaximaMeritos(0);
                $convocatoria->setPonderacionExamen(0);
                $convocatoria->setPonderacionMeritos(0);
            }

            if (isset($_POST['substitute_check'])) {
                $convocatoria->setSustituto($_POST['substitute']);
            }else {
                $convocatoria->setSustituto(null);
            }
			
			if (isset($_POST['plazaAdjudicada'])) {
                $convocatoria->setPlazaAdjudicada($_POST['plazaAdjudicada']);
            } else {
                $convocatoria->setPlazaAdjudicada(null);
            }  
        }
    } catch (Exception $exception) {
        $convocatoria = null;
        echo "construirConvocatoria(): " . $exception->getMessage();
    } finally {
        return $convocatoria;
    }
}

function validarResolucion(): string
{
    /*
        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']);

        if (isset($_POST['chkVisible']) && $_POST['chkVisible'] == true) {
            $rslc->setVisible($_POST['chkVisible']);
        } else {
            $rslc->setVisible(false);
        }


        $datenow = new DateTime('now', new DateTimeZone('Europe/Madrid'));
        $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 new Exception(
                    '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 {
                //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(): string
{
    $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(): string
{
    $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): string
{
    $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 {
        $trbnlcvt = [];

        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();
            }
            if ($rol->getRol() == "Vocal 2" || $rol->getRol() == "Officer 2") {
                $idRolVocal2 = $rol->getIdrol();
            }
            if ($rol->getRol() == "Administrador"
                || $rol->getRol() == "Administrator") {
                $idRolAdmin = $rol->getIdrol();
            }
        }

        $presidente = new DboTribunalconvocatoria();
        $presidente->setCodigousuariowp($idPresidente);
        $presidente->setCodigoconvocatoria($_POST['txtConvocatoria']);
        $presidente->setCodigorol($idRolPte);
        $presidente->setEssuplente(false);
        $presidente->setAsumerolprincipal(false);
        $presidente->setBaja(false);
        if (isset($_POST['chkPresidenteSubs']) && $_POST['chkPresidenteSubs']) {
            $presidente->setEssuplente(true);
        }
        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);
            $presidenteSubs->setEssuplente(false);
        } 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);
        if (isset($_POST['chkSecretarioSubs']) && $_POST['chkSecretarioSubs']) {
            $secretario->setEssuplente(true);
        }
        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->setEssuplente(false);
            $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);
        if (isset($_POST['chkVocal1Subs']) && $_POST['chkVocal1Subs']) {
            $vocal1->setEssuplente(true);
        }
        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->setEssuplente(false);
            $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($idRolVocal2);
            $vocal2->setEssuplente(false);
            $vocal2->setAsumerolprincipal(false);
            $vocal2->setBaja(false);
            if (isset($_POST['chkVocal2Subs']) && $_POST['chkVocal2Subs']) {
                $vocal2->setEssuplente(true);
            }
            array_push($trbnlcvt, $vocal2);

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


        }
        $admins = new DboTribunalconvocatoria();
        $admins->setCodigousuariowp(1);
        $admins->setCodigoconvocatoria($_POST['txtConvocatoria']);
        $admins->setCodigorol($idRolAdmin);
        $admins->setEssuplente(false);
        $admins->setAsumerolprincipal(true);
        $admins->setBaja(false);
        array_push($trbnlcvt, $admins);
    } catch (Exception $exception) {
        $trbnlcvt = null;
        echo "construirTribunal(): " . $exception->getMessage();
    } finally {
        return $trbnlcvt;
    }
}

function construirRequisitoValoracion($req, $eval_pass, $comment)
{
    try {
        $vlc = new DboTribunalvaloracion();

        $vlc->setCodigoconvocatoria($_POST['convocatoria']);
        $vlc->setCodigocandidato($_POST['candidato_id']);

        $vlc->setCodigoconvocatoriarequisito2($req);

        echo ' eval_pass ' . $comment . ' ';

        $boolean_eval_pass = strpos($eval_pass, 'nosuperado') !== false;
        $vlc->setEstasuperado($boolean_eval_pass);
        $vlc->setComentario($comment);

        $datenow = new DateTime('now', new DateTimeZone('Europe/Madrid'));
        $vlc->setFecha($datenow);
        $vlc->setBaja(false);
    } catch (Exception $exception) {
        $vlc = null;
        echo "construirValoracion(): " . $exception->getMessage();
    } finally {
        return $vlc;
    }
}

function clean($string): 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
}
?>