<?php

##################################################################################
# HOTELDRUID
# Copyright (C) 2001-2021 by Marco Maria Francesco De Santis (marco@digitaldruid.net)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version accepted by Marco Maria Francesco De Santis, which
# shall act as a proxy as defined in Section 14 of version 3 of the
# license.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
##################################################################################



function num_caratteri_testo ($testo) {

return strlen(utf8_decode((string) $testo));

} # fine function num_caratteri_testo



function tronca_testo ($testo,$inizio,$lunghezza = "NO") {

$num_caratteri = 0;
$num_byte = strlen($testo);
for ($num1 = 0 ; $num1 < $num_byte ; $num1++) {
$num_caratteri++;
$byte_car = 1;
$byte = ord($testo[$num1]);
if ($byte & 128) {
$byte = $byte << 1;
while ($byte & 128) {
$num1++;
$byte_car++;
$byte = $byte << 1;
} # fine while ($byte & 128)
} # fine if ($byte & 128)
$num_byte_car[$num_caratteri] = $byte_car;
} # fine for $num1

$n_ini = 0;
while ($inizio < 0) $inizio = $num_caratteri + $inizio;
for ($num1 = 1 ; $num1 <= $inizio ; $num1++) $n_ini = $n_ini + $num_byte_car[$num1];
if ($lunghezza == "NO") $testo = substr($testo,$n_ini);
else {
$n_lun = 0;
if ($lunghezza < 0) {
$lunghezza = $num_caratteri + $lunghezza - $inizio;
if ($lunghezza < 0) $lunghezza = 0;
} # fine if ($lunghezza < 0)
for ($num1 = ($inizio + 1) ; $num1 <= ($inizio + $lunghezza) ; $num1++) $n_lun = $n_lun + fixset($num_byte_car[$num1]);
$testo = substr($testo,$n_ini,$n_lun);
} # fine else if ($lunghezza == "NO")

return $testo;

} # fine function tronca_testo



