- 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).
--- /dev/null
+<?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
--- /dev/null
+<?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
//
// $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
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))
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;
+}
{
}
+ 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
//
// $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
//
// $Id$
+require_once 'lib/Usuario.php';
+
// Arranca la sesión
session_start();
+//TODO - verificar si existe el id y reconstruirlo
function pagina_cabecera($titulo = '')
{
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
--- /dev/null
+<?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