]> git.llucax.com Git - z.facultad/75.43/tp1.git/commitdiff
Varias cosas:
authorLeandro Lucarella <llucax@gmail.com>
Sun, 1 May 2005 04:52:41 +0000 (04:52 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Sun, 1 May 2005 04:52:41 +0000 (04:52 +0000)
- Se ponen prefijos admin_ en los campos de formulario.
- Se agregan más reglas de validación en javascript (check_email,
  check_min_max_cant, check_iguales).
- Se traduce las reglas de validación a PHP en lib/validacion.php para poder
  validar lo mismo en el cliente y en el servidor.
- Se pasa el index.php a admin.login.php y en index.php se hace un include de
  éste. Así queda bien claro que el index.php es parte del módulo de
  administración.
- Se agrega admin.asociarse.php que implementa parcialmente la registración de
  nuevos usuarios (falta el alta real en los archivos, las pantallas y
  formularios están casi listos).
- Se agrega función ok($msg) a lib/pagina.php para mostrar mensajes de
  confirmación (estilo "Registración exitosa").
- Se agregan algunos métodos a Usuario necesarios para el módulo de
  administración (checkAdmins() y asociar(), ambos de clase).

src/admin.asociarse.php [new file with mode: 0644]
src/admin.login.php [new file with mode: 0644]
src/index.php
src/lib.js
src/lib/Usuario.php
src/lib/admin.forms.php
src/lib/pagina.php
src/lib/validacion.php [new file with mode: 0644]

diff --git a/src/admin.asociarse.php b/src/admin.asociarse.php
new file mode 100644 (file)
index 0000000..c3af685
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+// vim: set binary noeol et sw=4 sts=4 :
+// Grupo 10
+//
+// Lucarella, Schein, Arena
+//
+// Creado: Leandro Lucarella (sáb abr 30 20:21:30 ART 2005)
+//
+// $Id$
+
+require_once 'lib/pagina.php';
+require_once 'lib/validacion.php';
+require_once 'lib/Usuario.php';
+require_once 'lib/admin.forms.php';
+
+pagina_cabecera('Ingreso');
+
+// Si me llegó el form completo
+if (isset($_POST['admin_id']) and isset($_POST['admin_pass1'])
+        and isset($_POST['admin_pass1']) and isset($_POST['admin_email']))
+{
+    // Chequeamos si debe ser administrador
+    $admin = Usuario::checkAdmins() ? false : true;
+    if (check_min_max_cant($_POST['admin_pass1'], 'Contraseña', 5, 20)
+            and check_min_max_cant($_POST['admin_pass2'], 'Contraseña', 5, 20)
+            and check_iguales($_POST['admin_pass1'], $_POST['admin_pass2'],
+                'Contraseña') and check_email($_POST['admin_email'], 'E-Mail'))
+    {
+        if ($usr = Usuario::asociar($_POST['admin_id'],
+                $_POST['admin_pass1'], $_POST['admin_email'], $admin))
+        {
+            error($usr); // Hubo un error al trata de asociar al usuario.
+            admin_form_asociarse($admin, $_POST['admin_id'], $_POST['admin_email']);
+        }
+        else // Se asoció bien el usuario.
+        {
+            ok('Usuario asociado con éxito, ahora debe '
+                .'<a href="admin.login.php">Ingresar al sistema</a>.');
+        }
+    }
+    else // No validan algunos campos, muestro el formulario de nuevo
+    {
+        admin_form_asociarse($admin, $_POST['admin_id'], $_POST['admin_email']);
+    }
+}
+else // Si no me viene el form, lo hago loguearse
+{
+    admin_form_asociarse(!Usuario::checkAdmins());
+}
+
+pagina_pie('Leandro Lucarella', 'llucare@fi.uba.ar');
+
+?>
\ No newline at end of file
diff --git a/src/admin.login.php b/src/admin.login.php
new file mode 100644 (file)
index 0000000..5b39ad3
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+// vim: set binary noeol et sw=4 sts=4 :
+// Grupo 10
+//
+// Lucarella, Schein, Arena
+//
+// Creado: Leandro Lucarella (sáb abr 30 20:21:30 ART 2005)
+//
+// $Id$
+
+require_once 'lib/pagina.php';
+require_once 'lib/Usuario.php';
+require_once 'lib/admin.forms.php';
+
+pagina_cabecera('Ingreso');
+
+// Si no están configurados todos los administradores, pido que se ingresen.
+if (!Usuario::checkAdmins())
+{
+    if (isset($_POST['admin']) and isset($_POST['user']))
+    {
+        // TODO hacer el login
+        // Si falla el login, muestro error y form de nuevo
+        error('Usuario o contraseña incorrecta, intente nuevamente.');
+        admin_form_login($_POST['user']);
+    }
+    else // Si no me viene el form, lo hago loguearse
+    {
+        admin_form_login();
+    }
+}
+// Si me llegó el form
+elseif (isset($_POST['admin_id']) and isset($_POST['admin_pass']))
+{
+    // TODO hacer el login
+    // Si falla el login, muestro error y form de nuevo
+    error('Usuario o contraseña incorrecta, intente nuevamente.');
+    admin_form_login($_POST['admin_id']);
+}
+else // Si no me viene el form, lo hago loguearse
+{
+    admin_form_login();
+}
+
+pagina_pie('Leandro Lucarella', 'llucare@fi.uba.ar');
+
+?>
\ No newline at end of file
index b7dfe858b950b417cdb3498dc42bf27cdb2a862a..fbc4805c8b4ce63e8c986a6f1b798abc6273a436 100644 (file)
@@ -8,24 +8,6 @@
 //
 // $Id$
 
-require_once 'lib/pagina.php';
-require_once 'lib/admin.forms.php';
-
-pagina_cabecera('Ingreso');
-
-// Si me llegó el form
-if (@$_POST['user'] and @$_POST['user'])
-{
-    // TODO hacer el login
-    // Si falla el login, muestro error y form de nuevo
-    error('Usuario o contraseña incorrecta, intente nuevamente.');
-    admin_form_login($_POST['user']);
-}
-else // Si no me viene el form, lo hago loguearse
-{
-    admin_form_login();
-}
-
-pagina_pie('Leandro Lucarella', 'llucare@fi.uba.ar');
+include 'admin.login.php';
 
 ?>
\ No newline at end of file
index 6879d47991478b5fd550d77072dc6257fb5c8b6f..f774bec226edc6b9c96cb7120a215d5642e10dcd 100644 (file)
@@ -13,6 +13,23 @@ function vacio(f)
     return false;
 }
 
