#!/usr/bin/perl

# --------------------------------------------------------------
# Prontus CMS
# http://www.prontus.cl
# by Altavoz.net
#
# licensed under LGPL license.
# http://www.prontus.cl/license.html
# --------------------------------------------------------------

package lib_form;
use strict;
use utf8;

# Servidor SMTP.
our $SERVER_SMTP = '';
our $SEPARADOR = ';';
our $DELIMITADOR = '"';
our $MAX_COLS = 7;
our $MAX_ROWS = 50;

# ------------------------------------------------------------------------- #
# Envia un mensaje de correo electronico.
# &envia_mail($to,$from,$subj,$body,$filename,$filedata)
sub envia_mail {

    my ($to, $from, $replyto, $subj, $body, $filename, $filedata, $encode_html) = @_;
    $encode_html = 0 if (!defined($encode_html));
    my $resp;

    if ($filename) {
        $resp = &lib_mail::mail_multipart($from, $to, $replyto, $subj, $body, $filename, $filedata, $encode_html, $lib_form::SERVER_SMTP);
    } else {
        $resp = &lib_mail::mail_text($from, $to, $replyto, $subj, $body, $encode_html, $lib_form::SERVER_SMTP);
    };
    return $resp;

}; # envia_mail

# --------------------------------------------------------------------------------------------------
sub add_to_csv {

    my $data = shift;
    $data = &glib_str_03::trim($data); # Elimina espacios para que no molesten.
    $data =~ s/\"/\'\'/gs; # Convierte comillas para que no arruinen el archivo csv.
    $data =~ s/\r//gs;     # 1.5 Elimina retornos de carro para que no arruinen el archivo csv.
    return "$DELIMITADOR$data$DELIMITADOR$SEPARADOR";
};
# --------------------------------------------------------------------------------------------------
sub array_to_csv {

    my @arr = @_;
    my $total = $#arr;
    my $row = '';
    for(my $i = 0; $i <= $total; $i++) {
        $row = $row . &lib_form::add_to_csv($arr[$i]);
    };
    return $row;
};

# ------------------------------------------------------------------------- #
# Aborta y sale con un mensaje de error.
sub aborta {
    print "Content-type: text/html\n\n";
    print "\n<html><head><title>Error</title></head><body><p>".$_[0]."</p></body></html>";
    exit;
}; # aborta

# -------------------------------------------------------------------#
# Rescata y valida las variables del chorro.
sub getFormData {
    my $buffer = '';
    my %FORM;
    if ($ENV{'REQUEST_METHOD'} eq 'GET') {
        $buffer = $ENV{'QUERY_STRING'};
    } else {
        read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    };
    my @pairs = split(/&/, $buffer);
    foreach my $pair (@pairs) {
        my($name, $value) = split(/=/,$pair);
        # Un-Webify plus signs and %-encoding
        $value =~ tr/+/ /;
        $value =~ s/%([0-9A-Ha-h]{2})/pack("c",hex($1))/ge;
        # Elimina toda referencia de directorios hacia atras.
        $value =~ s/\.+[\/\\]+//g;
        # Elimina toda posibilidad de activar pipes.
        # $value =~ s/\|//g;
        # Elimina nulls.
        $value =~ s/\x00//g;
        # Elimina escapes.
        $value =~ s/\x1B//g;
        $value =~ s/[<>%!\|\\\~\$]/ /g; # Elimina caracteres peligrosos
        $name = lc $name;
        $FORM{$name} = $value;
    };
    # Valida variables.
    if (defined($FORM{'ts'})) {
        $FORM{'ts'} =~ s/[^\d]//g; # Elimina todos los no-numeros.
    }
    if (defined($FORM{'prontus'})) {
        $FORM{'prontus'} =~ s/[^\w\.\-]//g; # Elimina caracteres no validos como nombres de prontus.
    }
    return \%FORM;
    # print "<p>FILTROACTIVO = $FILTROACTIVO $FORMfechaini $FORMfechafin"; # debug
}; # getFormData

1;
