~;
}
# End of user-configurable variables. You should not edit anything past this line.
# The following variable defines any special HTML code that you want to place in
# between the and tags on each page. This could include meta tags
# or JavaScript, but in most cases, you'll probably just want to leave this set
# equal to "". Be sure to put a backslash in front of any quotation marks that
# appear inside of your header code, and in front of the @ symbol anywhere that
# it appears.
$head_code = "";
# The following variable defines the background color of all pages.
$bgcolor = "#ffffff";
# The following variable defines the background graphic (if any) to be used on
# all pages.
$background = "";
# The following variable defines the default text color.
$text_color = "#000000";
# The following variable defines the color for hypertext links.
$link_color = "#000000";
# The following variable defines the color for visited links.
$vlink_color = "#000000";
# The following variable defines the color for active links.
$alink_color = "#000000";
# The following variable defines the HTML that will appear in the upper left hand
# corner of the pages. Please begin your HTML code on the
# line after the <
END_OF_HTML
# The following subroutine (pagesetup) defines the HTML that will appear at
# the beginning of every page created by this program. You should modify
# only the text in between the "print qq~" and the "~;" statements.
sub pagesetup
{
local ($title) = @_;
print qq~
$title
$head_code
~;
}
# The following subroutine (pageclose) defines the HTML that will appear
# at the end of every page created by this program. You should modify
# only the text in between the "print qq~" and the "~;" statements.
sub pageclose
{
print qq~
$footer
~;
}
########################################################################
sub print_header {
print "Content-type: text/html\n\n";
}
#######################################################################
# Read and Parse Form Data #
#######################################################################
# Get the input
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
# Split the name-value pairs
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
# Un-Webify plus signs and %-encoding
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s///g;
if ($allow_html != 1) {
$value =~ s/<([^>]|\n)*>//g;
}
else {
unless ($name eq 'body') {
$value =~ s/<([^>]|\n)*>//g;
}
}
$in{$name} = $value;
}
$current_date = &get_date;
&get_required_files;
if (($in{'add_item_button'} ne "") || ($ENV{'QUERY_STRING'} =~ /place_ads/))
{
&print_header;
&pagesetup("Post Classified Ad Form");
&generic_form_header;
&add_entry_form;
&pageclose;
exit;
}
elsif ($in{'post_ad_button'} ne "") {
&print_header;
&post_ad;
}
elsif (($in{'delete_item_button'} ne "") || ($ENV{'QUERY_STRING'} =~ /delete_ads/))
{
&print_header;
&pagesetup("Delete Classified Ad Form");
&generic_form_header;
&delete_search_form;
&pageclose;
exit;
}
elsif ($in{'delete_button'} ne "") {
&print_header;
&delete;
}
elsif (($in{'admin_button'} ne "") || ($ENV{'QUERY_STRING'} =~ /admin/))
{
&print_header;
&pagesetup("Admin Logon");
&generic_form_header;
&delete_all_form;
&pageclose;
exit;
}
elsif ($in{'delete_all_button'} ne "") {
&print_header;
&delete_all;
}
elsif ($in{'view_ads_button'} ne "") {
&view_ads;
}
else {
&print_header;
&pagesetup;
&display_frontpage;
&pageclose;
}
sub view_ads {
if ($in{'category'} eq "") {
&print_header;
&category_error;
}
if (-e "$classdir/$in{'category'}.html") {
# print "\n";
print "Categoría: $htmldir/$in{'category'}.html\n\n";
}
else {
&print_header;
&no_ads_message;
}
exit;
}
sub no_ads_message
{
&pagesetup("No se encontraron resultados");
print qq~
No se encontraron resultados
Lo lamentamos, pero en este momento no hay avisos en esta categoría. Por favor regrese e intente en otra categoría.
~;
&pageclose;
}
sub add_entry_form {
print qq~
Información de contacto
Por favor ingrese la siguiente información de contacto. Los campos requeridos estan marcados por *.
Su Nombre*
Dirección
Ciudad
Estado/Provincia
Código Postal
Pais
Número de Teléfono
Dirección de E-mail*
URL de su web
Marque aquí si Usted quiere mostrar su dirección postal y su número de teléfono en su aviso
Su Aviso
Por favor complete la información de su aviso. Los campos requeridos están marcados por *.
Categorías*
Por favor siga las siguientes reglas para no ser expulsado!
1)Ud. podrá colocar su aviso en una sola categoría.
2)Si no encuentra la categoría adecuada llene el campo que se encuentra
al pie solicitando la categoría que corresponda a su aviso.
3)Todos sus datos llegan a nosotros inmediatamente después que Ud. coloca
el aviso, si no obedece estas reglas será expulsado y su IP bloqueada.
Por favor marque la categoría en la que desea agregar su aviso.
Si ninguna de las categorías es adecuada para su aviso, qué categorías le gustaría que agregaramos?
Título*
Texto de su aviso (HTML no está permitido. Presione ENTER una vez para cambiar de línea, o dos veces para comenzar un nuevo párrafo.)*
~;
}
sub post_ad {
$counter = 0;
if (($in{'name'} eq "") || ($in{'email'} eq "") || ($in{'category'} eq "") || ($in{'caption'} eq "") || ($in{'text'} eq "")) {
&required_error;
}
@fields = split (/\|/, $in{'category'});
$long_category_name = $fields[0];
$short_category_name = $fields[1];
$in{'text'} =~ s/\n/ /g;
# Lock the file for security so the file is not damaged if more than one user tries to access it at the same time.
$quit = 0;
while ($quit != 1) {
if (-e "$classdir/$short_category_name.lock") {
# The file exists, time to take a nap
sleep(1);
}
else {
# Create the lock file, thereby locking the Classified Ad file
open (LOCK,">$classdir/$short_category_name.lock");
close LOCK;
}
# Open the data file to read the number of the last post
open (ADFILE, "$classdir/ads.counter");
$old_counter = ;
# chop $old_counter;
# Update the Ad Number by one
$old_counter++;
$new_counter = $old_counter;
# Rewrite the data file
open (ADFILE, ">$classdir/ads.counter");
print ADFILE "$new_counter";
close(ADFILE);
$password = $new_counter * $password_multiplier;
# If it doesn't already exist, create the HTML file where the ads will be
# stored for this category
unless (-e "$classdir/$short_category_name.html") {
open (HTMLFILE,"+>$classdir/$short_category_name.html");
&print_default_html;
close (HTMLFILE);
}
# Append the user's ad and description to the ad file
open(ADFILE,"$classdir/$short_category_name.html") || die $!;
@main = ;
close(ADFILE);
open(ADFILE,">$classdir/$short_category_name.html") || die $!;
foreach $main_line (@main) {
if ($main_line =~ //) {
print ADFILE "\n";
print ADFILE "\n";
print ADFILE qq~
\n
~;
print ADFILE "\n";
}
else {
print ADFILE "$main_line";
}
}
# unlock the lock file
unlink("$classdir/$short_category_name.lock");
if (($reply_user eq "on") && ($sendmail ne "")) {
open( MAIL, "|$sendmail -t " )
|| die "can't open sendmail: $email: $!\n";
print MAIL "To: $in{'email'}\n";
print MAIL "From: $master_admin_email_address\n";
print MAIL "Subject: $sitename Classified Ads\n";
print MAIL "Reply-to: $master_admin_email_address\n\n";
print MAIL "Muchas gracias por agregar su aviso en la categoría $long_category_name de los casificados de $sitename . Su aviso ha sido agregado y se verá de la siguiente manera:\n\n";
print MAIL "Número de aviso: $new_counter\n";
print MAIL "Tema: $in{'caption'}\n";
print MAIL "Fecha: $current_date\n";
print MAIL "Responder a: $in{'name'} at $in{'email'}\n";
print MAIL "Texto del Aviso: $in{'text'}\n";
print MAIL "URL (si corresponde): $in{'url'}\n\n";
print MAIL "Usted puede regresar en cualquier momento y borrar su aviso si es necesario. Esperamos que los Clasificados de $sitename le sean útiles y regrese pronto.
A su Aviso le ha sido asignada una clave especial para editarlo. Por favor tome nota de su Número de Aviso y su Clave para su referencia en el futuro. Los necesitará si Usted alguna vez desea borrar su Aviso. El Número y Clave para su Aviso son los siguientes:
Número de Aviso: $new_counter
Clave: $password
Tenga en cuenta que:
1) Ud. podrá colocar su aviso en una sola categoría.
2) Elija la categoría más apropiada para publicar su aviso, no publique el mismo aviso en diferentes categorias, nos damos cuenta y los borramos.
3) Si no encuentra la categoría adecuada llene el campo que se encuentra al pie solicitando la categoría que corresponda al tipo de actividad que desempeña.
4) Todos sus datos llegan a nosotros inmediatamente después que Ud. coloca el aviso, si no obedece estas reglas será expulsado, su IP bloqueada y denunciado en su servidor y/o a la empresa para la que ud. trajaba.
Si Usted NO ha agregado un Aviso Clasificado en $sitename y cree que ha recibido este email por error, por favor acepte nuestras disculpas y notifíquenos inmediatamente. Como medida de seguridad, Usted está recibiendo este mensaje porque alguien ha usado su dirección email cuando agregó un aviso clasificado en los Avisos Clasificados de $sitename .\n\n";
print MAIL "Sinceramente,\n\n";
print MAIL "$admin_name, Webmaster\n";
print MAIL "$sitename\n";
print MAIL "$siteurl\n";
print MAIL "$slogan\n";
close(MAIL);
}
if (($master_admin_email_address ne "") && ($notify_add eq "on") && ($sendmail ne ""))
{
open( MAIL, "|$sendmail -t " )
|| die "can't open sendmail notify: $master_admin_email_address: $!\n";
print MAIL "To: $master_admin_email_address\n";
print MAIL "From: $master_admin_email_address\n";
print MAIL "Subject: Nuevo Aviso Clasificado\n";
print MAIL "El siguiente aviso clasificado fué agregado en la categoría $long_category_name de $sitename por $in{'name'}:\n\n";
print MAIL "Número de Aviso: $new_counter\n";
print MAIL "Clave: $password\n";
print MAIL "Tema: $in{'caption'}\n";
print MAIL "Fecha: $current_date\n";
print MAIL "Responder a: $in{'name'} at $in{'email'}\n";
print MAIL "Texto del Aviso: $in{'text'}\n";
print MAIL "URL (si corresponde): $in{'url'}\n\n";
print MAIL "Recomendaron crear las siguientes categorías (estará en blanco si no hay recomendaciones): $in{'category_wanted'}";
close(MAIL);
}
&successful_addition_message;
$quit = 1;
}
} # End of sub post_ad
sub successful_addition_message
{
&pagesetup("Su Aviso ha sido agregado exitosamente!");
print qq~
Su Aviso ha sido agregado exitosamente!
A su Aviso le ha sido asignada una clave especial para editarlo. Por favor tome nota de su Número de Aviso y su Clave para su referencia en el futuro. Los necesitará si Usted alguna vez desea borrar su Aviso. El Número y Clave para su Aviso son los siguientes:
Aviso Número: $new_counter
Clave: $password
~;
&pageclose;
}
sub required_error
{
&pagesetup("Campos en blanco");
print qq~
Campos en blanco
\n
Lo sentimos, pero no ha ingresado información en un campo requerido. Todos los campos deben ser completados. Por favor regrese y asegúrese de haber completado todos los campos requeridos. Gracias.
~;
&pageclose;
exit;
}
sub delete_search_form {
print qq~
Borrar su Aviso
Para borrar su Aviso, por favor complete todos los campos en la siguiente forma y haga click en el botón "Borrar este Aviso". Para poder borrarlo, Usted debe seleccionar la categoría en la que se encuantra el aviso e ingresar su nombre y la dirección email exactamente como aparece en su aviso. Usted también deberá ingresar el número de aviso y la clave que le fué enviada después de publicar el aviso. Si el formulario no es completado completa y adecuadamente, su aviso no será borrado.
Información del Aviso
Por favor seleccione la categoría donde se encuentra su aviso:
Número de Aviso
Clave
~;
}
sub delete {
if (($in{'addno'} eq "") || ($in{'password'} eq "") || ($in{'category'} eq "")) {
&required_error;
}
unless (-e "$classdir/$in{'category'}.html") {
&no_ads_message;
exit;
}
# Lock the file for security so the file is not damaged if more than one user tries to access it at the same time.
$quit = 0;
while ($quit != 1) {
if (-e "$classdir/$in{'category'}.lock") {
# The file exists, time to take a nap
sleep(1);
}
else {
# Create the lock file, thereby locking the Classified Ad file
open (LOCK,">$classdir/$in{'category'}.lock");
close LOCK;
}
# Delete the user's ad and description from the ad file
open(ADFILE,"$classdir/$in{'category'}.html") || die $!;
@main = ;
close(ADFILE);
$ad_to_delete = "0";
$deleted_ad_found = "0";
open(ADFILE,">$classdir/$in{'category'}.html") || die $!;
foreach $main_line (@main) {
if ($main_line =~ //) {
$ad_to_delete = "0";
}
}
else {
print ADFILE "$main_line";
}
}
close(ADFILE);
# unlock the lock file
unlink("$classdir/$in{'category'}.lock");
if ($incorrect_password eq "1"){
&password_error;
}
elsif ($deleted_ad_found eq "0"){
&unsuccessful_modification_message;
}
else {
&successful_deletion_message;
if (($master_admin_email_address ne "") && ($notify_delete eq "on") && ($sendmail ne ""))
{
open( MAIL, "|$sendmail -t " )
|| die "can't open sendmail notify: $master_admin_email_address: $!\n";
print MAIL "To: $master_admin_email_address\n";
print MAIL "From: $master_admin_email_address\n";
print MAIL "Subject: Classified Ad Deleted\n";
print MAIL "Reply-to: $in{'email'}\n\n";
print MAIL "Aviso número $in{'addno'} fué borrado de la categoría $in{'category'} de los Clasificados de $sitename por $in{'name'}.\n\n";
close(MAIL);
}
}
$quit = 1;
} # End of while ($quit != 1)
exit;
}
sub password_error
{
&pagesetup("Error: clave incorrecta");
print qq~
Error: clave incorrecta
\n
Lo sentimos, pero Usted no ha ingresado la clave correcta. Por favor Regrese y asegúrese de ingresar la Clave correcta. Gracias.
~;
&pageclose;
}
sub unsuccessful_modification_message
{
&pagesetup("Error: Aviso no encontrado");
print qq~
Error: Aviso no encontrado
El aviso que seleccionó no fué encontrado. Por favor asegúrese haber ingresado su nombre, dirección email, y número de aviso correctamente en el formulario para borrar avisos. Muchas Gracias.~;
&pageclose;
}
sub successful_deletion_message
{
&pagesetup("Exitoso: Su Aviso ha sido exitosamente borrado");
print qq~
El aviso que Usted seleccionó ha sido borrado de los Clasificados!
El siguiente Aviso fue borrado:
$deleted_ad
~;
&pageclose;
}
sub delete_all_form {
print qq~
Borrar Todos los Avisos de una Categoría
Si Usted es el Administrador, puede borrar todos los avisos en una categoría utilizando la siguiente forma. Necesitará su clave administrativa para hacerlo. Por favor seleccione la categoría que desea borrar, ingrese su clave administrativa en el siguiente formulario y presione el botón Borrar Todos los Avisos.
Información del Aviso
Por favor seleccione la Categoría que desea borrar:
Clave Administrativa
~;
}
sub delete_all {
if ($in{'category'} eq "") {
&required_error;
}
unless ($in{'password'} eq "$admin_password") {
&admin_password_error;
}
unless (-e "$classdir/$in{'category'}.html") {
&no_ads_message;
exit;
}
unlink("$classdir/$in{'category'}.html");
&pagesetup("Exitoso: Todos los Avisos exitosamente borrados");
print qq~
Avisos borrados
Todos los Avisos de la Categoría $in{'category'} han sido borrados.
~;
&pageclose;
if (($master_admin_email_address ne "") && ($notify_delete_all eq "on") && ($sendmail ne ""))
{
open( MAIL, "|$sendmail -t " )
|| die "can't open sendmail notify: $master_admin_email_address: $!\n";
print MAIL "To: $master_admin_email_address\n";
print MAIL "From: $master_admin_email_address\n";
print MAIL "Subject: Avisos clasificados borrados\n";
print MAIL "Esta es una simple notofocación de que todos los avisos en la categoría $in{'category'} de los Clasificados de $sitename han sido borrados. si Usted no ha realizado esta acción, entonces alguien ha obtenido su Clave Administrativa y ha borrado los avisos de su site.\n\n";
close(MAIL);
}
exit;
}
sub display_frontpage
{
print qq~
Bienvenido a los Avisos Clasificados de $sitename! Para ver los avisos, elija una Categoría. Las categorías que no tienen un hypervínculo no contienen avisos en ellas. Usted tambien puede elejir una de las opciones en el menú de la izquierda.