+// Devuelve 1 si el campo f tiene más de max caracteres, -1 si tiene menos
+// de min caracteres y 0 si está entre max y min. Si max o min es negativo,
+// no se chequea por un máximo o mínimo respectivamente.
+function min_max_cant(f, min, max)
+{
+    if (min >= 0 && f.value.length < min) return -1;
+    if (max >= 0 && f.value.length > max) return 1;
+    return 0;
+}
+
+function es_email(f)
+{
+    if (f.value.match(/^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/g)) return true;
+    return false;
+}
+
+// Verifica si el campo f está vacío, dando un error con el nombre n si lo está.
 function check_vacio(f, n)
 {
     if (vacio(f))
@@ -22,4 +39,48 @@ function check_vacio(f, n)
         return false;
     }
     return true;
-}
\ No newline at end of file
+}
+
+// Verifica si el campo f tiene entre max y min caracteres (ver min_max_cant).
+// Si hay un error se usa el nombre de campo n para el mensaje.
+function check_min_max_cant(f, n, min, max)
+{
+    switch (min_max_cant(f, min, max))
+    {
+        case 1:
+            alert('El campo ' + n + ' debe tener a lo sumo ' + max + ' caracteres!');
+            f.focus();
+            return false;
+        case -1:
+            alert('El campo ' + n + ' debe tener al menos ' + min + ' caracteres!');
+            f.focus();
+            return false;
+    }
+    return true;
+}
+
+// Verifica si los campos f1 y f2 son iguales. Si no lo son se usa el nombrei
+// n para el mensaje de error.
+function check_iguales(f1, f2, n)
+{
+    if (f1.value != f2.value)
+    {
+        alert('No coinciden los valores del campo ' + n + '!');
+        f1.focus();
+        return false;
+    }
+    return true;
+}
+
+// Verifica si los campos f1 y f2 son iguales. Si no lo son se usa el nombrei
+// n para el mensaje de error.
+function check_email(f, n)
+{
+    if (!es_email(f))
+    {
+        alert(f.value + ' no es una dirección de e-mail válida!');
+        f.focus();
+        return false;
+    }
+    return true;
+}
index d3092856caf82cfa49bf75b257b27431fdb47386..f0e9ff177ce6cdb441e09936b9f96fc3934c8d80 100644 (file)
@@ -59,6 +59,51 @@ class Usuario
     {
     }
 
