function UsuarioNuevo()
{
    global $files_url, $photo_default;
    $user = new Usuario();
    if (($user->dni = filter_input(INPUT_POST, 'dni', FILTER_VALIDATE_INT)) && ($user->nombres = filter_input(INPUT_POST, 'nombres', FILTER_SANITIZE_STRING)) && ($user->apellidos = filter_input(INPUT_POST, 'apellidos', FILTER_SANITIZE_STRING)) && ($user->email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL)) && ($user->pass = filter_input(INPUT_POST, 'pass', FILTER_SANITIZE_STRING)) && ($user->tipo = filter_input(INPUT_POST, 'tipo', FILTER_SANITIZE_STRING))) {
        if ($user->tipo == 'A' || $user->tipo == 'B') {
            $u_aux = new Usuario();
            $u_aux->get('dni', $user->dni);
            if (!$u_aux->md_estado) {
                $u_aux->get('email', $user->email);
                if (!$u_aux->md_estado) {
                    $user->foto = $photo_default;
                    $user->documento = '';
                    $user->set();
                    if ($user->md_estado) {
                        $inv = new Invitacion();
                        $invs = $inv->searchEmail($user->email);
                        foreach ($invs as $key => $val) {
                            $val->idUsuario = $user->idUsuario;
                            $val->edit();
                        }
                        session_start();
                        $_SESSION['Usuario'] = $user->toArray();
                        $mail = new edoMailer();
                        $mail->sendBienvenida($user->toArray());
                        Respoder(true, 'Usuario registrado', $mail->mensaje, '/perfil');
                    } else {
                        Respoder(false, $user->md_mensaje, $user->md_detalle);
                    }
                } else {
                    Respoder(false, 'Este email ya está en uso', null);
                }
            } else {
                Respoder(false, 'Este DNI ya está en uso', null);
            }
        } else {
            Respoder(false, 'Error al recibir los parámetros', null);
        }
    } else {
        Respoder(false, 'Error al recibir los parámetros', null);
    }
}
function CalificarInvitacion()
{
    session_start();
    if (!isset($_SESSION['Usuario'])) {
        Respoder(false, 'Debe iniciar sesión', null);
    }
    if ($_SESSION['Usuario']['tipo'] != 'B') {
        Respoder(false, 'No tiene autorización', null);
    }
    $Invitacion = new Invitacion();
    $Respuestas;
    $Puntajes;
    if (!(($Invitacion->idInvitacion = filter_input(INPUT_POST, 'idInvitacion', FILTER_VALIDATE_INT)) && ($Puntajes = filter_input(INPUT_POST, 'respuestas')))) {
        Respoder(false, 'Error al recibir parámetros', null);
    }
    $Puntajes = json_decode($Puntajes);
    if (is_null($Puntajes)) {
        Respoder(false, 'Error de JSON', 'No se pudo procesar el JSON recibido');
    }
    if (!$Invitacion->get('idInvitacion', $Invitacion->idInvitacion)) {
        Respoder(false, 'No se encontró la invitacion', '');
    }
    $Respuestas = (new Respuesta())->search($Invitacion->idInvitacion);
    if (count($Puntajes) != count($Respuestas)) {
        Respoder(false, 'Cantidades incorrectas', '', $Respuestas);
    }
    $rpp = array();
    foreach ($Puntajes as $keyPunt => $valPunt) {
        $encon = false;
        foreach ($Respuestas as $keyResp => $valResp) {
            if ($valResp->idRespuesta == $valPunt->idRespuesta) {
                $encon = true;
                $valResp->puntaje = $valPunt->puntaje;
                array_push($rpp, $valResp);
                break;
            }
        }
        if (!$encon) {
            Respoder(false, 'No se encontró idRespuesta: ' . $keyPunt, '');
        }
    }
    $acum = 0;
    foreach ($rpp as $key => $value) {
        $acum += $value->puntaje;
        if (!$value->edit()) {
            Respoder(false, 'Error al actualizar Rpta: ' . $value->idRespuesta, '', $value);
        }
    }
    $Invitacion->evaluado = true;
    $Invitacion->puntaje = $acum / count($Respuestas);
    $Invitacion->fchEval = new DateTime();
    if ($Invitacion->edit()) {
        Respoder(true, 'Respuestas calificadas', '');
    } else {
        Respoder(false, 'Error al actualizar invitacion: ', '');
    }
}
function EnviarInvitaciones()
{
    session_start();
    if (!isset($_SESSION['Usuario'])) {
        Respoder(false, 'Debe iniciar sesión', null);
    }
    $entre = new Entrevista();
    if (!($entre->idEntrevista = filter_input(INPUT_POST, 'idEntrevista', FILTER_VALIDATE_INT))) {
        Respoder(false, 'Error al recibir parámetros', null);
    }
    if (!$entre->get($entre->idEntrevista)) {
        Respoder(false, 'No se encontró la entrevista', null);
    }
    if ($entre->idUsuario != $_SESSION['Usuario']['idUsuario']) {
        Respoder(false, 'No está autorizado', null);
    }
    if (!($invitaciones = filter_input(INPUT_POST, 'invitaciones'))) {
        Respoder(false, 'Error al recibir parámetros 2', null);
    }
    $invitaciones = json_decode($invitaciones);
    if (is_null($invitaciones)) {
        Respoder(false, 'Error al recibir invitaciones', null);
    }
    $invError = array();
    $mail = new edoMailer();
    foreach ($invitaciones as $val) {
        $inv = new Invitacion();
        $inv->email = $val->email;
        $inv->nombres = $val->nombres;
        $inv->apellidos = $val->apellidos;
        $inv->idEntrevista = $entre->idEntrevista;
        if (isset($val->idUsuario) && strlen($val->idUsuario) > 0) {
            $inv->idUsuario = $val->idUsuario;
        } else {
            $inv->idUsuario = null;
        }
        if (!$inv->set()) {
            array_push($invError, array('email' => $inv->email, 'error' => $inv->md_mensaje));
        } else {
            $datos = array('email' => $inv->email, 'nombres' => $inv->nombres, 'apellidos' => $inv->apellidos, 'titulo' => $entre->titulo, 'fchInicio' => $entre->fchInicio->format(Entrevista::$fchFtoMail), 'fchFin' => $entre->fchFin->format(Entrevista::$fchFtoMail));
            if (is_null($inv->idUsuario)) {
                $datos['codigo'] = sha1($inv->idInvitacion);
            }
            if (!$mail->sendInvitacion($datos)) {
                array_push($invError, array('email' => $inv->email, 'error' => $mail->mensaje));
            }
        }
    }
    Respoder(true, 'Invitaciones enviadas', null, $invError);
}