<?php
// vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker:

/**
 * Autenticación de usuarios
 *
 * PHP version 5
 *
 * @category  SIVeL
 * @package   SIVeL-pruebas
 * @author    Vladimir Támara <vtamara@pasosdeJesus.org>
 * @copyright 2004 Dominio público. Sin garantías.
 * @license   http://creativecommons.org/licenses/publicdomain/ Dominio Público. Sin garantías.
 * @version   $Id: aut.php,v 1.15 2009/05/03 12:23:21 vtamara Exp $
 * @link      http://sivel.sf.net
 */

/**
 * Autenticación de usuarios
 */
require_once "Auth.php";
require_once "DB.php";

/** Autenticación con base en 
 * http://structio.sourceforge.net/seguidor 
 * que a su vez se basa en
 * http://pear.php.net/manual/en/package.authentication.auth.intro.php
 *
 * @return nada
 */
function loginFunction()
{
    echo "<form method=\"post\" action=\"" . 
        htmlspecialchars($_SERVER['PHP_SELF']) . "\">";
    echo "<table border='0'>";
    echo "<tr><td bgcolor='#c0c0c0' colspan='2'>Autenticación</td></tr>";
    echo "<tr><td>Usuario:</td><td><input type=\"text\" name=\"username\">" .
        "</td></tr>";
    echo "<tr><td>Clave:</td><td><input type=\"password\" name=\"password\">" .
        "<br></td></tr>";
    echo "<tr><td colspan='2' align='center'><input type=\"submit\" " .
        "value=\"Enviar\"></tr></td>";
    echo "</table>";
    echo "</form>";
}

/**
 * Extrae opciones para un usuario.
 *
 * @param string  $usuario Login del usuario
 * @param handle  &$db     Conexión a BD
 * @param array   &$op     Se llena con opciones del usuario.
 * @param integer &$rol    Rol del usuario
 *
 * @return  Nada
 */
function sacaOpciones($usuario, &$db, &$op, &$rol) 
{
    $rol = -1;
    if ($usuario == "sivel-prueba") {
        $rol = 1;
    }
    $q = "SELECT id_opcion FROM opcion_rol " .
        "WHERE id_rol='" . $rol . "';";
    $result = $db->query($q);
    if (PEAR::isError($result)) {
        die("No se encontró el rol del usuario");
    }
    $row = array();
    while ($result->fetchInto($row)) {
        $op[] = $row[0];
    }   
}

/** 
 * Nombre de sesión de mentiras 
 *
 * @return Nombre de la sesión
 */
function nomSesion() 
{
    return "PHPSESSID";
}


/** 
 * Autentica de mentiras 
 *
 * @param string  $dsn      URL de base de datos
 * @param string  $accno    Mensaje de error por mostrar si no autentica
 * @param string  &$usuario Retorna en esta variable el login del usuario
 * @param integer $opcion   Código de la opción del menu que el usuario desea 
 *
 * @return handle Conexión a base
 */
function autenticaUsuario($dsn,  $accno, &$usuario, $opcion) 
{
    $options = array();
    $db =& DB::connect($dsn, $options);
    if (PEAR::isError($db)) {
        die($db->getMessage());
    }
    $usuario = 'sivel-prueba';
    if (!isset($_SESSION['opciones']) 
        || !isset($_SESSION['id_funcionario']) ) {
        $op = array();
        $rol = -1;
        sacaOpciones($usuario, $db, $op, $rol);
        $_SESSION['opciones'] = $op;
        $q = "SELECT id FROM funcionario " .
        "WHERE nombre='" . $usuario . "';";
        $result = $db->query($q);
        if (PEAR::isError($result)) {
            die($result->getMessage());
        }
        $row = array();
        if ($result->fetchInto($row)) {
                $idf = $row[0];
        }
        $_SESSION['id_funcionario'] = $idf;
        if (in_array($opcion, $_SESSION['opciones'])) {
            return $db;
        }
        die($accno);
    }
}


/**
 * Cierra sesión de mentiras
 *
 * @param string $dsn URL de base de datos
 *
 * @return nada
 */
function cierraSesion($dsn) 
{
    unset($_SESSION);
}

?>
