#!/usr/bin/perl

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

#-------------------------------COMENTARIO GLOBAL---------------
#---------------------------------------------------------------
# PROPOSITO.
#-----------
# Codigo HTML : generación y manipulacion.
#---------------------------------------------------------------

#---------------------------------------------------------------
# DECLARACIONES GLOBALES.
#------------------------

package glib_html_03;
use strict;
use utf8;
use JSON;

#---------------------------------------------------------------
# SUB-RUTINAS.
#---------------------------------------------------------------

# Escapea texto para ponerlo en pag html.
sub text2html {
    my $toencode = $_[0];
    $toencode =~ s/&([^#][^0-9]+)/&amp;$1/g;    # Antes que nada, traduce los ampersands. # 1.19 correccion a e.r.
    $toencode =~ s/>/&gt;/g;                    # >
    $toencode =~ s/"/&quot;/g;                  # " # 8.0
    $toencode =~ s/'/&#39;/g;
    $toencode =~ s/</&lt;/g;                    # <
    return $toencode;
}

#---------------------------------------------------------------
# Imprime celdas contiguas en una fila de una tabla HTML, con la info suministrada.
# Necesita apertura de la TR y cerrado de TR y de TD.
# Parametros :
# 0) nro. de campos
# 1) tripletas valor_campo,width_col, link, target
# 2) estilo de css a aplicar a TD
sub imprimir_celdas {
    my ($nro_campos, $valor_campo, $width_col, $i, $link, $alto_fila, $target, $estilo);

    $nro_campos = $_[0];
    $estilo     = $_[$#_];    # 01c

    for ($i = 1 ; $i <= $nro_campos * 4 ; $i = $i + 4) {
        $valor_campo = $_[$i];
        $width_col   = $_[ $i + 1 ];
        $link        = $_[ $i + 2 ];
        $target      = $_[ $i + 3 ];
        # Se imprime la fila.
        print q{<td width="};
        print $width_col;
        print q{%" class="};    # 01c
        print $estilo;          # 01c
        print q{">};
        print q{&nbsp;};

        # Si el link no es nulo, se imprime.
        if ($link ne '') {
            print q{<a href="};
            print $link;
            if ($target ne '') {
                print '" target ="' . $target . '">';
            } else {
                print '">';
            }
            print $valor_campo;
            print q{</a></td>};
        }
        # Sino, imprimir sin link.
        else {
            print "$valor_campo</TD>";
        }
    }
}

#---------------------------------------------------------------
# Variante de imprimir_celdas().
# Genera celdas contiguas en una fila de una tabla HTML, con la info suministrada.
# Necesita apetura de la TR y cerrado de TR.
# Parametros :
# 0) nro. de campos
# 1) tripletas valor_campo,width_col, link, target
# 2) estilo de css a aplicar a TD
sub generar_celdas {
    my ($celdas, $nro_campos, $valor_campo, $width_col, $i, $link, $alto_fila, $target, $estilo);
    $nro_campos = $_[0];
    $estilo     = $_[$#_];

    for ($i = 1 ; $i <= $nro_campos * 4 ; $i = $i + 4) {
        $valor_campo = $_[$i];
        $width_col   = $_[ $i + 1 ];
        $link        = $_[ $i + 2 ];
        $target      = $_[ $i + 3 ];
        # Se imprime la fila.
        $celdas .= q{<td width="};
        $celdas .= $width_col;
        $celdas .= q{%" class="};
        $celdas .= $estilo;
        $celdas .= q{">};
        $celdas .= q{&nbsp;};

        # Si el link no es nulo, se genera.
        if ($link ne '') {
            $celdas .= q{<a href="};
            $celdas .= $link;
            if ($target ne '') {
                $celdas .= '" target ="' . $target . '">';
            } else {
                $celdas .= '">';
            }
            $celdas .= $valor_campo;
            $celdas .= q{</a></td>};
        }
        # Sino, imprimir sin link.
        else {
            $celdas .= "$valor_campo</td>";
        }
    }

    return $celdas;

}

#---------------------------------------------------------------
# Imprime ajax con reporte de resultado.
# @return hash{status=>0 (error) | 1 (ok), msg=>''}
sub print_json_result {
    my $status = $_[0];
    # mensaje
    my $msg    = $_[1];
    my $exit   = defined($_[2]) ? $_[2] : 1;
    my $ctype  = defined($_[3]) ? $_[3] : 1;

    binmode STDOUT, ':encoding(UTF-8)';

    my $resp;
    $resp->{'status'} = $status;
    $resp->{'msg'}    = $msg;

    if ($ctype) {
        print "Cache-Control: no-cache, must-revalidate\r\n";
        print "Content-type: application/json; charset=utf-8\r\n\r\n";
    }

    my $json = encode_json($resp);
    utf8::decode($json);
    print $json;

    exit if ($exit);
}

#--------------------------------------------------------------------#
# Imprime ajax con reporte de resultado.
sub print_json_result_hash {
    my $hash = $_[0];
    my $exit  = defined($_[1]) ? $_[1] : 1;
    my $ctype = defined($_[2]) ? $_[2] : 1;

    binmode STDOUT, ':encoding(UTF-8)';

    if ($ctype) {
        print "Cache-Control: no-cache, must-revalidate\r\n";
        print "Content-type: application/json; charset=utf-8\r\n\r\n";
    }

    my $json = encode_json($hash);
    utf8::decode($json);
    print $json;

    exit if ($exit);
}

#-------------------------------------------------------------------------#
# Funcion para generar filas para una tabla generica de prontus con checkboxes para cada fila
# Parametros:
# 0) arreglo de hash con los valores y labels de los checkbox., por ejemplo:
#my @fidlist;
#foreach my $fid_file (@fids_listado) {
#    if ($fid_file =~ /fid_(.*?)\.html/) {
#        my $fid_name = "fid_$1";
#        if ($cfg_buscador{'FIDS'} =~ /( |^)$fid_file( |$)/) {
#            push @fidlist, {label    => $fid_name, value   => $fid_file, checked => 1};
#        } else {
#            push @fidlist, {label    => $fid_name, value   => $fid_file, checked => 0};
#        };
#    };
#};
# 1) nombre del input del checkbox, se recomienda usar del tipo arreglo.. por ejemplo: valores[]
# Invocacion:
# my $filas_tabla_checkbox = &glib_html_03::generar_filas_tabla_checkbox(\@fidlist, 'INPUT_FIDS[]');
sub generar_filas_tabla_checkbox {
    my $arrayref = $_[0];
    my @itemlist = @$arrayref;
    my $name     = $_[1];
    my $ident    = $_[2];
    my $buffer;
    my $counter = 1;
    foreach my $item (@itemlist) {
        my $checked = '';
        my $id      = $name;
        $id =~ s/\[|\]//sg;

        if ($item->{checked} == 1) {
            $checked = ' checked="checked"';
        }

        $buffer .= '
        <div class="row rowfix pad-top-bot2">
            <div class="pad-lef-rig0 col-xs-24 col-sm-16 col-md-16"><label for="' . $ident . $id . $counter . '">' . $item->{label} . '</label></div>
            <div class="pad-lef-rig0 col-xs-24 col-sm-8 col-md-8"><input type="checkbox" id="' . $ident . $id . $counter . '" name="' . $name . '" value="' . $item->{value} . '"' . $checked . '/></div>
        </div>';
        $counter++;
    }

    return $buffer;
}

#-------------------------------------------------------------------------#
# Funcion para generar filas para una tabla generica de Prontus con radio buttons.
# Parametros:
# 0) arreglo de hash con los valores y labels de los radiobuttons, por ejemplo:
#my @fidlist;
#foreach my $fid_file (@fids_listado) {
#    if ($fid_file =~ /fid_(.*?)\.html/) {
#        my $fid_name = "fid_$1";
#        if ($cfg_buscador{'FIDS'} =~ /( |^)$fid_file( |$)/) {
#            push @fidlist, {label    => $fid_name, value   => $fid_file, checked => 1};
#        } else {
#            push @fidlist, {label    => $fid_name, value   => $fid_file, checked => 0};
#        }
#    }
#}
# 1) nombre del input radio, se recomienda usar del tipo arreglo. por ejemplo: valores[]
# 2) lista de alternativas separada por comas.
# Invocacion:
# my $filas_tabla_radio = &glib_html_03::generar_filas_tabla_radio(\@fidlist, 'INPUT_FIDS[]');
sub generar_filas_tabla_radio {
    my $arrayref = $_[0];
    my @itemlist = @$arrayref;
    my $name     = $_[1];
    my $ident    = $_[2];
    my @alternatives = split(',',$_[3]);
    my $buffer;
    my $counter = 1;
    foreach my $item (@itemlist) {
        my $checked = '';
        my $id      = $name;
        $id =~ s/\[|\]//sg;

        if ($item->{checked} == 1) {
            $checked = ' checked="checked"';
        }

        $buffer .= '
        <div class="row rowfix pad-top-bot2">
            <div class="pad-lef-rig0 col-xs-12 over-hidden-x"><label>' . $item->{label} . '</label></div>';

            foreach my $alternative (@alternatives) {
                $buffer .= '<div class="col-xs-6"><input type="radio" id="'.$alternative . $id.'" name="' . $name . $item->{value} . '" class="'.$name.'" value="' . $alternative . '_' . $item->{value} . '"' . $checked . '/></div>';
            }

        $buffer .= '</div>';
        $counter++;
    }

    return $buffer;
}

1;
