function ind_setup() {
global $CONF;
if(!file_exists($CONF[dir_indi])) mkdir($CONF[dir_indi]);
if(!file_exists($CONF[dir_indi].$CONF[dir_indi_img])) mkdir($CONF[dir_indi].$CONF[dir_indi_img]);
}
function ind_rimuove_duplicati($txt) {
/*
$txt2 = explode(" ",$txt);
while(list($k, $v)=@each($txt2)) {
$txt = str_replace(" $v $v "," $v ",$txt);
}
$txt = preg_replace("/(\w+ \w+) \\1/", '$1',$txt); #reduce doubles to singles
$txt2 = explode(" ",$txt);
while(list($k, $v)=@each($txt2)) {
$txt = str_replace(" $v $v "," $v ",$txt);
}
*/
return $txt;
}
function ind_genera_key_base() {
global $CONF,$LANG,$KEY,$KEYA,$IND;
if (is_file($IND[file_base])) {
$INDI = unserialize(file_get_contents($IND[file_base]));
return $INDI;
}
//Genero la lista ultraglobale associativa con varianti ed estrapolo lista pulita
reset($LANG);
while(list($k, $v)=each($LANG)) {
//metto @ se non c'e' l' altra lingua
while(list($kk, $vv)=@each($KEY[$k])) {
$K = ind_scomponi_gen($vv,",");
//$KK = array_merge($KK,$K);
while(list($kkk, $vvv)=each($K)) {
//pulisco
$vvv = trim($vvv);
//creo array varianti parole
//$id = "$k$kk$kkk";
$icp = ind_componi_parola($vvv);
$p = $icp[key];
$a = $icp[alt];
//costrutto struttura diversa per composizione associazioni
$KKK2[$k][$kk][] = "$p";
//parole composte
$KKK3[$k][$p] = "$a";
//$KKK[][parola3] = ind_componi_parola($v,"");
}
}
}
//rigenero liste base
//rimuovo spazi nella stringa
reset($LANG);
while(list($k, $v)=each($LANG)) {
$KEYA[$k] = str_replace(" ","", $KEYA[$k]);
$ASS = ind_scomponi_gen($KEYA[$k],"|");
while(@list($kk, $vv)=@each($ASS)) {
$ASS2 = ind_scomponi_gen($vv,",");
while(list($kkk, $vvv)=@each($ASS2)) {
$ASS3[] = $KKK2[$k][$vvv];
}
//genero parole
$MIX = ind_array_mix_gen($ASS3);
//mescolo random le parole, mantenendo i gruppi etolgo duplicati ??
@shuffle($MIX);
//print "-----------------------------
";
unset($ASS3);
//riciclo aggiungendo le parole aggiuntive
while(list($k1, $v1)=@each($MIX)) {
//array parole linea
$MIXP = ind_scomponi_gen($v1,"|");
while(list($k2, $v2)=each($MIXP)) {
//print "X".$v2;
$parola_pulita[] = $v2;
$p1 = str_replace($v2,ind_decidi($KKK3[$k][$v2]), $v2);
$p2 = str_replace($v2,ind_decidi($KKK3[$k][$v2]), $v2);
$p3 = str_replace($v2,ind_decidi($KKK3[$k][$v2]), $v2);
$parola_estesa1[] = $p1;
$parola_estesa2[] = $p2;
$parola_estesa3[] = $p3;
//print "Y".$p;print "---
";
}
//ricompongo parola pulita
$K10[lang] = "$k";
$K10[peso] = sizeof($parola_pulita);
$K10[key] = implode(" ",$parola_pulita);
//$K10[parola1] = implode(" ",$parola_estesa1);
//$K10[parola2] = implode(" ",$parola_estesa2);
//$K10[parola3] = implode(" ",$parola_estesa3);
unset($parola_pulita);
unset($parola_estesa1);
unset($parola_estesa2);
unset($parola_estesa3);
//assegno la parola nell' array globale
$KEYG[]=$K10; // tutto insieme
//$KEYG2[$k][]=$K10;
}
}
}
//d($KEYG);
//devo controllare i duplicati ??
//CONTROLLO UNICITA0
reset($KEYG);
while(list($k, $v)=each($KEYG)) {
//mi creo array parole provvisorio
$TMP[$k] = $v[key];
}
$TMP = array_unique($TMP);
reset($TMP);
while(list($k, $v)=each($TMP)) {
//mi creo array parole provvisorio
$TMP2[$k] = $KEYG[$k];
}
d($TMP2);
//scrivo file una volta sola
ind_scrivi($IND[file_base],$TMP2);
//torna alla home page con redirect
header("Location: ".genera_BASEURL()."?".sizeof($TMP2));
exit; //torna INDI;:
}
//mi cerca una parola con preferenza e relativo peso di preferenza
//la preferenza e' come un like
function ind_cerca_parola2($lang,$parola,$peso) {
global $INDI,$DATI;
reset($INDI);
while(list($k, $v)=each($INDI)) {
if($v[lang] == "$lang" and $v[link]=="") {
//print $peso;
//controllo la parola
if(@stristr($v[key],$parola)) {
//if($v[peso] == "$peso") {
//assegno il link.
return($k);
//}
}
//se non trovo nel peso minore lo aumrnto
if($v[peso] > $peso) {
$peso++;
// print "
- INCPESO -> '$peso'";
}
}
}
//se non trova niente torna 0
return -1;
}
//torna la chiave della parola
function ind_cerca_parola($lang,$parola,$peso) {
global $DATI;
//possibile rischio ??
if($DATI[lang] != $lang) {
$DATI[key] = "";
$DATI[peso] = "";
}
//se il peso non c'e' lo metto alto ??
if($peso == "") $peso = $DATI[peso];
if($peso == "") $peso = 1;
//imposto la parola di riferimento
if($parola == "") $parola = $DATI[key];
if($parola == "") $parola = " ";
$k = ind_cerca_parola2($lang,$parola,$peso);
//se non torna niente provo la ricerca senza parola preferenziale
if($k == -1 and $parola != " ") {
//metto parola vuota
$k = ind_cerca_parola2($lang," ",$peso);
}
return $k;
}
function ind_prende($pagina, $lang, $agg, $parola="", $peso="", $link="") {
global $IND,$INDI,$CONF,$DATI,$PRESA;
// $ULTIMA_PRESA; c'e' l' array con le informazioni sull' ultima presa
//debug
//DATI mi serve per avere i valori dell ambiente, soprattutto il peso e la parola
///se e' passato una pagina e una lingua e i parametri aggiuntivi cerco l' indi relativo e lo ritorno
//if(trim($pagina) != "" and trim($lang) != "") {
reset($INDI);
while(list($k, $v)=each($INDI)) {
if($v[pagina] == $pagina and $v[lang] == $lang and $v[agg] == $agg) {
$PRESA = $v;
//d("INDI_PRENDE_PRESA -> PAGINA:$pagina - LANG:$lang - AGG:$agg");
return($v);
}
}
//}
//devo riscrivere
$CONF["INDI_write"] = "SI";
//d("INDI PRENDE -> PAGINA:$pagina - LANG:$lang - AGG:$agg");
//se
///se e' passato anche un link controllo se questo e' associato ad una parola
//se passo vuole dire che non ho trovato il link, prendo quindi una parola chiave
// e l associo al link se c'e'
//prendo parola random
//print "diversa";
//controllo livello di navigazione
//se non c'e' un id di riferimento sono nella root
//if ($DATI[ref_id] == "")
//print "
presa";
$id_ref = $DATI[id];
reset($INDI);
//cerco in prima istanza le parole con peso dato e mi faccio una lista
//se c'e' il debug dell' indirizzo non assegno nuova
if($CONF[debug_link] != "SI") {
//cerco una chiave
$k = ind_cerca_parola($lang,$parola,$peso);
//se non c'e' errore
if($k != -1) {
//d("INDI PRENDE PAROLA -> PAGINA:$pagina - LANG:$lang - AGG:$agg");
//d($PAROLA);
//assegno il link
$parola = $INDI[$k][key];
$peso = $INDI[$k][key];
if ($link == "") $INDI[$k][link] = ind_genera_link($parola);
else $INDI[$k][link] = $link;
//agg
$INDI[$k]["agg"] = $agg;
$INDI[$k][pagina] = $pagina;
$INDI[$k][id] = $k;
$INDI[$k][id_ref] = $id_ref;
//print "
- ASS -> '$link'";
//print "
- ASS -> '$pagina'";
//creo valori per riempire anche il MENU
$OUT[link] = $INDI[$k][link];
$OUT[pagina] = $pagina;
$OUT[key] = $parola;
$OUT[peso] = $peso;
$OUT[lang] = $lang;
$OUT[id] = $k;
//assegno ultima presa
$PRESA = $OUT;
d($OUT);
return($OUT);
}
} //fine debug
//se siamo qui non ho trovato nessuna parola disponibile nella lingua data, ne assegno una random presa dalla parola di base
//se c'e' la parola di base la sfrutto
//d("INDI PRENDE RANDOM -> PAGINA:$pagina - LANG:$lang - AGG:$agg");
reset($INDI);
//genero la parola alla meno peggio
$casuale = mt_rand(1,1000000);
$OUT[key] = $lang."-".$pagina."-".$casuale;
if ($link == "") $OUT[link] = ind_genera_link($OUT[key]);
else $OUT[link] = $link;
$OUT[agg] = $agg;
$OUT[pagina] = $pagina;
$OUT[lang] = $lang;
$OUT[peso] = $peso;
$OUT[id_ref] = $id_ref;
//cerco l' ultimo elemento dell' array
$id = count($INDI);
$id = $casuale;
$OUT[id] = $id;
//scrivo indi
$INDI[$id] = $OUT;
//d($INDI);
//print "
- ASSX -> '$link'";
//print "
- ASSX -> '$pagina'";
//print "
- ASSX -> '$parola'";
//assegno ultima presa
$PRESA = $OUT;
d($OUT);
return $OUT;
}
//ind_prende_key("ita","1","");
// scrive file e serializza, sovrascrive se necessario
function ind_scrivi($filename,$MIXED) {
$somecontent = serialize($MIXED);
// Verifica che il file esista e sia riscrivibile
if (!$handle = fopen($filename, 'w+')) {
echo "Non si riesce ad aprire il file ($filename)";
exit;
}
// Scrive $somecontent nel file aperto.
if (!fwrite($handle, $somecontent)) {
echo "Non si riesce a scrivere nel file ($filename)";
exit;
}
//echo "Riuscito, scritto nel file ($filename)";
fclose($handle);
d("Scritto INDI");
return 1;
}
//$DATI = array_merge($DATI_VAR,$DATI);
//dovrei creare tutte le pagine in base alle key e mettere un campo riconoscibile per poi, gestire l' inclusione nel template
//creo un array delle parole chiave del sito, in ordine di importanza
//$KEY_AGG = ind_genera_key_agg($k);
//adesso ho tutta la lista delle parole chiavi
//$KEY_TMP = array_merge($KEY_AGG,$KEY_BASE);
//ordino
//??Devo prima di tutto generare i LINK di tutto il sito nelle varie lingue per avere la mappa completa, posso anche
//print_r(ind_key_base_val("ita"));
//print "
".$lang;
//print_r($KEY_BASE);
//print "
";
//############## MAIN #################
function main_link_globale_indi() {
global $INDI,$MENU,$LANG;
reset($MENU);
reset($INDI);
reset($LANG);
while(list($k, $v)=each($MENU)) {
//il mio id globale e' il nome della pagina + la lingua
//controllo se per ogni lingua di $k e' gia' stato definito il link
reset($LANG);
while(list($kl, $vl)=each($LANG)) {
// faccio il merge con di tutte le pagine;
$MENU[$k][$kl] = array_merge($MENU[$k][xxx], $MENU[$k][$kl]);
//imposto il link in base alla parola chiave se c'e'
//print "
- VAL -> $k, $kl,".$MENU[$k][$kl][key].",".$MENU[$k][$kl][link];
//ind_prende($pagina,$lang,$agg,$parola="",$peso="",$link="")
//se specifico la pagina nella configurazione questa sovrascrive
//if($MENU[$k][$kl][pagina] != "") $pagina = $MENU[$k][$kl][pagina];
//else $pagina = $k;
$OUT = ind_prende($k, $kl,$MENU[$k][$kl][agg],$MENU[$k][$kl][key],$MENU[$k][$kl][peso],$MENU[$k][$kl][link]);
//faccio il merge inserendo nel menu le informazioni uscite dalla presa della parola
$MENU[$k][$kl] = array_merge($OUT, $MENU[$k][$kl]);
}
}
//return $MENU;
}
//usato nel modo non indi
function main_link_globale() {
global $CONF,$MENU,$LANG;
reset($MENU);
while(list($k, $v)=each($MENU)) {
//il mio id globale e' il nome della pagina + la lingua
//controllo se per ogni lingua di $k e' gia' stato definito il link
reset($LANG);
while(list($k1, $v1)=each($LANG)) {
// faccio il merge con di tutte le pagine;
$MENU[$k][$k1] = array_merge($MENU[$k][xxx], $MENU[$k][$k1]);
//creo link
$MENU[$k][$k1]["link"] = $CONF[nome_programma]."?l=$k1&p=$k";
$MENU[$k][$k1]["pagina"] = $k;
$MENU[$k][$k1]["lang"] = $k1;
}
}
}
//################### INDICIZZAZIONE AVANZATA ##############################
//funzione che mixa le parole, in input una serie di array di parole da mescolare nell' ordine dato
function ind_array_mix_gen ($ARR) {
if (!$ARR[0]) return 0;
$ARRX[0] = "";
//d($ARRX);
while(list($k, $v)=each($ARR)) {
$ARRX = ind_array_mix($v,$ARRX);
//d($ARRX);
}
return($ARRX);
}
//funzione che mescola due array
function ind_array_mix($ARR1,$ARR2) {
while(list($k, $v)=@each($ARR1)) {
@reset($ARR2);
while(list($kk, $vv)=@each($ARR2)) {
if(!$vv) $ARR[] = $v;
else $ARR[] = $vv."|".$v;
}
}
return $ARR;
}
//compone una parola ritornando a caso le varianti
function ind_componi_parola($parola) {
//salvo testo fra parentesi
$parentesi = ind_parentesi($parola, "(", ")");
if($parentesi == "") {
$ARR[key] = trim($parola);
return $ARR;
}
$PARENTESI = explode("|",$parentesi);
//$PARENTESI[] = "";
//$SN = rand(0,count($PARENTESI)-1);
//$opz = $PARENTESI[$SN];
$CHIAVE = explode(")",$parola);
$parola = trim($CHIAVE[1]);
//genero tutte le varianti
$ARR[key] = $parola;
$c = sizeof($PARENTESI)-1;
while(list($k, $v)=each($PARENTESI)) {
$v = trim($v);
if($k != $c) $alt .= $v." ".$parola."|";
else $alt .= $v." ".$parola;
}
if(sizeof($PARENTESI) > 2) $alt = $alt."|".$parola;
$ARR[alt] = $alt;
//if($tipo == "pulita") return trim($CHIAVE[1]);
//else return $opz." ".trim($CHIAVE[1]);
return $ARR;
}
function ind_key_val($stringa,$sep,$k_p){
$K = explode($sep,$stringa);
while(list($k, $v)=each($K)) {
//$k = $k_p.$k;
$v = trim($v);
$OUT[$k] = $v;
//print "$k --> $v \n";
}
return $OUT;
}
//genera una parola chiave in formato esteso, dalla lista delle parole
function ind_mix_key($K) {
//completo
while(list($k, $v)=each($K)) {
$Y = ind_key_val($v,",",$k);
$SN = rand(0,count($Y)-1);
//print $SN;
//print $Y[2];
if($k == 1 or $k == 2 or rand(0,1)) $OUT .= ind_componi_parola($Y[$SN])." ";
}
return $OUT;
}
//ritorna una parte random di aaaa|bbbbb|ccccc, torna bbbbb
function ind_decidi($stringa){
$OPZ = explode("|",$stringa);
$SN = rand(0,count($OPZ)-1);
$out = $OPZ[$SN];
return $out;
}
//genera un testo casuale per il meta description
function ind_testo_casuale($testo) {
global $IND;
$pattern = '/\[([^\]\[]*?)\]/si';
//$pattern = '/\(([^\)\(]*?)\)/si';
if (preg_match_all ($pattern, $testo, $matches)) {
// nl2br(print_r ($matches));
} else {
//print ("Not matched!\r\n");
}
while(list($k, $v)=each($matches[1])) {
//print ind_decidi($v)."
";
$REP[$k] = ind_decidi($v);
}
$out = str_replace($matches[0], $REP, $testo);
return $out;
}
//FUNZIONE SUPERGENERICA DI INDI2
//PASSATA UNA STRINGA O UN ARRAY, RITORNA SEMPRE UN ARRAY DI STRINGHE
//SCOMPOSTE CON IL SEPARATORE CHE TROVA IN AUTOMATICO FRA (, o |)
//se non c'e' un separatore torna un ARRAY di 1 elemento comunque
//se c'e' un formato chiave valore, ritorna una chiave numerica incrementale, senno' ritorna chiave valore nel modo giusto
//formato $a = "chave->valore, chiave2->valore2", o $a = "valore1, valore2, valore3";
function ind_scomponi2 ($OGGETTO) {
//controllo se e' un array
if (is_array($OGGETTO)) {
return $OGGETTO;
} else {
$OGGETTO2 = explode(",",$OGGETTO);
if(sizeof($OGGETTO2) > 1) {
while(list($k, $v)=@each($OGGETTO2)) {
$OUT = explode("->",$v);
if(sizeof($OUT) > 1) {
//Se torna qualcosa, allora torno l' array con chiave valore
$chiave = trim($OUT[0]);
$valore = trim($OUT[1]);
$OUT2[$chiave] = "$valore";
} else {
//siamo nel caso in cui non c'e' la chiave, la aggiungo
$OUT2[] = trim($v);
}
}
return $OUT2;
} else {
//E' una stringa controllo preseza parentesi
//$OUT = ind_parentesi2($OGGETTO,"[","]");
//if($OUT != FALSE) {
$OUT = explode("->",$v);
if(sizeof($OUT) > 1) {
//Se torna qualcosa, allora torno l' array con chiave valore
$chiave = trim($OUT[0]);
$valore = trim($OUT[1]);
$OUT2[$chiave] = "$valore";
return $OUT2;
} else {
//siamo nel caso in cui non c'e' la chiave, la aggiungo
$OUT[0] = trim($OGGETTO2[0]);
return $OUT;
}
}
}
}
//INDI2 (non usato)
//ritorna un array con il testo fra parentesi e quello fuori dalle parentesi
function ind_parentesi2($str, $start, $end)
{
$str_low = @trim(strtolower($str));
$pos_start = @strpos($str_low, $start);
$pos_end = @strpos($str_low, $end, ($pos_start + strlen($start)));
if ( ($pos_start !== false) && ($pos_end !== false) )
{
$pos1 = $pos_start + strlen($start);
$pos2 = $pos_end - $pos1;
$OUT[chiave] = trim(@substr($str, $pos1, $pos2));
$OUT[valore] = trim(@substr($str, $pos_end+1, strlen($str)));
return $OUT;
}
else return FALSE;
}
//ritorna il testo fra parentesi in una stringa
function ind_parentesi($str, $start, $end)
{
$str_low = @trim(strtolower($str));
$pos_start = @strpos($str_low, $start);
$pos_end = @strpos($str_low, $end, ($pos_start + strlen($start)));
if ( ($pos_start !== false) && ($pos_end !== false) )
{
$pos1 = $pos_start + strlen($start);
$pos2 = $pos_end - $pos1;
return @substr($str, $pos1, $pos2);
}
}
//funzione che data una lista separata da un separatore torna un array con il valore e indice progressivo
function ind_scomponi_gen ($stringa,$separatore) {
if (!$stringa) return FALSE;
if (!$separatore) return FALSE;
$ARR = explode($separatore,$stringa);
return $ARR;
}
//suddivide inri nelle sue componenti parola valore
function ind_scomponi_inri($inri) {
//suddivido le parti
$LINK = explode("|",$inri);
if (!$LINK[1]) {
$key = trim($LINK[0]); //seconda parola
$val = trim($IND[peso_def]);
} else {
$key = trim($LINK[1]);
$val = trim($LINK[0]);
}
//Adesso ho la chiave e il valore della key principale
//carico la lista
$KEY[key] = $key;
$KEY[valore] = $val;
return $KEY;
}
function ind_scomponi_parola($key) {
//suddivido le parti
$KEY = explode(" ",$key);
while(list($k, $v)=each($KEY)) {
if ($v) $ARR[] = trim($v);
}
return $ARR;
}
//Creo un array degli inri trovati
function ind_key_base($lang) {
global $MENU;
reset($MENU);
while(list($pag, $APAG)=each($MENU)) {
while(list($lan, $dati)=each($APAG)) {
if($lan == $lang) {
$KEY[$pag] = $MENU[$pag][$lan][inri];
}
}
}
return $KEY;
}
// indice principale keyword -> peso
function ind_key_base_val($lang) {
global $MENU,$IND;
reset($MENU);
while(list($pag, $APAG)=each($MENU)) {
while(list($lan, $dati)=each($APAG)) {
if($lan == $lang) {
$KEY[$pag] = $MENU[$pag][$lan][inri];
}
}
}
if (!$KEY) return 0;
while(list($k, $v)=each($KEY)) {
$KEYA = explode("|",$v);
if (!$KEYA[1]) {
$key = trim($KEYA[0]); //seconda parola
$val = trim($IND[peso_def]);
} else {
$key = trim($KEYA[1]);
$val = trim($KEYA[0]);
}
$KEY_DEF[$key] = $val;
}
asort($KEY_DEF);
reset($KEY_DEF);
return $KEY_DEF;
}
// GENERAZIONE ################################
//genera il link a partire da una parola
function ind_genera_link($link) {
$link = str_replace(" ","-",$link);
$link = str_replace("'","-",$link);
$link = str_replace("/","-",$link);
$link = str_replace("\\","-",$link);
//pseudo valore casuale
//$rand = abs(crc32($KEYI[key]) + $IND[rand]);
return ''.$link.'.html';
}
//genera titolo
function genera_titolo() {
global $DATI;
//se e' gia impostato manuale
if ($DATI["title"]) return $DATI["title"];
//se uso indi
if ($DATI["INDI"] == "SI") return ind_genera_titolo();
//senno' genero automatico da menu
if($DATI[nome] != "") $menu = $DATI[nome];
if($DATI[menu_txt] != "") $menu = $DATI[menu_txt];
if($menu) $menu = " - $menu";
//chiave
if($DATI[key] != "") $key = " - $DATI[key]";
$DATI["title"] = $DATI[nome_sito].$menu.$key;;
return $DATI["title"];
}
function genera_mkey() {
global $DATI;
//se e' gia impostato manuale
if ($DATI["mkey"]) return $DATI["mkey"];
//se uso indi
if ($DATI["INDI"] == "SI") return ind_genera_mkey();
//senno' genero automatico da menu
return $DATI[nome_sito]." - ".$DATI[menu_txt]." - ".$DATI[key];
}
function genera_mdesc() {
global $DATI;
//se e' gia impostato manuale
if ($DATI["mdesc"]) return $DATI["mdesc"];
//se uso indi
if ($DATI["INDI"] == "SI") return ind_genera_mdesc();
//senno' genero automatico da menu
return $DATI[nome_sito]." - ".$DATI[menu_txt]." - ".$DATI[key];
}
//Genera titolo a partire da inri
function ind_genera_titolo() {
global $DATI;
//se c'e' il titolo lo metto
return ind_rimuove_duplicati(ucfirst($DATI[key]));
}
function ind_genera_mkey() {
global $DATI, $KEYK;
$lang = $DATI[lang];
//se c'e' il titolo lo metto
$out = str_replace("#KEY#",ucfirst($DATI[key]),$KEYK[$lang]);
return ind_rimuove_duplicati(ucfirst($out));
}
// 20-40 parole
function ind_genera_mdesc() {
global $DATI, $KEYM;
$lang = $DATI[lang];
$out = $KEYM[$lang];
if($DATI[parola1] == "") $DATI[parola1] = ucfirst($DATI[key]);
if($DATI[parola2] == "") $DATI[parola2] = ucfirst($DATI[key]);
if($DATI[parola3] == "") $DATI[parola3] = ucfirst($DATI[key]);
$out = str_replace("#KEY1#",$DATI["parola1"],$out);
$out = str_replace("#KEY2#",$DATI["parola2"],$out);
$out = str_replace("#KEY3#",$DATI["parola3"],$out);
//$out = ind_testo_casuale($KEYM[$lang]);
//$OUT = explode("#KEY#",$out);
//nuemro delle chiavi presenti
//$numero_chiavi = sizeof($OUT)-1;
//creo un array di chiavi in base al numero, le parole aggiuntive sono mella stringa paroel_agg
//ind_decidi($DATI[parole_agg]);
//d($OUT);
//for ($i = 0; $i < $numero_chiavi; $i++ ) {
//sostituisco chiavi diversificate se possibile
// $out2 .= $OUT[$i]."#KEY$i#";
// }
//$pattern = '/\(([^\)\(]*?)\)/si';
//$out = str_replace("#KEY1#", "
-", "$out");
//$out = str_replace("#KEY2#", "
-", "$out");
//$out = str_replace("#KEY3#", "
-", "$out");
return ucfirst(ind_rimuove_duplicati($out));
}
function ind_sos_key($out) {
global $DATI;
return str_replace("#KEY#",ucfirst($DATI["key"]),$out);
}
function ind_genera_h1() {
global $MENU,$pagina,$lang;
return $MENU[$pagina][$lang][titolo];
}
//breve descrizione simile al meta desc, potrebbe essere uguale
function ind_genera_h2() {
}
//la prima frase e' la piu' importante
//5% e 25% del body, link con key + testo
function ind_genera_p() {
global $DATI,$KEYS,$IND;
//se non c'e' trovo soluzione ??
//$txt = ind_testo_casuale($KEYM[ita]);
//sostituisco al testo la parola chiave
//carico testo
$TXT = file_get_contents($IND[testi_indi].$DATI[lang].".txt");
$TXT = str_replace("\n\r", "", "$TXT");
$TXT = explode(".",$TXT);
shuffle($TXT);
for ($i = 1; $i <= 5; $i++) {
$out.=$TXT[$i].".";
}
$out = str_replace("?", "?
", "$out");
$out = str_replace(".", ".
", "$out");
$out = str_replace("-", "
-", "$out");
$out = "".$out."
";
$out = encode($out);
return $out;
}
//genera i testi del link??
function ind_testo_link ($inri) {
return $inri;
}
function ind_genera_menu() {
global $MENU,$pagina,$lang;
reset($MENU);
while(list($k, $v)=each($MENU)) {
while(list($kk, $vv)=each($v)) {
if($kk == $lang) {
//$txtlink = ind_testo_link($MENU[$k][$lang][inri]); //??
$txtlink = $MENU[$k][$lang][key];
$href = genera_link($k,$lang);
if($MENU[$k]["xxx"]["vis"] != "NO") {
if($pagina == $k) $link .= ''.$txtlink.' | ';
else $link .= ''.$txtlink.' | ';
}
}
}
}
return $link;
}
function ind_genera_menu_indi() {
global $INDI,$CONF,$MENU,$pagina,$lang;
if($CONF["INDI"] != "SI") return "";
reset($INDI);
reset($MENU);
while(list($k, $v)=each($INDI)) {
$pagina2 = $v[pagina];
if($v[lang] == $lang and $MENU[$pagina2][xxx][nome] != "") {
//$txtlink = ind_testo_link($MENU[$k][$lang][inri]); //??
$txtlink = $MENU[$pagina2][xxx][nome];
$href = $v[link];
if($pagina == $v[pagina]) $link .= ''.$txtlink.' | ';
else $link .= ''.$txtlink.' | ';
}
}
return $link;
}
// ##################### FUNZIONI INDICIZZAZIONE DA RIVEDERE ###################################################
// Trasforma sintessi semplice in parolachiave -> valore
//e mette valore di def se non specificato
//print "
";
//print genera_menu();
//##################################################################
//########################## FUNZIONI //############################
//##################################################################
//funzione per template di configurazione
function tconf($template) {
GLOBAL $DATI,$TCONF;
if (!$template) return 0;
$DATI = array_merge($DATI, $TCONF[$template]);
}
// DATABASE //######################################################
function query($query) {
//print "
$query";
global $db_host, $db_user, $db_pass, $db_name, $db_debug;
if (!$link = @mysql_pconnect($db_host, $db_user, $db_pass)) {
$result = 0;
print ("
Errore nella connessione a $db_host!");
}
else {
if (!@mysql_select_db($db_name, $link)) {
$result = 0;
print ("
Errore nella selezione del DB: $db_name
");
}
else {
if (!$result = @mysql_query($query, $link)) {
$result = 0;
print ("
Errore nella query: $query!");
}
}
}
return $result;
}
//funzione importante di generazione link. ??? ancora
function genera_link($pagina,$lang=NULL,$agg=NULL,$ancora=NULL) {
global $DATI,$INDI,$CONF;
if($lang == NULL) $lang = $DATI["lang"];
//sistemo variabili in ingresso in caso di errori
$agg=trim($agg);
$lang=trim($lang);
$pagina=trim($pagina);
//$sito = $CONF[path];
//$param="1000";
//controllo lingua e la pagina senno' considero quella corrente
//if ($lang2 == "") $lang2 = $lang;
//if ($pagina2 == "") $pagina2 = $pagina;
//if($MENU[$pagina2][$lang2][inri] == "") $pagina2 = $pagina;
if($DATI["INDI"] == "SI") {
//passo meno parametri agli altri ci pensa lui
//sono nel caso di generazione di una pagina interna
$OUT = ind_prende($pagina,$lang,$agg);
$link = $OUT[link];
$url_completo = urlencode($link);
//$url_completo = $link;
return ($url_completo.$ancora);
}
//sono nell' altro caso non INDI
$link = "$CONF[nome_programma]?p=$pagina&l=$lang";
if($agg != "") $link .= "&".$agg;
return ($sito.$link.$ancora);
}
//Genera l' indirizzo e-mail nascosto con il javascript e tracciato con il programma INRI
function genera_email($email=NULL,$testo_link=NULL,$STAT=NULL) {
global $DATI;
//controllo statistiche
if($DATI[STAT] == "SI") $stat = " OnClick='+ prog+'(\"'+dp+'\",\"mail\",\"width=10,height=10\");";
//if(is_array($STAT))
$stat_url = serialize($STAT);
$path = "index.php?t=stat&stat=".urlencode($stat_url);
//$path = "index.php?t=stat";
if($email == NULL) $email = $DATI[email];
if($email != "") {
$EMAIL = explode("@",$email);
if($testo_link == NULL) $testo = "emailX=emailE;";
else $testo = 'emailX="'.encode($testo_link).'";';
$email_java = '
';
return $email_java;
}
}
// GENERA //######################################################
/*function genera_BASE() {
$HH = $_SERVER["HTTP_HOST"];
$DR = $_SERVER["DOCUMENT_ROOT"];
$SF = $_SERVER["SCRIPT_FILENAME"];
$AA = explode($DR,$SF);
$BB = explode("/",$AA[1]);
for ($i = 0; $i < sizeof($BB)-1; $i++ ) {
$U = $U."/".$BB[$i];
}
if (substr($U, 0,1) == "/") return substr($U, 1); else return $U;
}
*/
function genera_BASEURL() {
$HH = $_SERVER["HTTP_HOST"];
$DR = $_SERVER["DOCUMENT_ROOT"];
$SF = $_SERVER["SCRIPT_FILENAME"];
$AA = explode($DR,$SF);
$BB = explode("/",$AA[1]);
for ($i = 0; $i < sizeof($BB)-1; $i++ ) {
$U = $U."/".$BB[$i];
}
//if (substr($U, 1,1) == "/") $U = substr($U, 1);
$U = str_replace("//","/",$U."/");
return ("http://".$HH.$U);
}
function genera_BASE() {
$HH = $_SERVER["HTTP_HOST"];
$DR = $_SERVER["DOCUMENT_ROOT"];
$SF = $_SERVER["SCRIPT_FILENAME"];
$AA = explode($DR,$SF);
$BB = explode("/",$AA[1]);
for ($i = 0; $i < sizeof($BB)-1; $i++ ) {
$U = $U."/".$BB[$i];
}
$U = str_replace("//","/",$U."/");
//if (substr($U, 1,1) == "/") $U = substr($U, 1);
return $U;
}
/*
function genera_PATH() {
global $CONF;
return genera_BASEURL().$CONF[nome_programma];
}
*/
function HCSS() {
global $DATI;
if ($DATI[HCSS] == "SI"){
return ('
');
}
}
function genera_IND_TXT() {
global $DATI;
if ($DATI[INDI] == "SI"){
return ('
H111111111111111111
');
}
}
function genera_dominio() {
global $CONF;
//if (!stristr($_SERVER['SERVER_NAME'],$CONF[locale])) $sito = $CONF[sito_locale];
//else $sito = $CONF[sito_remoto];
return $CONF[baseurl];
}
// INCLUSIONI E PAGE REL //######################################################
function includi_pagina($pagina,$lang) {
GLOBAL $DATI;
$pagina_inc = $DATI[dir_pagine].'_'.$pagina.'.inc.php';
if ($pagina_inc) include($pagina_inc);
else print "###### ERRORE PAGINA $pagina ########";
}
//FUNZIONI BASE ###########################################
//funzione per fare merge di configurazione su gruppi livelli e riferimenti
function glr($pagina) {
global $CONF;
//$DATI = array_merge($CONF, $DATI);
//ritorno superglobal
$GLOBALS["MENU"] = $MENU;
$GLOBALS["DATI"] = $DATI;
$GLOBALS["CONF"] = $CONF;
}
//genra il codice per il javascript
function genera_javascript() {
global $DATI;
if($DATI["javascript"] != "") {
return('
');
}
}
function genera_css() {
global $DATI;
if($DATI["css"] != "") {
return("\n\r");
}
}
//aggiungo del codice javascript nella pagina
function javascript($codice) {
global $DATI;
if ($codice != "") {
$DATI["javascript"] .= $codice."\n\r";
}
}
function css($codice) {
global $DATI;
if ($codice != "") {
$DATI["css"] .= $codice."\n\r";
}
}
//ripristina i valori provenienti dal GET
function ind_valori_agg($agg) {
//$origin="http://inri.tnx.dyndns.org/index.php/eng_test1_.html?a=100&b=1000";
//$tab=parse_url($origin);
//$query=$tab["query"];
if(@stristr("&",$agg)) {
$variables=explode("&",$query);
for ($i=0;$i<=count($variables);$i++){
$tab=explode("=",$variables[$i]);
// $$tab[0]=$tab[1];
$_GET[$tab[0]] = $tab[1];
}
} else {
$query=$agg;
$variables=explode("&",$query);
for ($i=0;$i<=count($variables);$i++){
$tab=explode("=",$variables[$i]);
// $$tab[0]=$tab[1];
$_GET[$tab[0]] = $tab[1];
}
}
}
function valori_redirect($agg) {
//$origin="http://inri.tnx.dyndns.org/index.php/eng_test1_.html?a=100&b=1000";
//$tab=parse_url($origin);
//$query=$tab["query"];
$query=$agg;
$variables=explode("&",$query);
for ($i=0;$i<=count($variables);$i++){
$tab=explode("=",$variables[$i]);
// $$tab[0]=$tab[1];
$_GET[$tab[0]] = $tab[1];
}
}
function simile($a,$b) {
$len = strlen($a);
$similar = similar_text($a,$b);
$out = abs(round((((($len - $similar) / $len)*100))-100));
return $out;
}
function vemail($e,$v=-1) {
global $verbose;
/*
Return codes:
0: appears to be a valid email
1: didn't match pattern of a valid email
2: looks valid by the pattern, but no DNS records found
Try several things to make sure it is most likely valid:
1. preg_match it to make sure it looks valid
2a. If that passes, check for an MX entry for the domain
2b. If no MX, check for any DNS entry for the domain
*/
if ($v==-1) { $v=$verbose; }
if (!preg_match("/^[a-z0-9.+-_]+@([a-z0-9-]+(.[a-z0-9-]+)+)$/i",
$e, $grab)) {
return 1;
}
# $grab[0] is the whole address
# $grab[1] is the domain
$domain = $grab[1];
$cmds = array("host -t MX $domain 2>&1 ","host $domain 2>&1 ");
foreach ($cmds as $cmd) {
$dns = trim(`$cmd`);
if ($v) { print "n"; }
if (strpos($dns,"$domain mail is handled ")!==false ||
strpos($dns,"$domain has address ")!==false ||
strpos($dns,"$domain is an alias ")!==false) {
# It is valid
return 0;
}
}
# If it didn't return yet, it's invalid, even though it passed the preg.
return 2;
}
function dbquote($a) {
if (get_magic_quotes_gpc() == 0) {
if (is_array($a)) {
while (list ($k, $v) = each ($a)) {
$b[$k] = addslashes ($v);
}
return $b;
}
else {
$b = addslashes($a);
return $b;
}
} else {
return $a;
}
}
function dbquote2($a) {
if (is_array($a)) {
while (list ($k, $v) = each ($a)) {
$b[$k] = addslashes ($v);
}
return $b;
}
else {
$b = addslashes($a);
return $b;
}
}
//funzione da richiamare prima della manipolazione del testo che proviene da form o da url, la funzione toglie gli slash che vegono aggiunti se la magick quote sono attive
function dataquote($a) {
if (get_magic_quotes_gpc() == 1) {
if (is_array($a)) {
$b = array();
while (list($key,$val) = each($a)) $b[$key] = stripslashes($val);
return $b;
}
else {
$b=stripslashes($a);
}
return $b;
} else {
return $a;
}
}
// funzione da richiamare prima di mandare il testo al browser, in pratica quota i caratteri speciali dell' html come "<>&" ecc.
function webquote2($a) {
if (is_array($a)) {
$b = array();
while(list($k,$v) = each($a))
$b[$k]=str_replace("'", "'", htmlentities($v));
return $b;
}
else {
$b=str_replace("'", "'", htmlspecialchars($a));
}
return $b;
}
// funzione da richiamare prima di mandare il testo al browser, in pratica quota i caratteri speciali dell' html come "<>&" ecc.
function webquote($a) {
if (is_array($a)) {
$b = array();
while(list($k,$v) = each($a))
$b[$k]=htmlentities($v);
return $b;
}
else {
$b=htmlentities($a);
}
return $b;
}
function webquote_dataquote($a) {
if (is_array($a)) {
$b = array();
while(list($k,$v) = each($a))
$b[$k]=webquote(dataquote($v));
return $b;
} else {
$b=webquote(dataquote($a));
}
return $b;
}
function encode($string) {
$pattern = '<([a-zA-Z0-9\.\, "\'_\/\-\+~=;:\(\)?%![\]@]+)>';
preg_match_all ('/' . $pattern . '/', $string, $tagMatches, PREG_SET_ORDER);
$textMatches = preg_split ('/' . $pattern . '/', $string);
foreach ($textMatches as $key => $value) {
$textMatches [$key] = htmlentities ($value);
}
for ($i = 0; $i < count ($textMatches); $i ++) {
$textMatches [$i] = $textMatches [$i] . $tagMatches [$i] [0];
}
return str_replace(" ", " ",implode ($textMatches));
}
function encode2($str)
{
$str = ereg_replace("’", "'", $str);
$str = ereg_replace("‘", "'", $str);
$tbl = get_html_translation_table(HTML_ENTITIES);
unset ($tbl["<"]);
unset ($tbl[">"]);
unset ($tbl["'"]);
unset ($tbl['"']);
unset ($tbl['&']);
$tbl["“"] = """;
$tbl["”"] = """;
$tbl["…"] = "...";
$tbl["-"] = "-";
$tbl["»"] = "»";
$tbl["«"] = "«";
return str_replace(array_keys($tbl),array_values($tbl),$str);
}
// FUNZIONE DI OUTPUT
//riscrive tutto in base a tante cosine :-))
function output($buffer){
global $DATI;
//JETBOX
if($DATI[jetbox] == "SI") {
$buffer = str_replace($DATI[jetbox_webimage_src],$DATI[jetbox_webimage_dst], $buffer);
$buffer = str_replace($DATI[jetbox_webfiles_src],$DATI[jetbox_webfiles_dst], $buffer);
}
//imposto base
$buffer = str_replace("#BASE#", $DATI[baseurl], $buffer);
//per ind avanzata
$buffer = str_replace("#TITLE#",genera_titolo(), $buffer);
$buffer = str_replace("#MKEY#",genera_mkey(), $buffer);
$buffer = str_replace("#MDESC#",genera_mdesc(), $buffer);
//PAGINA
$buffer = str_replace("#PAGINA#",$DATI[menu_txt], $buffer);
// sostituisco le chiavi sparse
$buffer = ind_sos_key($buffer);
$buffer = str_replace("#JAVASCRIPT#",genera_javascript(), $buffer);
$buffer = str_replace("#CSS#",genera_css(), $buffer);
$buffer = str_replace($DATI["path_rel"].$DATI["dir_indi"], $DATI["dir_indi"], $buffer);
$buffer = str_replace($DATI["path_rel"].$DATI["dir_pagine"], $DATI["dir_pagine"], $buffer);
$buffer = str_replace($DATI["path_rel"].$DATI["dir_file"], $DATI["dir_file"], $buffer);
$buffer = str_replace($DATI["path_rel"].$DATI["dir_pic"], $DATI["dir_pic"], $buffer);
return($buffer);
}
//############## DEBUG ###############################
//#####################################################
//#####################################################
function d_info($D,$nome=NULL,$gruppo=NULL) {
d($D,$nome,"info",$gruppo);
}
function d_err($D,$nome=NULL,$gruppo=NULL) {
d($D,$nome,"errore",$gruppo);
}
function d($D,$nome=NULL,$tipo=NULL,$gruppo=NULL) {
global $CONF;
global $DEBUG;
$indice = sizeof($DEBUG)+1;
if($gruppo == "") $gruppo = $CONF[debug_gruppo_def];
if($tipo == "") $tipo = $CONF[debug_tipo_def];
$DEBUG[$indice][vari] = $D;
$DEBUG[$indice][nome] = $nome;
$DEBUG[$indice][tipo] = $tipo;
$DEBUG[$indice][gruppo] = $gruppo;
$DEBUG[$indice][contesto] = $DATI[debug_contesto];
}
//da togliere vecchia
function dd($D) {
//cicolo il mio debug
while(list($k,$v) = each($D)) {
ddd($v);
}
}
//funzione di visualizzazione che usa la funzione passata per fare quello che si vuole
function d_vis($D,$f_vis="d_vis_default") {
//cicolo il mio debug
while(list($k,$v) = each($D)) {
$f_vis($v);
}
}
//vecchia da togliere
function ddd($D,$nome="") {
global $DATI;
if($DATI[debug] == "SI") {
//funzione di debug
if(is_array($D[vari])) {
print "";
print ("$D[tipo] : $D[nome] :");
print_r($D[vari]);
print "";
}
else {
print ("$D[tipo] : $D[nome] : $D[vari]
");
}
}
}
function d_vis_default($D) {
global $DATI;
//if($DATI[debug] == "SI") {
//funzione di debug
if(is_array($D[vari])) {
print "";
print ("$D[tipo] : $D[nome] :");
print_r($D[vari]);
print "";
}
else {
print ("$D[tipo] : $D[nome] : $D[vari]
");
}
//}
}
?>