+    function cargar($id)
+    {
+    }
+
+    /**
+     * Chequea si existen 2 admins.
+     * @return string true si existen 2 admins, false de otra forma.
+     * @static
+     */
+    function checkAdmins()
+    {
+        $admins = @file('data/admins.txt');
+        if (count($admins) < 2) return false;
+        return true;
+    }
+
+    /**
+     * Asocia a un integrante del grupo.
+     * @return mixed Si hubo error, retorna un string con el error, si no retorna ''.
+     * @static
+     */
+    function asociar($id, $email, $admin = false)
+    {
+        // TODO lo mismo para asesores
+        if (($f = fopen('data/int_2005.txt', 'r')) === false)
+        {
+            return 'Error al abrir archivo de integrantes!!!';
+        }
+        while (!feof($f))
+        {
+            $int = fgetcsv($f, 4096);
+            if ($int[0] == $id) break;
+        }
+        if ($int[0] != $id)
+        {
+            return 'El número de registro no existe, ese usuario no se puede asociar al grupo!';
+        }
+        if ($admin and Usuario::checkAdmins())
+        {
+            return 'Ya hay 2 administradores en el sistema.';
+        }
+        return 'FALTA IMPLEMENTAR EL ALTA!!!';
+        return '';
+    }
+
 }
 
 ?>
\ No newline at end of file
index 919fc758c831ff03900c5f856b317fb6d6d75062..5f167e3e4e26295878e806e22df2ad11ab86ede2 100644 (file)
@@ -8,26 +8,65 @@
 //
 // $Id$
 
