#!/usr/bin/perl

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

package prontus_varglb;

# -------------------------------COMENTARIO GLOBAL---------------
# ---------------------------------------------------------------
# PROPOSITO.
# -----------
# Definir e inicializar variables globales utilizadas en el Sistema
# Auto-Publicador.
# ---------------------------------------------------------------

# ------------------------
use strict;
use utf8;

# variables publicas con valores fijos
our $VERSION_PRONTUS = '12.0.73.1 - 2023/07/17';
# string por defecto para subtitulos de articulos
our $DEFAULT_TITHTML = '<a name=%%_SUBTIT_ANAME%%>%%_SUBTIT%%</a><a href="#top" class="linkSubtit">&nbsp;|&nbsp;subir</a>';
our $DIR_CGI_CPAN = 'cgi-cpn';
our $DIR_CGI_PUBLIC = 'cgi-bin';
our $UPLOADS_PERMITIDOS_ORIG = 'jpg,jpeg,jpe,gif,png,svg,webp,bmp,tif,tiff,ico,asf,asx,wax,wmv,wmx,avi,divx,flv,mov'
                             . ',qt,mpeg,mpg,mpe,3gp,txt,rtx,css,htm,html,mp3,m4a,mp4,m4v,ra,ram,wav,ogg,oga,ogv,mid'
                             . ',midi,wma,rtf,pdf,doc,docx,pot,pps,ppt,pptx,wri,xla,xls,xlsx,xlt,xlw,mdb'
                             . ',mpp,swf,tar,zip,gz,gzip,odt,odp,ods,odg,odc,odb,odf,csv,mkv';
# VALIDACION DE SEGURIDAD PARA TAXPORT_MAXARTICS
our $TAXPORT_MAXARTICS_SECURITY = 100000;
our $XCODE_CFG = "formatos_adv.cfg";
our $XCODING_DATA_PATH = "/cpan/data/xcoding/";

# La API URL de Cloudflare
our $CLOUDFLARE_API_URL = 'https://api.cloudflare.com/client/v4';
# url manuales prontus
our $URL_MANUAL = 'https://develop.prontus.cl';

# Directorios de Prontus
# Directorios correspondientes al contenido de las paginas generadas
# relativos al publicador

our $DIR_SITE = '/site';
our $DIR_LIST = '/list/port';
our $DIR_LIST_MACROS = '/list/macros';
our $DIR_ARTIC = '/artic';
our $DIR_FECHA = '/fecha';
our $DIR_PAG = '/pags'; # Dir. donde se almacenaran las paginas generadas
our $DIR_SECC = '/port';   # deprecada
our $DIR_PORT = '/port';   # Dir. de portadas
our $DIR_MACROS = '/macros';   # Dir. de portadas
our $DIR_IMAG = '/imag';   # Dir. donde se almacenaran las imagenes incluidas en las paginas generadas
our $DIR_MMEDIA = '/mmedia';   # Dir. donde se almacenaran los archivos de video cargados en los articulos
our $DIR_ASOCFILE = '/docs';   # Dir. donde se almacenaran los archivos genericos asociados en las paginas publicadas.
our $DIR_EXMEDIA = '/mm';  # Ubicacion de los archivos multimedia, al mismo nivel de artic
our $DIR_THUMBS = '/thumbs'; # ubicacion de las thumbnails de los videos dentro de exmedia
our $DIR_BKP = '/_prontus_bkp'; # ubicacion de los respaldos de artículos
# mam
our $DIR_MAM = '/mam';
our $INDEX_MAM = 'index.json';

# Directorios correspondientes al contenido del sitio web, relativos a $DIR_CONTENIDO
our $DIR_HPAGES = '/home';
our $DIR_EDIC = '/edic';
our $DIR_NROEDIC = '/nroedic';
our $DIR_UNICAEDIC = '/base'; # deprecada
our $DIR_BASEEDIC = '/base';

