$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"); } ?>