-function admin_form_login($user = '')
+function admin_form_login($id = '')
 {
 ?>
         <form name="admin_login" action="<?php echo $_SERVER['PHP_SELF'] ?>"
-                method="post" onSubmit="return validar(this);">
+                method="post" onSubmit="return admin_validar_login(this);">
             <script type="text/javascript" language="JavaScript">
                 <!--
-                function validar(f)
+                function admin_validar_login(f)
                 {
-                    if (!check_vacio(f.user, 'Usuario')) return false;
-                    if (!check_vacio(f.pass, 'Contraseña')) return false;
+                    if (!check_vacio(f.admin_id, 'Nro Registro')) return false;
+                    if (!check_vacio(f.admin_pass, 'Contraseña')) return false;
                     return true;
                 }
                 -->
             </script>
             <p>
                 Por favor identifíquese para ingresar en el sistema:<br />
-                Usuario: <input type="text" name="user" value="<?php echo $user ?>" /><br />
-                Contraseña: <input type="password" name="pass" /><br />
-                <input type="submit" value="Ingresar" />
+                Nro Registro: <input type="text" name="admin_id" value="<?php echo $id ?>" /><br />
+                Contraseña: <input type="password" name="admin_pass" /><br />
+                <input type="submit" value="Ingresar" /><br />
+                <a href="admin.asociarse.php">Asociarse</a>
+            </p>
+        </form>
+<?php
+}
+
+function admin_form_asociarse($admin = false, $id = '', $email = '')
+{
+?>
+        <form name="admin_asociarse" action="<?php echo $_SERVER['PHP_SELF'] ?>"
+                method="post" onSubmit="return admin_validar_asociarse(this);">
+            <script type="text/javascript" language="JavaScript">
+                <!--
+                function admin_validar_asociarse(f)
+                {
+                    if (!check_vacio(f.admin_id, 'Nro Registro')) return false;
+                    if (!check_min_max_cant(f.admin_pass1, 'Contraseña', 5, 20)) return false;
+                    if (!check_min_max_cant(f.admin_pass2, 'Contraseña', 5, 20)) return false;
+                    if (!check_iguales(f.admin_pass1, f.admin_pass2, 'Contraseña')) return false;
+                    if (!check_vacio(f.admin_email, 'E-Mail')) return false;
+                    if (!check_email(f.admin_email, 'E-Mail')) return false;
+                    return true;
+                }
+                -->
+            </script>
+            <p>
+                Por favor, complete el formulario para asociarse al grupo:<br />
+                <?php if ($admin) { ?>
+                <p style="color: navy; text-weight: bold">
+                    El sistema aún no tiene 2 administradores, este usuario
+                    será administrador del sistema.
+                </p>
+                <?php } ?>
+                Nro Registro: <input type="text" name="admin_id" value="<?php echo $id ?>" /><br />
+                Contraseña (repítala 2 veces):  <input type="password" name="admin_pass1" />
+                                                <input type="password" name="admin_pass2" /><br />
+                E-Mail: <input type="text" name="admin_email" value="<?php echo $email ?>" /><br />
+                <input type="submit" value="Asociarse" /><br />
+                <a href="admin.login.php">Ingresar</a>
             </p>
         </form>
 <?php
index fbfa8cad6f4b8e9e8238296f2b82ecab9e6f6e30..1fbb194c009c9f3232fab1c0e0f1947b10f638b0 100644 (file)
@@ -8,8 +8,11 @@
 //
 // $Id$
 
+require_once 'lib/Usuario.php';
+
 // Arranca la sesión
 session_start();
+//TODO - verificar si existe el id y reconstruirlo
 
 function pagina_cabecera($titulo = '')
 {
@@ -45,4 +48,9 @@ function error($msg)
     printf('<p style="color: red">%s</p>', $msg);
 }
 
+function ok($msg)
+{
+    printf('<p style="color: green">%s</p>', $msg);
+}
+
 ?>
\ No newline at end of file
diff --git a/src/lib/validacion.php b/src/lib/validacion.php
new file mode 100644 (file)
index 0000000..c15a504
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+// vim: set binary noeol et sw=4 sts=4 :
+// Grupo 10
+//
+// Lucarella, Schein, Arena
+//
+// Creado: Leandro Lucarella (dom may  1 00:46:42 ART 2005)
+//
+// $Id$
+
+require_once 'lib/pagina.php';
+
+// Devuelve 1 si el campo f tiene más de max caracteres, -1 si tiene menos
+// de min caracteres y 0 si está entre max y min. Si max o min es negativo,
+// no se chequea por un máximo o mínimo respectivamente.
+function min_max_cant($f, $min, $max)
+{
+    if ($min >= 0 && strlen($f) < $min) return -1;
+    if ($max >= 0 && strlen($f) > $max) return 1;
+    return 0;
+}
+
+function es_email($f)
+{
+    if (preg_match('/^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/', $f)) return true;
+    return false;
+}
+
+// Verifica si el campo f está vacío, dando un error con el nombre n si lo está.
+function check_vacio($f, $n)
+{
+    if (!trim($f))
+    {
+        error("Falta ingresar el campo $n!");
+        return false;
+    }
+    return true;
+}
+
+// Verifica si el campo f tiene entre max y min caracteres (ver min_max_cant).
+// Si hay un error se usa el nombre de campo n para el mensaje.
+function check_min_max_cant($f, $n, $min, $max)
+{
+    switch (min_max_cant($f, $min, $max))
+    {
+        case 1:
+            error("El campo $n debe tener a lo sumo $max caracteres!");
+            return false;
+        case -1:
+            error("El campo $n debe tener al menos $min caracteres!");
+            return false;
+    }
+    return true;
+}
+
+// Verifica si los campos f1 y f2 son iguales. Si no lo son se usa el nombrei
+// n para el mensaje de error.
+function check_iguales($f1, $f2, $n)
+{
+    if ($f1 != $f2)
+    {
+        error("No coinciden los valores del campo $n!");
+        return false;
+    }
+    return true;
+}
+
+// Verifica si los campos f1 y f2 son iguales. Si no lo son se usa el nombrei
+// n para el mensaje de error.
+function check_email($f, $n)
+{
+    if (!es_email($f))
+    {
+        error("$f no es una dirección de e-mail válida!");
+        return false;
+    }
+    return true;
+}
+
+?>
\ No newline at end of file