# variables para friendly url v5
our $DIR_FRIENDLY5 = '/prontus_links'; # Directorio donde se almacenaran los includes de friendly urls

# directorio cache multitag
our $DIR_MULTITAG = '/cache/multitag';
# Directorios correspondientes a los templates, relativos al publicador
our $DIR_TEMPLATE = '/plantillas';

# Directorios del panel de control, relativos al server, donde estan los formularios usados por el publicador.
our $DIR_PATH_CPAN = '/cpan';
our $DIR_CPAN_DATA = '/cpan/data';
our $DIR_LOCK = '/lock';
our $DIR_DATA4FIDS = '/procs/data4fids';
our $DIR_CORE = '/prontus/cpan';
our $DIR_CORE_FRONT = '/prontus/front';
our $DIR_PLT_CORE = '/prontus/cpan/plantillas';
our $DIR_MY_SEARCH = '/users/misbusquedas';
our $MAX_MY_SEARCH = 10;

# variables para friendly url
our $DIR_FRIENDLY = '/friendly/links'; # directorio donde se almacenaran los includes de friendly urls
our $URL_NUMBER = 1533847513; # numero base de epoch para restar de forma de no generar ids adicionales muy grandes pero siempre crecientes para diferenciar las urls
our $URL_MAX_LENGTH = 300;

# Taxonomia
our $DIR_TAXONOMIA = '/cache/taxonomia/pags'; # va en <prontus_id>/<dir_temp>|<dir_contenido>/
our $DIR_TAGS = '/cache/tags/pags'; # va en <prontus_id>/<dir_temp>|<dir_contenido>/
our $DIR_PTEMA = '/tax/port'; # deprecada
our $DIR_TAXPORT = '/tax/port'; # va en <prontus_id>/<dir_temp>|<dir_contenido>/
our $DIR_PTEMA_MACROS = '/tax/macros'; # deprecada
our $DIR_TAXPORT_MACROS = '/tax/macros';

# Tipos de imagenes que no se pueden manipular.
our %IMG_TYPE_NOEDIT = ('svg' => 1, 'webp' => 1);
# fotos a mostrar por defecto en el banco de imagenes del fid
our $BANCO_IMG_MAX = 5;

# Nombre del template de homepage de cada edicion, ubicado dentro del dir $DIR_HPAGES del dir. de los templates ($DIR_TEMP)
# 8.0 Se toma el primer arch. que se encuentre en el directorio y se usa ese nombre, salvo para el wizard.
our $INDEX_EDIC = 'home.html';

# En la raiz del sitio, este es el index que es manipulado por
# por el Adm. de Ediciones para setear la ed. vigente.
# El template es index_tmp.shtml SOLO MULTI-ED
our $INDEX_SITIO = 'index.html';
# SOLO MULTI-ED
our $TPL_INDEX_SITIO = 'index_tmp.html';

# variables publicas que cambian de valor al cargar configuracion
our $PRONTUS_ID = 'prontus';
our $RAMA_INSTALADA = '';
our $NRO_REVISION_INSTALADA = '';
our $BETA_REVISION_INSTALADA = '';

# Parametros de conexion a BD
# our $NOM_BD = '';
# our $USER_BD = '';
# our $PWD_BD = '';
# our $SERVER_BD = '';

our %CONFIG = ();
our %CONFIG_LOADED = ();

# variables candidatas a eliminarse
our $STAMP_DEMO = '';
our $STAMP_DEMO_RSS = '';
# Para conocimiento de todos los scripts y librerias.
our $PRONTUS_KEY = '';
#########################

# variables internas
our $loaded = 0;

