#!/usr/bin/perl
use CGI qw/:standard/;
use CGI::Carp qw(fatalsToBrowser);
use DBI;
use strict;
use vars qw (%FORM $dbh %cache_template %PARAM);
%PARAM = (
mailprog => '/usr/sbin/sendmail',
mailprogparams => "-oi",
sender => 'www@hobbypromoclub.com',
to => 'maxisubastas@gmail.com',
from => 'noresponda@hobbypromoclub.com',
);
Parse();
Conectarse();
$| ++;
Inicio();
sub Inicio {
my $error;
my $buscar_tag = "msg";
if ($FORM{proc} == 1) {
$FORM{tarjeta} = uc($FORM{tarjeta});
### verificar si la tarjeta es válida
### y si está libre
my $tarjeta = Trim($FORM{tarjeta});
$tarjeta =~ s/\'/\\\'/g;
my $ocupada = ExecQueryUnRow(" select count(*) from clientes where tarjeta = '$tarjeta' and fecha_registro is not null and t1 <> '' ");
my $existe = ExecQueryUnRow(" select count(*) from clientes where tarjeta = '$tarjeta' ");
my $activa = ExecQueryUnRow(" select activa from clientes where tarjeta = '$tarjeta' ");
if ($activa eq 'N') {
$error = "La tarjeta se encuentra desactivada, contactese con su vendedor";
}
if (!$existe) {
$error = "El número de serie ingresado no es válido";
}
if ($ocupada) {
$error = "La tarjeta ya fue registrada";
}
if (!$error) {
RegistrarTarjeta();
}
else {
$buscar_tag = "";
}
}
my @exportar = qw (tarjeta nombre email telefono direccion cp localidad);
my $templatefile = "template_registro.htm";
my %namespace = (
ERROR => $error,
);
Template($templatefile,\%namespace,\@exportar,$buscar_tag);
exit;
}
sub RegistrarTarjeta {
my $buscar_tag;
my $now = time();
my $clave;
my @random = ("A"..."Z");
for (my $i=0;$i < 4;$i++) {
my $rand2 = (int(rand(27)) + 1);
$clave .= $random[$rand2];
}
my @campos = qw (tarjeta nombre email telefono direccion cp localidad);
my $tarjeta = uc($FORM{tarjeta});
my $from = qq~$FORM{nombre} <$FORM{email}>~;
my $datos = \%FORM;
foreach (@campos) {
$FORM{$_} = Trim($FORM{$_});
$FORM{$_} =~ s/\'/\\\'/g;
}
$FORM{suscripcion} = 'N' if (!$FORM{suscripcion});
my $q = qq~update clientes set
nombre = '$FORM{nombre}',
clave = '$clave',
direccion = '$FORM{direccion}',
cp = '$FORM{cp}',
localidad = '$FORM{localidad}',
telefono = '$FORM{telefono}',
email = '$FORM{email}',
nifocif = '$FORM{suscripcion}',
t1 = '$now',
fecha_registro = now()
where
tarjeta = '$tarjeta'
~;
ExecQuery($q);
### enviar el mensaje al cliente y al administrador
EnviarMailAdmin($tarjeta,$from,$clave,$datos);
EnviarMailCliente($tarjeta,$datos,$clave);
### salir a la plantilla
my @exportar = qw (tarjeta nombre email telefono direccion cp localidad);
foreach (@exportar) {
$FORM{$_} = $datos->{$_};
}
my $templatefile = "template_registro_listo.htm";
my %namespace = (
TARJETA => $tarjeta,
CLAVE => $clave,
);
Template($templatefile,\%namespace,\@exportar,$buscar_tag);
exit;
}
sub EnviarMailCliente {
my $tarjeta = shift;
my $datos = shift;
my $clave = shift;
my $subject = "Nuevo Registro Tarjeta $tarjeta";
open (MAIL,"|$PARAM{mailprog} $PARAM{mailprogparams} -t -f $PARAM{sender}");
print MAIL "To: $datos->{email}\n";
print MAIL "From: HobbyPromoClub <$PARAM{from}>\n";
print MAIL "Subject: $subject\n";
print MAIL 'Content-Type: text/plain; charset=iso-8859-1\n\n';
print MAIL qq~Gracias por Registrarse a HOBBY PROMO CLUB.
Recuerde visitar nuestro sitio Web quincenalmente
Datos ingresados:
Nombre: $datos->{nombre}
N. de Tarjeta: $tarjeta
Clave de Ingreso: $clave
Email: $datos->{email}
Teléfono: $datos->{telefono}
Dirección: $datos->{direccion}
Código Postal: $datos->{cp}
Población: $datos->{localidad}
Recuerde que puede cambiar estos datos en el Área de Clientes.
ingresando a http://www.hobbypromoclub.com/
~;
close MAIL;
}
sub EnviarMailAdmin {
my $tarjeta = shift;
my $from = shift;
my $clave = shift;
my $datos = shift;
my $subject = "(Hobby) Nuevo Registro Tarjeta HobbyPromoclub $tarjeta";
open (MAIL,"|$PARAM{mailprog} $PARAM{mailprogparams} -t -f $PARAM{sender}");
print MAIL "To: $PARAM{to}\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n";
print MAIL "Content-Type: text/plain; charset=iso-8859-1\n\n";
print MAIL "Aviso de registro de tarjeta\n";
print MAIL "nro de serie $tarjeta\n";
print MAIL "se le asignó la clave $clave\n";
print MAIL qq~ .
Datos ingresados:
Nombre: $datos->{nombre}
N. de Tarjeta: $tarjeta
Clave de Ingreso: $clave
Email: $datos->{email}
Teléfono: $datos->{telefono}
Dirección: $datos->{direccion}
Código Postal: $datos->{cp}
Población: $datos->{localidad}
~;
close MAIL;
}
sub ExecQuery {
my ($q) = @_;
my $sth = $dbh->prepare($q) || die SqlError("$!
$DBI::errstr
$q");
$sth->execute() || die SqlError("$!
$DBI::errstr
$q");
$sth->finish;
}
sub ExecQueryUnRow {
my ($q,$columna) = @_;
my $h = $dbh->prepare($q) || die SqlError("$!
$DBI::errstr
$q");
$h->execute() || die SqlError("$!
$DBI::errstr
$q");
my %r;
my @devolver;
my $unica;
my @c = @{ $h->{NAME_lc} };
$h->bind_columns( \( @r{ @{$h->{NAME_lc} } } ));
$h->fetch;
$h->finish;
if ($columna) {
return $r{"$columna"};
}
for (my $n = 0; $n < $h->{NUM_OF_FIELDS}; $n++) {
$unica = $r{$c[$n]};
push (@devolver, $r{$c[$n]});
}
my $cant_elem = @devolver;
if ($cant_elem > 1) {
return @devolver;
}
else {
return $unica;
}
}
sub Template {
my ($templatefile,$r_namespace,$export,$reemplazar) = @_;
my ($template,$solapas,$id_raiz,$opciones);
if (!open(TEMPLATE,"$templatefile")) {
print "Content-type: text/html\n\n";
print qq~No puedo abrir la plantilla $templatefile
$!~;
exit;
}
else {
{
local($/) = undef;
$template = ;
}
close(TEMPLATE);
}
foreach (@{$export}) {
$r_namespace->{uc($_)} = SafeHTML($FORM{$_});
}
if ($reemplazar) {
my @reemplazos;
if ($reemplazar =~ /\,/) {
@reemplazos = split (/\,/, $reemplazar);
}
else {
push (@reemplazos,$reemplazar);
}
foreach (@reemplazos) {
if ($_) {
$r_namespace ->{uc($_)} =~ s/\$([A-Z_0-9]+)/$r_namespace->{$1}/g;
$template =~ s/(.*)()(.*)/$1 $r_namespace->{uc($_)} $7/sm;
}
}
}
$template =~ s/\$([A-Z_0-9]+)/$r_namespace->{$1}/g;
print "Content-type: text/html\n\n";
print $template;
return;
}
sub ExtraerDesdeTemplate {
my ($buscar,$template) = @_;
my $output;
if ($cache_template{$template}) {
$output = $cache_template{$template};
}
else {
open(TEMPLATE,"$template") || die "$! $template";
{
local($/) = undef;
$output = ;
}
close(TEMPLATE);
$cache_template{$template} = $output;
}
$output =~ s/(.*)()(.*)()(.*)/$4/sm;
return $output;
}
sub Conectarse {
my $database = "hobbypro_noticias";
my $username = "hobbypro_promocl";
my $password = "qwerty123456";
my $DSN = "DBI:mysql:database=$database;host=";
$dbh = DBI->connect("$DSN", "$username", "$password", {
RaiseError => 1,
PrintError => 1,
AutoCommit => 1
}
);
}
sub Parse {
%FORM = ();
my $form = new CGI;
my $params = $form->Vars;
foreach (keys %{$params}) {
$FORM{$_} = $params->{$_};
}
}
sub Trim {
my $txt = shift;
$txt =~ s/^\s+//g;
$txt =~ s/\s+$//g;
return $txt;
}
sub SafeHTML {
my $string = shift;
### colocar todos los escapes html acá
### el & antes que todo
$string =~ s/\&/&/g;
### el resto
$string =~ s/\"/\"/gsm;
$string =~ s/\´/\´/gsm;
$string =~ s/\õ/\õ/gsm;
$string =~ s/\ö/\ö/gsm;
$string =~ s/\ø/\ø/gsm;
$string =~ s/\œ/\œ/gsm;
$string =~ s/\š/\š/gsm;
$string =~ s/\ù/\ù/gsm;
$string =~ s/\ú/\ú/gsm;
$string =~ s/\û/\û/gsm;
$string =~ s/\ü/\ü/gsm;
$string =~ s/\ý/\ý/gsm;
$string =~ s/\þ/\þ/gsm;
$string =~ s/\ÿ/\ÿ/gsm;
$string =~ s/\à/\à/gsm;
$string =~ s/\á/\á/gsm;
$string =~ s/\â/\â/gsm;
$string =~ s/\ã/\ã/gsm;
$string =~ s/\ä/\ä/gsm;
$string =~ s/\å/\å/gsm;
$string =~ s/\æ/\æ/gsm;
$string =~ s/\ç/\ç/gsm;
$string =~ s/\è/\è/gsm;
$string =~ s/\é/\é/gsm;
$string =~ s/\ê/\ê/gsm;
$string =~ s/\ë/\ë/gsm;
$string =~ s/\ì/\ì/gsm;
$string =~ s/\í/\í/gsm;
$string =~ s/\î/\î/gsm;
$string =~ s/\ï/\ï/gsm;
$string =~ s/\ð/\ð/gsm;
$string =~ s/\ñ/\ñ/gsm;
$string =~ s/\ò/\ò/gsm;
$string =~ s/\ó/\ó/gsm;
$string =~ s/\ô/\ô/gsm;
$string =~ s/\Ñ/\Ñ/gsm;
$string =~ s/\Ò/\Ò/gsm;
$string =~ s/\Ó/\Ó/gsm;
$string =~ s/\Ô/\Ô/gsm;
$string =~ s/\Õ/\Õ/gsm;
$string =~ s/\Ö/\Ö/gsm;
$string =~ s/\Ø/\Ø/gsm;
$string =~ s/\Œ/\Œ/gsm;
$string =~ s/\Š/\Š/gsm;
$string =~ s/\Ù/\Ù/gsm;
$string =~ s/\Ú/\Ú/gsm;
$string =~ s/\Û/\Û/gsm;
$string =~ s/\Ü/\Ü/gsm;
$string =~ s/\Ý/\Ý/gsm;
$string =~ s/\Ÿ/\Ÿ/gsm;
$string =~ s/\Þ/\Þ/gsm;
$string =~ s/\À/\À/gsm;
$string =~ s/\Á/\Á/gsm;
$string =~ s/\Â/\Â/gsm;
$string =~ s/\Ã/\Ã/gsm;
$string =~ s/\Ä/\Ä/gsm;
$string =~ s/\Å/\Å/gsm;
$string =~ s/\Æ/\Æ/gsm;
$string =~ s/\Ç/\Ç/gsm;
$string =~ s/\È/\È/gsm;
$string =~ s/\É/\É/gsm;
$string =~ s/\Ê/\Ê/gsm;
$string =~ s/\Ë/\Ë/gsm;
$string =~ s/\Ì/\Ì/gsm;
$string =~ s/\Í/\Í/gsm;
$string =~ s/\Î/\Î/gsm;
$string =~ s/\Ï/\Ï/gsm;
$string =~ s/\Ð/\Ð/gsm;
$string =~ s/\¢/\¢/gsm;
$string =~ s/\€/\€/gsm;
$string =~ s/\£/\£/gsm;
$string =~ s/\¥/\¥/gsm;
$string =~ s/\©/\©/gsm;
$string =~ s/\®/\®/gsm;
$string =~ s/\™/\™/gsm;
$string =~ s/\‰/\‰/gsm;
$string =~ s/\µ/\µ/gsm;
$string =~ s/\·/\·/gsm;
$string =~ s/\•/\•/gsm;
#$string =~ s/\…/\…/gsm;
#$string =~ s/\'/\′/gsm;
#$string =~ s/\?/\″/gsm;
$string =~ s/\§/\§/gsm;
$string =~ s/\¶/\¶/gsm;
$string =~ s/\ß/\ß/gsm;
$string =~ s/\‹/\‹/gsm;
$string =~ s/\›/\›/gsm;
$string =~ s/\«/\«/gsm;
$string =~ s/\»/\»/gsm;
$string =~ s/\‘/\‘/gsm;
$string =~ s/\’/\’/gsm;
$string =~ s/\“/\“/gsm;
$string =~ s/\”/\”/gsm;
$string =~ s/\‚/\‚/gsm;
$string =~ s/\„/\„/gsm;
$string =~ s/\\</gsm;
$string =~ s/\>/\>/gsm;
$string =~ s/\=/\≤/gsm;
$string =~ s/\=/\≥/gsm;
$string =~ s/\–/\–/gsm;
$string =~ s/\—/\—/gsm;
$string =~ s/\¯/\¯/gsm;
$string =~ s/\¤/\¤/gsm;
$string =~ s/\¦/\¦/gsm;
$string =~ s/\¨/\¨/gsm;
$string =~ s/\¡/\¡/gsm;
$string =~ s/\¿/\¿/gsm;
$string =~ s/\ˆ/\ˆ/gsm;
$string =~ s/\˜/\˜/gsm;
$string =~ s/\°/\°/gsm;
#$string =~ s/\-/\−/gsm;
$string =~ s/\±/\±/gsm;
$string =~ s/\÷/\÷/gsm;
#$string =~ s/\//\⁄/gsm;
$string =~ s/\×/\×/gsm;
$string =~ s/\¹/\¹/gsm;
$string =~ s/\²/\²/gsm;
$string =~ s/\³/\³/gsm;
$string =~ s/\¼/\¼/gsm;
$string =~ s/\½/\½/gsm;
$string =~ s/\¾/\¾/gsm;
$string =~ s/\¬/\¬/gsm;
$string =~ s/\¸/\¸/gsm;
$string =~ s/\ª/\ª/gsm;
$string =~ s/\º/\º/gsm;
$string =~ s/\†/\†/gsm;
$string =~ s/\‡/\‡/gsm;
return $string;
}