#!/usr/bin/perl # programa - Script que recibe información del form de visitas, para # procesar los datos, ver si son correctos, guardarlos si # lo son, en el fichero $libro, o mandar una página HTML # de error en caso contrario. # Las variables aceptadas son: # - lang (puede ser "es" o "en") # - nombre (nombre de la persona a añadir) # - email (correo electrónico de la persona a añadir) # - edad (edad de la persona a añadir) # - actualiz (si se desea que se envíe un correo electrónico cada # cada vez que se actualice la página) # - comentario (observaciones de la persona) $DIRBASE = "/home/zoso/sopa"; # $DIRBASE = "/home/a2092"; require $DIRBASE . "/cgi-bin/cgi-util.pl"; %in = &get_query; $in{lang} = "es" if (! $in{lang}); $encargado = "a2092\@sopa.dis.ulpgc.es"; $URL = "http://sopa.dis.ulpgc.es/zoso/cgi-bin/"; $path = "$DIRBASE/cgi-docs/"; $nomprog = "newvisit.pl"; $libro = "visitas"; $ulpgc = 0; # Mensajes dependientes del idioma $titulo{es} = "Resultado de añadir al libro de visitas"; $titulo{en} = "Guestbook add result"; $dataerror{es} = "Error en los datos"; $dataerror{en} = "Error with the data"; $msg_error{es} = "El nombre o la edad están vacías, o la dirección correo-e es incorrecta (o hay un fallo en el programa que verifica los datos, claro :-) Rellene el formulario de nuevo, o vuelva a la página principal"; $msg_error{en} = "The name or age are empty, or the e-mail address is incorrect (or my program has some bugs to work out, of course :-) Fill again the form , or go back to the main page"; $mail_error{es} = "Error abriendo fichero del libro de visitas, y también intentando notificar al dueño. Por favor, inténtelo otro día"; $mail_error{en} = "Error opening the guestbook file, and trying to e-mail the owner, too. Please try another day."; $tit_act{es} = "Error abriendo el libro de visitas"; $tit_act{en} = "Error opening the guestbook file"; $msg_act{es} = "Lo siento, no se ha podido actualizar el libro de visitas, pero se guardarán los datos para intentar solucionar el problema más tarde de forma manual. NO hace falta que vuelvas a intentarlo, el libro se actualizará luego, de forma manual"; $msg_act{en} = "Sorry, the guestbook file couldn't be updated, but the data will be saved to try to solve the problem manually. It's NOT necessary for you to try again. The guestbook file will be updated in a few days"; $act{es} = "Se le notifican las actualizaciones"; $act{en} = "Updates are notified"; $gracias{es} = "Gracias por firmar mi libro de visitas"; $gracias{en} = "Thanks for signing my guestbook"; $ok{es} = "Tus datos se han incluido en el libro de visitas satisfactoriamente (espero :-). Puedes ver el libro de visitas\n"; $ok{en} = "Your data has been included in the guestbook (I hope :-). You can see the current one\n"; # Imprimimos la cabecera print "Content-type: text/html\n\n"; print "\n\n"; print "$titulo{$in{lang}}\n\n"; print "\n"; # Primero tenemos que comprobar si la información que nos viene del # form es correcta, para procesarla y saber que página mandar if ($in{email} =~ /^[aA][0-9][0-9][0-9][0-9]$/) { $in{email} .= '@correo.dis.ulpgc.es'; # Añadimos el dominio si es un alumno de la ULPGC y no lo ha puesto $ulpgc = 1; } if ($in{nombre} eq "" || ! ($in{email} =~ /[A-Za-z0-9_.]+\@[A-Za-z0-9_.]+/) || $in{edad} eq "") { # Si sigue habiendo fallos, sacamos la página de error print "

$dataerror{$in{lang}}

\n\n
\n\n"; print "$msgerror{$in{lang}}\n"; } else { # Todo parece estar correcto. Vamos a intentar actualizar los datos, y si no # podemos, damos un mensaje de error if (! open(FICHERO, ">>$path" . "$libro")) { # Si no podemos abrir el fichero, intentamos mandar un mail a # a2092@sopa.dis.ulpgc.es, y si no tendremos que mandar un error if (0 != system "echo \"nombre=$in{nombre}\nemail=$in{email}\nedad=$in{edad}\nactualiz=$in{actualiz}\ncomentario=$in{comentario}\" | mail -s \"Error en el libro de visitas\" $encargado") { print "

Error

\n\n
\n\n"; print "$mail_error{$in{lang}}\n"; print "\n
\n\n"; print "\n
\n"; print "Esteban Manchado 'ZoSo' - a2092\@correo.dis.ulpgc.es\n"; print "\n
\n"; print "\n\n"; exit; } # fin de if (0 != system 'echo "nombre=$in{nombre} (...)"') print "

$tit_act{$in{lang}}

\n"; print "$msg_act{$in{lang}}\n"; print "\n
\n\n"; print "
"; print ""; print "
"; print "\n\n"; exit; } # fin de if (!open(FICHERO (...))) # Llegados a este punto, tenemos que añadir los datos al fichero $in{nombre} =~ s/&/&/g; $in{nombre} =~ s/á/á/g; $in{nombre} =~ s/é/é/g; $in{nombre} =~ s/í/í/g; $in{nombre} =~ s/ó/ó/g; $in{nombre} =~ s/ú/ú/g; $in{nombre} =~ s/Á/Á/g; $in{nombre} =~ s/É/É/g; $in{nombre} =~ s/Í/Í/g; $in{nombre} =~ s/Ó/Ó/g; $in{nombre} =~ s/Ú/Ú/g; $in{nombre} =~ s/¿/¿/g; $in{nombre} =~ s/¡/¡/g; print FICHERO "
  • $in{nombre}, $in{edad} años.
    \n"; $in{comentario} =~ s/&/&/g; $in{comentario} =~ s/á/á/g; $in{comentario} =~ s/é/é/g; $in{comentario} =~ s/í/í/g; $in{comentario} =~ s/ó/ó/g; $in{comentario} =~ s/ú/ú/g; $in{comentario} =~ s/Á/Á/g; $in{comentario} =~ s/É/É/g; $in{comentario} =~ s/Í/Í/g; $in{comentario} =~ s/Ó/Ó/g; $in{comentario} =~ s/Ú/Ú/g; $in{comentario} =~ s/¿/¿/g; $in{comentario} =~ s/¡/¡/g; $in{comentario} =~ s/\r?\n/
    /g; print FICHERO "$in{comentario}"; if ($in{actualiz}) { print FICHERO "
    \n$act{$in{es}}"; } print FICHERO ".
    \n"; close FICHERO; print "

    $gracias{$in{lang}}

    \n"; print "\n
    \n\n"; if ($ulpgc == 1) { print "Como en la dirección de correo has puesto\n"; print "sólo una 'a' y cuatro números, he\n"; print "supuesto que eres de la ULPGC, así que he\n"; print "puesto tu dirección como $in{email}. Si\n"; print "está mal, por favor\n"; print "dímelo.

    \n"; } print "$ok{$in{lang}}"; } # else - if ($in{nombre} eq "" || !($in{email} =~ ... print "\n

    \n"; print "Generado por $nomprog\n"; print "


    \n"; print "
    Esteban Manchado 'ZoSo' - a2092\@correo.dis.ulpgc.es
    \n"; print "\n\n";