function trova_prima_data ($testo,$stile_data,$lingua,&$lung_resto) {
global $lingua_mex;

$prima_data = "";
$lung_prima_data = strlen($testo);
$lung_resto = "";

if (preg_match("|[^0-9][0-9]{1,2}[-/ ][0-9]{1,2}[-/ ][0-9]{4,4}[^0-9]|",$testo)) {
$prima_data_vett = preg_split("|[0-9]{1,2}[-/ ][0-9]{1,2}[-/ ][0-9]{4,4}|",$testo);
$lung_prima_data_corr = strlen($prima_data_vett[0]);
if ($lung_prima_data_corr < $lung_prima_data) {
$lung_prima_data = $lung_prima_data_corr;
$prima_data = substr($testo,$lung_prima_data);
if ($prima_data_vett[1]) {
$prima_data = explode($prima_data_vett[1],$prima_data);
$prima_data = $prima_data[0];
} # fine if ($prima_data_vett[1])
$lung_resto = (int) $lung_prima_data + strlen($prima_data);
$prima_data_corr = preg_split("|[-/ ]|",$prima_data);
if (strlen($prima_data_corr[0]) < 2) $prima_data_corr[0] = "0".$prima_data_corr[0];
if (strlen($prima_data_corr[1]) < 2) $prima_data_corr[1] = "0".$prima_data_corr[1];
if ((integer) $prima_data_corr[0] > 12) $prima_data = $prima_data_corr[2]."-".$prima_data_corr[1]."-".$prima_data_corr[0];
else {
if ((integer) $prima_data_corr[1] > 12) $prima_data = $prima_data_corr[2]."-".$prima_data_corr[0]."-".$prima_data_corr[1];
else {
if ($stile_data == "usa") $prima_data = $prima_data_corr[2]."-".$prima_data_corr[0]."-".$prima_data_corr[1];
else $prima_data = $prima_data_corr[2]."-".$prima_data_corr[1]."-".$prima_data_corr[0];
} # fine else if ($prima_data_corr[1] > 12)
} # fine else if ($prima_data_corr[0] > 12)
} # fine if ($lung_prima_data_corr < $lung_prima_data)
} # fine if (preg_match("|[^0-9][0-9]{1,2}[-/ ][0-9]{1,2}[-/ ][0-9]{4,4}|",$testo))

if (preg_match("|[^0-9][0-9]{4,4}[-/ ][0-9]{1,2}[-/ ][0-9]{1,2}[^0-9]|",$testo)) {
$prima_data_vett = preg_split("|[0-9]{4,4}[-/ ][0-9]{1,2}[-/ ][0-9]{1,2}|",$testo);
$lung_prima_data_corr = strlen($prima_data_vett[0]);
if ($lung_prima_data_corr < $lung_prima_data) {
$lung_prima_data = $lung_prima_data_corr;
$prima_data = substr($testo,$lung_prima_data);
if ($prima_data_vett[1]) {
$prima_data = explode($prima_data_vett[1],$prima_data);
$prima_data = $prima_data[0];
} # fine if ($prima_data_vett[1])
$lung_resto = (int) $lung_prima_data + strlen($prima_data);
$prima_data_corr = preg_split("|[-/ ]|",$prima_data);
if (strlen($prima_data_corr[1]) < 2) $prima_data_corr[1] = "0".$prima_data_corr[1];
if (strlen($prima_data_corr[2]) < 2) $prima_data_corr[2] = "0".$prima_data_corr[2];
$prima_data = $prima_data_corr[0]."-".$prima_data_corr[1]."-".$prima_data_corr[2];
} # fine if ($lung_prima_data_corr < $lung_prima_data)
} # fine if (preg_match("|[^0-9][0-9]{4,4}[-/ ][0-9]{1,2}[-/ ][0-9]{1,2}[^0-9]|",$testo))

$lingua_orig = $lingua_mex;
$lingua_mex = $lingua;
$Gen = strtolower(mex("Gen",'giorni_mesi.php'));
$Feb = strtolower(mex("Feb",'giorni_mesi.php'));
$Mar = strtolower(mex("Mar",'giorni_mesi.php'));
$Apr = strtolower(mex("Apr",'giorni_mesi.php'));
$Mag = strtolower(mex("Mag",'giorni_mesi.php'));
$Giu = strtolower(mex("Giu",'giorni_mesi.php'));
$Lug = strtolower(mex("Lug",'giorni_mesi.php'));
$Ago = strtolower(mex("Ago",'giorni_mesi.php'));
$Set = strtolower(mex("Set",'giorni_mesi.php'));
$Ott = strtolower(mex("Ott",'giorni_mesi.php'));
$Nov = strtolower(mex("Nov",'giorni_mesi.php'));
$Dic = strtolower(mex("Dic",'giorni_mesi.php'));
$Gennaio = strtolower(mex("Gennaio",'giorni_mesi.php'));
$Febbraio = strtolower(mex("Febbraio",'giorni_mesi.php'));
$Marzo = strtolower(mex("Marzo",'giorni_mesi.php'));
$Aprile = strtolower(mex("Aprile",'giorni_mesi.php'));
$Maggio = strtolower(mex("Maggio",'giorni_mesi.php'));
$Giugno = strtolower(mex("Giugno",'giorni_mesi.php'));
$Luglio = strtolower(mex("Luglio",'giorni_mesi.php'));
$Agosto = strtolower(mex("Agosto",'giorni_mesi.php'));
$Settembre = strtolower(mex("Settembre",'giorni_mesi.php'));
$Ottobre = strtolower(mex("Ottobre",'giorni_mesi.php'));
$Novembre = strtolower(mex("Novembre",'giorni_mesi.php'));
$Dicembre = strtolower(mex("Dicembre",'giorni_mesi.php'));
$al = strtolower(mex("al",'prenota.php'));
$lingua_mex = $lingua_orig;
$mesi_alternativi = "$Gen|$Feb|$Mar|$Apr|$Mag|$Giu|$Lug|$Ago|$Set|$Ott|$Nov|$Dic|$Gennaio|$Febbraio|$Marzo|$Aprile|$Maggio|$Giugno|$Luglio|$Agosto|$Settembre|$Ottobre|$Novembre|$Dicembre";

if (preg_match("=[^0-9a-z]($mesi_alternativi)[, -/]+[0-9]{1,2}[, -/]+[0-9]{4,4}[^0-9a-z]=i",$testo)) {
$prima_data_vett = preg_split("=($mesi_alternativi)[, -/]+[0-9]{1,2}[, -/]+[0-9]{4,4}=i",$testo);
$lung_prima_data_corr = strlen($prima_data_vett[0]);
if ($lung_prima_data_corr < $lung_prima_data) {
$lung_prima_data = $lung_prima_data_corr;
$prima_data = substr($testo,$lung_prima_data);
if ($prima_data_vett[1]) {
$prima_data = explode($prima_data_vett[1],$prima_data);
$prima_data = $prima_data[0];
} # fine if ($prima_data_vett[1])
$lung_resto = (int) $lung_prima_data + strlen($prima_data);
$prima_data_corr = preg_split("|[, -/]+|",$prima_data);
$mese_corr = strtolower($prima_data_corr[0]);
if ($mese_corr == $Gen or $mese_corr == $Gennaio) $mese = "01";
if ($mese_corr == $Feb or $mese_corr == $Febbraio) $mese = "02";
if ($mese_corr == $Mar or $mese_corr == $Marzo) $mese = "03";
if ($mese_corr == $Apr or $mese_corr == $Aprile) $mese = "04";
if ($mese_corr == $Mag or $mese_corr == $Maggio) $mese = "05";
if ($mese_corr == $Giu or $mese_corr == $Giugno) $mese = "06";
if ($mese_corr == $Lug or $mese_corr == $Luglio) $mese = "07";
if ($mese_corr == $Ago or $mese_corr == $Agosto) $mese = "08";
if ($mese_corr == $Set or $mese_corr == $Settembre) $mese = "09";
if ($mese_corr == $Ott or $mese_corr == $Ottobre) $mese = "10";
if ($mese_corr == $Nov or $mese_corr == $Novembre) $mese = "11";
if ($mese_corr == $Dic or $mese_corr == $Dicembre) $mese = "12";
if (strlen($prima_data_corr[1]) < 2) $prima_data_corr[1] = "0".$prima_data_corr[1];
$prima_data = $prima_data_corr[2]."-".$mese."-".$prima_data_corr[1];
} # fine if ($lung_prima_data_corr < $lung_prima_data)
} # fine if (preg_match("=[^0-9a-z]($mesi_alternativi)[, -/]+[0-9]{1,2}[, -/]+[0-9]{4,4}[^0-9a-z]=i",$testo))

if (preg_match("=[^0-9a-z][0-9]{1,2}[, -/]+($mesi_alternativi)[, -/]+[0-9]{4,4}[^0-9a-z]=i",$testo)) {
$prima_data_vett = preg_split("=[^0-9a-z]{1,1}[0-9]{1,2}[, -/]+($mesi_alternativi)[, -/]+[0-9]{4,4}=i",$testo);
$lung_prima_data_corr = (strlen($prima_data_vett[0]) + 1);
if ($lung_prima_data_corr < $lung_prima_data) {
$lung_prima_data = $lung_prima_data_corr;
$prima_data = substr($testo,$lung_prima_data);
if ($prima_data_vett[1]) {
$prima_data = explode($prima_data_vett[1],$prima_data);
$prima_data = $prima_data[0];
} # fine if ($prima_data_vett[1])
$lung_resto = (int) $lung_prima_data + strlen($prima_data);
$prima_data_corr = preg_split("|[, -/]+|",$prima_data);
# Se le date sono nel formato 19-26 Agosto 2017 o simili
$prima_parte = str_replace("\n","",str_replace("\r","",$prima_data_vett[0]));
$prima_parte_no_data = preg_replace("= [0-9]{1,2} *(-|$al|/) *$=i"," ",$prima_parte);
if ($prima_parte != $prima_parte_no_data) {
$lung_prima_data = strlen($prima_parte_no_data);
$nuova_data = substr($prima_parte,$lung_prima_data);
if (preg_match("/[0-9]{2,2}/",substr($nuova_data,0,2))) $prima_data_corr[0] = substr($nuova_data,0,2);
else $prima_data_corr[0] = substr($nuova_data,0,1);
$lung_resto = strlen($prima_data_vett[0]);
} # fine if ($prima_parte != $prima_parte_no_data)
else {
# Se le date sono nel formato 26 Agosto - 2 Settempre 2017 o simili
$prima_parte_no_data = preg_replace("= [0-9]{1,2} *($mesi_alternativi) *(-|$al|/) *$=i"," ",$prima_parte);
if ($prima_parte != $prima_parte_no_data) {
$lung_prima_data = strlen($prima_parte_no_data);
$nuova_data = substr($prima_parte,$lung_prima_data);
if (preg_match("/[0-9]{2,2}/",substr($nuova_data,0,2))) $prima_data_corr[0] = substr($nuova_data,0,2);
else $prima_data_corr[0] = substr($nuova_data,0,1);
$nuova_data = preg_replace("=^[0-9]{1,2} *=i","",$nuova_data);
$prima_parte_no_data = preg_replace("=($mesi_alternativi)=i","",$nuova_data);
$prima_data_corr[1] = substr($nuova_data,0,(strlen($prima_parte_no_data) * -1));
$lung_resto = strlen($prima_data_vett[0]);
} # fine if ($prima_parte != $prima_parte_no_data)
} # fine else if ($prima_parte != $prima_parte_no_data)
$mese_corr = strtolower($prima_data_corr[1]);
if ($mese_corr == $Gen or $mese_corr == $Gennaio) $mese = "01";
if ($mese_corr == $Feb or $mese_corr == $Febbraio) $mese = "02";
if ($mese_corr == $Mar or $mese_corr == $Marzo) $mese = "03";
if ($mese_corr == $Apr or $mese_corr == $Aprile) $mese = "04";
if ($mese_corr == $Mag or $mese_corr == $Maggio) $mese = "05";
if ($mese_corr == $Giu or $mese_corr == $Giugno) $mese = "06";
if ($mese_corr == $Lug or $mese_corr == $Luglio) $mese = "07";
if ($mese_corr == $Ago or $mese_corr == $Agosto) $mese = "08";
if ($mese_corr == $Set or $mese_corr == $Settembre) $mese = "09";
if ($mese_corr == $Ott or $mese_corr == $Ottobre) $mese = "10";
if ($mese_corr == $Nov or $mese_corr == $Novembre) $mese = "11";
if ($mese_corr == $Dic or $mese_corr == $Dicembre) $mese = "12";
if (strlen($prima_data_corr[0]) < 2) $prima_data_corr[0] = "0".$prima_data_corr[0];
$prima_data = $prima_data_corr[2]."-".$mese."-".$prima_data_corr[0];
} # fine if ($lung_prima_data_corr < $lung_prima_data)
} # fine if (preg_match("=[^0-9a-z][0-9]{1,2}[, -/]+($mesi_alternativi)[, -/]+[0-9]{4,4}[^0-9a-z]=i",$testo))

return $prima_data;

} # fine function trova_prima_data



