function mod_pc_salva_servizio($urlSenzaSchemaOId /* js.stripe.com/v3/ */, $type = null/* script/frame */, $segnala = false, $full_html_per_debug = ''){ global $CONF; if($CONF['mod_pc_gdpr_version'] != "gdpr-2022") return; if($CONF['mod_pc_services'][$urlSenzaSchemaOId]){ $firstKey = array_shift(array_keys($CONF['mod_pc_services'][$urlSenzaSchemaOId]['csp'])); $type = substr($firstKey, 0, -4); $urlSenzaSchema = $CONF['mod_pc_services'][$urlSenzaSchemaOId]['csp'][$firstKey][0]; } else{ if(!$type) trigger_error("passare il tipo (frame o script)"); $urlSenzaSchema = $urlSenzaSchemaOId; } $sql = []; $sql['url'] = "http".(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 's' : '')."://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; $sql['src'] = $urlSenzaSchema; $sql['type'] = $type; // necessario se rimetto il "filtro host" (cerca altro commento) // db_q("delete from tnx_pc_services where url not like '%://".$_SERVER["SERVER_NAME"]."%'"); db_q(" INSERT INTO tnx_pc_services SET ".arrayToSql($sql).", last_seen = CURRENT_TIMESTAMP ON DUPLICATE KEY UPDATE last_seen = CURRENT_TIMESTAMP " ); if($full_html_per_debug /*era $segnala*/ && db_affected_rows() == 1){//With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if the row is inserted as a new row and 2 if an existing row is updated. if(strpos($urlSenzaSchema, "www.gelapajo.it") !== false) mailtnx($_SERVER['TNX_SERVER_ID']=='demo'?'c@localhost':"carlo@tnx.it", "Debug caricamento script da wwww.gelapajo.it", __FILE__.":".__LINE__."\n".print_r(array($full_html_per_debug, $_REQUEST, $_SERVER), true)); _mod_pc_find_module($urlSenzaSchema, $type, true);//per trigger error se non esiste } } function _mod_pc_find_module($src, $type, $segnala = false){ global $CONF; //se src finisce con " (anonymized)" aggiungo "-anonymized" foreach($CONF['mod_pc_services'] as $id=>$config) if($srcs = $config['csp'][$type.'-src']) foreach($srcs as $s) if(strpos($src, substr($s,0,50)/*nella config può essere più lungo ma nel db è max 50 char*/) === 0){ $return = $id; // if(substr($src, -1*strlen(" (anonymized)")) == " (anonymized)") $return .= "-anonymized"; break 2; } if(!$return && $segnala){ trigger_error("MOD_PC servizio non trovato per $type ".$src); if($segnala !== true) mailtnx("carlo@tnx.it", "MOD_PC servizio non trovato per $type ".$src, $segnala); } return $return; } if(is_404() and is_spider() and is_ajax()) return; require("mod_privacy_cookie_db.php"); $sitiSenzaDatabaseConVecchioGestoreCookies = [ "moduloforniture",//www.moduloforniture.it "nonnavarna",//www.nonnavarna.it "villa-tuscany",//www.villa-tuscany "abagroup",//www.abagroupholiday.it "casa_florelia",//www.florelia.net "primetta_house",//www.primettahouse.it "forme_sul_cristallo",//www.formesulcristallo.it "agriturismoilgirasole",//www.agriturismoilgirasole.com "nuova_legno_infissi_casa",//www.legnoinfissi.com "studio_futura_infortunistica",//www.studio-futura "gelateriadellolmo",//www.gelateriadellolmo.com "il_trovatore",//www.trovatoresangimignano.com "ciccorossi_nencini",//www.ciccorossi.com "essegidivani",//www.essegidivani.it "bandaballoons",//www.bandaballoons.com "agritecainpiazza",//www.agritecainpiazza.it "made",//www.seomade.it "studiorossisbaragli",//www.studiorossisbaragli.it "disegnatore3dinventor",//www.disegnatore3dinventor.it "centenario_intercultura",//www.100anniafs.eu "privacy",//privacy.tnx.it ]; $CONF['mod_pc_privacy_personalizzata'] = false;//disattiva pagina privacy (e relativi errori) se è gestita in altro modo $CONF['mod_pc_gdpr_version'] = !in_array($CONF['sito'], $sitiSenzaDatabaseConVecchioGestoreCookies) ? "gdpr-2022" : false; $CONF['mod_pc_no_cookie'] = false;//per usare il gestore su un sito senza db che non ha cookie di terze parti $CONF['mod_pc_gdpr'] = false;//prima versione gdpr, fatta da damiano, deprecata in favore di mod_pc_gdpr_version // $CONF['mod_pc_gdpr_version'] = $_COOKIE['debugtnx'] || $CONF['dove_sono'] == 'loc' ? "gdpr-2022" : false; //servizi esterni // $CONF['mod_pc_discover_all_until'] = mt_rand(0,3) ? false : (time()+10);//timestamp nel futuro fino a quando vengono parsate tutte le pagine alla ricerca di (da utilizzare quando si attiva il servizio per brevi periodi) $CONF['mod_pc_discover_all_until'] = !$_GET['debugtnx'] && !$_GET['show_external'] ? false : (time()+10); // $CONF['mod_pc_discover_all_until'] = mktime(9 /*hours*/, 0 /*minutes*/, 0 /*seconds*/, 9 /*month*/, 15 /*day*/, 2022); $CONF['mod_pc_discover_probability'] = 20;//parsa una pagina ogni $CONF['mod_pc_reloadWithParam'] = false; // if($_GET['test-gdpr-2022'] || in_array($_SERVER["REMOTE_ADDR"], ["192.168.0.177", "192.168.0.77"])){ // $CONF['mod_pc_gdpr_version'] = "gdpr-2022"; // $CONF['mod_pc_discover_all_until'] = time() + 10; // } $CONF['mod_pc_ver'] = 41;//usata nell'include privacy-cookie.js?v={mod_pc_ver} $CONF['mod_pc_color'] = ''; $CONF['mod_pc_ignore_js_blocks_with'] = []; $CONF['mod_pc_module'] = "AUTO"; //google, video, maps, ecomm, auth, analitycs, addthis, addtoany, newsletter, sess, tracking, profiling, google_adsense $CONF['mod_pc_menu_template'] = ' {mod_pc_cookie_template|add_sx( - )} {mod_pc_privacy_template|add_sx( - )} {mod_pc_dsa_template|add_sx( - )}';//template del menu //$CONF['mod_pc_menu_template'] = ' {mod_pc_cookie_template|tag(li)} {mod_pc_privacy_template|tag(li)}';//template del menu $CONF['mod_pc_baseurl'] = $CONF['baseurl']; //usato per la generazione dei link automatici se non vengono fornite i link dei vari iframe $CONF['mod_pc_include_javascript'] = TRUE; //include il codice javascript per i cookie $CONF['mod_pc_menu_template_class'] = NULL;//classe a cui si attacca il menu //template custom utente, di default controlla se esiste "_template/" . $_GET["t"] . "-custom.php" $CONF['mod_pc_privacy_custom_template'] = ''; $CONF['mod_pc_cookie_custom_template'] = ''; //---------- BANNER $CONF['mod_pc_cookie_banner'] = "AUTO"; //TRUE | FALSE banner di notifica $TXT["ita"]["mod_pc_cookie_banner_txt_1"] = 'CHIUDI'; $TXT["xxx"]["mod_pc_cookie_banner_txt_1"] = 'CLOSE'; $TXT["ita"]["mod_pc_cookie_banner_txt_2"] = 'Utilizzo dei cookies'; $TXT["ita"]["mod_pc_cookie_banner_txt_3"] = 'Utilizziamo cookie##mod_pc_cookie_banner_txt_profiling## proprietari e di terze parti al fine di migliorare i nostri servizi. Navigando il sito o chiudendo questo banner, accetti di installare dei cookie da parte nostra. Per informazioni o per modificare la configurazione dei cookie, consulta la nostra pagina'; $TXT["ita"]["mod_pc_cookie_banner_txt_4"] = 'politica relativa ai cookie'; $TXT["ita"]["mod_pc_cookie_banner_txt_5"] = 'di profilazione e tracciamento'; $TXT["xxx"]["mod_pc_cookie_banner_txt_2"] = 'Use of cookies'; $TXT["xxx"]["mod_pc_cookie_banner_txt_3"] = 'We use cookies, third party cookies##mod_pc_cookie_banner_txt_profiling## in order to improve our services. Browsing the site, you accept the use of cookies by us. For more information or to find out how to change the configuration, please see our page'; $TXT["xxx"]["mod_pc_cookie_banner_txt_4"] = 'policy on cookies'; $TXT["xxx"]["mod_pc_cookie_banner_txt_5"] = ', profiling and traking cookie'; //template nero //$CONF['mod_pc_cookie_banner_template'] = '
'; //template bianco $CONF['mod_pc_cookie_banner_template'] = ''; $i = 0; foreach($CONF['mod_pc_services'] as $id=>$config){ // $CONF['mod_pc_services'][$id]['required'] = true; $CONF['mod_pc_services'][$id]['ord'] = 1000 * ++$i; // if(!$config['descrizione']['ita']){ // $CONF['mod_pc_services'][$id]['descrizione']['ita'] = 'Descrizione di '.$id; // } // if(!$config['privacyUrl']) $CONF['mod_pc_services'][$id]['privacyUrl'] = 'https://www.google.com/search?q=privacy+policy+'.urlencode($CONF['mod_pc_services'][$id]['nome']['eng']); } if($DB['database']) db_q("CREATE TABLE IF NOT EXISTS `tnx_pc_services` ( `src` VARCHAR(50) NOT NULL COLLATE 'utf8_general_ci', `type` VARCHAR(6) NOT NULL COLLATE 'utf8_general_ci', `url` VARCHAR(255) NOT NULL COLLATE 'utf8_general_ci', `first_seen` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `last_seen` TIMESTAMP NOT NULL DEFAULT '0000-00-00', PRIMARY KEY (`src`, `type`) USING BTREE ) COLLATE='utf8_general_ci' ENGINE=MyISAM ;"); //---------- COOKIE ------------------- $CONF['mod_pc_cookie_template'] = 'Cookie'; //template del menu dei cookie $CONF['mod_pc_cookie_iframe_src'] = '{|gurl({pagina_def},,t=cookie)}'; //---------- PRIVACY ---------------------- //Indicazione del titolare del trattamento (meglio specificarlo, ma va bene anche l’indicazione generica del legale rappresentante dell’azienda); //Indicazione del responsabile del trattamento (se diverso dal titolare del trattamento e, in modo particolare, se la lavorazione dei dati e l’invio di messaggi è gestita da società esterne); $CONF['mod_pc_privacy_template'] = 'Privacy'; //classe a cui si attacca il menu privacy $CONF["mod_pc_privacy_titolare_nome"] = $CONF["societa_persona"]; //Titolare privacy $CONF["mod_pc_privacy_titolare_info"] = "{indirizzo} {telefono|add_sx( - tel. )} {partita_iva|add_sx( - P.I.)} {codice_fiscale|add_sx( - C.F. )} - email {email}"; //se indirizzo diverso da quello già presente $CONF["mod_pc_privacy_responsabile_nome"] = NULL; $CONF["mod_pc_privacy_responsabile_email"] = "{email}"; $CONF["mod_pc_privacy_custom"] = NULL;//al 11/2024 non sembra essere utilizzato in nessun modo $CONF['mod_pc_privacy_iframe_src'] = '{|gurl({pagina_def},,t=privacy)}'; //form $TXT["ita"]["mod_pc_privacy_form_txt"] = 'Accetto le Norme sulla privacy'; $TXT["chi"]["mod_pc_privacy_form_txt"] = '同意隐私政策'; $TXT["xxx"]["mod_pc_privacy_form_txt"] = 'Agree to the Privacy Policy'; $TXT["ger"]["mod_pc_privacy_form_txt"] = 'Datenschutzbestimmungen angenommen'; $TXT["fra"]["mod_pc_privacy_form_txt"] = 'Accepter la politique de confidentialité'; //newsletter $TXT["ita"]["mod_pc_privacy_form_simple_txt"] = 'Dichiaro che ho preso visione delle Norme sulla privacy'; $TXT["xxx"]["mod_pc_privacy_form_simple_txt"] = 'I declare that I have read the Privacy Policy'; //newsletter $TXT["ita"]["mod_pc_privacy_form_no_indi"] = '_OBB_ Dichiaro che ho preso visione delle Norme sulla privacy'; $TXT["xxx"]["mod_pc_privacy_form_no_indi"] = '_OBB_ I declare that I have read the Privacy Policy'; //---------- DATI SOCIETARI ------------------- //Obbligatori per ECOMMERCE, e SOCIETA S.p.A. / S.a.p.A./ S.r.l. / S.r.l.s. $CONF["mod_pc_dsa_ragione"] = NULL; // "TNX s.r.l." RAGIONE SOCIALE $CONF["mod_pc_dsa_sede"] = NULL; // "Viale Marconi, 111 A/B - 50036 Poggibonsi (SI)" INDIRIZZO SEDE LEGALE $CONF["mod_pc_dsa_pec"] = NULL; // "pec@pec.it" POSTA ELETTRONICA CERTIFICATA $CONF["mod_pc_dsa_registro"] = NULL; //"Registro delle Imprese di Firenze" REGISTRO IMPRESE $CONF["mod_pc_dsa_pi"] = NULL; //PI $CONF["mod_pc_dsa_cf"] = NULL; //CF $CONF["mod_pc_dsa_rea"] = NULL; // "REA 12345" NUMERO REA $CONF["mod_pc_dsa_capitale"] = NULL; // "Capitale sociale € 4.000.000" Capitale Sociale $CONF["mod_pc_dsa_altro"] = NULL; //X SOCIETA l’eventuale liquidazione in seguito a scioglimento, eventuale stato di società con unico socio (Spa e Srl unipersonali), società o ente alla cui attività di direzione e di coordinamento la società è soggetta (art. 2497-bis c.c.). X ECOMMERCE indicazione ed estremi dell’autorità competente in caso di attività soggetta a concessione licenza o autorizzazione. $CONF["mod_pc_dsa_associazione"] = false; //compare "dati associazione" invece che "dati societari" (solo nella pagina, per cambiare il link usare $CONF['mod_pc_dsa_template'] $CONF["mod_pc_dsa_custom"] = NULL; //sovrascrive tutti i campi di template per la massima libertà $CONF['mod_pc_dsa_popup'] = FALSE; //TRUE | FALSE abilita popup iframe ??? da fare $TXT["ita"]["mod_pc_dsa_link_txt"] = 'Dati societari'; $TXT["xxx"]["mod_pc_dsa_link_txt"] = 'Company data'; $TXT["ita"]["mod_pc_dsa_link_txt_associazione"] = 'Dati associazione'; $TXT["xxx"]["mod_pc_dsa_link_txt_associazione"] = 'Association data'; $CONF['mod_pc_dsa_template'] = '##mod_pc_dsa_link_txt##'; //classe a cui si attacca il menu $CONF['mod_pc_dsa_iframe_src'] = '{|gurl({pagina_def},,t=dsa)}'; //AZIONI x implementazione modulo //banner cookie, ma non per gli spider indi_add_action("post_conf","_mod_pc_post_conf"); //template indi_add_action("pre_template","_mod_pc_pre_template"); //determino i cookie presenti sul sito analizzando il contenuto di tutte le pagine function _mod_pc_discover_all_active(){ global $CONF; return $CONF['mod_pc_discover_all_until'] && time() < $CONF['mod_pc_discover_all_until']; } function _mod_pc_autodiscover(){ global $output_sito, $DATI; if(is_404()){ //c'è un bot (YisouSpider) che fa richieste di questo tipo http://sienaart.orghttps//www.sienaart.org/About-SART/Materials-Restrictions/ return; } // print_r_tnx(trim($output_sito) , $_SERVER['REMOTE_ADDR'] == '192.168.0.177') || die; $discoverAll = _mod_pc_discover_all_active(); if( trim($output_sito) && !$DATI['mod_pc_no_cookie'] && $DATI['mod_pc_cookie_banner'] && $_SERVER["SERVER_NAME"] != 'onlinedb.tnx.it' && ( $discoverAll || ($DATI['mod_pc_gdpr_version'] == "gdpr-2022" && $DATI['mod_pc_discover_probability'] && !mt_rand(0,$DATI['mod_pc_discover_probability']-1)) ) ){ $srcs = []; libxml_use_internal_errors(true); $document = new DOMDocument(); $document->loadHTML($output_sito); //la chiave corrisponde al previsso nella direttiva csp $tags = array( 'script' => [$document->getElementsByTagName('script')], 'frame' => [$document->getElementsByTagName('iframe'), $document->getElementsByTagName('frame')] ); $inLineScripts = $GLOBALS['deferredInlineScripts'] ? $GLOBALS['deferredInlineScripts'] : []; foreach($tags as $type=>$tagGroups) foreach($tagGroups as $t) foreach($t as $s){ if($src = $s->getAttribute('src')){ $pos = strpos($src, "//");//può essere src="//www." (player video) if($pos === false) continue;//escludo relativi else $m = substr($src, $pos+2); if(strpos($m, "vimeo.com/") !== false && strpos($m, "dnt=1") === false) $m = "aggiungere dnt=1 a ".$m; // else if(strpos($m, 'www.googletagmanager.com/gtag/js') === 0 && $s->getAttribute("data-tnx") == 'anonymized') $m = "www.googletagmanager.com/gtag/js (anonymized)"; else if(strpos($m, ".disqus.com/") !== false) $m = "*.disqus.com";//pimpinella.disqus.com $srcs[$type][] = $m; } else if(strpos($s->getAttribute('type'), "ld+json") === false){ $inLineScripts[] = $s->nodeValue; } } foreach($inLineScripts as $s){ if(strpos($s, "ga('set', 'referrer',")) continue;//script di analytics (altrimenti colleziono tutti i referrer come servizi esterni) if(strpos($s, "_gaq.push(['_setReferrerOverride',")) continue;//script di analytics (altrimenti colleziono tutti i referrer come servizi esterni) preg_match_all("|\/\/([^\/\s'\"]+?\/[^\s'\"]*)|ims", $s, $matches); if($matches) foreach($matches[1] as $m){ foreach(['swfobject.embedSWF', 'window.open("http://maps.google.com/maps', 'window.open("http://maps.apple.com/maps'] as $i) if(strpos($s, $i) !== false) continue 2; foreach($DATI['mod_pc_ignore_js_blocks_with'] as $i) if(strpos($s, $i) !== false) continue 2; if($m == '{' && strpos($s, "openstreetmap.org") !== false) $m = "openstreetmap.org"; // else if( // ($m == 'ssl.google-analytics.com/ga.js' && strpos($s, "_gaq.push (['_gat._anonymizeIp']);") !== false) // || // ($m == 'www.google-analytics.com/analytics.js' && strpos($s, "ga('set', 'anonymizeIp', true);") !== false) // ) $m .= " (anonymized)"; else if(strpos($s, ".disqus.com/") !== false) $m = "*.disqus.com";//pimpinella.disqus.com if(strpos($m, "wa.me/") === 0) continue;//script periodicoshop if(strpos($m, "labs.google.com/ridefinder/images/") === 0) continue;//icone google maps if(in_array($m, ["openstreetmap.org", "sourceforge.net/projects/krumo", "osm.org/copyright\\"])) continue; $srcs['script'][] = $m; } } foreach($srcs as $type=>$group) $srcs[$type] = array_unique($group); $ignora = array($_SERVER["SERVER_NAME"], "cdn.tnx.it", "demo.tnx.it",/*se carico da demo2/3/4/5 la cdn è sempre su demo */ 'indi.tnx.it', 'indi3.tnx.it', 'stats.tnx.it', "openstreetmap.org", "osm.org", "cdn.ibfor.com", "www.w3.org"); foreach($srcs as $type=>$group) foreach($group as $k=>$s){ $fineDominio = [strpos($s, "/")]; $duePuntiPos = strpos($s, ":"); if($duePuntiPos !== false) $fineDominio[] = $duePuntiPos; if(in_array(substr($s, 0, min($fineDominio)), $ignora)) unset($srcs[$type][$k]); } foreach($srcs as $type=>$group){ foreach($group as $k=>$s){ mod_pc_salva_servizio($s, $type, $discoverAll, implode("\n\n", $inLineScripts).$output_sito); } } if($_GET['show_external']){ echo '';
$debugBacktrace = debug_backtrace(); array_unshift($debugBacktrace, array('file'=>__FILE__, 'line'=>__LINE__, 'function'=>'debugTnx')); foreach($debugBacktrace as $debugLine) echo "".str_replace("/tnx/www/html/www/", "", $debugLine['file']).""." ".$debugLine['function']."()
";
$printMe = $srcs; ob_start(); if(is_object($printMe)||is_array($printMe)) print_r($printMe); else var_dump($printMe); echo htmlentities(ob_get_clean(), ENT_COMPAT|ENT_HTML401|ENT_SUBSTITUTE, 'UTF-8');
echo '';
die;
}
}
if($DATI['mod_pc_gdpr_version'] != "gdpr-2022"){
$len = strlen((string)$output_sito);
$risalvare = 0;
//cerco di escludere pagine enormi o troppo piccole o errori 404 escludo pagine da spider e altri dispositivi che non settano i cookie
//escludo anche le chiamate ajax
if(!is_404() and !is_spider() and !is_ajax() and $len > 1000 and $len < 100000) {
$array_cookie = indi_filecache_fetch("_pc_array_dinamico");
if(!in_array("google_maps",(array) $array_cookie) and strstr($output_sito,"//maps.google.com/maps")) {
$array_cookie[] = "google_maps";
$risalvare = 1;
}
if(!in_array("youtube",(array) $array_cookie) and strstr($output_sito,"//www.youtube.com/embed")) {
$array_cookie[] = "youtube";
$risalvare = 1;
}
if(!in_array("vimeo",(array) $array_cookie) and strstr($output_sito,"//player.vimeo.com/video/")) {
$array_cookie[] = "vimeo";
$risalvare = 1;
}
if(!in_array("addthis",(array) $array_cookie) and strstr($output_sito,"addthis.com/js/")) {
$array_cookie[] = "addthis";
$risalvare = 1;
}
if(!in_array("tripadvisor",(array) $array_cookie) and strstr($output_sito,"//www.tripadvisor.it/")) {
$array_cookie[] = "tripadvisor";
$risalvare = 1;
}
if(!in_array("facebook",(array) $array_cookie) and strstr($output_sito,"//www.facebook.com/plugins/")) {
$array_cookie[] = "facebook";
$risalvare = 1;
}
if(!in_array("google_analytics",(array) $array_cookie) and (
strstr($output_sito,"//www.google-analytics.com/analytics.js") //Universal Analitycs
or strstr($output_sito,"google-analytics.com/ga.js") //Vecchio codice dal 2008/2009
or strstr($output_sito,"//www.google-analytics.com/urchin.js") //Vecchio codice prima del 2008
)) {
$array_cookie[] = "google_analytics";
$risalvare = 1;
}
//salvo e loggo se necessario
if($risalvare) {
indi_filecache_store("_pc_array_dinamico",$array_cookie,60*60*24*7*2); //14 giorni
indi_log("PRIVACY AUTODISCOVER: Scrivo in cache _pc_array_dinamico ( ". implode(", ", (array) $array_cookie)." )");
}
}
}
}
function _mod_pc_cookie(){
return $_COOKIE[_mod_pc_cookie_name()];
}
function mod_pc_is_present($service){
global $CONF;
return in_array($service, $CONF['mod_pc_optin_services']);
}
function mod_pc_is_active($service){
global $CONF;
return $DATI['mod_pc_cookie_banner'] /*se è disattivato riporto tutto come attivo e deve gestire in altro modo */ && !in_array($service, $CONF['mod_pc_optin_services']) || in_array($service, _mod_pc_get_active_services());
}
function _mod_pc_user_config(){
$cookie = _mod_pc_cookie();
if($cookie) return str_split(substr($cookie, 10));
else return [];
}
function _mod_pc_cookie_name(){//chiamato anche dalla pagina cookie per il timestamp
global $CONF;
return 'tnx-pc-'.md5(""._mod_pc_cookie_last_update().implode($CONF['mod_pc_optin_services']));
}
function _mod_pc_cookie_last_update(){
global $CONF;
return $CONF['mod_pc_optin_services_last_update'];
}
function _mod_pc_post_conf() {
global $CONF,$TXT;
if($CONF['mod_pc_gdpr_version'] == "gdpr-2022"){
$presenti = [];
$mod_pc_onConsent_functions = [];
$mod_pc_onConsent_required_functions = [];
$CONF['mod_pc_required_services'] = [];
$CONF['mod_pc_optin_services'] = [];
uasort($CONF['mod_pc_services'], function($a, $b){
return $a['ord'] < $b['ord'] ? -1 : 1;
});
foreach($CONF['mod_pc_services'] as $id=>$config){
if($config['force']) $presenti[] = $id;
if(count($config) < 2) trigger_error("servizio \"$id\" personalizzato rimosso?");
}
//filtro host rimosso: è giusto che nel banner vengano riportati tutti i servizi, anche quelli rilevati su demo (penso a un sito appena messo online)
//se lo volessi riattivare devo decommentare la delete dei servizi di altri host prima dell'insert, perchè c'è la primary src+type
if(!$CONF['mod_pc_no_cookie']) $discovered = db_qa("
select * from tnx_pc_services
where
/* url like '%://".$_SERVER["SERVER_NAME"]."%' and */
last_seen > now() - interval 60 day
order by first_seen");
$CONF['mod_pc_optin_services_last_update'] = mktime(10 /*hours*/, 5 /*minutes*/, 52 /*seconds*/, 1 /*month*/, 7 /*day*/, 2022);
$segnala = false;
// $segnala = $_GET["t"] == "cookie";
$segnala = !mt_rand(0, 50);
if($discovered) foreach($discovered as $row) if($id = _mod_pc_find_module($row['src'], $row['type'], $segnala)){
if(in_array($id, $presenti)) continue;
$presenti[] = $id;
if(
!$CONF['mod_pc_services'][$id]['required']
){
$lu = strtotime($row['first_seen']);
if($CONF['mod_pc_optin_services_last_update'] < $lu){
$CONF['mod_pc_optin_services_last_update'] = $lu;
}
}
}
foreach($presenti as $id){
if($CONF['mod_pc_services'][$id]['required'] || $CONF['mod_pc_services'][$id]['hidden']) $CONF['mod_pc_required_services'][] = $id;
else $CONF['mod_pc_optin_services'][] = $id;
}
$CONF['mod_pc_required_services'] = array_unique($CONF['mod_pc_required_services']);
$CONF['mod_pc_optin_services'] = array_unique($CONF['mod_pc_optin_services']);
sort($CONF['mod_pc_required_services']);
sort($CONF['mod_pc_optin_services']);
foreach($CONF['mod_pc_optin_services'] as $k=>$id){
if($CONF['mod_pc_services'][$id]['onConsent']){
$mod_pc_onConsent_functions[] = "\r\nmod_pc_onConsent_functions[$k] = function(){".$CONF['mod_pc_services'][$id]['onConsent']."}";
}
}
foreach($CONF['mod_pc_required_services'] as $k=>$id){
if($CONF['mod_pc_services'][$id]['onConsent']){
$mod_pc_onConsent_required_functions[] = $CONF['mod_pc_services'][$id]['onConsent'];
}
}
}
//le uso anche t:cookie
$CONF['mod_pc_js_common_parameters'] = "var mod_pc_cookie_path = '".indi_cookie_path()."';";
if($CONF['mod_pc_gdpr_version'] == "gdpr-2022") $CONF['mod_pc_js_common_parameters'] .= "
var mod_pc_optin_services = ".json_encode($CONF['mod_pc_optin_services']).";
".($mod_pc_onConsent_functions?"var mod_pc_onConsent_functions = []; ".implode("", $mod_pc_onConsent_functions).";":"")."
".($mod_pc_onConsent_required_functions?"document.addEventListener('DOMContentLoaded', function() {".implode("", $mod_pc_onConsent_required_functions)."});":"")."
var mod_pc_cookie_name = '"._mod_pc_cookie_name()."';
var mod_pc_title_service_disabled = {mod_pc_title_service_disabled|s4js};
";
if($CONF["mod_pc_include_javascript"]){
$agg .= indiCreateCssTag('{cdn_baseurl}_libs/privacy-cookie/css/common.css?v={mod_pc_ver}', true);
if($CONF['mod_pc_gdpr_version'] == "gdpr-2022"){
$agg .= indiCreateCssTag('{cdn_baseurl}_libs/privacy-cookie/css/popup.css?v={mod_pc_ver}', true);
$agg .= indiCreateCssTag('{cdn_baseurl}_libs/privacy-cookie/css/'.($CONF['mod_pc_optin_services']?"popup_opt_in":"popup_required_only").'.css?v={mod_pc_ver}', true);
}
else $agg .= indiCreateCssTag('{cdn_baseurl}_libs/privacy-cookie/css/banner.css?v={mod_pc_ver}', true);
$CONF["body:".
//deve stare prima dello script che poi sovrascrive inline i colori eventualmente
$agg.
"
"
] = 'POST_OPEN';//era PRE_CLOSE, ma in caso di inline deferred finirebbe in fondo a un file in cui qualsiasi errore potrebbe bloccare il banner dei cookie (vecchi browser tipo ie..)
}
//Annullo template per togliere la visualizzazione del link sul frontend aggiunto dallo script javascript se non trovo dati obbligatori
if(!isset($CONF["mod_pc_dsa_ragione"]) and !isset($CONF["mod_pc_dsa_custom"])) $CONF['mod_pc_dsa_template'] = "";
}
function _mod_pc_testo($id){
global $lang, $CONF, $TXT;
$return = '';
//per debuggare gli id ?debugtnx=1
if($_GET['debugtnx']) $return .= '$TXT[\''.$lang.'\'][\'mod_pc_testi_'.$id.'\'] ';
if($TXT[$lang]['mod_pc_testi_'.$id]) $return .= $TXT[$lang]['mod_pc_testi_'.$id];
else if($CONF['mod_pc_testi'][$lang][$id]) $return .= $CONF['mod_pc_testi'][$lang][$id];
else $return .= $CONF['mod_pc_testi']['eng'][$id];
return $return;
}
function _mod_pc_get_active_services() {
global $CONF;
$active = $CONF['mod_pc_required_services'];
$config = _mod_pc_user_config();
foreach($CONF['mod_pc_optin_services'] as $k=>$id) if($config[$k] || $CONF['mod_pc_services'][$id]['allowed']) $active[] = $id;
return $active;
}
function _mod_pc_pre_template() {
global $DATI,$CONF,$MOD_PC,$TXT;
d_info("_mod_pc_pre_template 10");
if($DATI['mod_pc_cookie_banner'] && $DATI['mod_pc_gdpr_version'] == "gdpr-2022"){
d_info("_mod_pc_pre_template 20");
//lo setto qui perchè mi serve la lingua e non voglio spostare il vecchio codice di damiano da _mod_pc_post_conf
if($DATI['mod_pc_color']) $DATI['less_dynamic_css'] .= "
.__cook_priva__button.accetta {
background-color: ".$DATI['mod_pc_color']." !important;
}
.__cook_priva__txt_cont a:link,
.__cook_priva__txt_cont a:visited {
color: ".$DATI['mod_pc_color']." !important;
}";
$DATI['mod_pc_title_service_disabled'] = _mod_pc_testo('title_service_disabled');
$DATI['mod_pc_cookie_banner_template'] = str_replace(array("\n","\t","\r"), "", '
');
if($CONF['mod_pc_optin_services']){
//https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src
$csp['script-src'] = array("'self'", "'unsafe-eval'", "'unsafe-hashes'", "'unsafe-inline'", "*.tnx.it");
$csp['script-src'][] = "*.".implode(".", array_slice(explode(".", $_SERVER['SERVER_NAME']), -2));//test invoicex analytics.host.it (caria da hs774894258.invoicex.it)
$csp['frame-src'] = array("'self'");
if($DATI['dove_sono'] == 'loc') $csp['frame-src'] = array("*.tnx.it");//link guarda da dentro un frame (personalizzazione prodotto ordinalo)
$active = _mod_pc_get_active_services();
foreach($active as $id) if($CONF['mod_pc_services'][$id]['csp']) foreach($CONF['mod_pc_services'][$id]['csp'] as $directive=>$srcs) $csp[$directive] = array_merge($csp[$directive], $srcs);
$cspString = 'Content-Security-Policy:';
foreach($csp as $k=>$v) $cspString .= ' '.$k.' '.implode(" ", $v).';';
// if($CONF['dove_sono'] == 'loc') console_log($cspString);
if($DATI['OUTPUT_HEADER'] != 'NO') header($cspString);
}
indi_add_action("post_output","_mod_pc_autodiscover");
}
else if($DATI['mod_pc_discover_all_until']){
d_info("_mod_pc_pre_template 30");
indi_add_action("post_output","_mod_pc_autodiscover");
}
d_info("_mod_pc_pre_template 40");
if(stristr($DATI['mod_pc_module'],"AUTO")) {
d_info("_mod_pc_pre_template 50");
//----------- moduli automatici ----------------
//abilito autodiscover se abilitato
indi_add_action("post_output","_mod_pc_autodiscover");
//leggo dati autodiscover
$array_cookie = indi_filecache_fetch("_pc_array_dinamico");
if($array_cookie) {
//aggiungo ai moduli manuali quelli dell' autodiscover
$DATI['mod_pc_module'] = $DATI['mod_pc_module'].",".implode(",",$array_cookie);
}
d_info("_mod_pc_pre_template 60");
//INTERNI
//sessione indi
if($_COOKIE['PHPSESSID']) {
$MOD_PC[] = "indi_sess";
$MOD_PC[] = "sess";
$MOD_PC[] = "tech";
}
//indi referrer / newsletter
if($_COOKIE['alt_referrer'] or $CONF["mod_newsletter"] == 'SI') {
$MOD_PC[] = "stat";
$MOD_PC[] = "indi_referrer";
$MOD_PC[] = "referrer";
$MOD_PC[] = "indi_news";
$MOD_PC[] = "news";
$MOD_PC[] = "tech";
}
//prenotazioni disponibilità
if($CONF["mod_disponibilita"]) {
$MOD_PC[] = "prenotazioni";
$MOD_PC[] = "tech";
}
//statistiche indi
if(is_array($_COOKIE['STAT']) or $_COOKIE['id_utente']){
$MOD_PC[] = "indi_stat";
$MOD_PC[] = "stat"; //generico
$MOD_PC[] = "tech"; //essendo di prima parte è tecnico
}
//moduli indi
if($CONF["mod_auth"] == "SI" ) {
$MOD_PC[] = "indi_auth";
$MOD_PC[] = "auth";
$MOD_PC[] = "tech";
}
//ecommerce
if($CONF["mod_carr"] == "SI" or $CONF["mod_carr2"] == "SI") {
$MOD_PC[] = "indi_ecomm";
$MOD_PC[] = "ecomm";
$MOD_PC[] = "tech";
}
//ESTERNI
//google
if($DATI["google_analytics"] != "" or $_COOKIE['_ga'] or $_COOKIE['__utmz'] or $_COOKIE['__utma']) {
$MOD_PC[] = "stat";
$MOD_PC[] = "google";
$MOD_PC[] = "analytics";
$MOD_PC[] = "first";
$MOD_PC[] = "third";
$MOD_PC[] = "tracking"; //per ora è di tracciamento
//$MOD_PC[] = "tech";
}
// addthis
if($_COOKIE['__atuvc']) {
$MOD_PC[] = "first";
$MOD_PC[] = "third";
$MOD_PC[] = "addthis";
$MOD_PC[] = "share";
$MOD_PC[] = "social";
$MOD_PC[] = "tracking";
}
//cdn, da migliorare ????
if($CONF['mod_pc_include_javascript'] or stristr($DATI['file:_libs/jquery-1.8.3.min.js'],"CDN")) {
$MOD_PC[] = "third";
$MOD_PC[] = "cdn";
$MOD_PC[] = "tech";
}
//SITO TURISMO
//prenotazioni
if($DATI["st_pagina_prenotazioni"]) {
$MOD_PC[] = "prenotazioni"; //solo per privacy
}
//guestbook
if($DATI["st_pagina_testimonianze"]) {
$MOD_PC[] = "guestbook"; //solo per privacy
}
if($DATI["newsletter_abilitata"] || $CONF["mod_newsletter"] == 'SI') {
$MOD_PC[] = "newsletter"; //solo per privacy
}
//commenti disqus
if($DATI["mod_commenti"] == "SI") {
$MOD_PC[] = "third";
$MOD_PC[] = "disqus";
$MOD_PC[] = "social";
$MOD_PC[] = "tracking";
}
}
d_info("_mod_pc_pre_template 65");
$MOD_PC[] = "contatti";
//---------- MODULI manuali ma che cambiano il funzionamento del banner -----------------
if($DATI['mod_pc_module'] != "AUTO") {
d_info("_mod_pc_pre_template 70");
//---------------- moduli sempre presenti ----------------
$MOD_PC[] = "contatti";
$MOD_PC[] = "email";
//---------------- moduli di base attivabili dalla conf ----------------
if(stristr($DATI['mod_pc_module'],"stat")) $MOD_PC[] = "stat"; //statistica
if(stristr($DATI['mod_pc_module'],"tracking")) $MOD_PC[] = "tracking"; //tracciamento
if(stristr($DATI['mod_pc_module'],"tech")) $MOD_PC[] = "tech"; //tracciamento
if(stristr($DATI['mod_pc_module'],"auth")) $MOD_PC[] = "auth"; //autenticazione
if(stristr($DATI['mod_pc_module'],"ecomm")) $MOD_PC[] = "ecomm"; //ecommerce
if(stristr($DATI['mod_pc_module'],"newsletter")) $MOD_PC[] = "newsletter";
if(stristr($DATI['mod_pc_module'],"share")) $MOD_PC[] = "share"; //generico plugin di share addthis, addtoany
if(stristr($DATI['mod_pc_module'],"social")) $MOD_PC[] = "social";
if(stristr($DATI['mod_pc_module'],"prenotazioni")) $MOD_PC[] = "prenotazioni";
if(stristr($DATI['mod_pc_module'],"guestbook")) $MOD_PC[] = "guestbook";
if(stristr($DATI['mod_pc_module'],"indi")){
$MOD_PC[] = "indi_sess";
$MOD_PC[] = "sess";
$MOD_PC[] = "tech";
}
if(stristr($DATI['mod_pc_module'],"commenti") or stristr($DATI['mod_pc_module'],"disqus")){
$MOD_PC[] = "third";
$MOD_PC[] = "disqus";
$MOD_PC[] = "social";
$MOD_PC[] = "tracking";
}
if(stristr($DATI['mod_pc_module'],"google_maps")){
$MOD_PC[] = "maps";
$MOD_PC[] = "third";
$MOD_PC[] = "google";
$MOD_PC[] = "tracking";
}
if(stristr($DATI['mod_pc_module'],"video")){
$MOD_PC[] = "video";
$MOD_PC[] = "third";
$MOD_PC[] = "vimeo";
$MOD_PC[] = "youtube";
$MOD_PC[] = "google";
$MOD_PC[] = "tracking";
}
if(stristr($DATI['mod_pc_module'],"youtube")){
$MOD_PC[] = "video";
$MOD_PC[] = "third";
$MOD_PC[] = "youtube";
$MOD_PC[] = "google";
$MOD_PC[] = "tracking";
}
if(stristr($DATI['mod_pc_module'],"vimeo")){
$MOD_PC[] = "video";
$MOD_PC[] = "third";
$MOD_PC[] = "vimeo";
$MOD_PC[] = "tracking";
}
if(stristr($DATI['mod_pc_module'],"tripadvisor")){
$MOD_PC[] = "third";
$MOD_PC[] = "tripadvisor";
$MOD_PC[] = "tracking";
$MOD_PC[] = "social";
}
if(stristr($DATI['mod_pc_module'],"analitycs")){
$MOD_PC[] = "stat";
$MOD_PC[] = "first";
$MOD_PC[] = "third";
$MOD_PC[] = "google";
$MOD_PC[] = "analitycs";
$MOD_PC[] = "tracking";
}
if(stristr($DATI['mod_pc_module'],"addthis")){
$MOD_PC[] = "first";
$MOD_PC[] = "third";
$MOD_PC[] = "addthis";
$MOD_PC[] = "share";
$MOD_PC[] = "social";
$MOD_PC[] = "tracking";
}
if(stristr($DATI['mod_pc_module'],"addtoany")){
$MOD_PC[] = "third";
$MOD_PC[] = "addtoany";
$MOD_PC[] = "share";
$MOD_PC[] = "social";
$MOD_PC[] = "tracking";
}
//plugin social facebook like (con iframe), da fare nella privacy e nei cookie
if(stristr($DATI['mod_pc_module'],"facebook")){
$MOD_PC[] = "third";
$MOD_PC[] = "facebook";
$MOD_PC[] = "social";
$MOD_PC[] = "tracking";
}
//twitter, da fare
if(stristr($DATI['mod_pc_module'],"twitter")){
$MOD_PC[] = "third";
$MOD_PC[] = "twitter";
$MOD_PC[] = "social";
$MOD_PC[] = "tracking";
}
//google+, da fare
if(stristr($DATI['mod_pc_module'],"google+")){
$MOD_PC[] = "third";
$MOD_PC[] = "google";
$MOD_PC[] = "google+";
$MOD_PC[] = "social";
$MOD_PC[] = "tracking";
}
if(stristr($DATI['mod_pc_module'],"facebook-pixel")){
$MOD_PC[] = "third";
$MOD_PC[] = "facebook-pixel";
$MOD_PC[] = "facebook";
$MOD_PC[] = "social";
$MOD_PC[] = "tracking";
}
if(stristr($DATI['mod_pc_module'],"cdn")){
$MOD_PC[] = "cdn";
$MOD_PC[] = "ovh";
$MOD_PC[] = "third";
}
if(stristr($DATI['mod_pc_module'],"profiling")) $MOD_PC[] = "profiling";
//google ad sense, metto qui perche cambia anche il banner
if(stristr($DATI['mod_pc_module'],"google_adsense") or stristr($DATI['mod_pc_module'],"adsense")){
$MOD_PC[] = "stat";
$MOD_PC[] = "google_adsense";
$MOD_PC[] = "google";
$MOD_PC[] = "analytics";
$MOD_PC[] = "third";
$MOD_PC[] = "profiling";
$MOD_PC[] = "tracking";
}
//google ad sense, metto qui perche cambia anche il banner
if(stristr($DATI['mod_pc_module'],"google_adwords") or stristr($DATI['mod_pc_module'],"adwords")){
$MOD_PC[] = "stat";
$MOD_PC[] = "google_adwords";
$MOD_PC[] = "google";
$MOD_PC[] = "analytics";
$MOD_PC[] = "third";
$MOD_PC[] = "profiling";
$MOD_PC[] = "tracking";
}
} //fine moduli manali
//debug
d_info($DATI['mod_pc_module'],"mod_pc: \$DATI[mod_pc_module]");
d_info($array_cookie,"mod_pc: cache '_pc_array_dinamico'");
d_info($MOD_PC,"mod_pc: \$MOD_PC");
//---------- AZIONI IN BASE AI MODULI -----------------
//cambio traduzione nel caso di cookie di profilazione
if(is_array($MOD_PC) and (in_array("profiling",$MOD_PC))) {
$TXT["mod_pc_cookie_banner_txt_profiling"] = $TXT["mod_pc_cookie_banner_txt_5"];
} else {
$TXT["mod_pc_cookie_banner_txt_profiling"] = "";
}
//abilito banner x cookie di profilazione o di tracciamneto
if(is_array($MOD_PC) and $DATI['mod_pc_cookie_banner'] === "AUTO" and ((in_array("profiling",$MOD_PC) or in_array("tracking",$MOD_PC)))) {
$DATI['mod_pc_cookie_banner'] = TRUE;
}
d_info("_mod_pc_pre_template 80");
//disabilito banner nel caso solo di cookie tecnici
//29/02/2016 cecca, faccio apparire sempre (è la seconda volta che ci si perdeva tempo)
//if(is_array($MOD_PC) and $DATI['mod_pc_cookie_banner'] === "AUTO") $DATI['mod_pc_cookie_banner'] = FALSE;
if ($DATI['mod_pc_cookie_banner'] === "AUTO") $DATI['mod_pc_cookie_banner'] = TRUE;
//normalizzo x evitare errori di sintassi javascript
$DATI['mod_pc_cookie_banner'] = (int)$DATI['mod_pc_cookie_banner'];
//------------------------------ PAGINE SPECIFICHE ---------------------------------------
//solo nel caso di questi templete
if($_GET["t"] == "cookie" or (!$DATI["mod_pc_privacy_personalizzata"] && $_GET["t"] == "privacy") or $_GET["t"] == "dsa") {
d_info("_mod_pc_pre_template 90");
$DATI["deferAllScript"] = false;//non c'è tag base nella pagina t=cookie
$key = $_GET['t'];
if($DATI['mod_pc_gdpr_version'] && $_GET['t'] == 'cookie') $key .= "-".$DATI['mod_pc_gdpr_version'];//disattivo vecchi template custom dei cookies
$customKey = 'mod_pc_'.$_GET['t'].'_custom_template';//$DATI['mod_pc_privacy_custom_template'] o $DATI['mod_pc_cookie_custom_template']
if(!$DATI[$customKey]) $DATI[$customKey] = "_template/" . $_GET['t'] . "-custom.php";
if(file_exists($DATI[$customKey])){
include($DATI[$customKey]);
} else {
//include template
if(!$DATI['mod_pc_gdpr_version'] && ($_GET["t"] == "cookie" or $_GET["t"] == "privacy")){
//se è settata mod_pc_gdpr_version i file che uso sono sempre privacy.php e cookie.php
//gli unici siti con mod_pc_gdpr_version=false dovrebbero essere quelli della lista $sitiSenzaDatabaseConVecchioGestoreCookies, lascio questo per verifica
if(!in_array($DATI['sito'], $GLOBALS["sitiSenzaDatabaseConVecchioGestoreCookies"]))
trigger_error_to_carlo("sito con mod_pc_gdpr_version=false forzata?");
if($GLOBALS["DB"]['database'])
trigger_error_to_carlo("questo sito usa il vecchio gestore cookie ma potrebbe usare il nuovo");
if($DATI['mod_pc_gdpr'] && $_GET['t'] == 'privacy'){
$file_include = 'privacy.php';
} else {
if($DATI[lang] == "ita") $file_include = $_GET['t']."-ita.php";
else if($DATI[lang] == "fra") $file_include = $_GET['t']."-fra.php";
else if($DATI[lang] == "ger") $file_include = $_GET['t']."-ger.php";
else if($DATI[lang] == "spa" || $DATI[lang] == "esp") $file_include = $_GET['t']."-spa.php";
else $file_include = $_GET['t']."-eng.php";
}
} else {
$file_include = $_GET['t'];
}
}
//forzo UTF-8
$DATI['mcharset'] = "UTF-8";
//controllo visualizzazione privacy
if($DATI["mod_pc_privacy_titolare_nome"] == "") {
d_err("MOD PRIVACY - Manca 'mod_pc_privacy_titolare_nome'");
}
//non effettua sostituzioni automatiche nell header nel body
$DATI['OUTPUT_HEAD_BODY_JS_CSS'] = 'NO';
//disabilito inclusione template
$DATI['template'] = "function";
//TEMPLATE
//uso t perche' c gia usata per definire template specifici, ma potevo usare quello che volevo
if($file_include && ($_GET["t"] == "cookie" or $_GET["t"] == "privacy" or $_GET["t"] == "dsa")) {
print block($DATI["indi_base_path"]."template/_template/$file_include",null,true); //forzo inclusione blocco
};
}
d_info("_mod_pc_pre_template 100");
}
?>