sub init {
    # variable ya se inicializó una vez
    if ($loaded) {
        return;
    }
    $loaded = 1;

    &set_info_version_prontus();

    # Maximo de art. no pub. a desplegar en la lista de articulos
    # valor por defecto.
    $prontus_varglb::MAX_NRO_ARTIC = 50;

    %prontus_varglb::BD_CONN = ();
    %prontus_varglb::BD_USER_CONN = ();

    # Determinar Dir del server.
    $prontus_varglb::DIR_SERVER = &get_dir_server();

    # MAXIMO DE PROCESOS DE CRON TAXPORT SIMULTANEOS AL REGENERAR
    $prontus_varglb::TAXPORT_MAX_MASTERS = 3;

    %prontus_varglb::USERS = ();
    %prontus_varglb::USER_DATA = ();
    %prontus_varglb::ARTUSERS = (); # se pasa a prontus_varglb::CONFIG, pero se mantiene para retrocompatibilidad.
    %prontus_varglb::PORTUSERS = (); # se pasa a prontus_varglb::CONFIG, pero se mantiene para retrocompatibilidad.

    # Listas
    %prontus_varglb::LIST_PLTS = ();

    $prontus_varglb::USERS_PERFIL = '';

    # id del usuario logeado
    $prontus_varglb::USERS_ID = '';
    # nombre de usuario logeado
    $prontus_varglb::USERS_USR = '';
    # Mostrar en la adm. de articulos y ediciones las xx ultimas ediciones, ordenadas por tmstamp
    $prontus_varglb::NRO_EDICS_WORK = 15;

    #   <NOTAS>
    # <![CDATA[
    #
    # There are 5 predefined entity references in XML:
    # Regla uno (R1):
    # &lt; < less than
    # &gt; > greater than
    # &amp; & ampersand
    # &apos; ' apostrophe
    # &quot; " quotation mark
    # ]]>
    #
    #   </NOTAS>
    #

    # "<?xml version='1.0' encoding='iso-8859-1'?>
    # <PORT_DATA>
    #      <rowartic>
    #        <dir></dir>
    #        <file></file>
    #        <area></area>
    #        <ord></ord>
    #        <vb></vb>
    #        <pub></pub>
    #      </rowartic>
    # </PORT_DATA>";
    return '';
}

#------------------------------------------------------------------------#
sub get_dir_server {
    # DIR_SERVER:
    #   En unix queda algo asi como /sites/misitio.cl/web
    my $dir_server = '';
    $dir_server = $ENV{'DOCUMENT_ROOT'} if (defined($ENV{'DOCUMENT_ROOT'}));
    if ($dir_server eq '') {
        # si hay modperl el directorio ya se determino antes
        if (defined($Prontus::modperl)) {
            return $My::documentRoot;
        }
        # para linea de comandos
        use FindBin qw($Bin);
        $dir_server = $Bin; # por ej /sites/misitio.cl/web/cgi-cpn
        # /sites/misitio.cl/web es document root, se asume que el script que use este varglb siempre
        # estara en la carpeta cgi-xxx o similar, o en una subcarpeta desde la raiz del servidor
        # eliminamos desde cgi-xxx en adelante, cgi-bin o cgi-cpn
        $dir_server =~ s/\/cgi\-\w+.*//;
        # para pruebas unitarias, elimina directorio unit-tests
        $dir_server =~ s/\/unit\-tests.*//;

    }

    # cvi - 26/07/2011 - para eliminar los slash del final
    $dir_server =~ s/\/+$//;

    if ((! -d $dir_server) || (!$dir_server)) {
        if ($ENV{'SERVER_NAME'} ne '') { # ambiente web
            print "Content-Type: text/html\n\n";
        }
        print 'Error, no se ha podido detectar DOCUMENT ROOT o éste no es válido';
        exit;
    }

    return $dir_server;
}
# ---------------------------------------------------------------
sub set_info_version_prontus {
    if ($prontus_varglb::VERSION_PRONTUS =~ /([0-9]+\.[0-9]+)\.([0-9]+)(\.beta\.[0-9]+|\.[0-9]+)?/) {
        $RAMA_INSTALADA = $1;
        $NRO_REVISION_INSTALADA = $2;
        $BETA_REVISION_INSTALADA = $3;
    }
    return 1;
}
# -------------------------------END LIBRERIA--------------------
# FIN DOC.

return 1;