function trova_numero_vicino ($testo,$parola) {

$numero = 0;
$dist_dopo = 0;
$dist_prima = 0;
$testo_vett = preg_split("/$parola"."[^0-9a-z]/i",$testo);
if ($testo_vett[1]) {
$testo_vett[1] = " ".$testo_vett[1];
# Numero dopo la parola cercata
$num = preg_split("/[^0-9a-z][0-9]{1,2}[^0-9a-z]/i",substr($testo_vett[1],0,16));
if (count($num) > 1) {
$dist_dopo = (strlen($num[0]) + 1);
$numero = substr($testo_vett[1],$dist_dopo,1);
if (preg_match("/[0-9]/",substr($testo_vett[1],($dist_dopo + 1),1))) $numero .= substr($testo_vett[1],($dist_dopo + 1),1);
} # fine if (count($num) > 1)
# Numero prima della parola cercata
$num = preg_split("/[^0-9a-z][0-9]{1,2}[^0-9a-z]/i",substr($testo_vett[0],-16));
if (count($num) > 1) {
$dist_prima = (strlen($num[(count($num) - 1)]) + 1);
if (!$numero or $dist_prima < $dist_dopo) {
$numero = substr($testo_vett[0],(($dist_prima * -1) - 1),1);
if (preg_match("/[0-9]/",substr($testo_vett[0],(($dist_prima * -1) - 2),1))) $numero = substr($testo_vett[0],(($dist_prima * -1) - 2),1).$numero;
} # fine if (!$numero or $dist_prima < $dist_dopo)
} # fine if (count($num) > 1)
} # fine if ($testo_vett[1])

return $numero;

} # fine function trova_numero_vicino



?>