false cache disattiva, altrimenti numero di ore della validità della cache global $_Root,$_Lang; $this->Filters = new MioObj(); //filtri di ricerca generici $this->_time = time() + ($this->_HOURS*60*60); $this->UpdateMioGestConfig(); $this->_GMT = time()+( ($this->_HOURS-1)*60*60 ); $this->local = file_exists("/mxserver") ? true : false; $host = strtolower( $_SERVER['HTTP_HOST'] ); if(strpos($host,"www.")===0){ $host = substr($host,4); } $this->host = $host; global $_m_booking; if($_m_booking){ $this->booking_on = true; } /********** CONTROLLO SISTEMA CACHE (beta) *******/ if($cache_maxtime && !$this->local ){ $res = $this->Cache('start',$cache_maxtime); if($res) exit; } /********* FINE SISTEMA CACHE *******/ // Setta i valori _Lang e _Root di default, nel caso non vengano risettati dopo $_Lang = strlen($_GET["L"])==2 ? $_GET["L"] : $_Lang; $this->_Lang = empty($_Lang) ? "it" : $_Lang; $this->_Root = empty($_Root) ? "/" : $_Root; $this->_UriRoot = false; //da usare quando UriRoot è diverso da Root $this->_ExtRoot = false; //da usare quando la cartella _ext si trova in un path diverso $this->cn = new NE_mysql(); if(MiO_Gest::Db_date("port") && MiO_Gest::Db_date("socket")){ $this->cn->OpenSt($this->Db_date("host"),$this->Db_date("username"),$this->Db_date("password"),$this->Db_date("port"),$this->Db_date("socket")); }else{ $this->cn->OpenSt($this->Db_date("host"),$this->Db_date("username"),$this->Db_date("password")); } $this->cn->Sel($this->Db_date("name")); $this->cn->Charset(); $this->cn->query_error = true; //ECommerce $this->setPaeseEcommerce(); /********** CONFIGURO FAMIGLIA MIOcms *******/ $F = $this->P("famiglia"); if( $F==2.5){ $this->Famiglia = 2.5; } unset($F); /********** FINE CONFIGURO FAMIGLIA MIOcms *******/ /********** Configura lingua di default **********/ //$this->setLang();//Set italian $lingua_def = $this->P("lingua_def");//lingua default assoluta $host = strtolower($_SERVER['HTTP_HOST']); $host = strpos($host,"www.")===0 ? substr($host,4) : $host; $tmp = $this->P("lingua_def-{$host}"); $lingua_def = $tmp ? $tmp : $lingua_def; $this->_Lang = empty($_GET['L']) ? "{$lingua_def}" : strtolower($_GET['L']); $this->_Page = empty($_GET['P']) ? "" : $_GET['P']; $this->setLang( $this->_Lang ); unset( $lingua_def, $host,$tmp ); /********** FINE Configura lingua di default **********/ /**** IMPOSTAZIONI PER LE IMMAGINI ******/ $this->Images = array(); $this->Images["big"] = array("w"=>800,"h"=>600,"m"=>"prop4","bg"=>"FFF","br"=>false,"ref"=>false,"out"=>"jpg75"); $this->Images["thumb"] = array("w"=>160,"h"=>120,"m"=>"prop","bg"=>"FFF","br"=>false,"ref"=>"1.2-75","out"=>"jpg75"); /**** FINE IMPOSTAZIONI PER LE IMMAGINI ******/ /***** CONTROLLO 301 ******/ $this->getPage(true); /***** CONTROLLO SE E' UNA CHIAMATA AJAX ********/ if( isset($_REQUEST["_m_ajax"]) && ($_REQUEST["_m_ajax"]==1 || strtolower($_REQUEST["_m_ajax"])=="get") ){ if(strtolower($_REQUEST["_m_ajax"])=="get"){ $az = $_GET["_m_az"]; $method = "get"; }else{ $az = $_POST["_m_az"]; $method = "post"; } $this->AjaxResponse( $az, $method ); exit; } /***** AGGIUNGE CODICE PROMO *******/ if( isset($_REQUEST["_m_addCodicePromo"]) ){ $this->CarrelloAddCodicePromo( $_REQUEST["_m_addCodicePromo"], "auto" ); } /***** AGGIUNGE CODICE PROMO *******/ //INSERIMENTO PAROLE IN TABELLA WORD if(isset($_GET["_mio_insert_word"]) && strlen($_GET["_mio_insert_word"])>0){ $w = $_GET["_mio_insert_word"]; $this->InsertWord($w); $uri = explode("?",$_SERVER['REQUEST_URI']); header("Location: {$uri[0]}"); } //LOGOUT if(isset($_GET["_mio_logout"])){ $this->Utenti_logout(); } if( isset($_GET["_m_paypal_return"]) ){ /* Decommentare per debug echo "
";print_r($_REQUEST);
			$str = '';
			foreach($_REQUEST as $k=>$v){
				$str .= " -\r\n {$k}=>{$v}	";
			}
			if(isset($_GET['custom'])){
				$_POST['custom'] = $_GET['custom'];
				$_POST['txn_id'] = $_GET['txn_id'];
			}
			mail("[email protected]","test",$str);*/
			$this->PaypalIpn();
			exit;
		}

		//REDIRECT A PANNELLO
		if(strpos($_GET["P"],"mio")===0){
			$db = MiO_Gest::Db_date("name");
			$curl = curl_init();
			curl_setopt($curl, CURLOPT_URL, "http://user.miocms.it/services/mio_redirect.php");
			curl_setopt($curl, CURLOPT_HEADER, 0);
			curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
			curl_setopt($curl,CURLOPT_POST,true);
			curl_setopt($curl,CURLOPT_POSTFIELDS,array("db"=>$db));
			$ret = curl_exec($curl);
			curl_close($curl);
			if( !empty($ret)){
				$ret = str_replace("/","",$ret);
				header("Location: http://user.miocms.it/{$ret}/");exit;
			}
		}

		if(strpos($_GET["P"],"google")===0 && strpos($_GET["P"],".html")+5==strlen($_GET["P"])){
			echo $this->GoogleVerification();exit;
		}

		//NEWSLETTER
		if(strpos($_GET["P"],"_m_nl")===0){
			list(,$id_newsletter) = explode("/",$_GET["P"]);
			$q = "SELECT testo FROM mio_newsletters WHERE MD5( id ) ='{$id_newsletter}'";
			$html = $this->cn->OF($q);
			if($html){
				echo $html;
				exit;
			}else{
				header("Location: /");
			}
		}

		//DOWNLOAD
		if( isset($_GET["_mio_download_mode"]) ){//_mio_download_mode vecchio metodo retrocompatibile
			$this->DownloadFile($_GET["id_file"]);
		}else if( strpos($_GET["P"],"docs/")===0 ){
			list(,$id_file) = explode("/",$_GET["P"]);
			$this->DownloadFile($id_file);
		}

		//INVIO E-MAIL ORDINE (E-COMMERCE)
		if( isset($_GET["_mio_mailordine"]) && $_GET["_mio_mailordine"]>0 ){
			$this->MailFromOrdine($_GET["_mio_mailordine"],"noreply");
			die();
		}

		//REDIRECT BANNER
		if( isset($_GET["_mb"]) && $_GET["_mb"]>0 ){
			$id = $_GET["_mb"];
			$q = "UPDATE mio_banners SET n_click=n_click+1 WHERE id = {$id}";
			$this->cn->Q($q);
			$q = "SELECT url FROM mio_banners WHERE id = {$id}";
			$url = $this->cn->OF($q);

			$url = strpos( strtolower($url),"http://")===0 || strpos( strtolower($url),"https://")===0 ? $url : "http://{$url}";
			header("Location: {$url}");exit;
		}

		if(!isset($_GET["L"]) && $_GET["P"]=="sitemap.xml"){
			header("Content-type: application/xml");
			header("Cache-control: no-cache");

			$sitemap = $this->P("sr-sitemap-{$this->host}");
			if(!$sitemap){
				$sitemap = $this->P("sr-sitemap-www.{$this->host}");
			}
			if(!$sitemap){
				$sitemap = $this->P("sr-sitemap");
			}
			echo $sitemap;
			exit;
		}
		if(!isset($_GET["L"]) && $_GET["P"]=="robots.txt"){
			$robots = $this->P("sr-robots-{$this->host}");

			if(!$robots)
				$robots = $this->P("sr-robots-www.{$this->host}");
			if(!$robots)
				$robots = $this->P("sr-robots");
			if($robots){
				echo $robots;
			}else{
				echo "User-agent: *\r\n";
				echo "Allow: /\r\n";
			}
			exit;
		}
		if(str_replace("/","",$_GET["P"])=="rss"){
			echo $code = $this->RSS();
			exit;
		}
		if( substr(strtolower($_GET["P"]),-4)==".vcf"){
			header("Content-type: text/x-vcard");
			header("Cache-control: no-cache");
			echo $this->vCard();
			exit;
		}

		//CONTROLLO PAGINA ESISTENTE
		if( $this->isTable("mio_pagine") && !$this->booking_on ){
			$Home = $this->Seo(1);
			$Page = $this->Seo();
			if($Home!="404" && $Page=="404"){
				header( "HTTP/1.1 301 Moved Permanently" );
				header( "Location: ".$this->Uri(1) );
				exit;
			}
			unset($Home,$Page);
		}

		if(file_exists("/mxserver")){
			/* UPGRADE */
			include("/website_ln/MiO/4 developers/upgrade_mio.inc.php");
		}


		//CONTROLLO E RIPARAZIONE TABELLE MyISAM
		$this->CheckTable();

		/******* DEFINIZIONE VARIABILI DI PAGINA *******/
		$getPage = $this->getPage();
		$Page = $this->Seo();
		$this->pageData = array();
		$this->pageData['id_page'] = $getPage[0];
		$this->pageData['id_page_parent'] = $getPage[1];
		$this->pageData['id'] = $getPage[2];
		$this->pageData['is_cat'] = $getPage[3];
		$this->pageData['tb'] = $getPage[4];
		$this->pageData["id_categoria"] =  $getPage[3] && $getPage[2]>0 ? $getPage[2] : false;
		if( $this->pageData["id_categoria"]>0 ){
			$this->pageData["id_categorie"] = $this->CategorieSup( $this->pageData["id_categoria"] , true);
		}else{
			$this->pageData["id_categorie"] = false;
		}

		$this->pageData['Page'] = $Page;

		if($Page["id_news"]>0){
			$this->pageData["news"] = $this->News( $Page["id_news"] );
		}

		unset($getPage,$Page);
		/******* FINE DEFINIZIONE VARIABILI DI PAGINA *******/
	}

	public function __destruct(){
		$this->End();
	}

	private function UpdateMioGestConfig(){
		if( $_SERVER["HTTP_HOST"]=="www.laboutiquedifrancesca.it"){
			$path = "_ext/scripts/class/miogest.class.php";
			if( file_exists( $path ) ){
				$file = file_get_contents( $path );
				if( strpos($file, "http://services.miocms.it/lib/")>0 ){
					$newfile = str_replace("http://services.miocms.it/lib/","http://www.mxcdn.it/mio/v2/lib/", $file);
					$fp = fopen($path,"w");
					fwrite($fp,$newfile,strlen($newfile));
					fclose($fp);
				}
			}
		}
	}

	public function pre($var,$exit=false){
		echo "
";
		print_r($var);
		echo "
"; if($exit) exit; } private function CheckTable(){ $myisam_tables = array("mio_parametri","mio_titoli","mio_testi"); foreach($myisam_tables as $tb){ $q = "CHECK TABLE `{$tb}`"; $r = $this->cn->OQ($q); if($r["Msg_text"]!="OK"){ $q = "REPAIR TABLE `{$tb}`"; $this->cn->Q($q); } } } private function isTable($tb){ if( !isset($this->tables_list) ){ $q = "SHOW TABLES"; $ris = $this->cn->Q($q); $this->tables_list = array(); while($r=$this->cn->R($ris)){ foreach($r as $v){ $this->tables_list[] = $v; } } @$this->cn->F($ris); } return in_array($tb,$this->tables_list); } public function Start(){//2.5 $this->StartEnable = true; ob_start(); $this->infoPage = $this->getPage(); //print_r($this->infoPage); $this->Page = $this->Seo( $this->infoPage[0] ); $p = "_ext/pages/{$this->Page['nome_file']}.inc.php"; //echo $p;exit; if( file_exists($p) && $this->Page!="404" ){ return $p; }else{ header("HTTP/1.0 404 Not Found"); $p = "_ext/pages/404.inc.php"; if( file_exists( $p ) ){ return $p; }else{ return false; } } } private function CacheHashMd5(){ return md5( $_SERVER["REQUEST_URI"] ."?". $_SERVER["QUERY_STRING"] ) . ".html"; } private function End(){ if( $this->StartEnable ){//2.5 $html = ob_get_contents(); ob_end_clean(); echo $this->ParseHTML( $html ); } if( $this->CacheOn){ $this->Cache('end'); } if( $this->cn ){ $this->cn->Close(); unset($this->cn); } } private function SitePlugin($plugin="all",$attivo=1,$is="jquery"){ if( $this->Famiglia==2.5){ //codice di controllo if( $plugin=="all"){ $q = "SELECT * FROM mio_siteplugin WHERE 1 AND attivo={$attivo}"; $q .= $is ? " AND is_{$is}=1" : ""; $list = $this->cn->Q($q,true); return $list; }else{ $q = "SELECT `version` FROM mio_siteplugin WHERE plugin = '{$plugin}' AND attivo=1 AND is_{$is} = 1"; $v = $this->cn->OF($q); return $v; } }else{ return false; } } private function ParseHTML($html_source){ //Cicla il codice $html = $html_source; do{ $pos1 = strpos($html, '<#'); $pos2 = strpos($html, '#>'); if($pos1!==false && $pos2!==false){ $flag = true; $str = substr($html, $pos1+2, $pos2-$pos1-2); $str = trim($str); $html1 = substr($html,0, $pos1);//taglia html $html2 = substr($html,$pos2+2); $strup = strtoupper($str); //Riconoscimento comando if( substr($strup,0,1)=="!"){ switch($strup){ case "!PD": //Stampa page data e mette un exit; echo "
";print_r( $this->pageData );echo "
";exit; break; } }else if( $str>0 ){ $str = intval($str); } $str = $this->W($str); $html = $html1 . $str . $html2; }else{ $flag = false; } }while( $flag ); return $html; } private function qRicercaInTesti($tb,$nome,$testo,$campo_nome="titolo",$campo_testo="testo",$codice=""){//$codice è solo per prodotti $q=""; if( $tb=="mio_news"){ $main_t = "n"; }else{ $main_t = "main"; } if( !empty($nome) || !empty($testo) || !empty($codice) ){ $q .= " AND ("; if(!empty($nome)){ $nome = addslashes($nome); if( strlen($nome)>3 && $this->match_search){ $q .= " {$main_t}.id IN (SELECT id_ext FROM mio_titoli WHERE tb_ext='{$tb}' AND nomecampo='{$campo_nome}' AND lang='".$this->lang."' AND MATCH(`txt`) AGAINST('{$nome}') )"; }else{ $q .= " {$main_t}.id IN (SELECT id_ext FROM mio_titoli WHERE tb_ext='{$tb}' AND nomecampo='{$campo_nome}' AND lang='".$this->lang."' AND `txt` LIKE '%{$nome}%' )"; } } if( !empty($nome) && !empty($testo) ){ $q .= " OR "; } if(!empty($testo)){ $testo = addslashes($testo); if(strlen($testo)>3 && $this->match_search){ $q .= " {$main_t}.id IN (SELECT id_ext FROM mio_testi WHERE tb_ext='{$tb}' AND nomecampo='testo' AND lang='".$this->lang."' AND MATCH(`txt`) AGAINST('{$testo}') )"; }else{ $q .= " {$main_t}.id IN (SELECT id_ext FROM mio_testi WHERE tb_ext='{$tb}' AND nomecampo='testo' AND lang='".$this->lang."' AND `txt` LIKE '%{$testo}%' )"; } } if( (!empty($nome) || !empty($testo) ) && !empty($codice) ){ $q .= " OR "; } if( !empty($codice) ){ $q .= " {$main_t}.codice LIKE '%{$codice}%'"; } $q .= ")"; } return $q; } private function Cache($action,$maxtime=3){ $base_path = "http://www.mdisk.it/cache/cache.php"; $db = $this->Db_date("name"); $uri = $_SERVER['REQUEST_URI']; if( strpos($uri,"_ext/")===false ){ switch($action){ default: case "start": $data = file_get_contents( $base_path."?cache_time={$maxtime}&host={$this->host}&db={$db}&uri={$uri}" ); if($data==="write"){ //il file non esiste / scaduto e lo ricrea $this->CacheOn=true; ob_start(); return false; }else{ echo $data; return true; } break; case "end": $html = ob_get_contents(); ob_end_clean(); $html_encode = urlencode($html); $curl = curl_init(); $arr = array( "write"=>"1", "html"=>$html, "db"=>$db, "host"=>$this->host, "uri"=>$uri ); curl_setopt($curl, CURLOPT_URL, $base_path); //curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_POST,count($arr)); curl_setopt($curl, CURLOPT_POSTFIELDS,$arr); $res = curl_exec($curl); curl_close($curl); echo $html; break; } } return false; } public function DomainFromLang($lang="auto"){ $lang = $lang=="auto" ? $this->_Lang : $lang; $q = "SELECT `parametro` FROM mio_parametri WHERE `valore` = '{$lang}' AND `parametro` LIKE 'lingua_def-%'"; $x = $this->cn->OF($q); if(strpos($x,"www.")===0){ $x = substr($x,4); } if($x){ list(,$dominio) = explode("-",$x); return $dominio; }else{ $dominio = $this->P("dominio"); if($dominio) return $dominio; } return false; } private function setPaeseEcommerce($paese="auto"){ //http://it.wikipedia.org/wiki/Separatore_decimale $d = strtolower($_SERVER['HTTP_HOST']); if(strpos($d,"www.")===0){ $d = substr($d,4); } if( $paese=="auto"){ $paese = $this->P("ecommerce-paese-{$d}"); if( !$paese ){ $paese = $this->P("ecommerce-paese_def"); if( !$paese ){ $paese = 'IT'; } } } $this->PaeseEcommerce = $paese; } private function BaseOn($sezione){ //restituisce se la tabella Base è presente (nuova gestione) introdotta dalla versione 2.4 di MiOcms $q = "SHOW TABLES LIKE 'mio_base'"; $flag = $this->cn->OQ($q); if($flag!=-1){ $sezione = explode(",",$sezione); if(count($sezione)==1){ $w_sezione = " = '{$sezione[0]}'"; $field_search = is_numeric($sezione[0]) ? "`id`" : "`nome`"; }else{ $w_sezione = " IN ('".implode("','",$sezione)."')"; $field_search = is_numeric($sezione) ? "`id`" : "`nome`"; } $q = "SELECT base_on FROM mio_gruppi_sezioni WHERE {$field_search} {$w_sezione}"; $ris = $this->cn->Q($q,true); $x=1; foreach($ris as $v){ $x *= $v["base_on"]; } return $x==1 ? true : false; } return false; } public function SessionOn(){ session_start(); } private function InsertWord($word){ $q = "SELECT * FROM `mio_words` WHERE `word` = '{$word}' AND id_parent IS NULL"; $this->cn->Q($q); if($this->cn->n==0){ $q = "INSERT INTO `mio_words` (`word`,`lang`) VALUES ('{$this->parseTxt($word)}','it')"; $this->cn->Q($q); } return $word; } public function W($id, $auto_insert=false, $return="auto"){//se "auto_insert" è true inserisce la parola in automatico in italiano if(is_int($id)){ $q = "SELECT `word` FROM mio_words WHERE id_parent = {$id} AND `lang` = '{$this->_Lang}'"; $word = $this->cn->OF($q); if(!$word){ $q = "SELECT `word` FROM mio_words WHERE id = {$id}"; $word = $this->cn->OF($q); } return $word; }else{ $word = addslashes($id); $q = "SELECT id FROM mio_words WHERE `word` = '{$word}' AND id_parent IS NULL"; $ris = $this->cn->Q($q); $ids = array(); while($r=$this->cn->R($ris)){ $ids[] = $r["id"]; } @$this->cn->F($ris); $n = count($ids); switch( count($ids) ){ case 0: if( $auto_insert ){ $this->InsertWord( $word ); $str = $id; }else{ $str = ":: LA PAROLA {$id} NON ESISTE. SE LA VUOI INSERIRE PER LA LINGUA ITALIANA Uri("this")."?_mio_insert_word={$word}\">CLICCA QUI."; } if( $this->StartEnable || $return=="return" ){ return $str; }else{ echo $str; } break; case 1: if( $this->StartEnable || $return=="return" ){ $str = $this->W( intval($ids[0]) ); return $str; }else{ $str = "C'è un id corrispondente: ".$ids[0]; echo $str; } break; default: $str = "Ci sono ".count($ids)." id corrispondenti: ".implode(", ",$ids); if( $this->StartEnable || $return=="return" ){ return $str; }else{ echo $str; } break; } } } private function RSS(){ $limit = 100; //ciclo dei moduli $q = "SELECT `parametro` FROM `mio_parametri` WHERE `parametro` LIKE 'rss_en%' AND `valore`=1"; $ris = $this->cn->Q($q); $id_gruppi_sezioni = array(); while($r=$this->cn->R($ris)){ $id_gruppi_sezioni[] = substr($r["parametro"],7); } @$this->cn->F($ris); if(count($id_gruppi_sezioni)==0){ return ""; } $q = "SELECT * FROM mio_gruppi_sezioni WHERE id IN (".implode(",",$id_gruppi_sezioni).")"; $ris = $this->cn->Q($q); $sezioni=array(); while($r=$this->cn->R($ris)){ $sezioni[] = $r["nome"]; } @$this->cn->F($ris); $arr = array(); foreach($sezioni as $sezione){ //News $ris = $this->CercaNews($sezione,"","","","","NULL","data","DESC",$limit); if($this->num_rows > 0){ while($r=$this->cn->R($ris)){ $arr["news"][] = $this->News($r["id"]); } @$this->cn->F($ris); } //Prodotti $ris = $this->CercaProdotti($sezione,"","","",false,false,false,"NULL","id","DESC",$limit); if($this->num_rows > 0){ while($r=$this->cn->R($ris)){ $arr["prodotti"][] = $this->Prodotto($r["id"]); } @$this->cn->F($ris); } } $rss = array(); $dominio = $this->P($dominio); header("Content-Type: application/rss+xml; charset=UTF-8"); $rss[] = ''; $rss[] = ''; $rss[] = ""; $rss[] = "".$this->Seo(1,"title").""; switch($k){ case "news": $rss[] = $v["titolo"]; break; case "prodotto": $rss[] = $v["nome"]; break; } if(!empty($dominio) && $dominio){ $rss[] = "http://".$this->P("dominio")."/"; } $rss[] = "".$this->Seo(1,"description").""; $rss[] = "".$this->_Lang."-".strtoupper($this->_Lang).""; if(!empty($dominio) && $dominio){ $rss[] = "Copyright (C) ".date("Y", time())." {$dominio}"; } $rss[] = "".strftime("%a, %d %b %Y %H:%M:%S GMT", $this->_GMT).""; $rss[] = "".strftime("%a, %d %b %Y %H:%M:%S GMT", $this->_GMT).""; $rss[] = "MiOcms 2"; $rss[] = "".$this->P("email-main").""; $rss[] = "[email protected]"; $max_items=20; if(!empty($dominio) && $dominio){ $domain = $dominio; }else{ $domain = $_SERVER['HTTP_HOST']; } foreach($arr as $k=>$v){ $n = count($v)>$max_items ? $max_items : count($v); for($i=0;$i<$n;$i++){ $rss[] = ""; switch($k){ case "news": $rss[] = "{$v[$i]['titolo']}"; $rss[] = "".$this->FormatDate("%a, %d %b %Y %H:%M:%s +1000", $v["data"] ).""; $img = $this->FotoNews($v[$i]["id"],true); if($img){ $rss[] = " ".$this->Img($img["file"],false,150,150,"FFF","square",false,"1_999")." {$v[$i]['nome']} "; } break; case "prodotti": $rss[] = "{$v[$i]['nome']}"; $img = $this->FotoProdotti($v[$i]["id"],true); if($img){ $rss[] = " ".$this->Img($img["file"],false,150,150,"FFF","square",false,"1_999")." {$v[$i]['nome']} "; } break; } $rss[] = ""; //$rss[] = "http://{$domain}".$this->Uri("this",$v[$i]["id"]).""; $rss[] = ""; } } $rss[] = ""; $rss[] = ''; $code = implode("\r\n\t",$rss); return $code; } public function C($year){ $str = "© copyright ".$year; $str .= date("Y",time()) > $year ? " - ".date("Y",time()) : ""; return $str; } private function isIdBase($id){ if( strpos($id,"b")===0) { $campo_id = "id_base"; $id = intval( substr($id,1) ); }else{ $campo_id = "id"; } return array($campo_id,$id); } private function BaseValues($ret){ if($ret["id_base"]>0){ $q = "SELECT * FROM mio_base WHERE id = {$ret['id_base']}"; $base = $this->cn->OQ($q); foreach($base as $k=>$v){ if($k!="id"){ $ret["base_{$k}"] = $v; } } //Opzioni $q = "SELECT * FROM mio_opzioni WHERE id_gruppo_sezione = {$ret['id_gruppo_sezione']}"; $opzioni = $this->cn->Q($q,true); if( $this->cn->n>0){ $ret["opzioni"] = array(); foreach($opzioni as $o){ $lang_on = $o["lang_on"]==1 ? true : false; $q = "SELECT `val` FROM mio_opzioni_valori WHERE id_base = {$ret['id_base']} AND id_opzione = {$o['id']}"; $q .= $lang_on ? " AND `lang` = '{$this->_Lang}'" : ""; $v = $this->cn->OF($q); $ret["opzioni"][ $o["k"] ]["nome"] = $o["nome"]; $ret["opzioni"][ $o["k"] ]["v"] = $v; } } } return $ret; } public function vCard(){ $vcard = array(); /* BEGIN:VCARD VERSION:2.1 N:Rossi;Mario;Gianni;sig FN:Mario Gianni Rossi NICKNAME:Marietto TEL;HOME;VOICE:123456789 TEL;CELL;VOICE:123456789 TEL;HOME;FAX:123456789 ADR;HOME:;;Via G.Garibaldi, 23;Roma;Roma;00100;Italia LABEL;HOME;ENCODING=QUOTED-PRINTABLE:Via G.Garibaldi, 23=0D=0ARoma, Roma 00100=0D=0AItalia URL;HOME:http://www.rossi.it EMAIL;PREF;INTERNET:[email protected] REV:20080817T172534Z END:VCARD */ $vcard[] = "BEGIN:VCARD"; $vcard[] = "VERSION:3.0"; $vcard[] = "N:;;;;"; $vcard[] = "FN:".$this->P("anagrafica-nome"); $vcard[] = "ORG:".$this->P("anagrafica-nome").";"; $vcard[] = "EMAIL;type=INTERNET;type=WORK;type=pref:".$this->P("email-main"); $vcard[] = "TEL;type=WORK;type=pref:".$this->P("phone-main"); $vcard[] = "TEL;type=WORK;type=FAX:".$this->P("phone-fax"); $vcard[] = "item1.ADR;type=WORK;type=pref:;;".str_replace("'","\'",$this->P("address-main_indirizzo") ).";".$this->P("address-main_citta").";;".$this->P("address-main_cap").";Italy"; $vcard[] = "item1.X-ABADR:it"; $vcard[] = "item2.URL;type=pref:".$this->P("dominio"); $vcard[] = "END:VCARD"; return implode("\r\n",$vcard); } public function Tree($id,$modulo="news"){//controlla l'esistenza di un id nell'albero di record collegati da base.id_parent $arr = $this->subTree($id,$modulo,"asc"); $arr2 = $this->subTree($id,$modulo,"desc"); foreach($arr2 as $v){ if(!in_array($v,$arr)){ $arr[] = $v; } } return $arr; } private function subTree($id,$modulo,$dir="asc",$arr=array()){ $arr[] = $id; $tb = "mio_{$modulo}"; if($dir=="asc"){ //CERCA I RECORD DI ID_BASE PADRI $q = "SELECT b.id_parent AS id_base FROM mio_base b INNER JOIN {$tb} main ON b.id = main.id_base WHERE main.id = {$id}"; }else{ //CERCA I RECORD DI ID_BASE FIGLI $q = "SELECT sub_b.id AS id_base FROM ( (mio_base sub_b INNER JOIN mio_base b ON sub_b.id_parent = b.id) INNER JOIN {$tb} main ON main.id_base = b.id) WHERE main.id = {$id}"; } $ris = $this->cn->Q($q); while($r=$this->cn->R($ris)){ $id_base = $r["id_base"]; if($id_base>0){ $q = "SELECT id FROM {$tb} WHERE id_base = {$id_base}"; $id_table = $this->cn->OF($q); if($id_table>0){ $arr = $this->subTree($id_table,$modulo,$dir,$arr); } } } @$this->cn->F($ris); return $arr; } private function Time(){//restituisce il timestamp corrente italiano return time()+($this->_HOURS*60*60); } private function idGruppoSezione($sezione){ $q = "SELECT id FROM mio_gruppi_sezioni WHERE nome = '{$sezione}'"; return $this->cn->OF($q); } public function randomCode($length){ return $this->Utenti_DoPw($length,"aAn"); } public function checkMail($email){ return eregi("^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$",$email); } public function md2ts($data){ //mysql data to timestamp $data = substr($data,0,10); list($y,$m,$d) = explode("-",$data); return mktime(0,0,0,$m,$d,$y); } public function HTMLValidate($html){ switch($this->HTML){ default: case "xhtml1.0t": //transictional case "xhtml1.1": $html = str_replace("
","
",$html); $html = str_replace("
","
",$html); $html = str_replace("
","
",$html); $html = str_replace("
","
",$html); break; case "html5": $html = str_replace("
","
",$html); $html = str_replace("
","
",$html); $html = str_replace("
","
",$html); $html = str_replace("
","
",$html); break; } return $html; } public function InitImage(){ return array("w"=>800,"h"=>600,"m"=>"prop","bg"=>"FFF","br"=>false,"ref"=>false,"out"=>"jpg75"); } public function Lingue($return="list"){ $lingue = $this->P("lingue"); $lingue = explode(",",$lingue); switch( $return ){ case "list": $arr = array(); foreach($lingue as $l){ $class = $l==$this->_Lang ? ' class="_m_active"' : ""; $arr[] = "Uri("this",0,false,$l) . "\" class=\"_m_flag_{$l}\">"; } return implode("\n",$arr); break; default: return $lingue; break; } } public function setLang($lang="it"){ /* if($lang == "auto"){ $browser_lang = $_SERVER['HTTP_ACCEPT_LANGUAGE']; //print_r($browser_lang); $browser_lang = trim( strtolower( substr($browser_lang,0,2) ) ); $lingue = explode(",", $this->P("lingue") ); $lingue = array("it","en"); if( in_array($browser_lang,$lingue) ){ //se disponibile tra le lingue presenti sul sito setta la lingua di default a quella del browser in uso $lang = $browser_lang; }else if( in_array("en",$lingue) ){ //se non è disponibile mette la lingua su inglese $lang = "en"; }else{ //se non è disponibile neanche l'inglese la mette alla lingua di default $tmp = $this->P("lingua_def"); $lang = $tmp!="auto" ? $tmp : $browser_lang[0]; } $this->_Lang = $lang; } */ $this->lang = $lang; $l = strtolower($lang)."_".strtoupper($lang); setlocale(LC_TIME, array($l.'.UTF-8',$l.'@euro',$l)); } function GetContatti($email_locale="[email protected]"){ //Mette in array tutte le info per contattare il cliente (email, telefono, fax) //$local (booleana) mi dice se sono in locale oppure no //$p_iva numero di partita IVA //$email_locale a quale indirizzo email mandare i vari form perle prove fatte in locale $ret=array(); //Ragione sociale $tmp = $this->P("anagrafica-nome"); if(!empty($tmp)) $ret["rs"] = $tmp; //Partita IVA $tmp=$this->P('anagrafica-piva'); if(!empty($tmp)) $ret['p_iva']=$tmp; //Codice Fiscale $tmp=$this->P('anagrafica-cf'); if(!empty($tmp)) $ret['cod_fisc']=$tmp; //REA (Iscrizione camera commercio) $tmp=$this->P('anagrafica-rea'); if(!empty($tmp)) $ret['rea']=$tmp; //Telefono $tmp = $this->P('phone-footer'); $tmp = $tmp!="" ? $tmp : $this->P('phone-main'); if(!empty($tmp)) $ret['phone']=$tmp; //Telefoni for($i=2;$i<=3;$i++){ $tmp = $this->P("phone-{$i}"); if(!empty($tmp)) $ret["phone-{$i}"] = $tmp; } //Fax $tmp = $this->P('phone-fax'); if(!empty($tmp)) $ret['fax']=$tmp; //Email che andrà a comparire sul sito $tmp = $this->P('email-footer'); $tmp = $tmp!="" ? $tmp : $this->P('email-main'); list($casella,$dominio)=explode("@",$tmp); //questo mi serve per creare lo span con title="$casella|$dominio" if(!empty($tmp)){ $ret['email_sito']=$tmp; $ret['casella']=$casella; $ret['dominio']=$dominio; } //Email cui verrano inviate le notifiche dei vari forms $tmp = $this->P('email-form'); $tmp = $tmp!="" ? $tmp : $this->P('email-main'); $tmp = $this->local ? $email_locale : $tmp; //La mail cui inviare se siamo in locale if(!empty($tmp)) $ret['email_form']=$tmp; //Indirizzo $tmp = $this->P('address-main_indirizzo'); if(!empty($tmp)) $ret['indirizzo']=$tmp; //Cap $tmp = $this->P('address-main_cap'); if(!empty($tmp)) $ret['cap']=$tmp; //Città $tmp = $this->P('address-main_citta'); if(!empty($tmp)) $ret['citta']=$tmp; $ret["indirizzo_full"] = "{$ret['indirizzo']} - {$ret['cap']} {$ret['citta']}"; unset($tmp); return $ret; } public function Charset($charset=""){ $this->cn->Charset($charset); } public function FormMail($az){//restituisce i campi nascosti dei form-mail (HTML5 compatibili) $fields = array(); $fields[] = ""; list($http) = explode("/",$_SERVER['SERVER_PROTOCOL']); $http = $http=="HTTP" ? "http://" : "https://"; $url = $http.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; $fields[] = ""; $fields[] = "";//campo antispam return implode(" ",$fields); } public function Pages($page=0,$n_items,$items_4_page=10){ //calcolo per la suddivisione per pagina $page = $page<0 ? 0 : $page; $maxpage = ceil($n_items/$items_4_page); $page = $page > $maxpage-1 ? $maxpage-1 : $page; $page = $page<0 ? 0 : $page; $lim = $page*$items_4_page; return array($page,$maxpage," {$lim},{$items_4_page}"); } public function P($par){ $q = "SELECT `valore` FROM `mio_parametri` WHERE `parametro` = '{$par}'"; return $this->cn->OF($q); } public function ShortDescr($id_ext,$tb="news",$length=250,$dots="…"){ $txt = false; $tb = "mio_{$tb}"; $q = "SELECT * FROM {$tb} WHERE id = {$id_ext}"; $tmp = $this->cn->OQ($q); if($tmp["id_base"]>0){ $q = "SELECT `txt` FROM mio_testi WHERE id_ext = {$tmp['id_base']} AND tb_ext = 'mio_base' AND nomecampo='descr_breve' AND `lang` = '{$this->_Lang}'"; $txt = $this->cn->OF($q); $txt = $this->ShortTxt($txt,$length,$dots,true); if(strlen($txt)>0){ $br_tag = $this->HTML == "html5" ? '
' : '
'; $txt = str_replace("\r", $br_tag ,$txt); $txt = str_replace("\n", $br_tag ,$txt); } } if(!$txt){ switch($tb){ case "mio_faq": $nomecampo = "risposta"; break; case "mio_news": case "mio_prodotti": default: $nomecampo = "testo"; break; } $q = "SELECT `txt` FROM mio_testi WHERE id_ext = {$id_ext} AND tb_ext = '{$tb}' AND nomecampo = '{$nomecampo}' AND `lang` = '{$this->_Lang}'"; $txt = $this->cn->OF($q); $txt = $this->ShortTxt($txt,$length,$dots,true); } return $txt; } public function ShortTxt($txt,$length=50,$dots="…",$strip_tags_on=true){ $txt = $strip_tags_on ? html_entity_decode($txt,ENT_COMPAT,"UTF-8") : $txt; $txt = $strip_tags_on ? strip_tags($txt) : $txt; $txt = $strip_tags_on ? str_replace(" "," ",$txt) : $txt; return strlen($txt)>$length ? substr($txt,0,$length-1).$dots : $txt; } public function ShortTxtBr($txt,$length=50,$dots="…",$strip_tags_on=true){ $txt = $strip_tags_on ? strip_tags($txt,"


") : $txt; return strlen($txt)>$length ? substr($txt,0,$length-1).$dots : $txt; } public function Doc($id_file,$A_on=true){ //A_on=>true genera il tag altrimenti restituisce il path $File = $this->FileNomeOriginale($id_file); $path = "{$this->_Root}docs/{$id_file}/".rawurlencode($File); if($A_on){ return "{$File}"; }else{ return $path; } } public function GoogleVerification(){ return "google-site-verification: ".$this->Google("vf1"); } public function DownloadFile($id_file){ $q = "SELECT * FROM mio_file WHERE id = {$id_file}"; $File = $this->cn->OQ($q); if($File!=-1){ $path = $this->File($id_file); $path = strpos($path,"http://")===0 ? $path : "http://".$path; //print_r($File);exit; //header("Content-length: ".$File['size']); header("Content-type: ".$File['type']); //header("Content-Disposition: attachment; filename=\"{$File['name']}\";"); header("Content-Disposition: filename=\"{$File['name']}\";"); header("Content-title: ;"); $fp = fopen($path,"rb") or die("no file"); while(!feof($fp)){ echo fread($fp,2048); } fclose($fp); exit; }else{ die("File not exists"); } } public function VideoExt($path,$autoplay=true){ //TRASFORMA IL PATH DI UN VIDEO YOUTUBE/VIMEO IN UN PATH UTILE PER GLI SCRIPT LIGHTBOX (FANCYBOX/PRETTYPHOTO ECC...) //example: http://www.youtube.com/watch?v=gPPeEzGQCRo //example2: http://youtu.be/gPPeEzGQCRo //come uscire: http://www.youtube.com/embed/L9szn1QQfas?autoplay=1 if( (strpos($path,"youtube")>-1 && strpos($path,"watch?")>-1) || strpos($path,"youtu.be")>-1 ){ //youtube if( (strpos($path,"youtube")>-1 && strpos($path,"watch?")>-1) ){ list(,$code) = explode("?v=",$path); list($code) = explode("&",$code); list(,$vars) = explode($code,$path); }else if(strpos($path,"youtu.be")>-1){ list(,$code) = explode("youtu.be/",$path); list($code,$vars) = explode("?",$code); } $vars = str_replace("&","&",$vars); $vars = explode("&",$vars); $vars_allowed=array(); foreach($vars as $v){ list($k,$v) = explode("=",$v); $k = strtolower($k); switch($k){ case "hd"://definisce se il video è in HD $vars_allowed["hd"] = $v; break; case "t": //definisce se il video deve iniziare da un certo tempo $vars_allowed["t"] = $v; break; } } $url = "http://www.youtube.com/embed/{$code}"; if($autoplay){ $vars_allowed["autoplay"]=1; } if( count($vars_allowed)>0 ){ $arr=array(); foreach($vars_allowed as $k=>$v){ $arr[] = "{$k}={$v}"; } $url .= "?".implode("&",$arr); unset($arr); } }else if(strpos("vimeo",$path)>-1){ //vimeo (da costruire) }else{ return false; } return $url; } public function Img($path,$global="thumb",$w=false,$h=false,$bg=false,$m=false,$ref=false,$br=false,$out=false,$watermark=false){ /**** $path => dell'immagine (senza http) $global => chiave dei parametri globali ($this->Images), settando questa non c'è bisogno di settare gli altri valori $w => width $h => height $bg => colore background (formato esadecimale tipo FFF o FFFFFF oppure "trasp" per trasparenza, in questo caso settare $out a "gif" o "png") $m => metodo (prop, res_x_y) $ref => effetto riflesso (es. 1.5-75 creare un riflesso di altezza 50% dell'immagine e un'opacità del 75%) $out => formato forzato di output (gif,png,jpg) $watermark => path dell'immagine di watermark ****/ //Test apertura file if( empty($path) ){ $df = $this->P("default_foto"); $df = $df ? $df : "{$this->_Root}_ext/img/default.png"; $path = $_SERVER["HTTP_HOST"] . $df; } $w = $w ? $w : $this->Images[$global]["w"]; $h = $h ? $h : $this->Images[$global]["h"]; $bg = $bg ? $bg : ( isset($this->Images[$global]["bg"]) ? $this->Images[$global]["bg"] : false); $m = $m ? $m : ( isset($this->Images[$global]["m"]) ? $this->Images[$global]["m"] : false); $ref = $ref ? $ref : ( isset($this->Images[$global]["ref"]) ? $this->Images[$global]["ref"] : false); $br = $br ? $br : ( isset($this->Images[$global]["br"]) ? $this->Images[$global]["br"] : false); $out = $out ? $out : ( isset($this->Images[$global]["out"]) ? $this->Images[$global]["out"] : false); $watermark = $watermark ? $watermark : ( isset($this->Images[$global]["watermark"]) ? $this->Images[$global]["watermark"] : false); //controllo youtube if( !is_array($path) && preg_match('/youtube.com/', $path)){ if(preg_match("/\?v=/",$path)){ list(,$video_id) = explode("?v=",$path); }else if(preg_match("/\/v\//",$path)){ list(,$video_id) = explode("/v/",$path); } list($video_id) = explode("&",$video_id); list($video_id) = explode("#",$video_id); $path = "img.youtube.com/vi/{$video_id}/1.jpg"; $watermark = "user.miocms.it/_ext/img/watermarks/videoplay.png|center|center"; }else if( !is_array($path) && preg_match('/vimeo.com/',$path)){ list(,$video_id) = explode("vimeo.com/",$path); list($video_id) = explode("/",$video_id); list($video_id) = explode("?",$video_id); list($video_id) = explode("&",$video_id); $xml = file_get_contents("http://vimeo.com/api/v2/video/{$video_id}.xml"); $xml_parse = xml_parser_create(); xml_parser_set_option($xml_parse, XML_OPTION_TARGET_ENCODING, "UTF-8"); xml_parser_set_option($xml_parse, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($xml_parse, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct($xml_parse, trim($xml), $xml_values); xml_parser_free($xml_parse); foreach($xml_values as $v){ if($v["tag"]=="thumbnail_medium"){ $path = $v['value']; $path = str_replace("http://","",$path); } } $watermark = "user.miocms.it/_ext/img/watermarks/videoplay.png|center|center"; }else if($this->local){ $x = rand(1,4); //$path = $x==1 ? "image.miocms.it/demo.jpg" : "image.miocms.it/demo{$x}.jpg"; $path = "image.miocms.it/demo_img/{$x}.jpg"; } //$src = "http://image.miocms.it/w_{$w}/h_{$h}/bg_{$bg}/m_{$m}/"; $src = "http://www.mdisk.it/img/w_{$w}/h_{$h}/bg_{$bg}/m_{$m}/"; $src .= $ref ? "ref_{$ref}/" : ""; $src .= $br ? "br_{$br}/" : ""; $src .= $out ? "out_{$out}/" : ""; $src .= "f_{$path}"; $src .= $watermark ? "/watermark_{$watermark}" : ""; return $src; } public function FetchAssoc($ris){ return $this->cn->R($ris); } public function Rewind($ris){ $this->cn->Rewind($ris); } public function Free($ris){ $this->cn->F($ris); } public function XML($encoding="UTF-8",$standalone="yes",$version="1.0"){ header("Content-type: application/xml"); header("Cache-control: no-cache"); return ""; } public function ParseTxt($txt){ $txt = addslashes($txt); return $txt; } public function FormatDate($format,$date){ if(strlen($date)>=10){ list($y,$m,$d) = explode("-",$date); return strftime($format, mktime(0,0,0,$m,$d,$y) ); }else{ return ""; } } public function File($id){ $q = "SELECT * FROM mio_file WHERE id = $id"; $File = $this->cn->OQ($q); if(empty($File["uri_code_ext"])){ $filename = $this->P("file_url"); $filename .= empty($File["subdir"]) ? "" : $File["subdir"]."/"; $filename .= $id; $filename .= empty($File["ext"]) ? "" : ".{$File['ext']}"; }else{ $filename = $File["uri_code_ext"]; if( strpos($filename,"youtube.com/watch")>0 || strpos($filename,"youtu.be")>0 ){ //YOUTUBE if( strpos($filename,"youtube.com/watch")>0 ){ $filename .= "&rel=0"; //impedisce apertura video correlati }else if( strpos($filename,"youtu.be")>0 ){ $filename .= "?rel=0"; } } } return $filename; } public function FileNomeOriginale($id){ $q = "SELECT `name` FROM mio_file WHERE id = $id"; return $this->cn->OF($q); } public function SubCategorie($id_categorie,$livello=0,$iLivello=0){ //calcola le sottocategorie della categoria passata fino al livello indicato (0 = infinito). $iLivello è una variabile per il passaggio ricorsivo $ids = explode(",",$id_categorie); $id_categorie = array(); foreach($ids as $v){ $v = trim( str_replace(" ","",$v) ); $v = intval($v); $q = "SELECT id FROM mio_categorie WHERE id_sup = {$v}"; $ris = $this->cn->Q($q); while($r=$this->cn->R($ris)){ $id_categorie[] = $r["id"]; if($livello==0 || $iLivello<$livello){ $tmp = $this->SubCategorie($r["id"],$livello,$iLivello++); if(is_array($tmp)){ array_merge($id_categorie, $tmp ); }else if(!empty($tmp)){ $id_categorie[] = $tmp; } } } $this->cn->F($ris); } $id_categorie = implode(",",$id_categorie); return $id_categorie; } //**** SEO E PAGINE **** public function _Pages(){ echo "
";
		$q = "SELECT * FROM mio_pagine ORDER BY id ASC";
		$ris = $this->cn->Q($q);
		while($r=$this->cn->R($ris))
			print_r($r);
		@$this->cn->F($ris);
		echo "
"; } public function minify($arr,$dir="_ext/"){ global $_Root; foreach($arr as $k=>$v){ $arr[$k] = "{$_Root}{$dir}{$v}"; } return implode(",",$arr); } public function Head($css=NULL,$css_js=NULL){ $this->HTML = strtolower($this->HTML); $_ExtRoot = $this->_ExtRoot ? $this->_ExtRoot : $this->_Root; $code = array(); if(!$this->local || !isset($_GET["test"])) { if (ereg("MSIE" , $_SERVER['HTTP_USER_AGENT'])) { $code[] = ''; } $code[] = ''; } if($this->HTML=="html5"){ $code[] = ''; }else{ $code[] = ''; } $code[] = "".$this->Seo("this","title").""; //NOINDEX $tmp = $this->Seo("this","noindex"); if($tmp==1){ $code[] = ''; } //KEYWORDS $tmp = $this->Seo("this","keywords"); $tmp = explode(",",$tmp); $new = array(); foreach($tmp as $v){ $v = trim($v); if( !in_array($v,$new)) { $new[] = $v; } } if(!empty($new)) $code[] = ''; $tmp = $this->Seo("this","description"); if(!empty($tmp)) $code[] = ''; if($this->HTML != "html5" ){ $code[] = ''; } if($this->HTML != "html5"){ $tmp = $this->Google("vf1"); if(!empty($tmp)) $code[] = $tmp; } $responsive_on = $this->P('responsive_on'); if( $responsive_on ){ $code[] = ''; }else{ $code[] = ''; } $favicon = file_exists("favicon.ico") ? "{$this->_Root}favicon.ico" : "http://www.miocms.it/favicon.ico"; if($this->_favicon_on) $code[] = ''; $code[] = ''; //Codice per rilevare browser IE $code[] = ''; $code[] = ''; $code[] = ''; /* $code[] = '';*/ switch( $this->Famiglia ){ default: case 2: $code[] = ''; break; case 2.5: if( $v=$this->SitePlugin("jquery") ){ $code[] = ''; } break; } $css_root = $this->_MinifyRoot ? $this->_MinifyRoot : $this->_Root; if( false && !isset($_GET["minify"]) ){ if($css_js && count($css_js)>0){ foreach($css_js as $k=>$v){ $code[] = ''; } } if($css && count($css)>0){ foreach($css as $k=>$v){ $code[] = ''; } } }else{ if($css_js && count($css_js)>0){ foreach($css_js as $k=>$v) $css_js[$k] = "{$css_root}{$v}"; $code[] = ''; $code[] = ''; } if($css && count($css)>0){ foreach($css as $k=>$v){ $css[$k] = "{$css_root}{$v}"; } $code[] = ''; } } if( $this->Famiglia==2.5 ){ $code[] = ''; $code[] = ''; if( $this->HTML=="html5"){ $code[] = ''; } //elenco plugin $plugins = $this->SitePlugin("all",1,false); $arr = array(); $arr_ext = array(); //per plugin in CDN esterne foreach($plugins as $pl){ $v = (string) $pl["version"]; //Opzioni $tmp = explode(",",$pl["option"]); $option = array(); if( count($tmp)>0){ foreach($tmp as $tmp_item){ list($key,$val) = explode(":",$tmp_item); $option[ $key ] = $val; } } switch( strtolower($pl["plugin"]) ){ case "bxslider": $main_v = substr($v,0,1); if( $main_v=="3"){ $arr[] = "/mio/v2/js/jquery/bxSlider/{$v}/bx_styles/bx_styles.css"; }else if( $main_v=="4"){ $arr[] = "/mio/v2/js/jquery/bxSlider/{$v}/jquery.bxslider.css"; } break; case "colorbox": $arr[] = "/mio/v2/js/jquery/colorBox/{$v}/example{$option[tipo]}/colorbox.css"; break; case "prettyphoto": $arr[] = "/mio/v2/js/jquery/prettyPhoto/{$v}/css/prettyPhoto.css"; break; case "fancybox": $arr[] = "/mio/v2/js/jquery/fancybox/{$v}/source/jquery.fancybox.css"; $arr[] = "/mio/v2/js/jquery/fancybox/{$v}/source/helpers/jquery.fancybox-buttons.css"; $arr[] = "/mio/v2/js/jquery/fancybox/{$v}/source/helpers/jquery.fancybox-thumbs.css"; break; case "messi": $arr[] = "/mio/v2/js/jquery/messi/{$v}/messi.css"; break; case "nivoslider": $arr[] = "/mio/v2/js/jquery/nivo-slider/{$v}/nivo-slider.css"; if( $option["theme"] ){ $arr[] = "/mio/v2/js/jquery/nivo-slider/{$v}/themes/{$option['theme']}/{$option['theme']}.css"; } break; case "bootstrap": list($tmp_mainversion) = explode(".",$v); $tmp_mainversion = intval($tmp_mainversion); $arr[] = "/mio/v2/css/bootstrap/{$v}/css/bootstrap.css";//no minify perché viene applicato in seguito e crea problemi if( $tmp_mainversion<3 ){ $arr[] = "/mio/v2/css/bootstrap/{$v}/css/bootstrap-responsive.css";//no minify perché viene applicato in seguito e crea problemi } unset( $tmp_mainversion ); break; } } $code[] = $this->CSS_noValidate( $this->MinifyPath . implode(",",$arr) ); if( count($arr_ext)>0 ){ foreach($arr_ext as $v){ $code[] = $this->CSS_noValidate( $v ); } } } return implode("\r\n",$code); } private function CSS_noValidate($path){ $arr = array(); $arr[] = ''; $arr[] = ''; return implode("\n",$arr); } public function JSLib($js=false){ $_ExtRoot = $this->_ExtRoot ? $this->_ExtRoot : $this->_Root; $code = array(); if( $js ){ if( false ){ foreach( $js as $v ){ //Disabilita minify $code[] = ''; } }else{ if( !$this->subsite ){ //per siti normali (che non hanno il path sotto il dominio principale) foreach($js as $k=>$v) $js[$k] = $this->_Root.$v; } $code[] = ''; } } if( $this->Famiglia==2.5){ //elenco plugin $plugins = $this->SitePlugin("all",1,false); $arr = array();//Da utilizzare con minify $arr_ext = array(); //plugin in CDN esterne foreach($plugins as $pl){ $v = (string) $pl["version"]; switch( strtolower($pl["plugin"]) ){ case "jquery": $arr[] = "/mio/v2/js/jquery/easing/1.3/jquery.easing.1.3.js"; $arr[] = "/mio/v2/js/jquery/scrollTo/1.4.3.1/jquery.scrollTo.js"; $arr[] = "/mio/v2/js/jquery/animate-colors/1.1/jquery.animate-colors.js"; break; case "bxslider": $main_v = substr($v,0,1); if( $main_v=="3") { $arr[] = "/mio/v2/js/jquery/bxSlider/{$v}/jquery.bxSlider.min.js";//la versione non-minify è dentro "source". Testare prima di togliere }else if( $main_v=="4"){ $arr[] = "/mio/v2/js/jquery/bxSlider/{$v}/jquery.bxslider.js"; $arr[] = "/mio/v2/js/jquery/bxSlider/{$v}/plugins/jquery.fitvids.js"; } break; case "colorbox": if($v=="1.3.19.3"){ $arr[] = "/mio/v2/js/jquery/colorBox/{$v}/colorbox/jquery.colorbox.js"; }else{ $arr[] = "/mio/v2/js/jquery/colorBox/{$v}/jquery.colorbox.js"; } break; case "prettyphoto": $arr[] = "/mio/v2/js/jquery/prettyPhoto/{$v}/js/jquery.prettyPhoto.js"; break; case "fancybox": $arr[] = "/mio/v2/js/jquery/fancybox/{$v}/lib/jquery.mousewheel-3.0.6.pack.js"; $arr[] = "/mio/v2/js/jquery/fancybox/{$v}/source/jquery.fancybox.pack.js"; $arr[] = "/mio/v2/js/jquery/fancybox/{$v}/source/helpers/jquery.fancybox-buttons.js"; $arr[] = "/mio/v2/js/jquery/fancybox/{$v}/source/helpers/jquery.fancybox-media.js"; $arr[] = "/mio/v2/js/jquery/fancybox/{$v}/source/helpers/jquery.fancybox-thumbs.js"; break; case "messi": $arr[] = "/mio/v2/js/jquery/messi/{$v}/messi.js"; break; case "nivoslider": $arr[] = "/mio/v2/js/jquery/nivo-slider/{$v}/jquery.nivo.slider.pack.js"; break; case "bootstrap": $arr[] = "/mio/v2/css/bootstrap/{$v}/js/bootstrap.js"; break; } } $code[] = ''; if( count($arr_ext)>0 ){ foreach($arr_ext as $v){ $code[] = ''; } } } $code[] = ''; return implode("\r\n",$code); } public function NavigationMenu(){ //restituisce un array con le pagine a partire dalla presente a salire $page = $this->Seo("this"); $arr=array(); $arr[] = $page; //Cerca tra mio_pagine do{ $flag = false; if($page["id_pagina"]>0){ $page = $this->Seo($page["id_pagina"]); $arr[] = $page; $flag=true; } }while($flag); $arr = array_reverse($arr); return $arr; } private function TbFromModulo($modulo="news"){ //restituisce la tabella del modulo switch($modulo){ case "news": return "mio_news"; case "prodotti": return "mio_prodotti"; case "faq": return "mio_faq"; case "photogallery": return "mio_photogallery"; default: return false; } } public function BreadCrumb( $glue=" > " ){ $menu = $this->NavigationMenu(); $page = $this->Seo("this"); $getpage = $this->getPage(); //Cerca tra le categorie if($getpage[3] && $getpage[2]>0){ $records = $this->BreadCrumbCat($getpage[2]); }else if($getpage[2]>0){ //Cerca tra i record finali //array( $id_page , $id_page_parent , $id, $is_cat, $tb); $id_record = $getpage[2]; $mod = $page["modulo_riferimento"]; $records = array(); do{ $r = $this->BreadCrumbItem($id_record,$mod); $flag = $r["id_parent"]>0 ? true : false; $r["is_cat"] = false; $records[] = $r; if($flag){ $q = "SELECT id FROM ".$this->TbFromModulo($mod)." WHERE id_base = {$r['id_parent']}"; $id_record = $this->cn->OF($q); } }while($flag); $records = array_reverse($records); if($r["id_categoria"]>0){ $cat = $this->CategorieSup($r["id_categoria"]); //IMPLEMENTARE QUESTA PARTE $tree = array(); $tree = $this->BreadCrumbCat($r["id_categoria"]); $records = array_merge($tree,$records); unset($tree); } } $breadcrumb = array(); foreach($menu as $item){ $breadcrumb[] = "Uri($item["id"])."\" class=\"_m_breadcrumb_a\">".$item["menu"].""; } if( isset($records) && count($records)>0 ){ foreach($records as $r){ $txt = isset($r["titolo"]) ? $r["titolo"] : $r["nome"]; $breadcrumb[] = "Uri($page["id"],$r["id"],$r["is_cat"])."\" class=\"_m_breadcrumb_a\">{$txt}"; } } //la funzione Uri($id_page,$id=0,$is_cat=false,$lang=NULL,$return="full") //aggiunge la classe "fired" all'ultima voce $breadcrumb[count($breadcrumb)-1] = str_replace("class=\"","class=\"fired ", $breadcrumb[count($breadcrumb)-1]); return implode($glue,$breadcrumb); } private function BreadCrumbCat($id_cat){ $list = $this->CategorieSup($id_cat); $tree = array(); foreach($list as $v){ $tree[] = array( "id" => $v["id"], "nome" => $v["nome"], "is_cat" => true ); } return $tree; } private function BreadCrumbItem($id,$modulo){ switch( $modulo ){ case "news": $r = $this->News($id); break; case "prodotti": $r = $this->Prodotto($id); break; case "faq": $r = $this->Faq($id); break; case "photogallery": $r = $this->Photogallery($id); break; } return $r; } private function Sezione($sezione){ $sezione_arr = explode(",",$sezione); //riconoscimento se $sezione è un elenco di id_gruppo_sezione o il nome della sezione $i=0; foreach($sezione_arr as $v){ if(is_numeric($v)){ $i++; } } $search_gs_from_id = $i==count($sezione_arr) ? true : false; //DIVIDE PER PIU' SEZIONI if(count($sezione_arr)==1){ $w_sezione = " = '{$sezione_arr[0]}'"; }else{ $w_sezione = " IN ('".implode("','",$sezione_arr)."')"; } return array($w_sezione, $search_gs_from_id ); } public function H1(){ $h1 = $this->Seo("this","h1"); return strlen($h1)>0 ? "

{$h1}

" : ""; } public function Seo($id_page="this",$what=NULL,$lang=NULL){ /***** What: $id_page => id della pagina oppure "this" modulo_riferimento, id_pagina (intesa come pagina superiore), id_news, is_home, pagina (nome), nome_file (file riferimento), attiva (0/1) menu (voce menu), uri, uri_301 (in caso di redirect), title, h1, keywords, description, lang ***/ $lang = !$lang ? $this->_Lang : $lang; $is_cat = false; $tb=$id_page_parent=$id_record=NULL; if($id_page=="this"){ list($id_page,$id_page_parent,$id_record,$is_cat,$tb) = $this->getPage(); $id_page = $id_page==0 && $id_page_parent>0 ? $id_page_parent : $id_page; } //Ricerca pagina o pagina genitore $w_page = is_numeric($id_page) ? " p.id = {$id_page}" : " p.pagina = '{$id_page}'"; $q = "SELECT p.*, s.menu, s.uri, s.noindex, s.title, s.h1, s.keywords, s.description FROM mio_pagine p INNER JOIN mio_pagine_seo s ON p.id = s.id_pagina WHERE s.`lang` = '{$lang}' AND {$w_page} AND p.attiva=1"; $Page = $this->cn->OQ($q); if(!$is_cat && $id_record>0 && $Page["id_news"]>0){ $Page["id_news"] = $id_record; } if(isset($Page["title"]) && empty($Page["title"]) ){ $tmp = $Page; do{ if($tmp["id_pagina"]>0) $tmp = $this->Seo($tmp["id_pagina"]); else if($tmp["id"]!=1) $tmp = $this->Seo(1); $tmp["title"]=trim($tmp["title"]); }while(empty($tmp["title"]) && $tmp["id"]>1); $tmp["title"]=trim($tmp["title"]); $Page["title"] = empty($tmp["title"]) ? $this->P("cliente")." :: site by MiOcms" : $tmp["title"]; } if($Page==-1){ $Page="404"; } if($id_record>0 && $is_cat){ //caso categoria $cat = $this->Categoria($id_record); $tmp = $Page; $tmp["title"] = $tmp["h1"] = $cat["nome"]; $tmp["keywords"] = $this->doKeywords($cat["nome"]); $tmp["uri"] = $this->ParseUri($cat["nome"])."_c{$id_record}"; $tmp["description"] = $this->ShortTxt($cat["testo"],255,""); $Page = $tmp; }else if($id_record>0 && !$is_cat){ //caso record specifico $tmp = $Page; switch($Page["modulo_riferimento"]){ case "news": $row = $this->News($id_record); $tmp["title"] = $tmp["h1"] = $row["titolo"]; $tmp["description"] = $this->ShortTxt($row["testo"],255,""); $tb = "mio_news"; break; case "prodotti": $row = $this->Prodotto($id_record); $tmp["title"] = $tmp["h1"] = $row["nome"]; $tmp["description"] = $this->ShortTxt($row["testo"],255,""); $tb = "mio_prodotti"; break; case "faq": $row = $this->Faq($id_record); $tmp["title"] = $tmp["h1"] = $row["domanda"]; $tmp["description"] = $this->ShortTxt($row["risposta"],255,""); $tb = "mio_faq"; break; case "photogallery": $row = $this->Photogallery($id_record); $tmp["title"] = $tmp["h1"] = $row["nome"]; $tmp["description"] = ""; $tb = "mio_photogallery"; break; } $tmp["keywords"] = $this->doKeywords($tmp["title"]); $Page = $tmp; //VERIFICA DI SEO SPECIFICO PER IL RECORD (se esiste la tabella) if( $this->isTable($tb) ){ $q = "SELECT * FROM {$tb} WHERE id = {$id_record}"; $tmp = $this->cn->OQ($q); if($tmp["id_base"]>0){ $q = "SELECT * FROM mio_pagine_seo WHERE id_base = {$tmp['id_base']} AND `lang` = '{$lang}'"; $tmp = $this->cn->OQ($q); foreach($Page as $k=>$v){ if( isset($tmp[$k]) && !empty($tmp[$k]) ){ $Page[$k] = $tmp[$k]; } } } } unset($tmp); } if( is_array($Page) && $Page["id_gruppo_sezione"]>0 ){ if( count($this->Filtri)>0 ){ foreach($this->Filtri as $f){ $cat = $this->Categoria($f,false,1); $maincat = $this->Categoria($cat["id_sup"],false,1); $Page["title"] .= ", {$maincat['nome']} {$cat['nome']}"; } unset($cat,$maincat); } $q = "SELECT * FROM mio_gruppi_sezioni WHERE id = {$Page['id_gruppo_sezione']}"; $gs = $this->cn->OQ($q); $Page["gruppo_sezione"] = $gs["nome"]; $Page["categorie_on"] = $gs["categorie_on"]==1 ? true : false; $Page['opzioni'] = array(); if( !empty($gs["opzioni"]) ){ $opt = explode(",",$gs["opzioni"]); if( count($opt)>0 && is_array($opt) ){ foreach($opt as $item){ list($k,$v) = explode(":",$item); $k = trim($k); $v = trim($v); if( !empty($k) ){ $Page['opzioni'][ $k ] = $v; } } } } } return $what ? $Page[$what] : $Page; } public function subPages($id_page="this"){ //ritorna le sotto-pagine collegate per id_pagina $id_page = $id_page=="this" ? $this->getPage(true) : $id_page; $q = "SELECT id FROM mio_pagine WHERE id_pagina = {$id_page}"; $x = $this->cn->Q($q,true); $arr=array(); foreach($x as $v){ $arr[] = $v["id"]; } return $arr; } private function doKeywords($txt,$min_length=3){ $txt = strtolower($txt); $change = array(",",";",".",":"); foreach($change as $c){ $txt = str_replace($c," ",$txt); } $delete = array("%","?","'","!","^"); foreach($delete as $d){ $txt = str_replace($d,"",$txt); } $txt = explode(" ", $txt); $new_txt = array(); foreach($txt as $v){ if(strlen($v)>$min_length){ $new_txt[] = $v; } } unset($txt,$v,$change); return implode(", ",$new_txt)." "; } public function getPage($return_idpage=false){//restituisce i dati della pagina corrente $main_page = $page = $id = $is_cat = false; $L = strtolower($_GET["L"]); $L = empty($L) ? "it" : $L; $P = strtolower($_GET["P"]); $P = substr($P,-1)=="/" ? substr($P,0,strlen($P)-1) : $P; //Ricerca tra i 301 $q = "SHOW TABLES LIKE 'mio_pagine_seo'"; $flag = $this->cn->OQ($q); if($flag==-1){ return false; } //CONTROLLA SE C'E' UN 301 COME URI, DOPO SARA' VERIFICATO A LIVELLO DI ID_BASE $q = "SELECT uri_301 FROM `mio_pagine_seo` WHERE `uri`='{$P}'"; $uri301 = $this->cn->OF($q); $req_uri = $_SERVER['REQUEST_URI']; if(!$uri301){ $q = "SELECT uri_301 FROM `mio_pagine_seo` WHERE `uri`='{$req_uri}'"; $uri301 = $this->cn->OF($q); } if(!$uri301 && substr($req_uri,0,1)=="/"){ $req_uri = substr($req_uri,1); $q = "SELECT uri_301 FROM `mio_pagine_seo` WHERE `uri`='{$req_uri}'"; $uri301 = $this->cn->OF($q); } if($uri301){ header( "HTTP/1.1 301 Moved Permanently" ); header( "Location: {$uri301}"); exit; } $id_page = 1;//id della pagina (1 è sempre Home) $id_page_parent = NULL; //id della pagina di appartenenza (NULL è pari a root, se invece la pagina attuale fosse un record di una news "id_page_parent" sarebbe l'id della pagina NEWS $id=0; //id categoria o del record $is_cat = false;//se è una categoria $tb = false; //modulo di riferimento nel mio if(!empty($P) && $P!=$this->_Root){ $uri_tmp = $P; list($uri_tmp) = explode("?",$uri_tmp); list($uri_tmp) = explode("#",$uri_tmp); $uri_arr = explode("/",$uri_tmp); $new = array(); foreach($uri_arr as $v){ if( !preg_match("/_f(\d+)/", $v) && !empty( $v ) ){ $new[] = trim($v); } } $uri_arr = $new; ////CERCO FILTRI NELL'URL if( preg_match_all("/_f(\d+)/", $P, $matches) ){ foreach($matches[1] as $filtro){ $q = "SELECT id_sup FROM mio_categorie WHERE id = {$filtro} AND is_filtro=1"; $id_sup = $this->cn->OF($q); if($id_sup>0){ $this->Filtri[$id_sup] = $filtro; } } } $uri_element = $uri_arr[ count($uri_arr)-1 ]; if( preg_match("/_c(\d+)/", $uri_element, $matches) && !preg_match("/_(\d+)/",$uri_element)){ $is_cat = true; $id = array_pop($matches); }else if( preg_match("/_(\d+)/", $uri_element, $matches) ){ $id = array_pop($matches); } if($id>0){ //tolgo dall'array gli elementi categorie o records per individuare la pagina "parent" $new=array(); foreach($uri_arr as $el){ if(!preg_match("/_c(\d+)/",$el) && !preg_match("/_(\d+)/",$el)){ if(is_string($el) && !in_array($el,$new)){ $new[] = $el; } } } $uri_arr = $new; $uri_element = $uri_arr[ count($uri_arr)-1 ]; if($id>0 && $id_page>0){ $q = "SELECT modulo_riferimento FROM mio_pagine WHERE id = {$id_page} AND attiva=1"; $tb = $this->cn->OF($q); } } $q = "SELECT id_pagina FROM mio_pagine_seo WHERE `uri` = '{$uri_element}' AND `lang`='{$L}' LIMIT 1"; $id_page = $this->cn->OF($q); if(empty($id_page)){ $id_page="e404";//pagina non trovata } } //CONTROLLA REDIRECT 301 NEL CASO DI SEO SPECIFICO SUL SINGOLO RECORD if($id>0 && !$is_cat && $tb && $tb!="NULL"){ $q = "SELECT * FROM `mio_{$tb}` WHERE id = {$id}"; $tmp = $this->cn->OQ($q); if($tmp["id_base"]>0){ $q = "SELECT `uri_301` FROM mio_pagine_seo WHERE id_base = {$tmp['id_base']}"; $uri301 = $this->cn->OF($q); if(strlen($uri301)>0){ header( "HTTP/1.1 301 Moved Permanently" ); header( "Location: {$uri301}"); exit; } } } return $return_idpage ? $id_page : array( $id_page , $id_page_parent , $id, $is_cat, $tb); } public function DefaultLang(){ $lang = $this->P("lingua_def-".$this->host); if(empty($lang)){ $lang = $this->P("lingua_def-www.{$this->host}"); } $lang = empty($lang) ? $this->P("lingua_def") : $lang; $lang = empty($lang) ? "it" : $lang; return $lang; } public function UriFiltro($id_page,$id_filtro){//Genera l'url per il filtro indicato //$id_filtro indica l'id filtro da settare, se indicato come negativo (-$id_filtro) lo rimuove $filtri = $this->Filtri; if( $id_filtro<0 ){//da rimuovere $id_filtro = abs($id_filtro); unset( $filtri[$id_filtro] ); }else{ //aggiunge/sostituisce $Cat = $this->Categoria($id_filtro,false,1); $id_sup = $Cat["id_sup"]; $MainCat = $this->Categoria($id_sup,false,1); if($id_sup>0){ $filtri[$id_sup]=$id_filtro; } } $uri = $this->Uri($id_page); foreach($filtri as $f){ $cat = $this->Categoria($f,false,1); $MainCat = $this->Categoria($cat["id_sup"],false,1); $uri .= $this->ParseUri("{$MainCat['nome']}-{$cat['nome']}") . "_f{$f}/"; } return $uri; } public function Uri($id_page,$id=0,$is_cat=false,$lang=NULL,$return="full"){ //$id_page => id pagina nel MiO. Può essere anche "this"=>pagina corrente,"prev"=>pagina precedente tolto l'ultimo elemento di / (esempio: /it/pagina1/pagina2/ ritorna /it/pagina1/), "parent"=>torna l'elemento padre (se c'è) //$tb => tabella del modulo di riferimento per l'id (se is_cat è false) //$id => id del record o della categoria //$is_cat => è una categoria o meno //$lang => forza la lingua //$return => "full" ritorna URL completo, "partial" torna solo la parte richiesta compresa tra "/" e "/" $_Root = $this->_UriRoot ? $this->_UriRoot : $this->_Root; $return = strtolower($return); //casi speciali switch($id_page){ case "w3c_html": return "http://validator.w3.org/check?uri=referer"; break; case "w3c_css": return "http://jigsaw.w3.org/css-validator/check/referer/"; break; case "w3c_css3": return "http://jigsaw.w3.org/css-validator/check/referer/?profile=css3"; break; } $L = !$lang ? $this->_Lang : $lang; $lang_def = $this->DefaultLang(); $uri = array(); if($id_page=="this"){ if($id==0){ list($id_page,$id_page_parent,$id,$is_cat) = $this->getPage(); $id_page = $id_page==0 && $id_page_parent>0 ? $id_page_parent : $id_page; }else{ $id_page = $this->getPage(true); } }else if($id_page=="prev"){ $uri = $this->Uri("this"); list($uri) = explode("?",$uri); $uri_arr = explode("/",$uri); array_pop($uri_arr); if(substr($uri,strlen($uri)-1,1)=="/"){ array_pop($uri_arr); } $uri = implode("/",$uri_arr)."/"; return $uri; }else if($id_page=="parent"){ } if($id_page==1){ if($this->SkipUriLang){ return $_Root; }else{ return $L==$lang_def ? $_Root : $_Root.$L."/"; } }else if(!$this->SkipUriLang){ $uri[] = $L; } if($id_page>0){ $uri[] = $this->Uri_pagina($id_page,$L); if($is_cat && $id>0){//categoria $uri[] = $this->Uri_categoria($id,$L); }else if(!$is_cat && $id>0){ //record finale $Page = $this->Seo($id_page); $tb = empty($Page["modulo_riferimento"]) ? false : "mio_{$Page['modulo_riferimento']}"; if($tb && $tb!="mio_NULL"){ $q = "SELECT id_categoria FROM `{$tb}` WHERE id = {$id}"; $id_cat = $this->cn->OF($q); if($id_cat>0) $uri[] = $this->Uri_categoria($id_cat); //CONTROLLO SE BASE ATTIVO $uri_forzato = false; $q = "SELECT * FROM `{$tb}` WHERE id = {$id}"; $tmp = $this->cn->OQ($q); if($tmp["id_base"]>0){ //RICOSTRUISCO EVENTUALI PARENT $id_base_tmp = $tmp["id_base"]; $uri_tmp=array(); do{ $q = "SELECT * FROM mio_base WHERE id = {$id_base_tmp}"; $tmp_base = $this->cn->OQ($q); if($tmp_base["id_parent"]>0){ $q = "SELECT id FROM {$tb} WHERE id_base = {$tmp_base['id_parent']}"; $tmp_id = $this->cn->OF($q); $uri_tmp[] = $this->Uri($id_page,$tmp_id,$is_cat,$lang,"partial"); $id_base_tmp = $tmp_base["id_parent"]; $flag = true; }else{ $flag = false; } }while( $flag ); if(count($uri_tmp)>0){ $uri_tmp = array_reverse($uri_tmp); $uri = array_merge($uri,$uri_tmp); } unset($uri_tmp); //NEL CASO CI SIA LA PARTE SEO DEL RECORD SPECIFICO $q = "SELECT `uri` FROM mio_pagine_seo WHERE id_base = {$tmp['id_base']} AND `lang` = '{$L}'"; $uri_tmp = $this->cn->OF($q); $uri_tmp = $this->ParseUri($uri_tmp); if(!empty($uri_tmp)){ $uri_tmp .= "_{$id}"; if($return=="partial"){ return $uri_tmp; }else{ $uri[] = $uri_tmp; } $uri_forzato=true; } } if(!$uri_forzato){ $q = "SELECT `txt` FROM mio_titoli WHERE id_ext = {$id} AND tb_ext = '{$tb}' AND `lang`='{$L}' AND `nomecampo` IN ('titolo','nome','domanda') LIMIT 1"; $txt = $this->cn->OF($q); $txt = trim($txt); if( !empty( $txt ) ){ $txt = $this->ParseUri($txt); $txt .= "_{$id}"; if($return=="partial"){ return $txt; }else{ $uri[] = $txt; } } } }else{ die("\">Error: modulo non selezionato"); } } }else{ $uri[] = "404.html"; } $final_uri = $this->SkipUriLang ? "" : $_Root; $final_uri .= implode("/",$uri)."/"; return $final_uri; } private function Uri_pagina($id_page,$lang=false){ $lang = $lang ? $lang : $this->_Lang; $Page = $this->Seo($id_page,NULL,$lang); $uri = ""; if( isset($Page["id_pagina"]) && $Page["id_pagina"]>0){ $uri .= $this->Uri_pagina($Page["id_pagina"])."/"; } $uri .= $Page["uri"]; return $uri; } private function Uri_categoria($id,$lang=false){ //URI della categoria $lang = $lang ? $lang : $this->_Lang; $cat = $this->Categoria($id,$lang); $txt = ""; if($cat["id_sup"]>0){ $txt .= $this->Uri_categoria($cat["id_sup"])."/"; } $txt .= $this->ParseUri($cat["nome"])."_c{$id}"; return $txt; } public function ParseUri($txt){ $allowed="abcedfghijklmnopqrstuvwxyz_-0123456789"; $allowed = str_split($allowed); $convert = array( "ì"=>"i", "ù"=>"u","ü"=>"u","Ü"=>"u","Û"=>"u","û"=>"u","ú"=>"u","Ú"=>"u", "Ý"=>"y","ý"=>"y","Ÿ"=>"y","ÿ"=>"y","Υ"=>"y","υ"=>"y",""=>"y","ϒ", "Τ"=>"t","τ"=>"t", "à"=>"a","Å"=>"a","å"=>"a","Â"=>"a","â"=>"a","Æ"=>"a","æ"=>"a","À"=>"a","Ã"=>"a","ã"=>"a","Ä"=>"a","ä", "Β"=>"b","β"=>"b", "Š"=>"s","š"=>"s","§"=>"s","ß", "è"=>"e","é"=>"e","Ε"=>"e","ε"=>"e","€"=>"e","É"=>"e","é"=>"e","Ê"=>"e","ê", "ò"=>"o","Ω"=>"o","ω"=>"o","Ο"=>"o","ο"=>"o","Ó"=>"o","ó"=>"o","Ö"=>"o","ö"=>"o","Õ"=>"o","õ", "Ñ"=>"n","ñ"=>"n","Ν"=>"n","ν"=>"n", "Ç"=>"c","ç"=>"c","¢", ); $txt = strtolower($txt); foreach($convert as $from=>$to){ $txt = str_replace($from,$to,$txt); } $txt = str_replace(" ","-",$txt); for($i=0,$new="";$igetPage(); $uri = $this->Uri($id_page,$id,$is_cat,$lang); //verifica che ci sia un dominio in lingua diversa settata $q = "SELECT * FROM mio_parametri WHERE `valore` = '{$lang}' AND `parametro` LIKE 'lingua_def-%' LIMIT 1"; $r = $this->cn->OQ($q); if($r!=-1){ $uri = $id_page==1 ? $this->_Root : $uri; list(,$domain) = explode("-",$r["parametro"]); $n_dots = substr_count($domain,"."); if( $n_dots==0 ){ return $uri; }else if($n_dots==1){ return "http://www.{$domain}{$uri}"; }else{ return "http://{$domain}{$uri}"; } }else{ return $uri; } } public function Google($what="analytics"){ $code=""; switch($what){ default: case "analytics": $id_analytics = $this->P("gt-analytics-{$this->host}"); if(!$id_analytics){ $id_analytics = $this->P("gt-analytics-www.{$this->host}"); } if(!$id_analytics){ $id_analytics = $this->P("gt-analytics"); } $id_analytics = $this->local ? "local" : $id_analytics; if(!empty($id_analytics) && !$this->local ){ $code = ""; } break; case "vf1": $vf1 = $this->P("gt-verificatecode-{$this->host}"); if(!$vf1){ $this->P("gt-verificatecode-www.{$this->host}"); } if(!$vf1){ $vf1 = $this->P("gt-verificatecode"); } if(!empty($vf1)){ $code = strpos($vf1,".html")>0 ? $vf1 : ""; } break; } return $code; } public function thisUri(){ $pageURL = 'http'; $pageURL .= $_SERVER["HTTPS"]=="on" ? "s" : ""; $pageURL .= "://"; if($_SERVER["SERVER_PORT"]!="80"){ $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; }else{ $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } public function Social($social="likes",$parameters=NULL,$thisPage=true){ //social => facebook,twitter,flickr,linkedin,rss //parameters => array di valori //thisPage => se true restituisce i valori solo se flaggati per questa pagina, altrimenti li restituisce comunque $code = ""; switch($social){ case "likes": $arr = array(); $arr[] = $this->Social("facebook-like"); $arr[] = $this->Social("twitter-like"); $arr[] = $this->Social("g+"); $arr[] = $this->Social("pinterest-like"); $code .= implode(" ",$arr); unset($arr); break; case "link": $arr = array(); $social = array("facebook","twitter","gplus","instagram","pinterest","youtube","linkedin","flickr","foursquares","pinterest","rss"); foreach($social as $s){ $x = $this->Social($s); if( $x ){ if( substr( strtolower($x),0,7)!="http://" && substr( strtolower($x),0,7)!="https://" ){ $x = "http://{$x}"; } $arr[] = ''; } } if( count($arr)>0 ){ $code = '
    '; foreach($arr as $v){ $code .= '
  • ' . $v . '
  • '; } $code .= '
'; } unset($arr,$social); break; case "facebook": $code = $this->P("fb-url"); break; case "twitter": $code = $this->P("tw-url"); break; case "pinterest": $code = $this->P("pinterest-url"); break; case "instagram": $code = $this->P("instagram-url"); break; case "gplus": $code = $this->P("gplus-url"); break; case "flickr": $code = $this->P("flickr-url"); break; case "foursquares": $code = $this->P("foursquare-url"); break; case "linkedin": $code = $this->P("linkedin-url"); break; case "youtube": $code = $this->P("youtube-url"); break; case "rss": $q = "SELECT * FROM mio_parametri WHERE `parametro` LIKE 'rss_en%'"; $this->cn->Q($q); if($this->cn->n){ $code = $this->_Root.$this->_Lang."/rss/"; }else{ $code = false; } break; case "facebook-like": if($thisPage){ //verifica che facebook deve esserci per questa pagina $id_page = $this->getPage(true); $on = $this->P("fb-like_{$id_page}"); if($on!="1") return ""; } $uri = $this->thisUri(); $layout = $parameters["layout"] ? $parameters["layout"] : "button_count";//valori: "standard","button_count","box_count" $width = $parameters["width"] ? $parameters["width"] : 100;// 450; $height = $parameters["height"] ? $parameters["height"] : 20; $font = $parameters["font"] ? "=".$parameters["font"] : ""; //arial,lucida grande,segoe ui,tahoma,trebuchet ms,verdana $colorscheme = $parameters["colorscheme"] ? $parameters["colorscheme"] : "light";//light,dark $code .= ""; $code .= ''; $code .= ""; break; case "twitter-like": if($thisPage){ //verifica che facebook deve esserci per questa pagina $id_page = $this->getPage(true); $on = $this->P("tw-tweet_{$id_page}"); if($on!="1") return ""; } $datacount = $parameters["datacount"] ? $parameters["datacount"] : "horizontal"; //vertical,horizontal,none $code .= ""; $code .= ''; $code .= ""; $code .= ""; break; case "pinterest-like": break; $code .= ' '; break; //break;//disabilitato al momento if($thisPage){ //verifica che pinterest deve esserci per questa pagina $id_page = $this->getPage(true); $on = $this->P("pinterest-like_{$id_page}"); if($on!="1") return ""; } $uri = $this->thisUri(); if( $this->pageData["news"] ){ $media = $this->FotoNews( $this->pageData["news"]["id"], true ); if( $media ){ $code .= ""; $code .= ' '; $code .= ""; } } break; //Vecchia integrazione $layout = $parameters["layout"] ? $parameters["layout"] : "horizontal";//valori: "horizontal","vertical","none" $code .= ""; $code .= ''; $code .= ""; break; case "gplus-like": case "g+": if($thisPage){ //verifica che google+ deve esserci per questa pagina $id_page = $this->getPage(true); $on = $this->P("gplus-plus_{$id_page}"); if($on!="1") return ""; } if($this->HTML=="html5"){ $code .= '
'; }else{ $code .= ''; } $code .= ''; break; } return $code; } public function Address($main=true){//$main = true -> ritorna solo l'indirizzo principale (footer), altrimenti torna un array con tutti gli address (da sviluppare) $arr=array(); $indirizzo = $this->P("address-main_indirizzo"); $cap = $this->P("address-main_cap"); $citta = $this->P("address-main_citta"); if(!empty($indirizzo) && !empty($cap)){ $arr["main"] = "{$indirizzo} - {$cap}"; }else if(!empty($indirizzo) || !empty($cap)){ $arr["main"] = empty($cap) ? $indirizzo : $cap; } $arr["main"] .= " ".$citta; return $arr["main"]; } public function Tel($what="main"){ //$what => "main",1,2,3,mobile1,mobile2,mobile3,fax,footer oppure "all" per avere un array con tutti $keys[] = "main"; for($i=1;$i<=3;$i++) $keys[] = $i; for($i=1;$i<=3;$i++) $keys[] = "mobile{$i}"; $keys[] = "fax"; $keys[] = "footer"; $arr=array(); foreach($keys as $k){ $arr[$k] = $this->P("phone-{$k}"); } return $what=="all" ? $arr : $arr[$what]; } public function Pagination($type=1,$page=0,$maxpage){ /* $type: 1 => stampa html 2 => type deve essere passato in questa forma 2_stringa_ajax_da_chiamare_su_onclick (es. 2_$.ajax(url: '/_ext/scripts/ajax_services.php' ..... */ $html=array(); list($type,$type_opt) = explode("_",$type); switch($type){ default: case "1": //html e link normali $html[] = "
"; for($i=0;$i<$maxpage;$i++){ $cl = $i==$page ? '_mio_pagination_item_fired' : '_mio_pagination_item'; if($i<$page){ $rel = ' rel="prev"'; }else if($i>$page){ $rel = ' rel="next"'; }else{ $rel = ''; } $get_str = ""; if( isset($_GET) && count($_GET)>0){ foreach($_GET as $k=>$v){ if( $k!="p" && $k!="L" && $k!="P" ){ $get_str .= "&{$k}={$v}"; } } } $html[] = "".($i+1).""; } $html[] = "
"; break; case "2": //html e ajax $html[] = "
"; for($i=0;$i<$maxpage;$i++){ $cl = $i==$page ? '_mio_pagination_item_fired' : '_mio_pagination_item'; $html[] = "".($i+1).""; } $html[] = "
"; break; } return implode("",$html); } public function Menu($menu="auto",$id="_m_menumain",$class=false,$li_id_on=false){ $html = array(); $id_thispage = $this->getPage(true); $pages = false; if($menu=="auto"){//tutte le pagine $q = "SELECT * FROM mio_pagine WHERE attiva=1 ORDER BY id ASC"; $pages = $this->cn->Q($q,true); }else if(strlen($menu)>0){ //elenco id pagine separate da virgola $pages = array(); $tmp = explode(",",$menu); foreach($tmp as $id_tmp){ //$q = "SELECT * FROM mio_pagine WHERE id IN ({$menu}) AND attiva=1"; $q = "SELECT * FROM mio_pagine WHERE id = {$id_tmp} AND attiva=1"; $p = $this->cn->OQ($q); if( $p!=-1){ $pages[] = $p; } } } if($pages){ $html[] = ""; return implode("",$html); } return false; } //*** FINE SEO E PAGINE **** //**** BANNER **** public function CercaBanner($formato,$max=NULL,$cliente=NULL,$sezione=NULL){ //$formato = misure (es. 180x150) //$max = numero massimo di banner da tornare (NULL => Tutti) //$cliente => nome del cliente o NULL per qualsiasi //$sezione => se NULL cerca tra tutti if( $sezione ){ list( $w_sezione , $search_gs_from_id ) = $this->Sezione( $sezione ); } $sub_n_click = "(SELECT SUM(n_click) FROM mio_banners WHERE id_campagna = c.id)"; $sub_n_impressions = "(SELECT SUM(n_impressions) FROM mio_banners WHERE id_campagna = c.id)"; $q = "SELECT c.*, b.id AS id_banner, {$sub_n_click} AS tot_click, {$sub_n_impressions} AS tot_imp FROM (mio_banners_campagne c INNER JOIN mio_banners b ON c.id = b.id_campagna) INNER JOIN mio_gruppi_sezioni gs ON gs.id = c.id_gruppo_sezione WHERE c.data_inizio <= {$this->_NOW} AND ( (c.tipo='tempo' AND {$this->_NOW} <= c.data_fine) OR (c.tipo='click' AND {$sub_n_click} < c.max_ads ) OR (c.tipo='impression' AND {$sub_n_impressions} < c.max_ads ) ) AND b.dimensioni = '{$formato}'"; if( $cliente ){ $q .= " AND c.cliente LIKE '%{$cliente}%'"; } if( $sezione ){ if( $search_gs_from_id ){ $q .=" AND gs.id {$w_sezione}"; }else{ $q .=" AND gs.nome {$w_sezione}"; } } $q .= " GROUP BY b.id_campagna ORDER BY RAND(), tot_imp ASC"; $list = $this->cn->Q($q,true); return $list; } public function Banner($id){ $q = "UPDATE mio_banners SET n_impressions=n_impressions+1 WHERE id = {$id}"; $this->cn->Q($q); $q = "SELECT * FROM mio_banners WHERE id = {$id}"; $Banner = $this->cn->OQ($q); if($Banner==-1){ return false; }else{ if( !empty($Banner["html_code"]) ){ return $Banner["html_code"]; }else if($Banner["id_file"]>0){ $File = $this->File($Banner["id_file"]); $q = "SELECT * FROM mio_file WHERE id = {$Banner['id_file']}"; $FileInfo = $this->cn->OQ($q); list($w,$h) = explode("x",$Banner["dimensioni"]); if( strtolower($FileInfo["ext"])=="gif" ){ $img = "http://{$File}"; }else{ $img = $this->Img($File,false,$w,$h,false,"std"); } if( $this->HTML=="html5"){ $ret = "\"{$Banner['url']}\""; }else{ $ret = "\"{$Banner['url']}\""; } return $ret; }else{ return false; } } } //**** FINE BANNER **** //*******NEWS******** public function ArchivioNews($sezione,$titolo="",$testo="",$data_dal="",$data_al="",$id_categoria="NULL",$orderBy="id",$orderType="ASC",$file_to_include="",$page=0,$item_x_page=10,$pagination=true,$id_parent=false){ $_m_ris = $this->CercaNews($sezione,$titolo,$testo,$data_dal,$data_al,$id_categoria,$orderBy,$orderType,"",$id_parent); $_m_n_tot = $this->num_rows; if($item_x_page>0 && $_m_n_tot>0){ list($page,$maxpage,$limit) = $this->Pages($page,$_m_n_tot,$item_x_page); @$this->cn->F($ris); $_m_ris = $this->CercaNews($sezione,$titolo,$testo,$data_dal,$data_al,$id_categoria,$orderBy,$orderType,$limit,$id_parent); $_m_n = $this->num_rows; $_m_i=0; while($_m_row = $this->cn->R($_m_ris)){ $_m_row = $this->News($_m_row["id"]); $_m_foto = $this->FotoNews($_m_row["id"],true); $_m_last_row = $_m_i == $_m_n-1 ? true : false; @include( $file_to_include ); $_m_i++; } @$this->cn->F($_m_ris); if(!$pagination){ return array( $page, $maxpage ); }else if($maxpage>1){ echo $this->Pagination($pagination,$page,$maxpage); } } } public $CercaNewsFiltri = NULL; //Filtri su tutte le news (OR) public $CercaNewsFiltriAnd = NULL;//Filtri su news TUTTI (AND mio_categorie_br) public $CercaNewsNotFiltri = NULL;//Filtri su news (mio_categorie_br), in questo caso NON devono essere presenti public $CercaNewsNotFiltriAnd = NULL; //Filtri su news (mio_categorie_br), in questo caso NON devono essere presenti (TUTTI) public function CercaNews($sezione="this",$titolo="",$testo="",$data_dal="",$data_al="",$id_categoria="NULL",$orderBy="id",$orderType="ASC",$limit="",$id_parent=false){ /***** id_parent => se false non viene preso in considerazione, se NULL/0 vengono filtrate solo le news di livello 0, se id>0 vengono filtrate le news con quell'id data_dal / data_al se in questi campi viene passato un solo valore si riferisce al campo "data", se vengono passati 2 valore separati da "|" il primo si riferirà al campo "data" il secondo a "data_fine". Esempio: $data_dal='2011-05-02' => fa il controllo sul solo campo data Esempio 2: $data_dal = '2011-05-02|2011-05-05' fa il controllo sul campo data il primo valore e data_fine il secondo ****/ list($data_dal,$data_fine_dal) = explode("|",$data_dal); list($data_al,$data_fine_al) = explode("|",$data_al); if($sezione=="this"){ $sezione = $this->pageData["Page"]["id_gruppo_sezione"]; } $sezione_arr = explode(",",$sezione); //riconoscimento se $sezione è un elenco di id_gruppo_sezione o il nome della sezione $i=0; foreach($sezione_arr as $v){ if(is_numeric($v)){ $i++; } } $search_gs_from_id = $i==count($sezione_arr) ? true : false; //DIVIDE PER PIU' SEZIONI if(count($sezione_arr)==1){ $w_sezione = " = '{$sezione_arr[0]}'"; }else{ $w_sezione = " IN ('".implode("','",$sezione_arr)."')"; } $forcedOrder = false; if( strpos(strtolower($orderBy),":forced:")===0 ){ $forcedOrder = true; list(,,$orderBy) = explode(":",$orderBy); } $base_on = $this->BaseOn($sezione); $q = "SELECT n.*,"; if( $base_on ){ $q .= "base.in_evidenza, base.id_parent AS base_id_parent, (SELECT `txt` FROM mio_testi WHERE id_ext = base.id AND tb_ext='mio_base' AND nomecampo='descr_breve' AND lang='".$this->lang."') AS descr_breve, base.attivo, IF( base.ordine IS NULL, 4294967295, base.ordine) AS ordine,"; } $q .= " gs.nome AS gruppo_sezione, (SELECT `txt` FROM mio_titoli WHERE id_ext = n.id AND tb_ext='mio_news' AND nomecampo='titolo' AND lang='".$this->lang."') AS titolo, (SELECT `txt` FROM mio_testi WHERE id_ext = n.id AND tb_ext='mio_news' AND nomecampo='testo' AND lang='".$this->lang."') AS testo, IF(n.id_categoria>0, (SELECT `txt` FROM mio_titoli WHERE id_ext = n.id_categoria AND tb_ext='mio_categorie' AND nomecampo='nome' AND lang='".$this->lang."'), '' ) AS categoria FROM"; $q .= " ((( mio_gruppi_sezioni gs INNER JOIN mio_news n ON gs.id = n.id_gruppo_sezione) LEFT JOIN mio_categorie cat ON n.id_categoria = cat.id)"; if( $base_on ){ $q .= " LEFT JOIN mio_base base ON n.id_base = base.id"; //$q .= " LEFT JOIN mio_opzioni_valori opzioni_valori ON opzioni_valori.id_base = base.id INNER JOIN mio_opzioni opzioni ON opzioni.id = opzioni_valori.id_opzione"; } $q .= ")"; if( $search_gs_from_id ){ $q .=" WHERE gs.id {$w_sezione}"; }else{ $q .=" WHERE gs.nome {$w_sezione}"; } if(empty($data_fine_dal) && empty($data_fine_al)){ $q .= " AND (n.data_fine = 0 OR n.data_fine >= DATE_FORMAT({$this->_NOW},'%Y-%m-%d') )"; } $q .= $this->qRicercaInTesti("mio_news",$titolo,$testo); if(!empty($data_dal)){ $q .= " AND '{$data_dal}' <= n.data"; } if(!empty($data_al)){ $q .= " AND n.data <= '{$data_al}'"; } if(!empty($data_fine_dal)){ $q .= " AND '{$data_fine_dal}' <= n.data_fine"; } if(!empty($data_fine_al)){ $q .= " AND n.data_fine <= '{$data_fine_al}'"; } if($id_categoria!="NULL"){ $id_categorie = $this->SubCategorie($id_categoria); $id_categorie = empty($id_categorie) ? $id_categoria : "{$id_categoria},{$id_categorie}"; $q .= " AND n.id_categoria IN($id_categorie)"; } if($base_on){ if($id_parent===0 || $id_parent===NULL){ $q .= " AND base.id_parent IS NULL"; }else if($id_parent>0){ $q .= " AND base.id_parent IN ({$id_parent})"; } } if( $base_on && $this->CercaNewsFiltri ){ $q .= " AND (SELECT COUNT(*) FROM mio_categorie_br WHERE id_base = base.id AND id_categoria IN (" . implode(",",$this->CercaNewsFiltri) . ") )>0"; } if( $base_on && $this->CercaNewsFiltriAnd ){ // QUERY CHE FUNZIONA NEL CASO TUTTI DEI VALORI DEL FILTRO SIANO VERI foreach( $this->CercaNewsFiltriAnd as $tmp){ $q .= " AND (SELECT COUNT(*) FROM mio_categorie_br WHERE id_base = base.id AND id_categoria = {$tmp} )>0"; } } if( $base_on && $this->CercaNewsNotFiltri ){ //QUERY IN FUNZIONE COME "OR" $q .= " AND (SELECT COUNT(*) FROM mio_categorie_br WHERE id_base = base.id AND id_categoria IN (" . implode(",",$this->CercaNewsNotFiltri) . ") ) = 0"; } if( $base_on && $this->CercaNewsNotFiltriAnd ){ foreach( $this->CercaNewsNotFiltriAnd as $tmp){ $q .= " AND (SELECT COUNT(*) FROM mio_categorie_br WHERE id_base = base.id AND id_categoria = {$tmp} )=0"; } } if( $this->Filters && $base_on ){ if( isset($this->Filters->in_evidenza) ){ $q .= " AND base.in_evidenza = "; $q .= $this->Filters->in_evidenza ? "1" : "0"; } } $q .= " HAVING TRIM(titolo)!=''"; if( $base_on && !$forcedOrder ){ //$q .= " ORDER BY base.ordine ASC, base.in_evidenza DESC"; //$q .= " ORDER BY base.ordine ASC, base.ordine IS NOT NULL, base.in_evidenza DESC"; $q .= " ORDER BY ordine ASC, base.in_evidenza DESC"; $q .= empty($orderBy) ? "" : ", {$orderBy} {$orderType}"; }else{ $q .= empty($orderBy) ? "" : " ORDER BY {$orderBy} {$orderType}"; } if(!empty($limit)){ $q .= " LIMIT {$limit}"; } if( $this->query_test) { echo "
".$q."
"; } $ret = false; if( $this->CercaReturnArray || $this->CercaReturnArray=="once"){ $ret = true; } $ris = $this->cn->Q($q, $ret); $this->num_rows = $this->cn->n; if( $this->CercaReturnArray=='once'){ $this->CercaReturnArray = false; } $this->Filters = new MioObj(); return $ris; } public function News($id){ //SE $id inizia con una "b" cerca per id_base $q = "SELECT n.*, gs.nome AS gruppo_sezione, (SELECT `txt` FROM mio_titoli WHERE id_ext = n.id AND tb_ext='mio_news' AND nomecampo='titolo' AND lang='".$this->lang."') AS titolo, (SELECT `txt` FROM mio_testi WHERE id_ext = n.id AND tb_ext='mio_news' AND nomecampo='testo' AND lang='".$this->lang."') AS testo, IF(n.id_categoria>0, (SELECT `txt` FROM mio_titoli WHERE id_ext = n.id_categoria AND tb_ext='mio_categorie' AND nomecampo='nome' AND lang='".$this->lang."'), '' ) AS categoria FROM (( mio_gruppi_sezioni gs INNER JOIN mio_news n ON gs.id = n.id_gruppo_sezione) LEFT JOIN mio_categorie cat ON n.id_categoria = cat.id) WHERE "; list($campo_id,$id) = $this->isIdBase($id); $q .= " n.{$campo_id} = {$id}"; $ret = $this->cn->OQ($q); if($ret!=-1){ $ret["titolo"] = $this->HTMLValidate($ret["titolo"]); $ret["testo"] = $this->HTMLValidate($ret["testo"]); } $ret = $this->BaseValues($ret); return $ret; } public function FotoNews($id_news,$preview=false){ $x = $this->FileNews($id_news,'foto'); if($preview){ $x = count($x)>0 ? $x[0] : false; } return $x; } public function AllegatiNews($id_news){ return $this->FileNews($id_news,'allegato'); } public function VideoNews($id_news){ return $this->FileNews($id_news,'video'); } public function FileNews($id_news,$tipo){ $riservato = $_SESSION["_mio_id_user"]>0 ? true : false; $riservato = $this->ShowRiservato ? true : $riservato; //mostra comunque i file riservati $q = "SELECT f.id_file, mio_file.riservato, (SELECT `txt` FROM mio_testi WHERE id_ext = f.id_file AND tb_ext='mio_news_file_br' AND nomecampo='testo' AND lang='".$this->lang."' LIMIT 1) AS testo, f.tipo FROM mio_news_file_br f INNER JOIN mio_file ON f.id_file = mio_file.id WHERE f.id_news = $id_news AND f.tipo='{$tipo}'"; $q .= $riservato ? "" : " AND mio_file.riservato = 0"; $q .= " AND (mio_file.`langs` IS NULL OR mio_file.`langs` LIKE '%".$this->lang."%')"; $q .= " ORDER BY cardinalita ASC"; $ris = $this->cn->Q($q); $Foto = array(); while($r=$this->cn->R($ris)){ $Foto[] = array("id_file"=>$r["id_file"],"file"=>$this->File($r["id_file"]),"testo"=>$r["testo"],"riservato"=>$r["riservato"],"tipo"=>$r["tipo"]); } $this->cn->F($ris); return $Foto; } //*******FINE NEWS******* //****** INIZIO PLUGINS public function PL_Prezzi($record,$what="all",$val=NULL){ //$record => row di riferimento contenente id_base //$what => "all"=>tutto, "standard" i valori che non hanno vincoli di quantità o data, "qta", "data //$val => valore per filtraggio in caso di "qta" o "data" $id_base = $record["id_base"]; if($id_base>0){ $q = "SELECT * FROM mio_pl_listino WHERE id_base = {$id_base}"; $r = $this->cn->OQ($q); if($r==-1) return false; $qBase = "SELECT p.*, (SELECT `txt` FROM mio_testi WHERE id_ext = p.id AND tb_ext='mio_pl_prezzi' AND nomecampo='descrizione' AND lang='".$this->lang."' LIMIT 1) AS descrizione FROM mio_pl_prezzi p WHERE p.id_pl_listino = {$r['id']}"; //sub_array $arr = array("prezzi"=>"prezzo","costi"=>"costo","tasse"=>"tassa","sconti"=>"sconto"); foreach($arr as $k=>$v){ $q=false; switch($what){ case "all": $q = $qBase . " AND p.tipo='{$v}'"; break; case "standard": $q = $qBase . " AND p.tipo='{$v}' AND p.dal IS NULL AND p.al IS NULL AND p.qta_dal IS NULL AND p.qta_al IS NULL"; break; case "qta": if($val!=NULL){ $q = $qBase . " AND p.tipo='{$v}' AND ( (p.qta_dal <= '{$val}' AND '{$val}' <= p.qta_al ) OR (p.qta_dal <= '{$val}' AND p.qta_al IS NULL) OR (p.qta_dal IS NULL AND '{$val}' <= p.qta_al) )"; } break; case "data": if($val===true){ $data_q = $this->_NOW; }else if($val){ $data_q = "'{$val}'"; } if($val){ $q = $qBase . " AND p.tipo='{$v}' AND ( (p.dal <= {$data_q} AND {$data_q} <= p.al) OR (p.dal <= {$data_q} AND p.al IS NULL) OR (p.dal IS NULL AND {$data_q} <= p.al) )"; } break; } if($q){ $r[ $k ] =$this->cn->Q($q,true); }else{ $r[ $k ] = array(); } } return $r; } return false; } //***** FINE PLUGINS //*******MAPPE******** public function Mappa($id,$type="news"){ //ritorna un array se trova risultati o false altrimenti switch($type){ default: case "news": $C = "id_news"; break; } $q = "SELECT * FROM mio_map WHERE {$C} = {$id} AND `show`=1"; $ris = $this->cn->Q($q); if($this->cn->n>0){ $arr=array(); while($r=$this->cn->R($ris)){ $arr[] = $r; } @$this->cn->F($ris); }else{ $arr=false; } return $arr; } public function GPosition($id_mappa){ $q = "SELECT * FROM mio_map WHERE id = $id_mappa"; $M = $this->cn->OQ($q); if(!empty($M["lat"]) && !empty($M["lon"]) ){ return '{ lat: '.$M["lat"].', lng: '.$M["lon"].'}'; }else if(!empty($M["indirizzo"]) ){ return $M["indirizzo"]; }else{ return ""; } } public function GMap($map,$dati_ser=NULL){ if(!$map){ return ""; } if($dati_ser){ /*$dati_ser può avere: id=>id del DIV contenitore della mappa a=>id dell'ancora w=>width forzato della mappa h=>height forzato della mappa */ $dati_ser = unserialize( $dati_ser ); }else{ $dati_ser = array("id"=>"_m_GMap","a"=>"_m_Map_anchor"); } $str = ' '; if($dati_ser["a"]){ $str .= ''; } $style=''; if(isset($dati_ser["w"]) || isset($dati_ser["h"]) ){ $style = ' style="'; if( isset($dati_ser["w"]) ){ if( strpos($dati_ser["w"],"%")>-1 ){ $w = $dati_ser["w"]; }else{ $w = str_replace("px","",$dati_ser["w"]); $w .= "px"; } $style .= 'width: '.$w.';'; } if( isset($dati_ser["h"]) ){ if( strpos($dati_ser["h"],"%")>-1 ){ $h = $dati_ser["h"]; }else{ $h = str_replace("px","",$dati_ser["h"]); $h .= "px"; } $style .= 'height: '.$h.';'; } $style .= '"'; } $str .= '
'; return $str; } //*******FINE MAPPE**** //******FAQ******* public function ArchivioFaq($sezione,$domanda="",$risposta="",$id_categoria="NULL",$orderBy="id",$orderType="ASC",$file_to_include="",$page=0,$item_x_page=10,$pagination=1){ $limit = false; $_m_ris = $this->CercaFaq($sezione,$domanda,$risposta,$id_categoria,$orderBy,$orderType); $_m_n_tot = $this->num_rows; if($item_x_page>0 && $_m_n_tot>0){ list($page,$maxpage,$limit) = $this->Pages($page,$_m_n_tot,$item_x_page); @$this->cn->F($ris); $_m_ris = $this->CercaFaq($sezione,$domanda,$risposta,$id_categoria,$orderBy,$orderType,$limit); $_m_n = $this->num_rows; $_m_i=0; while($_m_row = $this->cn->R($_m_ris)){ $_m_row = $this->Faq($_m_row["id"]); $_m_foto = $this->FotoFaq($_m_row["id"],true); $_m_last_row = $_m_i == $_m_n-1 ? true : false; @include( $file_to_include ); $_m_i++; } @$this->cn->F($_m_ris); if(!$pagination){ return array( $page, $maxpage ); }else if($maxpage>1){ echo $this->Pagination($pagination,$page,$maxpage); } } } public function CercaFaq($sezione,$domanda="",$risposta="",$id_categoria="NULL",$orderBy="id",$orderType="ASC",$limit=""){ $sezione_arr = explode(",",$sezione); //riconoscimento se $sezione è un elenco di id_gruppo_sezione o il nome della sezione $i=0; foreach($sezione_arr as $v){ if(is_numeric($v)){ $i++; } } $search_gs_from_id = $i==count($sezione_arr) ? true : false; //DIVIDE PER PIU' SEZIONI if(count($sezione_arr)==1){ $w_sezione = " = '{$sezione_arr[0]}'"; }else{ $w_sezione = " IN ('".implode("','",$sezione_arr)."')"; } $base_on = $this->BaseOn($sezione); $q = "SELECT f.*,"; if( $base_on ){ $q .= "base.in_evidenza, (SELECT `txt` FROM mio_testi WHERE id_ext = base.id AND tb_ext='mio_base' AND nomecampo='descr_breve' AND lang='".$this->lang."') AS descr_breve, base.attivo, IF( base.ordine IS NULL, 4294967295, base.ordine) AS ordine,"; } $q .= " gs.nome AS gruppo_sezione, (SELECT `txt` FROM mio_titoli WHERE id_ext = f.id AND tb_ext='mio_faq' AND nomecampo='domanda' AND lang='".$this->lang."') AS titolo, (SELECT `txt` FROM mio_testi WHERE id_ext = f.id AND tb_ext='mio_faq' AND nomecampo='risposta' AND lang='".$this->lang."') AS testo, IF(f.id_categoria>0, (SELECT `txt` FROM mio_titoli WHERE id_ext = f.id_categoria AND tb_ext='mio_categorie' AND nomecampo='nome' AND lang='".$this->lang."'), '' ) AS categoria FROM"; $q .= " ((( mio_gruppi_sezioni gs INNER JOIN mio_faq f ON gs.id = f.id_gruppo_sezione) LEFT JOIN mio_categorie cat ON f.id_categoria = cat.id)"; if( $base_on ){ $q .= " LEFT JOIN mio_base base ON f.id_base = base.id"; } $q .= ")"; if( $search_gs_from_id ){ $q .=" WHERE gs.id {$w_sezione}"; }else{ $q .=" WHERE gs.nome {$w_sezione}"; } $q .= $this->qRicercaInTesti("mio_faq",$domanda,$risposta,"domanda","risposta"); if($id_categoria!="NULL"){ $id_categorie = $this->SubCategorie($id_categoria); $id_categorie = empty($id_categorie) ? $id_categoria : "{$id_categoria},{$id_categorie}"; $q .= " AND f.id_categoria IN($id_categorie)"; } $q .= " HAVING domanda!=''"; if( $base_on ){ //$q .= " ORDER BY base.ordine ASC, base.in_evidenza DESC"; //$q .= " ORDER BY base.ordine ASC, base.ordine IS NOT NULL, base.in_evidenza DESC"; $q .= " ORDER BY ordine ASC, base.in_evidenza DESC"; $q .= empty($orderBy) ? "" : ", {$orderBy} {$orderType}"; }else{ $q .= empty($orderBy) ? "" : " ORDER BY {$orderBy} {$orderType}"; } if(!empty($limit)){ $q .= " LIMIT {$limit}"; } $ris = $this->cn->Q($q); $this->num_rows = $this->cn->n; return $ris; } public function Faq($id){ //SE $id inizia con una "b" cerca per id_base $q = "SELECT f.*, gs.nome AS gruppo_sezione, (SELECT `txt` FROM mio_titoli WHERE id_ext = f.id AND tb_ext='mio_faq' AND nomecampo='domanda' AND lang='".$this->lang."') AS domanda, (SELECT `txt` FROM mio_testi WHERE id_ext = f.id AND tb_ext='mio_faq' AND nomecampo='risposta' AND lang='".$this->lang."') AS risposta, IF(f.id_categoria>0, (SELECT `txt` FROM mio_titoli WHERE id_ext = f.id_categoria AND tb_ext='mio_categorie' AND nomecampo='nome' AND lang='".$this->lang."'), '' ) AS categoria FROM (( mio_gruppi_sezioni gs INNER JOIN mio_faq f ON gs.id = f.id_gruppo_sezione) LEFT JOIN mio_categorie cat ON f.id_categoria = cat.id) WHERE "; list($campo_id,$id) = $this->isIdBase($id); $q .= " f.{$campo_id} = {$id}"; $ret = $this->cn->OQ($q); if($ret!=-1){ $ret["domanda"] = $this->HTMLValidate($ret["domanda"]); $ret["risposta"] = $this->HTMLValidate($ret["risposta"]); } $ret = $this->BaseValues($ret); return $ret; } public function FotoFaq($id_faq,$preview=false){ $x = $this->FileFaq($id_faq,'foto'); if($preview){ $x = count($x)>0 ? $x[0] : false; } return $x; } public function AllegatiFaq($id_faq){ return $this->FileFaq($id_faq,'allegato'); } public function VideoFaq($id_faq){ return $this->FileFaq($id_faq,'video'); } public function FileFaq($id_faq,$tipo){ $riservato = $_SESSION["_mio_id_user"]>0 ? true : false; $riservato = $this->ShowRiservato ? true : $riservato; //mostra comunque i file riservati $q = "SELECT f.id_file, mio_file.riservato, (SELECT `txt` FROM mio_testi WHERE id_ext = f.id_file AND tb_ext='mio_faq_file_br' AND nomecampo='testo' AND lang='".$this->lang."' LIMIT 1) AS testo, f.tipo FROM mio_faq_file_br f INNER JOIN mio_file ON f.id_file = mio_file.id WHERE f.id_faq = $id_faq AND f.tipo='{$tipo}'"; $q .= $riservato ? "" : " AND mio_file.riservato = 0"; $q .= " AND (mio_file.`langs` IS NULL OR mio_file.`langs` LIKE '%".$this->lang."%')"; $q .=" ORDER BY cardinalita ASC"; $ris = $this->cn->Q($q); $Foto = array(); while($r=$this->cn->R($ris)){ $Foto[] = array("id_file"=>$r["id_file"],"file"=>$this->File($r["id_file"]),"testo"=>$r["testo"],"riservato"=>$r["riservato"],"tipo"=>$r["tipo"]); } $this->cn->F($ris); return $Foto; } //********FINE FAQ****** //*********CATEGORIE/FILTRI******** public function FiltroVal($id_filtro,$id_base){ //Dato l'id della categoria principale restituisce la categoria-valore selezionato o false se non è selezionato $q = "SELECT id FROM mio_categorie WHERE id_sup = {$id_filtro} AND is_filtro=1"; $list = $this->cn->Q($q,true); $val = false; foreach($list as $r){ $q = "SELECT * FROM mio_categorie_br WHERE id_categoria = {$r['id']} AND id_base = {$id_base}"; $this->cn->Q($q); $x = $this->cn->n; if( $x>0 && !$val ){ $val = $this->Categoria($r["id"],false,1); } } return $val; } public function FiltroValues($id_filtro){ //Restituisce valori del filtro $q = "SELECT id FROM mio_categorie WHERE id_sup = {$id_filtro} AND is_filtro=1"; $list = $this->cn->Q($q,true); $val = array(); foreach($list as $v){ $val[] = $this->Categoria($v["id"],false,1); } return $val; } public function Categoria($id_categoria,$lang=false,$is_filtro=0){ $lang = $lang ? $lang : $this->_Lang; $q = "SELECT c.*, (SELECT `txt` FROM mio_titoli WHERE id_ext = c.id AND tb_ext='mio_categorie' AND nomecampo='nome' AND lang='{$lang}') AS nome, (SELECT `txt` FROM mio_testi WHERE id_ext = c.id AND tb_ext='mio_categorie' AND nomecampo='testo' AND lang='{$lang}') AS testo FROM mio_categorie c INNER JOIN mio_gruppi_sezioni gs ON c.id_gruppo_sezione = gs.id WHERE c.is_filtro={$is_filtro} AND c.id = {$id_categoria}"; $x = $this->cn->OQ($q); if($x!=-1){ $x["file"] = $x["id_foto"]>0 ? $this->File($x["id_foto"]) : ""; } return $x; } public $CategorieReturnArray = false;//once o permanent public function ElencoCategorie($sezione,$id_sup="NULL",$is_filtro=0){ //$id_sup = -1 per vederle tutte if($sezione=="this"){ $sezione = $this->pageData["Page"]["id_gruppo_sezione"]; } $q = "SELECT c.*, (SELECT `txt` FROM mio_titoli WHERE id_ext = c.id AND tb_ext='mio_categorie' AND nomecampo='nome' AND lang='".$this->lang."') AS nome, (SELECT `txt` FROM mio_testi WHERE id_ext = c.id AND tb_ext='mio_categorie' AND nomecampo='testo' AND lang='".$this->lang."') AS testo FROM mio_categorie c INNER JOIN mio_gruppi_sezioni gs ON c.id_gruppo_sezione = gs.id WHERE c.is_filtro={$is_filtro} AND "; if( intval($sezione)>0){ $q .= " gs.id = {$sezione}"; }else{ $q .= " gs.nome = '{$sezione}'"; } if($id_sup!=-1){ $q .= $id_sup=="NULL" ? " AND c.id_sup IS NULL" : " AND c.id_sup = {$id_sup}"; } $q .= " ORDER BY ISNULL(c.ordine) ASC, c.ordine ASC, nome ASC, c.id ASC"; $ris = $this->cn->Q($q); $this->num_rows = $this->cn->n; if( $this->CategorieReturnArray ){ $ret = array(); while($r=$this->FetchAssoc($ris)){ $ret[] = $this->Categoria($r["id"]); } if($this->num_rows>0){ @$this->Free($ris); } $ris = $ret; unset($ret); if($this->CategorieReturnArray=="once"){ $this->CategorieReturnArray = false; } } return $ris; } public function CategorieSup($id_categoria,$return_id=false){ //restituisce la categoria indicata e le categorie superiori //$return_id = true -> torna un array contenente gli id delle categorie $idc = $id_categoria; $MaxCycle=1000; $iC=0; do{ $C = $this->Categoria($idc); $arr[] = $return_id ? $C["id"] : $C; $idc = $C["id_sup"]; //echo "
".print_r($C)."
"; $iC++; }while($C["id_sup"]>0 && $iC<$MaxCycle); unset($C); return array_reverse($arr); } //******FINE CATEGORIE******** //******PHOTOGALLERY******** public function ArchivioPhotogallery($sezione,$nome="",$id_categoria="NULL",$orderBy="id",$orderType="ASC",$file_to_include="",$page=0,$item_x_page=10,$pagination=1){ $_m_ris = $this->CercaPhotogallery($sezione,$nome,$id_categoria,$orderBy,$orderType); $_m_n_tot = $this->num_rows; if($item_x_page>0 && $_m_n_tot>0){ list($page,$maxpage,$limit) = $this->Pages($page,$_m_n_tot,$item_x_page); @$this->cn->F($ris); $_m_ris = $this->CercaPhotogallery($sezione,$nome,$id_categoria,$orderBy,$orderType,$limit); $_m_n = $this->num_rows; $_m_i=0; while($_m_row = $this->cn->R($_m_ris)){ $_m_row = $this->FotoPhotogallery($_m_row["id"]); $_m_last_row = $_m_i == $_m_n-1 ? true : false; @include( $file_to_include ); $_m_i++; } @$this->cn->F($_m_ris); if(!$pagination){ return array( $page, $maxpage ); }else if($maxpage>1){ echo $this->Pagination($pagination,$page,$maxpage); } } } public function CercaPhotogallery($sezione,$nome="",$id_categoria="NULL",$orderBy="id",$orderType="ASC",$limit=""){ $sezione_arr = explode(",",$sezione); if(count($sezione_arr)==1){ $w_sezione = " = '{$sezione_arr[0]}'"; }else{ $w_sezione = " IN ('".implode("','",$sezione_arr)."')"; } $q = "SELECT main.*, gs.nome AS gruppo_sezione, (SELECT `txt` FROM mio_titoli WHERE id_ext = main.id AND tb_ext='mio_photogallery' AND nomecampo='nome' AND lang='".$this->lang."') AS nome, IF(main.id_categoria>0, (SELECT `txt` FROM mio_titoli WHERE id_ext = main.id_categoria AND tb_ext='mio_categorie' AND nomecampo='nome' AND lang='".$this->lang."'), '' ) AS categoria FROM (( mio_gruppi_sezioni gs INNER JOIN mio_photogallery main ON gs.id = main.id_gruppo_sezione) LEFT JOIN mio_categorie cat ON main.id_categoria = cat.id) WHERE gs.nome {$w_sezione}"; if(!empty($nome)){ if(strlen($nome)>3 && $this->match_search){ $q .= " AND main.id IN (SELECT id_ext FROM mio_titoli WHERE tb_ext='mio_photogallery' AND nomecampo='nome' AND lang='".$this->lang."' AND MATCH(`txt`) AGAINST('{$nome}') )"; }else{ $q .= " AND main.id IN (SELECT id_ext FROM mio_titoli WHERE tb_ext='mio_photogallery' AND nomecampo='nome' AND lang='".$this->lang."' AND `txt` LIKE '%{$nome}%' )"; } } if($id_categoria!="NULL"){ $id_categorie = $this->SubCategorie($id_categoria); $id_categorie = empty($id_categorie) ? $id_categoria : "{$id_categoria},{$id_categorie}"; $q .= " AND main.id_categoria IN($id_categorie)"; } $q .= " ORDER BY {$orderBy} {$orderType}"; if(!empty($limit)){ $q .= " LIMIT {$limit}"; } $ris = $this->cn->Q($q); $this->num_rows = $this->cn->n; return $ris; } public function Photogallery($id){ $q = "SELECT n.*, gs.nome AS gruppo_sezione, (SELECT `txt` FROM mio_titoli WHERE id_ext = n.id AND tb_ext='mio_photogallery' AND nomecampo='nome' AND lang='".$this->lang."') AS titolo, IF(n.id_categoria>0, (SELECT `txt` FROM mio_titoli WHERE id_ext = n.id_categoria AND tb_ext='mio_categorie' AND nomecampo='nome' AND lang='".$this->lang."'), '' ) AS categoria FROM (( mio_gruppi_sezioni gs INNER JOIN mio_photogallery n ON gs.id = n.id_gruppo_sezione) LEFT JOIN mio_categorie cat ON n.id_categoria = cat.id) WHERE n.id = $id"; $ret = $this->cn->OQ($q); if($ret!=-1){ $ret["nome"] = $this->HTMLValidate($ret["nome"]); } return $ret; } public function FotoPhotogallery($id_photogallery){ $q = "SELECT `txt` FROM mio_titoli WHERE id_ext = {$id_photogallery} AND tb_ext='mio_photogallery' AND nomecampo='nome' AND lang='".$this->lang."' LIMIT 1"; $Titolo = $this->cn->OF($q); $riservato = $_SESSION["_mio_id_user"]>0 ? true : false; $riservato = $this->ShowRiservato ? true : $riservato; //mostra comunque i file riservati $q = "SELECT f.id_file, f.cardinalita, mio_file.riservato, (SELECT `txt` FROM mio_testi WHERE id_ext = f.id_file AND tb_ext='mio_photogallery_file_br' AND nomecampo='testo' AND lang='".$this->lang."' LIMIT 1) AS testo FROM mio_photogallery_file_br f INNER JOIN mio_file ON f.id_file = mio_file.id WHERE f.id_photogallery = {$id_photogallery}"; $q .= $riservato ? "" : " AND mio_file.riservato = 0"; $q .= " ORDER BY cardinalita ASC, id_file ASC"; $ris = $this->cn->Q($q); $Foto = array(); while($r=$this->cn->R($ris)){ $Foto[] = array("id_photogallery"=>$id_photogallery,"id_file"=>$r["id_file"],"file"=>$this->File($r["id_file"]),"testo"=>$r["testo"],"titolo_gallery"=>$Titolo,"riservato"=>$r["riservato"]); } $this->cn->F($ris); return $Foto; } //*******FINE FOTOGALLERY****** //*****PRODOTTI***** public function ArchivioProdotti($sezione,$nome="",$testo="",$codice="",$prezzo_dal=false,$prezzo_al=false,$stato=false,$id_categoria="NULL",$orderBy="id",$orderType="ASC",$limit="",$voce="",$qta_min=false,$qta_max=false,$prezzo_scontato_min=false,$prezzo_scontato_max=false,$prezzo_scontato_dal="",$prezzo_scontato_al="",$file_to_include="",$page=0,$item_x_page=10,$pagination=1,$id_parent=false){ $limit = false; $_m_ris = $this->CercaProdotti($sezione,$nome,$testo,$codice,$prezzo_dal,$prezzo_al,$stato,$id_categoria,$orderBy,$orderType,$limit,$voce,$qta_min,$qta_max,$prezzo_scontato_min,$prezzo_scontato_max,$prezzo_scontato_dal,$prezzo_scontato_al,$id_parent); $_m_n_tot = $this->num_rows; if($item_x_page>0 && $_m_n_tot>0){ list($page,$maxpage,$limit) = $this->Pages($page,$_m_n_tot,$item_x_page); @$this->cn->F($ris); $_m_ris = $this->CercaProdotti($sezione,$nome,$testo,$codice,$prezzo_dal,$prezzo_al,$stato,$id_categoria,$orderBy,$orderType,$limit,$voce,$qta_min,$qta_max,$prezzo_scontato_min,$prezzo_scontato_max,$prezzo_scontato_dal,$prezzo_scontato_al,$id_parent); $_m_n = $this->num_rows; $_m_i=0; while($_m_row = $this->cn->R($_m_ris)){ $_m_row = $this->Prodotto($_m_row["id"]); $_m_foto = $this->FotoProdotti($_m_row["id"],true); $_m_last_row = $_m_i == $_m_n-1 ? true : false; @include( $file_to_include ); $_m_i++; } @$this->cn->F($_m_ris); if(!$pagination){ return array( $page, $maxpage ); }else if($maxpage>1){ echo $this->Pagination($pagination,$page,$maxpage); } } } public $CercaProdotti_NotID = NULL; //id prodotti da escludere dalla ricerca public $CercaProdottiFiltri = NULL;//Filtri sui prodotti (mio_categorie_br) public $CercaProdottiFiltriAnd = NULL;//Filtri sui prodotti TUTTI (mio_categorie_br) public $CercaProdottiNotFiltri = NULL;//Filtri sui prodotti (mio_categorie_br), in questo caso NON devono essere presenti public $CercaProdottiNotFiltriAnd = NULL; //Filtri sui prodotti (mio_categorie_br), in questo caso NON devono essere presenti (TUTTI) public $CercaProdottiVarianti = NULL;//Filtri sulle varianti public $CercaProdottiNotVarianti = NULL;//Filtri sulle varianti, in questo caso NON devono essere presenti public $CercaProdottiBaseBr = NULL;//Filtra per mio_base_br ("categorie" settate in mio_gruppi_sezione). Deve essere un array contenente gli id_base public function CercaProdotti($sezione,$nome="",$testo="",$codice="",$prezzo_dal=false,$prezzo_al=false,$stato=false,$id_categoria="NULL",$orderBy="id",$orderType="ASC",$limit="",$voce="",$qta_min=false,$qta_max=false,$prezzo_scontato_min=false,$prezzo_scontato_max=false,$prezzo_scontato_dal="",$prezzo_scontato_al="",$id_parent=false){ //Passare $id_categoria come "=12" se si vuole cercare per solo quella categoria e non le sotto-categorie, cercando invece come "12" cercherà anche le sottocaterie if($sezione=="this"){ $sezione = $this->pageData["Page"]["id_gruppo_sezione"]; } $paesi = $this->P('ecommerce-paesi'); if( $paesi ){ $paesi = explode(",",$paesi); } $sezione_arr = explode(",",$sezione); //riconoscimento se $sezione è un elenco di id_gruppo_sezione o il nome della sezione $i=0; foreach($sezione_arr as $v){ if(is_numeric($v)){ $i++; } } $search_gs_from_id = $i==count($sezione_arr) ? true : false; //DIVIDE PER PIU' SEZIONI if(count($sezione_arr)==1 ){ $w_sezione = " = '{$sezione_arr[0]}'"; }else{ $w_sezione = " IN ('".implode("','",$sezione_arr)."')"; } //Controllo su Ricerca sotto-Categorie $search_sub_categories = true; if( substr($id_categoria,0,1)=="=" ){ $search_sub_categories = false; $id_categoria = substr($id_categoria,1); } $forcedOrder = false; if( strpos(strtolower($orderBy),":forced:")===0 ){ $forcedOrder = true; list(,,$orderBy) = explode(":",$orderBy); } $base_on = $this->BaseOn($sezione); $q = "SELECT main.*, "; if( $base_on ){ $q .= "base.in_evidenza, (SELECT `txt` FROM mio_testi WHERE id_ext = base.id AND tb_ext='mio_base' AND nomecampo='descr_breve' AND lang='".$this->lang."') AS descr_breve, base.attivo, IF( base.ordine IS NULL, 4294967295, base.ordine) AS ordine,"; } $q .= " gs.nome AS gruppo_sezione, IF( ( main.prezzo_scontato_dal=0 OR main.prezzo_scontato_dal <= DATE_FORMAT(".$this->_NOW." , '%Y-%m-%d') ) AND ( DATE_FORMAT(".$this->_NOW." , '%Y-%m-%d') <= main.prezzo_scontato_al OR main.prezzo_scontato_al=0), main.prezzo_scontato, 0 ) AS prezzo_scontato_on, (SELECT `txt` FROM mio_titoli WHERE id_ext = main.id AND tb_ext='mio_prodotti' AND nomecampo='nome' AND lang='".$this->lang."') AS nome, (SELECT `txt` FROM mio_testi WHERE id_ext = main.id AND tb_ext='mio_prodotti' AND nomecampo='testo' AND lang='".$this->lang."') AS testo, IF(main.id_categoria>0, (SELECT `txt` FROM mio_titoli WHERE id_ext = main.id_categoria AND tb_ext='mio_categorie' AND nomecampo='nome' AND lang='".$this->lang."'), '' ) AS categoria"; if( $paesi ){ $q .= ", pp.prezzo, pp.prezzo_scontato, pp.prezzo_scontato_dal, pp.prezzo_scontato_al, pp.qta, pp.visibile_on"; } $q .= " FROM ((( mio_gruppi_sezioni gs INNER JOIN mio_prodotti main ON gs.id = main.id_gruppo_sezione) LEFT JOIN mio_categorie cat ON main.id_categoria = cat.id)"; if( $base_on ){ $q .= " LEFT JOIN mio_base base ON main.id_base = base.id "; } if( $paesi ){ $q .= " INNER JOIN mio_prodotti_paesi pp ON main.id = pp.id_prodotto AND pp.paese='{$this->PaeseEcommerce}'"; } $q .= ")"; //$q .= " WHERE gs.nome {$w_sezione}"; if( $search_gs_from_id ){ $q .=" WHERE gs.id {$w_sezione}"; }else{ $q .=" WHERE gs.nome {$w_sezione}"; } if( $paesi ){ $q .= " AND pp.visibile_on=1"; }else if( $base_on ){ $q .= " AND base.attivo=1"; }else{ $q .= " AND main.visibile=1"; } if($base_on){ if($id_parent===0 || $id_parent===NULL){ $q .= " AND base.id_parent IS NULL"; }else if($id_parent>0){ $q .= " AND base.id_parent IN ({$id_parent})"; } } if( $base_on && $this->CercaProdotti_NotID ){ $q .= " AND main.id NOT IN (" . implode(",",$this->CercaProdotti_NotID) . ")"; } if( $base_on && $this->CercaProdottiFiltri ){ /*foreach( $this->CercaProdottiFiltri as $tmp){ $q .= " AND (SELECT COUNT(*) FROM mio_categorie_br WHERE id_base = base.id AND id_categoria = {$tmp} )>0"; }*/ // QUERY CHE FUNZIONA NEL CASO UNO SOLO DEI VALORI DEL FILTRO SIANO VERI $q .= " AND (SELECT COUNT(*) FROM mio_categorie_br WHERE id_base = base.id AND id_categoria IN (" . implode(",",$this->CercaProdottiFiltri) . ") )>0"; } if( $base_on && $this->CercaProdottiFiltriAnd ){ // QUERY CHE FUNZIONA NEL CASO TUTTI DEI VALORI DEL FILTRO SIANO VERI foreach( $this->CercaProdottiFiltriAnd as $tmp){ $q .= " AND (SELECT COUNT(*) FROM mio_categorie_br WHERE id_base = base.id AND id_categoria = {$tmp} )>0"; } } if( $base_on && $this->CercaProdottiNotFiltri ){ //QUERY IN FUNZIONE COME "OR" $q .= " AND (SELECT COUNT(*) FROM mio_categorie_br WHERE id_base = base.id AND id_categoria IN (" . implode(",",$this->CercaProdottiNotFiltri) . ") ) = 0"; } if( $base_on && $this->CercaProdottiNotFiltriAnd ){ foreach( $this->CercaProdottiNotFiltriAnd as $tmp){ $q .= " AND (SELECT COUNT(*) FROM mio_categorie_br WHERE id_base = base.id AND id_categoria = {$tmp} )=0"; } } if( $base_on && $this->CercaProdottiVarianti ){ foreach( $this->CercaProdottiVarianti as $tmp){ $q .= " AND (SELECT COUNT(*) FROM mio_prodotti_varianti_list vl INNER JOIN mio_prodotti_varianti_list_br vlb ON vl.id = vlb.id_list WHERE vl.id_prodotto = main.id AND vlb.id_val = {$tmp} )>0"; } } if( $base_on && $this->CercaProdottiNotVarianti ){ foreach( $this->CercaProdottiNotVarianti as $tmp){ $q .= " AND (SELECT COUNT(*) FROM mio_prodotti_varianti_list vl INNER JOIN mio_prodotti_varianti_list_br vlb ON vl.id = vlb.id_list WHERE vl.id_prodotto = main.id AND vlb.id_val = {$tmp} )=0"; } } if( $base_on && $this->CercaProdottiBaseBr ){ foreach( $this->CercaProdottiBaseBr as $tmp ){ $q .= " AND (SELECT COUNT(*) FROM mio_base_br WHERE id_parent = base.id AND id_children = {$tmp} )>0"; } } $codice_per_testi = ""; if( !empty($codice) ){ $codice_per_testi = strtolower( substr($codice,0,5) )=="[or] " ? substr($codice,5) : $codice; } $qRicercaTesto = $this->qRicercaInTesti("mio_prodotti",$nome,$testo,"nome","testo",$codice_per_testi); if( !empty($qRicercaTesto) ){ $q .= $qRicercaTesto; }else if(!empty($codice)){ /*if( strtolower( substr($codice,0,5) )=="[or] " ){ $str = substr($codice,5); $q .= " OR main.codice LIKE '%{$str}%'"; }else{ $q .= " AND main.codice LIKE '%{$codice}%'"; }*/ } if(!empty($voce)){ //$voce può essere separato da virgola per cercare tra più voci $tmp = str_replace(",","','",$tmp); $q .= " AND main.voce IN('{$tmp}')"; } if($prezzo_dal!==false){ $q .= " AND '{$prezzo_dal}' <= main.prezzo"; } if($prezzo_al!==false){ $q .= " AND main.prezzo <= '{$prezzo_al}'"; } if($stato!==false){ $q .= " AND main.stato = '{$stato}'"; } if($prezzo_scontato_min!==false){ $q .= " AND '{$prezzo_scontato_min}' <= main.prezzo_scontato"; } if($prezzo_scontato_max!==false){ $q .= " AND main.prezzo_scontato <= '{$prezzo_scontato_max}'"; } if(!empty($prezzo_scontato_dal)){ $q .= " AND DATE_FORMAT(main.prezzo_scontato_dal , '%Y-%m-%d') <= '{$prezzo_scontato_dal}'"; } if(!empty($prezzo_scontato_al)){ $q .= " AND '{$prezzo_scontato_al}' <= DATE_FORMAT(main.prezzo_scontato_al , '%Y-%m-%d')"; } if($qta_min!==false){ $q .= " AND '{$qta_min}' <= main.qta"; } if($qta_max!==false){ $q .= " AND main.qta <= '{$qta_max}'"; } if($id_categoria!="NULL" && !empty($id_categoria) ){ if( !$search_sub_categories ){ //Ricerca solo per quella categoria e non per le sottocategorie collegate ad essa $q .= " AND main.id_categoria = {$id_categoria}"; }else{ //ricerca anche per le sottocategorie $id_categorie = $this->SubCategorie($id_categoria); $id_categorie = empty($id_categorie) ? $id_categoria : "{$id_categoria},{$id_categorie}"; $q .= " AND main.id_categoria IN( {$id_categorie} )"; } } if( $this->Filters && $base_on ){ if( isset($this->Filters->in_evidenza) ){ $q .= " AND base.in_evidenza = "; $q .= $this->Filters->in_evidenza ? "1" : "0"; } } $q .= " HAVING nome!=''"; if( $base_on && !$forcedOrder ){ //$q .= " ORDER BY base.ordine ASC, base.in_evidenza DESC"; //$q .= " ORDER BY base.ordine ASC, base.ordine IS NOT NULL, base.in_evidenza DESC"; $q .= " ORDER BY ordine ASC, base.in_evidenza DESC"; $q .= empty($orderBy) ? "" : ", {$orderBy} {$orderType}"; }else{ $q .= empty($orderBy) ? "" : " ORDER BY {$orderBy} {$orderType}"; } if(!empty($limit)){ $q .= " LIMIT {$limit}"; } if( isset($_GET["qt"]) ){ echo $q;exit; } $ret = false; if( $this->CercaReturnArray || $this->CercaReturnArray=="once"){ $ret = true; } $ris = $this->cn->Q($q, $ret); $this->num_rows = $this->cn->n; if( $this->CercaReturnArray=='once'){ $this->CercaReturnArray = false; } return $ris; } public function Prodotto($id){ //SE $id è preceduto da una "b" si sta cercando per id_base $paesi = $this->P('ecommerce-paesi'); if( $paesi ){ $paesi = explode(",",$paesi); $table_prezzo_scontato = "pp"; }else{ $table_prezzo_scontato = "main"; } $q = "SELECT main.*, gs.nome AS gruppo_sezione, IF( ({$table_prezzo_scontato}.prezzo_scontato > 0 AND {$table_prezzo_scontato}.prezzo_scontato_dal = 0 AND {$table_prezzo_scontato}.prezzo_scontato_al = 0) OR ({$table_prezzo_scontato}.prezzo_scontato > 0 AND {$table_prezzo_scontato}.prezzo_scontato_dal <= DATE_FORMAT({$this->_NOW} , '%Y-%m-%d') AND ( DATE_FORMAT({$this->_NOW} , '%Y-%m-%d') <= {$table_prezzo_scontato}.prezzo_scontato_al OR {$table_prezzo_scontato}.prezzo_scontato_al=0 ) ), {$table_prezzo_scontato}.prezzo_scontato, 0 ) AS prezzo_scontato, (SELECT `txt` FROM mio_titoli WHERE id_ext = main.id AND tb_ext='mio_prodotti' AND nomecampo='nome' AND lang='".$this->lang."') AS nome, (SELECT `txt` FROM mio_testi WHERE id_ext = main.id AND tb_ext='mio_prodotti' AND nomecampo='testo' AND lang='".$this->lang."') AS testo, IF(main.id_categoria>0, (SELECT `txt` FROM mio_titoli WHERE id_ext = main.id_categoria AND tb_ext='mio_categorie' AND nomecampo='nome' AND lang='".$this->lang."'), '' ) AS categoria"; if( $paesi ){ $q .= ", pp.prezzo, pp.stato, pp.prezzo_scontato, pp.prezzo_scontato_dal, pp.prezzo_scontato_al, pp.qta, pp.visibile_on"; } $q .= " FROM (( mio_gruppi_sezioni gs INNER JOIN mio_prodotti main ON gs.id = main.id_gruppo_sezione) LEFT JOIN mio_categorie cat ON main.id_categoria = cat.id)"; if( $paesi ){ $q .= " INNER JOIN mio_prodotti_paesi pp ON main.id = pp.id_prodotto AND pp.paese='{$this->PaeseEcommerce}'"; } $q .= " WHERE "; list($campo_id,$id) = $this->isIdBase($id); $q .= " main.{$campo_id} = {$id}"; $ret = $this->cn->OQ($q); if($ret!=-1){ $ret["nome"] = $this->HTMLValidate($ret["nome"]); $ret["testo"] = $this->HTMLValidate($ret["testo"]); } $ret = $this->BaseValues($ret); return $ret; } public function ProdottiPrezzo($sezione){ //ritorna prezzo min/max $sezione_arr = explode(",",$sezione); //riconoscimento se $sezione è un elenco di id_gruppo_sezione o il nome della sezione $i=0; foreach($sezione_arr as $v){ if(is_numeric($v)){ $i++; } } $search_gs_from_id = $i==count($sezione_arr) ? true : false; //DIVIDE PER PIU' SEZIONI if(count($sezione_arr)==1 ){ $w_sezione = " = '{$sezione_arr[0]}'"; }else{ $w_sezione = " IN ('".implode("','",$sezione_arr)."')"; } $q1 = "SELECT MIN(prezzo) AS p FROM mio_prodotti p INNER JOIN mio_gruppi_sezioni gs ON p.id_gruppo_sezione = gs.id "; $q2 = "SELECT MAX(prezzo) AS p FROM mio_prodotti p INNER JOIN mio_gruppi_sezioni gs ON p.id_gruppo_sezione = gs.id "; if( $search_gs_from_id ){ $q1 .=" WHERE gs.id {$w_sezione}"; $q2 .=" WHERE gs.id {$w_sezione}"; }else{ $q1 .=" WHERE gs.nome {$w_sezione}"; $q2 .=" WHERE gs.nome {$w_sezione}"; } $min = $this->cn->OF($q1); $max = $this->cn->OF($q2); return array("min"=>$min,"max"=>$max); } public function FotoProdotti($id_prodotto,$preview=false){ $x = $this->FileProdotti($id_prodotto,'foto'); if($preview){ $x = count($x)>0 ? $x[0] : false; } return $x; } public function AllegatiProdotti($id_prodotto){ return $this->FileProdotti($id_prodotto,'allegato'); } public function VideoProdotti($id_prodotto){ return $this->FileProdotti($id_prodotto,'video'); } public function FileProdotti($id_prodotto,$tipo){ $riservato = $_SESSION["_mio_id_user"]>0 ? true : false; $riservato = $this->ShowRiservato ? true : $riservato; //mostra comunque i file riservati $q = "SELECT f.id_file, mio_file.riservato, (SELECT `txt` FROM mio_testi WHERE id_ext = f.id_file AND tb_ext='mio_prodotti_file_br' AND nomecampo='testo' AND lang='".$this->lang."' LIMIT 1) AS testo, f.tipo FROM mio_prodotti_file_br f INNER JOIN mio_file ON f.id_file = mio_file.id WHERE f.id_prodotto = {$id_prodotto} AND tipo='{$tipo}'"; $q .= $riservato ? "" : " AND mio_file.riservato = 0"; $q .= " AND (mio_file.`langs` IS NULL OR mio_file.`langs` LIKE '%".$this->lang."%')"; $q .= " ORDER BY cardinalita ASC"; $ris = $this->cn->Q($q); $Files = array(); while($r=$this->cn->R($ris)){ $Files[] = array("id_file"=>$r["id_file"],"file"=>$this->File($r["id_file"]),"testo"=>$r["testo"],"riservato"=>$r["riservato"],"tipo"=>$r["tipo"]); } $this->cn->F($ris); return $Files; } public function Prodotti_VariantiVal($id_variante){ //restituisce l'elenco varianti $q = "SELECT *, (SELECT `txt` FROM mio_titoli WHERE id_ext = main.id AND tb_ext='mio_prodotti_varianti_val' AND nomecampo='valore' AND lang='".$this->lang."') AS valore FROM mio_prodotti_varianti_val main WHERE id_variante={$id_variante}"; $list = $this->cn->Q($q,true); return $list; } public function Prodotti_VariantiList($id_prodotto=NULL,$id_variante_list=NULL,$id_varianti_group=NULL){ //restituisce la lista di varianti_list se si passa $id_prodotto, o la singola voce se si passa $id_variante_list //$id_varianti_group => stringa con id_varianti divisa da virgola. Restituisce solo gli incroci con questi id_varianti $q = "SELECT * FROM mio_prodotti_varianti_list WHERE "; $q .= $id_prodotto>0 ? " id_prodotto = {$id_prodotto}" : " id = {$id_variante_list}"; if( $id_varianti_group ){ $id_varianti_group = explode(",",$id_varianti_group); } $arr = $this->cn->Q($q,true); foreach($arr as $k=>$v){ $q = "SELECT var.id AS id_variante, (SELECT `txt` FROM mio_titoli WHERE tb_ext='mio_prodotti_varianti' AND nomecampo='titolo' AND id_ext = var.id AND `lang`='{$this->_Lang}') AS variante, (SELECT `txt` FROM mio_titoli WHERE tb_ext='mio_prodotti_varianti_val' AND nomecampo='valore' AND id_ext = val.id AND `lang`='{$this->_Lang}') AS valore FROM mio_prodotti_varianti_list_br br INNER JOIN mio_prodotti_varianti_val val ON br.id_val = val.id INNER JOIN mio_prodotti_varianti var ON var.id = val.id_variante WHERE br.id_list = {$v['id']}"; $voci = $this->cn->Q($q,true); $flag = true; if( $id_varianti_group ){ $x=0; foreach($voci as $tmp){ if( in_array($tmp["id_variante"],$id_varianti_group) ){ $x++; } } $flag = $x>0 ? true : false; } if( $flag ){ //echo "
";print_r($voci);
				$txt = array();
				foreach($voci as $tmp){
					if( $id_varianti_group===NULL || !in_array($tmp["id_variante"],$id_varianti_group) ){
						$txt[] = "{$tmp['variante']}: {$tmp['valore']}";
					}
				}
				$arr[$k]["voce"] = implode(" - ",$txt);
			}
		}
		return $id_prodotto>0 ? $arr : $arr[0];
	}

	public function Prodotti_VarianteListExist($id_variante_list){
		$q = "SELECT id FROM mio_prodotti_varianti_list WHERE id = {$id_variante_list}";
		$id = $this->cn->OF($q);
		return $id>0 ? true : false;
	}

	public function CercaProdottiAccessori($id,$consigliato_on=true,$accessorio_on=true,$compatibile_on=true){ //Cerca i prodotti accessori di questo
		$q = "SELECT * FROM mio_prodotti_br WHERE id_main = {$id}";

		if($consigliato_on || $accessorio_on || $compatibile_on){
			$arr = array();
			if($consigliato_on){
				$arr[] = "consigliato_on = 1";
			}
			if($accessorio_on){
				$arr[] = "accessorio_on = 1";
			}
			if($compatibile_on){
				$arr[] = "compatibile_on = 1";
			}

			$q .= " AND (".implode(" OR ",$arr).")";

			//echo "";
		}

		$ris = $this->cn->Q($q);
		$arr = array();
		while($r=$this->cn->R($ris)){
			$x = $this->Prodotto( $r["id_sub"] );
			$x["accessorio"] = $r;
			$arr[] = $x;
		}
		@$this->cn->F($ris);
		unset($x,$r,$ris);
		return $arr;
	}
	//*****FINE PRODOTTI******

	//*****CODICE PROMO*******
	public function CodicePromo($id,$codice=false){
		$q = "SELECT * FROM mio_codicipromo WHERE ";
		$q .= $id>0 ? "id={$id}" : " codice='{$codice}'";

		return $this->cn->OQ($q);
	}

	//*****FINE CODICE PROMO*******

	//*****INIZIO CARRELLO*****
	private $CarrelloSelezionato = NULL;//indica il carrello selezionato in caso di siti con più carrelli

	public function CarrelloSel($carrello=NULL){ //seleziona il carrello da utilizzare
		$this->CarrelloSelezionato = $carrello;
	}
	private function qCarrelloSel($tb_name="mio_carrello"){ //restituisce la parte della query per il filtro del carrello
		$w_carrello = $this->CarrelloSelezionato ? " AND {$tb_name}.`carrello`='{$this->CarrelloSelezionato}'" : "";
		return $w_carrello;
	}

	public function CarrelloSpedizionePrevista($n_giorni="auto",$giorni_non_validi="0,6"){
		//ritorna, in timestamp il giorno previsto per la spedizione o false se non può calcolarlo
		//giorni_non_validi = 0=>domenica, 6=> sabato. Mettere false se tutti i giorni sono validi

		if( $n_giorni == "auto" ){
			$n_giorni = $this->P('ecommerce-giornispedizione');
		}

		$now = time() + ($this->_HOURS*60*60);

		$d = $now + ( $n_giorni * 24*60*60 );

		if( $giorni_non_validi ){
			$giorni_non_validi = explode(",",$giorni_non_validi);

			$w = date("w",$d);
			while( in_array($w,$giorni_non_validi) ){
				$d += 24*60*60;
				$w = date("w",$d);
			}
		}

		return $d;
	}

	public function PaypalIpn(){
		$paypal_business = $this->P('ecommerce-paypal_email');
		$req = 'cmd=_notify-validate';
		foreach($_POST as $k=>$v){
			$v = urlencode(stripslashes($v));
			$req .= "&{$k}={$v}";
		}
		// Now Post all of that back to PayPal's server using curl, and validate everything with PayPal
		// We will use CURL instead of PHP for this for a more universally operable script (fsockopen has issues on some environments)

		if(array_key_exists('test_ipn', $_POST) && 1 === (int) $_POST['test_ipn']){
			$url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
		}else{
			$url = 'https://www.paypal.com/cgi-bin/webscr';
		}

		$curl_result = $curl_err = '';
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
		curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req)));
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_VERBOSE, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
		curl_setopt($ch, CURLOPT_TIMEOUT, 30);
		$curl_result = @curl_exec($ch);
		$curl_err = curl_error($ch);
		curl_close($ch);

		//$req = str_replace("&", "\n", $req);
		//Verifica risultato
		$id_ordine = trim($_POST['custom']);
		if(strpos($curl_result, "VERIFIED") !== false || 1 ) {
			$txn_id = trim($_POST['txn_id']); //ID Transazione
			$verified = true;

			//Verifica che l'indirizzo e-mail o il codice commerciante sia lo stesso
			if( $_POST['receiver_email']!=$paypal_business && $_POST['receiver_id']!=$paypal_business ){
				$verified = false;
			}
			//Verifica che la transazione sia completata
			if( $_POST['payment_status']!='Completed' ){
				$verified = false;
			}
			//Verifica che la transazione non sia già stata registrata

			$dir = __DIR__ . '/logs/ipn';
			if( !file_exists($dir) ){
				@mkdir($dir);
			}
			$ipn_log = $dir . "/{$txn_id}.log";
			if( file_exists($dir) && file_exists( $ipn_log ) ){
				$verified = false;
			}

			$q = "SELECT id FROM mio_ordini WHERE id = {$id_ordine}";
			$this->cn->Q($q);
			if( $this->cn->n==0 ){
				$verified = false;
			}

			if( $verified ){
				//Eseguo registrazione ordine
				$q = "UPDATE mio_ordini SET `note_pagamento` = 'Status: OK. TXN: {$txn_id}' WHERE id = {$id_ordine}";
				$this->cn->Q($q);

				//Richiamo eventuale script del sito
				$paypal_ipn_include = $this->P('paypal_ipn_include');
				if( $paypal_ipn_include ){
					include( __DIR__ . '/' . $paypal_ipn_include );
				}

				//Registro IPN in un log
				if( !file_exists( __DIR__ . '/logs' )){
					@mkdir(__DIR__ . '/logs');
				}
				if( !file_exists( __DIR__ . '/logs/ipn' )){
					@mkdir(__DIR__ . '/logs/ipn');
				}
				$fp = fopen($ipn_log,"w");
				fwrite($fp, json_encode($_POST) );
				fclose($fp);
			}else{
				$q = "UPDATE mio_ordini SET `note_pagamento` = 'Status: Dati non validi da Paypal. " . addslashes($req) . "' WHERE id = {$id_ordine}";
				$this->cn->Q($q);
			}
		} else {
			$q = "UPDATE mio_ordini SET `note_pagamento` = 'Status: Dati non validi da Paypal. " . addslashes($req) . "' WHERE id = {$id_ordine}";
			$this->cn->Q($q);
			/*$req .= "\n\nData NOT verified from Paypal!";
			mail("[email protected]", "IPN interaction not verified", "$req", "From: [email protected]");
			exit();*/
		}
	}

	public function Carrello($id_ordine=0,$tipo="voce"){ //$tipo="voce" seleziona solo i record di tipo "voce", false li seleziona tutti, "spesa" / "tassa" solo "spesa" e "tassa"
		$w_carrello = $this->CarrelloSelezionato ? " AND `carrello`='{$carrello}'" : "";

		$q = "SELECT * FROM mio_carrello WHERE 1{$w_carrello}";
		if( $tipo ){
			$q .= " AND tipo = '{$tipo}'";
		}

		if($id_ordine==0){
			@session_start();
			$ses = session_id();
			$q .= " AND sessione='{$ses}'";
		}else{
			$q .= " AND id_ordine = {$id_ordine}";
		}
		$q .= $this->qCarrelloSel()." ORDER BY timestamp ASC, prodotto ASC";

		$ris = $this->cn->Q($q);
		$arr = array();
		while($r=$this->cn->R($ris)){
			if($r["id_prodotto"]>0){
				$id_prod = $r["id_prodotto"];
				$variante_list = NULL;
				$x = $this->Prodotto($id_prod);
			}else if($r["id_variante_list"]>0){
				$variante_list = $this->Prodotti_VariantiList(NULL,$r["id_variante_list"]);
				$id_prod = $variante_list["id_prodotto"];
				$x = $this->Prodotto($id_prod);
			}else if($r["id_codicepromo"]>0){
				$x = $this->CodicePromo($r["id_codicepromo"]);
			}else{
				$x = $variante_list = NULL;
			}

			$arr[] = array("car"=>$r,"prod"=>$x,"variante_list"=>$variante_list);
		}
		$this->cn->F($ris);
		unset($ris,$x,$r,$q,$ses);
		return $arr;
	}

	public function CarrelloAddCodicePromo( $codice, $carrello=false, $id_ordine=false){ //$carrello può essere "auto" per essere individuato da solo
		if( $carrello=="auto"){
			$carrello = $_REQUEST["_m_carrello"];
			$carrello = empty($carrello) ? false : $carrello;
		}

		$Scheda = $this->CodicePromo(0,$codice);

		if( $id_ordine>0){
			$q = "UPDATE mio_codicipromo SET carrello = NULL, id_ordine = {$id_ordine} WHERE id = {$Scheda['id']}";
		}else{
			@session_start();
			$ses = session_id();
			$q = "UPDATE mio_codicipromo SET sessione = '{$ses}', carrello = ";
			$q .= $carrello ? "'{$carrello}'" : "NULL";
			$q .= " WHERE id = {$Scheda['id']}";
		}
		$this->cn->Q($q);
	}

	public function CarrelloCodicePromo($id_ordine=0){ //Ritorna il codice/i promo del carrello o false se non è presente
		$w_carrello = $this->CarrelloSelezionato ? " AND `carrello`='{$carrello}'" : "";

		$q = "SELECT * FROM mio_codicipromo WHERE 1";
		if($id_ordine==0){
			@session_start();
			$ses = session_id();
			$q .= " AND sessione = '{$ses}'";
		}else{
			$q .= " AND id_ordine = {$id_ordine}";
		}

		$ret = $this->cn->Q($q,true);

		return count($ret)==0 ? false : $ret;
	}

	public function CarrelloAddSpesa($tipo='spesa',$voce,$prezzo,$id_ordine=false,$carrello="NULL"){

		@session_start();
		$ses = session_id();

		$carrello = $carrello=="NULL" ? "NULL" : "'{$carrello}'";
		$sessione = $id_ordine>0 ? "NULL" : "'{$ses}'";
		$id_ordine = $id_ordine>0 ? $id_ordine : "NULL";
		$q = "INSERT INTO mio_carrello (carrello,tipo,prodotto,qta,prezzo,sessione,id_ordine)
										VALUES
										({$carrello},'{$tipo}','".addslashes($voce)."',1,'{$prezzo}',{$sessione},{$id_ordine})";
		$this->cn->Q($q);
	}

	public function CarrelloAdd($id_prod,$qta=1,$stato=NULL,$prezzo=NULL,$maxQta=-1){
		/***
		$id_prod => id_prodotto oppure id_variante_list (in questo caso $id_prod = "var{$id_variante_list}", essendo preceduto dalla parola 'var' riconoscerà che è una variante e non il prodotto
		$stato => passare lo stato se si vuole aggiungere il prodotto solo se corrisponde a quello stato (può avere anche multivalore)
		$prezzo => se settato prende questo prezzo altrimenti quello del prodotto
		$qta => se selezionata inserisce la qta indicata
		$maxQta => Massima quantità ammissibile nel carrello (non aggiunge se la quantità è già al limite). -1 => infinito
		**/
		//cancella i carrelli più vecchi di un giorno (o del timeout impostato)

		$id_variante_list=NULL;

		$q = "DELETE FROM mio_carrello WHERE id_ordine IS NULL".$this->qCarrelloSel()." AND `timestamp` < DATE_ADD(NOW(), INTERVAL -".$this->Carrello_timeout." HOUR)";
		$this->cn->Q($q);

		@session_start();
		$ses = session_id();


		$is_variante = false;
		if( strpos($id_prod,"var")===0){
			$is_variante = true;
			list(,$id_variante_list) = explode("var",$id_prod);
			$Variante = $this->Prodotti_VariantiList(0,$id_variante_list);
			$id_prod = $Variante["id_prodotto"];
		}
		$Prod = $this->Prodotto($id_prod);
		$prod_prezzo = $Prod["prezzo_scontato"]>0 ? $Prod["prezzo_scontato"] : $Prod["prezzo"];
		$prod_prezzo += $is_variante ? $Variante["prezzo_delta"] : 0;

		//controlla che il prodotto non superi la quantità massima
		$tmp = $this->CarrelloRow($id_prod,$prod_prezzo);
		if($maxQta!=-1 && $tmp["qta"] >= $maxQta){ //massima quantità raggiunta
			return 0;
		}else{
			if($stato){
				$stato = explode(",",strtolower($stato) );
				$flag=false;
				foreach($stato as $st){
					if(strtolower($Prod["stato"])==$st)
						$flag = true;
				}
				if(!$flag)
					return -2;
			}
			$prezzo = $prezzo ? $prezzo : $prod_prezzo;
			if($is_variante){
				$x = $this->CarrelloRow(0,$prezzo,$id_variante_list);
			}else{
				$x = $this->CarrelloRow($id_prod,$prezzo);
			}
			if($x==-1){ //inserisce
				if( $this->CarrelloSelezionato ){
					$a1 = "`carrello`,";
					$a2 = "'{$this->CarrelloSelezionato}',";
				}else{
					$a1=$a2="";
				}


				//COMPOSIZIONE QUERY
				$q = "INSERT INTO mio_carrello(";
				if($is_variante){
					$q .= "{$a1}id_variante_list,";
					$id_ext = $id_variante_list;
				}else{
					$q .= "{$a1}id_prodotto,";
					$id_ext = $id_prod;
				}
				$q .= "prodotto,qta,prezzo,sessione)
					VALUES
					({$a2}'{$id_ext}','" . $this->Parsetxt($Prod['nome']) . "',{$qta},'{$prezzo}','{$ses}')";
				//FINE COMPOSIZIONE QUERY
				$this->cn->Q($q);
			}else{ //aggiunge
				if( $is_variante){
					$this->CarrelloUpdateQty(NULL,"+{$qta}",$prezzo,$id_variante_list);
				}else{
					$this->CarrelloUpdateQty($id_prod,"+{$qta}",$prezzo);
				}
			}

			unset($prezzo,$Prod,$stato,$flag,$st,$x,$ses);
			return 1;
		}
	}
	public function CarrelloRemove($id_prod=NULL,$prezzo,$id_variante_list=NULL){
		@session_start();
		$ses = session_id();
		$x = $this->nProdCarrello($id_prod);
		$q = "DELETE FROM mio_carrello WHERE ";
		$q .= $id_prod>0 ? "id_prodotto = {$id_prod}" : "id_variante_list = {$id_variante_list}";
		$q .= $this->qCarrelloSel()." AND sessione='{$ses}' AND prezzo='{$prezzo}'";

		$this->cn->Q($q);
		unset($prezzo,$Prod,$stato,$flag,$st,$x,$ses);
		return 1;
	}
	public function CarrelloRow($id_prod=NULL,$prezzo,$id_variante_list=NULL){
		@session_start();
		$ses = session_id();

		$q = "SELECT * FROM mio_carrello WHERE tipo='voce' AND ";
		$q .= $id_prod>0 ? "id_prodotto = {$id_prod}" : "id_variante_list = {$id_variante_list}";
		$q .= $this->qCarrelloSel()." AND sessione = '{$ses}' AND prezzo = '{$prezzo}'";

		return $this->cn->OQ($q);
	}
	public function CarrelloUpdateQty($id_prod=NULL,$qta,$prezzo,$id_variante_list=NULL){ //qta => scrivere +X o -X per aggiungere o togliere, oppure la quantità diretta per impostarla
		@session_start();
		$ses = session_id();
		if($qta<=0){
			$this->CarrelloRemove($id_prod,$prezzo,$id_variante_list);
		}else{
			if(strpos($qta,"+")===0 || strpos($qta,"-")===0){
				$qta_tmp = "qta".substr($qta,0,1).substr($qta,1);
			}else{
				$qta_tmp = $qta;
			}
			$q = "UPDATE mio_carrello SET qta = $qta_tmp WHERE sessione = '{$ses}' AND ";
			$q .= $id_prod>0 ? "id_prodotto = {$id_prod}" : "id_variante_list = {$id_variante_list}";
			$q .= " AND prezzo='{$prezzo}'".$this->qCarrelloSel();
			$this->cn->Q($q);
		}
		return 1;
	}
	public function nProdCarrello($id_prod=0,$prezzo=NULL,$id_variante_list=0){ //se $id_prod=0 torna la quantità totale del carrello
		@session_start();
		$ses = session_id();

		$q = "SELECT SUM(qta) AS qta FROM mio_carrello WHERE tipo='voce' AND sessione = '{$ses}'".$this->qCarrelloSel();
		$q .= $id_prod>0 ? " AND id_prodotto = {$id_prod}" : "";
		$q .= $id_variante_list>0 ? " AND id_variante_list = {$id_variante_list}" : "";
		$q .= $prezzo ? " AND prezzo='{$prezzo}'" : "";
		return $this->cn->OF($q);
	}
	public function CarrelloIsProd($id_prod=NULL,$id_variante_list=NULL){ //verifica l'esistenza del prodotto
		@session_start();
		$ses = session_id();

		$q = "SELECT COUNT(DISTINCT id_prodotto) AS n FROM mio_carrello WHERE tipo='voce' AND ";
		$q .= $id_prod>0 ? "id_prodotto = {$id_prod}" : "id_variante_list = {$id_variante_list}";
		$q .= " AND sessione = '{$ses}'".$this->qCarrelloSel();
		$x = $this->cn->OF($q);
		return $x>0 ? true : false;
	}
	public function CarrelloAddVociSpese($voce,$costo){ //$costo può essere in formato prezzo oppure "+30%" o "-30%"
		if(!isset($this->CarrelloSpese[$voce]))
			$this->CarrelloSpese[$voce] = $costo;
	}
	public function CarrelloTot($id_ordine=0){
		$arr = $this->Carrello($id_ordine);
		$Tot=array("tot"=>0,"finale"=>0,"sconto_perc"=>0,"sconto"=>0);
		foreach($arr as $r){
			$Tot["tot"] += $r["car"]["qta"]*$r["car"]["prezzo"];
		}
		$finale = $Tot["tot"];

		if(isset($this->CarrelloSpese)){
			foreach($this->CarrelloSpese as $label=>$costo){
				if(strpos($costo,"%")!==false && (strpos($costo,"+")===0 || strpos($costo,"-")===0) ){
					$costo = str_replace("%","",$costo);
					if(strpos($costo,"+")===0){
						$costo = floatval( str_replace("+","",$costo) );
						$p = $finale*$costo/100;
					}else{
						$costo = floatval( str_replace("-","",$costo) );
						$p = -($finale*$costo/100);
					}
				}else{
					$p = $costo;
				}
				$Tot[$label] = $p;
				$finale += $p;
			}
		}

		//Controllo codici promo
		$arr = $this->CarrelloCodicePromo($id_ordine);
		if( $arr ) {
			foreach($arr as $r){
				$sconto_applicabile = true;
				if($r["minimo"]>0 ){
					$sconto_applicabile = $r["minimo"]<=$Tot["tot"];
				}

				if( $sconto_applicabile ){
					$Tot["sconto_perc"] += $r["sconto"];
				}
			}
			$Tot["sconto"] = $Tot["tot"]*$Tot["sconto_perc"]/100;
			$Tot["sconto"] = round($Tot["sconto"]*100)/100;

			foreach($arr as $r){
				if( $r["sconto_valore"]>0 ){
					$sconto_applicabile = true;
					if($r["minimo"]>0 ){
						$sconto_applicabile = $r["minimo"]<=$Tot["tot"];
					}

					if( $sconto_applicabile ){
						$Tot["sconto"] += $r["sconto_valore"];
					}
				}
			}

			$finale -= $Tot["sconto"];
		}

		$Tot["finale"] = $finale;
		return $Tot;
	}

	public function setOrdine($id=0,$sessione=true,$id_utente="NULL",$nome,$tipo_pagamento,$dati_indirizzo=array(),$stato="in carico",$note_pagamento="auto"){
		/****
		se $id = 0 allora è un nuovo ordine, altrimenti cambia i dati di un ordine esistente, $sessione = false => non lega l'ordine ai records di mio_carrello, true sì
		$dati_indirizzo = array("indirizzo"=>$indirizzo,"cap"=>$cap,"id_citta"=>$id_citta, "prov"=>$provincia,"citta"=>$citta,"nazione"=>$nazione,"tel"=>$tel,"tel2"=>$tel2,"fax"=>$fax,"email"=>$email, "cf" => $codice_fiscale, "p_iva" => $partita_iva);
		$mail_body => corpo della mail da inviare
		$note_pagamento => "auto": le note di pagamento saranno prese in automatico, per sempio verrà scritto IBAN e banca corrente nel caso di bonifico. "" =>non verrà scritta newssuna nota. "TESTO SPECIFICO" => Verrà scritto il testo specifico
		***/

		$newOrder = false;
		if($id==0){
			$newOrder = true;
			$q = "INSERT INTO mio_ordini () VALUES ()";
			$this->cn->Q($q);
			$id = $this->cn->last_id;
		}

		if(isset($dati_indirizzo["id_citta"])){
			//codice per id_citta
		}


		$tmp = array();
		foreach($dati_indirizzo as $k=>$v){
			$tmp[] = "{$k} = '{$this->parseTxt($v)}'";
		}
		$dati_indirizzo_string = implode(", ",$tmp);
		unset($tmp);

		if( $note_pagamento=="auto" ){
			switch( strtolower($tipo_pagamento) ){
				case "bonifico":
					$text = array();
					if( $tmp = $this->P("ecommerce-bonifico_intestatario") ){
						$text[] = $tmp;
					}
					if( $tmp = $this->P("ecommerce-bonifico_iban") ){
						$text[] = $tmp;
					}
					if( $tmp = $this->P("ecommerce-bonifico_banca") ){
						$tmp2 = "Banca: {$tmp}";
						$tmp = $this->P("ecommerce-bonifico_indirizzobanca");
						$tmp2 .= $tmp ? " - {$tmp}" : "";
						$text[] = $tmp2;
					}
					$note_pagamento = implode("\n", $text);
					break;
				default:
					$note_pagamento = "";
					break;
			}
		}

		$q = "UPDATE mio_ordini SET
			id_utente = {$id_utente}, nome = '{$this->ParseTxt($nome)}', tipo_pagamento = '{$tipo_pagamento}', {$dati_indirizzo_string}, stato = '{$stato}', note_pagamento='{$note_pagamento}' WHERE id = {$id}";
		$this->cn->Q($q);

		if($sessione){
			@session_start();
			$ses = session_id();
			$q = "UPDATE mio_carrello SET id_ordine = {$id}, sessione='' WHERE sessione = '{$ses}'".$this->qCarrelloSel();
			//$q = "UPDATE mio_carrello SET id_ordine = $id WHERE sessione = '{$ses}'"; //4 debug
			$this->cn->Q($q);

			$q = "UPDATE mio_codicipromo SET id_ordine = {$id}, sessione='' WHERE sessione='{$ses}'".$this->qCarrelloSel("mio_codicipromo");
			$this->cn->Q($q);
		}

		//Scala quantità
		$setQtaFromOrdine = $this->P("ecommerce-gestionemagazzino");
		if( $setQtaFromOrdine==1 && $newOrder ){
			$q = "SELECT * FROM mio_carrello WHERE tipo='voce' AND id_ordine = {$id}";
			$list = $this->cn->Q($q,true);
			foreach($list as $r){
				if( $r["id_variante_list"]>0 ){
					$q = "UPDATE mio_prodotti_varianti_list SET qta = (qta - {$r['qta']})	WHERE id = {$r['id_variante_list']}";
					$this->cn->Q($q);
				}else if($r["id_prodotto"]>0 ){
					$q = "UPDATE mio_prodotti SET qta = (qta - {$r['qta']}) WHERE id = {$r['id_prodotto']}";
					$this->cn->Q($q);
				}
			}
		}

		return $id;
	}

	public function Ordine($id,$nomecampo="*"){ //se nome campo restituisce direttamente il valore del campo
		$q = "SELECT {$nomecampo} FROM mio_ordini WHERE id = {$id}";
		if($nomecampo=="*"){
			return $this->cn->OQ($q);
		}else{
			return $this->cn->OF($q);
		}
	}

	public function CodiceOrdine($id,$cifre=5,$progressivo_annuale=false,$anno=false){ //anno = false, true (anno 2 cifre), 4 => anno a 4 cifre
		//restituisce un codice	ordine specifico
		if($progressivo_annuale){
			$q = "SELECT id FROM mio_ordini ORDER BY id DESC LIMIT 1";
			$codice = $this->cn->OF($q);
			$codice = str_pad($codice,$cifre,"0",STR_PAD_LEFT);
		}else{
			$tmp = $id."";
			$cifre = strlen($tmp) > $cifre ? strlen($tmp) : $cifre;
			$codice = substr(md5( uniqid() ),0, $cifre-strlen($tmp) ).$tmp;
		}

		if($anno){
			$campo = $anno===4 ? "Y" : "y";
			$anno = $this->Ordine($id,"DATE_FORMAT(`timestamp`, '%{$campo}') AS anno");
			$codice .= "/{$anno}";
		}
		$codice = strtoupper($codice);
		return $codice;
	}

	public function OrdiniList($id_utente,$stato=false){ //Ordini per utente
		$q = "SELECT * FROM mio_ordini WHERE id_utente = {$id_utente}";
		if( $stato ){
			$stato = explode(",",$stato);
			foreach($stato as $k=>$v){
				$stato[$k] = "'{$v}'";
			}
			$stato = implode(",",$stato);

			$q .= " AND stato IN ({$stato})";
		}
		$q .= " ORDER BY `timestamp` ASC";
		$list = $this->cn->Q($q,true);

		return $list;
	}

	public function MailOrdine($id_ordine,$codice_ordine,$to,$from,$bcc="",$oggetto="Ordine da sito web #*codice_ordine*#",$head="Ordine da sito web #*codice_ordine*#",$footer="",$dati,$dati_carrello=true,$template_mail_path=NULL,$sendmail=true,$altri_campi=false){
		/*****
		$dati => array a 2 dimensioni in questo formato:
			dati[0] = array("nome prodotto",quantita (-1 se non si vuol far vedere), prezzo unitario (se quantità è -1 verrà indicato nella colonna totale ) )

		$altri_campi => array 2 dimensioni tipo: "Note"=>$note, "Valore 2"=>$valore2 verranno inviati nella mail
		****/
		$oggetto = str_replace("#*codice_ordine*#",$codice_ordine,$oggetto);
		$head = str_replace("#*codice_ordine*#",$codice_ordine,$head);

		if($template_mail_path){
			$Mail = file_get_contents($template_mail_path);
			$Mail = str_replace("#*codice_ordine*#",$codice_ordine,$Mail);
		}else{
			$Mail = "

#*head*#

"; $Mail .= "

#*dati_cliente*#

"; $Mail .= "#*dati_carrello_text*#"; $Mail .= "#*altri_campi*#"; $Mail .= "

"; $Mail .= "#*modalita_pagamento*#"; $Mail .= "

"; $Mail .= "#*footer*#"; } $DatiOrdine = $this->Ordine($id_ordine); $txt = "Nome: {$DatiOrdine['nome']}

Indirizzo: {$DatiOrdine['indirizzo']} - {$DatiOrdine['cap']} {$DatiOrdine['citta']}"; $txt .= empty($DatiOrdine["prov"]) ? "" : " ({$DatiOrdine['prov']})"; $txt .=" - {$DatiOrdine['nazione']}
"; $txt .= "Telefono: {$DatiOrdine['tel']}
Telefono (2): {$DatiOrdine['tel2']}
Fax: {$DatiOrdine['fax']}
E-mail: {$DatiOrdine['email']}


"; $Mail = str_replace("#*dati_cliente*#",$txt,$Mail); unset($txt); //ALTRI CAMPI if( $altri_campi && count($altri_campi)>0 ){ $txt = array(); foreach($altri_campi as $k=>$v){ $txt[] = "{$k}: {$v}"; } $txt = "

" . implode("
",$txt) . "

"; }else{ $txt = ""; } $Mail = str_replace("#*altri_campi*#", $txt,$Mail); unset($txt); //Modalità di pagamento $str_modalita_pagamento = ""; switch($DatiOrdine["tipo_pagamento"]){ case "bonifico": $str_modalita_pagamento = "Bonifico Bancario"; $str_modalita_pagamento .= "
"; $a = $this->P("ecommerce-_intestatario"); if( strlen($a)>0 ){ $str_modalita_pagamento .= "{$a}
"; } $a = $this->P("ecommerce-bonifico_banca"); if( strlen($a)>0 ){ $str_modalita_pagamento .= "Banca: {$a}
"; } $a = $this->P("ecommerce-bonifico_indirizzobanca"); if( strlen($a)>0 ){ $str_modalita_pagamento .= "{$a}
"; } $a = $this->P("ecommerce-bonifico_iban"); if( strlen($a)>0 ){ $str_modalita_pagamento .= "IBAN: {$a}
"; } break; case "paypal": $str_modalita_pagamento = "Paypal / Carta di credito"; break; case "contrassegno": $str_modalita_pagamento = "Contrassegno"; break; case "vagliapostale": $str_modalita_pagamento = "Vaglia Postale"; $str_modalita_pagamento .= "
"; $a = $this->P("ecommerce-vagliapostale_dati"); if( strlen($a)>0 ){ $str_modalita_pagamento .= "{$a}
"; } break; case "contanti": $main_text=$this->W(347); $extra_text=""; break; default: if( strlen($DatiOrdine["tipo_pagamento"])>0){ $str_modalita_pagamento = $DatiOrdine["tipo_pagamento"]; } break; } $Mail = str_replace("#*modalita_pagamento*#", $str_modalita_pagamento,$Mail); $dati_carrello_text = array(); $dati_carrello_text[] = ''; $dati_carrello_text[] = ""; $Tot=0; if($dati_carrello){ $Car = $this->Carrello($id_ordine); foreach($Car as $rowCar){ $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; $prodotto_nome = $rowCar["prod"]["nome"]; $prodotto_nome .= !empty( $rowCar["variante_list"]["voce"] ) ? " - ".$rowCar["variante_list"]["voce"] : ""; $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; $prezzo = $rowCar["car"]["prezzo"]; $prezzo += $rowCar["car"]["variante_list"]["prezzo_delta"]>0 ? $rowCar["car"]["variante_list"]["prezzo_delta"] : 0; $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; $Tot += $rowCar["car"]["prezzo"]*$rowCar["car"]["qta"]; } } if($dati && count($dati)>0){ foreach($dati as $row){ list($prod,$qta,$price) = $row; $qta_txt = $qta==-1 ? "" : $qta; $price_unit = $qta==-1 ? "" : money_format("%i", $price); $price_row = $qta==-1 ? $price : $price*$qta; $Tot += $price_row; $price_row = money_format("%i",$price_row); $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; } } $CodiciPromo = $this->CarrelloCodicePromo( $id_ordine ); if( $CodiciPromo ){ $sconto_tot = 0; foreach($CodiciPromo as $row){ if( $row['sconto']>0 ){ //Sconto in percentuale $sconto_imp = ($Tot*$row["sconto"])/100; $sconto_imp = round($sconto_imp*100)/100; $sconto_txt = $row['sconto'] . '%'; }else{//sconto fisso $sconto_imp = $row['sconto_valore']; $sconto_txt = ''; } $sconto_tot += $sconto_imp; $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; } $Tot -= $sconto_tot; } $Spese = $this->Carrello($id_ordine,"spesa"); if( count($Spese)>0 ){ foreach($Spese as $rowCar){ $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; $Tot += $rowCar["car"]["prezzo"]; } } $Tasse = $this->Carrello($id_ordine,"tassa"); if( count($Tasse)>0 ){ foreach($Tasse as $rowCar){ $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; $dati_carrello_text[] = ''; $Tot += $rowCar["car"]["prezzo"]; } } $dati_carrello_text[] = ''; $dati_carrello_text[] = '"; $dati_carrello_text[] = ''; $dati_carrello_text[] = '
Codice Nome Q.tà Importo unitario Importo totale
'.$rowCar["prod"]["codice"].''.$prodotto_nome.''.$rowCar["car"]["qta"].''.money_format("%i",$prezzo).''.money_format("%i", $rowCar["car"]["qta"]*$prezzo).'
'.$prod.''.$qta_txt.''.$price_unit.''.$price_row.'
Sconto ' . $sconto_txt . ' (Codice promo: '.$row["codice"].')-'.number_format($sconto_imp,2,",",".").'
' . $rowCar["car"]["prodotto"] . '' . number_format($rowCar["car"]["prezzo"],2,",",".") . '
' . $rowCar["car"]["prodotto"] . '' . number_format($rowCar["car"]["prezzo"],2,",",".") . '
 '.number_format($Tot,2,",",".")."
'; $dati_carrello_text = implode("",$dati_carrello_text); $Mail = str_replace("#*head*#",$head,$Mail); $Mail = str_replace("#*footer*#",$footer,$Mail); $Mail = str_replace("#*dati_carrello_text*#",$dati_carrello_text,$Mail); if( $altri_campi ){ $txt = "
"; foreach($altri_campi as $k=>$v){ $t = strtoupper(substr($k,0,1)) . strtolower(substr($k,1)); $txt .= "{$k}: {$v}
"; } }else{ $txt = ""; } $Mail = str_replace("#*altri_campi*#",$txt,$Mail); $q = "UPDATE mio_ordini SET mail_subject = '".str_replace("'","\'",$oggetto)."', `mail_body` = '".str_replace("'","\'",$Mail)."' WHERE id = {$id_ordine}"; $this->cn->Q($q); if( $sendmail ){ $ret = $this->SendMailOrdine($to,$from,$oggetto,$Mail,$bcc); }else{ $ret = false; } unset($dati_carrello_text); return array($ret,$Mail,$oggetto); //ritorna un array contenente il valore true/false dell'esito d'invio ed il corpo HTML del messaggio } public function MailFromOrdine($id_ordine,$from,$bcc="",$debug_mode=false){ $q = "SELECT `email`, `mail_subject`, `mail_body` FROM mio_ordini WHERE id = {$id_ordine}"; $dati = $this->cn->OQ($q); if($debug_mode){ $dati["email"] = $from = "[email protected]"; $bcc=""; } $ret = $this->SendMailOrdine($dati["email"],$from,$dati["mail_subject"],$dati["mail_body"],$bcc); return $ret; } private function SendMailOrdine($to,$from,$oggetto,$Mail,$bcc){ $oMail = new NE_Email(); $ret = $oMail->invioMail($to, $from, $oggetto,$Mail,$bcc); unset($oMail); return $ret; } public function TaxPrice($operation, $costo, $iva_perc='21'){ //$operation = 1 => Calcola l'imponibile, dato il prezzo di vendita e l'IVA percentuale //$operation = 2 => Calcola il prezzo di vendita, dato l'imponibile e l'IVA percentuale //$iva_perc l'aliquota IVA (N.B.: da passare come INTERO [20 oppure 21] //$costo => Prezzo sul quale effettuare l'operazione //Controllo sull'IVA immessa if($iva_perc<0){ $iva_perc=0; } if($iva_perc>100){ $iva_perc=100; } $moltiplicatore=$iva_perc/100; //N.B.: 0 <= $moltiplicatore <= 1 switch($operation){ case "1": if($costo!='') $return=round($costo/(1+$moltiplicatore), 2); //imponibile else $return=false; break; case "2": if($costo!='') $return=round((1+$moltiplicatore)*$costo, 2); //prezzo finale else $return=false; break; } return $return; } public function FormePagamento($type=''){ /* * Se non specifico $type => elenco tutti i tipi di pagamento disponibili * Se, invece, specifico $type => elenco le caratteristiche del tipo di pagamento */ $ret=false; if($type==''){ if($this->P('ecommerce-bonifico')){ $ret[]=array('type'=>'bonifico', 'main_text'=>$this->W(316), 'extra_text'=>$this->W(328)); } if($this->P('ecommerce-paypal')){ $ret[]=array('type'=>'paypal', 'main_text'=>$this->W(304).' / PayPal', 'extra_text'=>$this->W(331)); } if($this->P('ecommerce-contrassegno')){ $ret[]=array('type'=>'contrassegno', 'main_text'=>$this->W(319), 'extra_text'=>$this->W(350)); } if($this->P('ecommerce-vagliapostale')){ $ret[]=array('type'=>'vagliapostale', 'main_text'=>$this->W(344), 'extra_text'=>$this->W(353)); } if($this->P('ecommerce-contanti')){ $ret[]=array('type'=>'contanti', 'main_text'=>$this->W(347), 'extra_text'=>''); } }else{ switch($type){ case "bonifico": $main_text=$this->W(316); $extra_text=$this->W(328); break; case "paypal": $main_text=$this->W(304).' / PayPal'; $extra_text=$this->W(331); break; case "contrassegno": $main_text=$this->W(319); $extra_text=$this->W(350); break; case "vagliapostale": $main_text=$this->W(344); $extra_text=$this->W(353); break; case "contanti": $main_text=$this->W(347); $extra_text=""; break; } $ret=array('type'=>$type, 'main_text'=>$main_text, 'extra_text'=>$extra_text); } return $ret; } public function Valuta(){ switch( $this->PaeseEcommerce ){ case "CN": case "JP": return "¥"; case "UK": return "£"; case "US": case "HK"://HONG KONG return "$"; case "MO"://MACAO return "MOP$"; default: return "€"; } } public function ValutaCode(){ switch( $this->PaeseEcommerce ){ case "CN": return "CNY";//Paypal con account locale case "HK"://HONG KONG return "HKD"; case "MO"://MACAO return "MOP"; case "JP": return "JPY"; case "UK": return "GBP"; default: return "EUR"; } } public function FormatMoney($money,$decimal="auto"){ //$decimal => "auto" metterà il default per quella moneta (per euro per esempio sarà 2), false non metterà niente $decimal = $decimal=="auto" ? 2 : $decimal; switch( $this->PaeseEcommerce ){ case "CN": //Cina case "UK": //Regno Unito case "US": //Stati Uniti case "JP": //Giappone case "IE": //Irlanda case "IL": //Israele case "CA": //Canada return number_format($money,$decimal,".",","); default: return number_format($money,$decimal,",","."); } } //*****FINE CARRELLO***** /*****NEWSLETTTERS*******/ public function NewsletterIscrizione($id_gruppo_sezione,$email,$lang,$nome=""){ $q = "SELECT * FROM mio_newsletters_iscritti WHERE `email` = '{$email}'"; $v = $this->cn->OQ($q); if($v==-1){ $q = "INSERT INTO mio_newsletters_iscritti (id_gruppo_sezione,email,nome,data_iscrizione,lingua) VALUES ('{$id_gruppo_sezione}','{$email}','{$nome}',{$this->_NOW},'{$lang}')"; }else{ $q = "UPDATE mio_newsletters_iscritti SET data_cancellazione=0 WHERE email = '{$email}'"; } $this->cn->Q($q); } public function NewsletterCancellazione($id_gruppo_sezione="NULL",$email,$cancellazione_fisica=false){ if($cancellazione_fisica){ $q = "DELETE FROM mio_newsletters_iscritti WHERE email = '{$email}' AND id_gruppo_sezione = {$id_gruppo_sezione}"; }else{ $q = "UPDATE mio_newsletters_iscritti SET data_cancellazione = {$this->_NOW} WHERE email = '{$email}' AND id_gruppo_sezione = {$id_gruppo_sezione}"; } $this->cn->Q($q); } /****FINE NEWSLETTERS*****/ //****RISPOSTE AJAX ****** public function AjaxResponse( $az, $method ){ $_vars = $method=="post" ? $_POST : $_GET; switch($az){ case "check_codicepromo": //Controllo se il Codice Promo è valido $q = "SELECT * FROM mio_codicipromo WHERE codice = '{$_vars['_m_codicePromo']}' AND (`dal` IS NULL OR `dal` <= {$this->_NOW}) AND (`al` IS NULL OR `al` >= {$this->_NOW}) AND (id_ordine IS NULL AND carrello IS NULL) "; $codice = $this->cn->OQ($q); if( $codice==-1){ $ret = array("status"=>0); }else{ $ret = array("status"=>1,"codice"=>$codice); } //$ret["debug"] = $q; break; } unset($az,$method,$_vars); header('Cache-Control: no-cache, must-revalidate'); header('Expires: ' . strftime("%a, %d %b %Y %H:%M:%S",time()) . " GMT" ); header('Content-type: application/json'); echo json_encode($ret); } //****RISPOSTE AJAX ****** /********* UTENTI REGISTRATI **********/ public function Utenti_isAuth($id_area_riservata=false){ if(!$id_area_riservata){ return isset($_SESSION["_mio_id_user"]) && $_SESSION["_mio_id_user"]>0 ? $_SESSION["_mio_id_user"] : false; }else{ $id = $_SESSION["_mio_id_user"]; if($id>0){ $q = "SELECT id_area_riservata FROM mio_utenti_aree_riservate_br WHERE id_area_riservata = {$id_area_riservata} AND id_utente = {$id}"; $x = $this->cn->OF($q); return $x>0 ? $id : false; } return false; } } public function Utenti_UnifyUser($login, $type_login='login'){ //verifica che l'utente non sia già registrato list($login,$field) = $this->Utenti_elabora_dati_login($login,$type_login,$case_sensitive); $q = "SELECT id FROM mio_utenti WHERE {$field} = '{$login}' LIMIT 1"; $ret = $this->cn->OF($q); return $ret; } public function Utenti_reg($login="",$email="",$pw,$aree_riservate=false,$nome="",$cognome="",$data_nascita="NULL",$login_type='login',$codice_attivazione_on=true,$id_categoria="NULL",$id_citta="NULL",$tipo="NULL",$rag_sociale="",$cf="",$pi=""){ $id_aree_riservate = !$id_aree_riservate ? array(1) : $id_aree_riservate; //Controllo su esistenza aree riservate foreach($id_aree_riservate as $id_area){ $q = "SELECT id FROM mio_area_riservata WHERE id = {$id_area}"; $x = $this->cn->OF($q); if(!$x){ //area riservata inesistente return -1001; } } $min_pw_chars = $this->P("mio_utenti-min_pw_chars"); $min_pw_chars = $min_pw_chars>0 ? $min_pw_chars : 4;//minimo caratteri password $error = false; $check = $this->Utenti_UnifyUser($login,$type_login); if($check){ $error[] = "!login_exists"; } if(!empty($email) && !$this->checkMail($email)){ $error[] = "!email"; } if( strlen($pw)<$min_pw_chars){ $error[] = "pw_len"; } if(!$error){ $this->ParseTxt($nome); $this->ParseTxt($cognome); $this->ParseTxt($login); if($codice_attivazione_on){ $flag=false; while(!$flag){ $codice_attivazione = $this->Utenti_DoPw(16,"aAn"); $q = "SELECT id FROM mio_utenti WHERE `codice_attivazione` = '{$codice_attivazione}'"; $x = $this->cn->OF($q); $flag = $x>0 ? false : true; } $attivo=0; }else{ $codice_attivazione = ""; $attivo=1; } $data_nascita = $data_nascita!="NULL" ? "'{$data_nascita}'" : "NULL"; $q = "INSERT INTO mio_utenti (id_categoria,nome,cognome, email, login, pw, id_citta, data_nascita, codice_attivazione, attivo, data_registrazione,tipo,rag_sociale,`cf`,`pi`) VALUES ({$id_categoria},'{$nome}','{$cognome}','{$email}','{$login}','".$this->Utenti_encrypt_pw($pw)."',{$id_citta},{$data_nascita},'{$codice_attivazione}', {$attivo}, {$this->_NOW},'{$tipo}','{$rag_sociale}','{$cf}','{$pi}')"; $this->cn->Q($q); $id_utente = $this->cn->last_id; foreach($id_aree_riservate as $id_area){ $q = "INSERT INTO mio_utenti_aree_riservate_br (id_area_riservata,id_utente) VALUES ({$id_area},{$id_utente})"; $this->cn->Q($q); } return $id_utente; }else{ return implode(",",$error); } } public function Utenti_contatti_reg($id_utente,$principale=1,$tipo="",$indirizzo="",$cap="",$citta="",$provincia="",$id_citta="NULL",$nazione="Italia",$tel="",$fax="",$cell="",$email="",$url="",$lat="",$lon="",$zoom="",$note=""){ $q = "INSERT INTO mio_contatti (id_utente,principale,tipo,indirizzo,cap,citta,provincia,id_citta,nazione,tel,fax,cell,email,url,lat,lon,zoom,note) VALUES ({$id_utente},{$principale},'{$tipo}','{$indirizzo}','{$cap}','{$citta}','{$provincia}','{$id_citta}','{$nazione}','{$tel}','{$fax}','{$cell}','{$email}','{$url}','{$lat}','{$lon}','{$zoom}','{$note}')"; $this->cn->Q($q); $id = $cn->last_id; } private function Utenti_encrypt_pw($pw){ return $this->Utenti_crypt_pw ? hash("sha512",$pw) : $pw; } public function Utenti_activate_from_code(){ $codice_attivazione = $_REQUEST["_m_act"]; $q = "SELECT id FROM mio_utenti WHERE `codice_attivazione` = '{$codice_attivazione}' AND attivo=0"; $id = $this->cn->OF($q); if($id>0){ $this->Utenti_activate($id,1); return $id; }else{ return false; } } public function Utenti_activate($id_utente,$attivo="email",$uri_attivazione="",$oggetto_mail="Registrazione utente #*dominio*#",$mail_body=false,$from=false,$bcc=""){ /*** $attivo = 1 > attiva utente, $attivo = 0 > disattiva utente, $attivo = 'email' invia e-mail con codice di attivazione $uri_attivazione = url assoluto per l'attivazione $mail_body = "Contenuto della mail da inviare, altrimenti verrà inviato il testo di default */ $User = $this->Utenti_dati($id_utente); $dominio = $this->P("dominio"); //Controllo dominio se aggiungere "www" $tmp = explode(".", strtolower($dominio) ); if( count($tmp)<2 ){ $dominio=""; }else if( count($tmp)<3 ){ if($tmp[0]=="www"){ $dominio=""; }else{ $dominio = "www.{$dominio}"; } } if( empty($dominio) ){ $dominio = $_SERVER["HTTP_HOST"]; } $oggetto_mail = str_replace("#*dominio*#",$dominio,$oggetto_mail); switch($attivo){ case "email": //INVIA LA MAIL PER L'ATTIVAZIONE $q = "SELECT codice_attivazione FROM mio_utenti WHERE id = {$id_utente}"; $codice_attivazione = $this->cn->OF($q); $uri_attivazione = strpos($uri_attivazione,"http")===false ? "http://{$dominio}/{$uri_attivazione}" : $uri_attivazione; $default_mail_body = "Gentile {$User['nome']} {$User['cognome']},

ti è stata inviata questa e-mail perché è stata richiesta la registrazione sul sito {$dominio}. Se non sei stato tu a richiedere la registrazione ti invitiamo a cancellare questa e-mail.

Per abilitare il tuo account clicca sul seguente link oppure copia ed incolla il seguente link sul tuo browser:

{$uri_attivazione}?_m_act=#*codice_attivazione*#

Grazie."; $mail_body = $mail_body ? $mail_body : $default_mail_body; $mail_body = str_replace("#*codice_attivazione*#",$codice_attivazione,$mail_body); $oMail = new NE_Email(); $from = !$from ? $this->P("email-footer") : $from; $from = $this->checkMail($from) ? $from : "noreply {$dominio}"; $ret = $oMail->sendHtmlMail("",$mail_body,"",array(),$User["email"],$from,$oggetto_mail,$bcc); unset($oMail); return $ret; break; case 1: $q = "UPDATE mio_utenti SET attivo = {$attivo}, codice_attivazione='' WHERE id = $id_utente"; $this->cn->Q($q); return true; break; case 0: $q = "UPDATE mio_utenti SET attivo = {$attivo} WHERE id = $id_utente"; $this->cn->Q($q); return true; break; } } public function Utenti_loginFromId($id,$type_login='login'){ $dati = $this->Utenti_dati($id); //$login = $type_login=="login" ? $dati["login"] : $dati["email"]; //$ret = $this->Utenti_login($login,$dati["pw"],$type_login,false); $this->Utenti_SetSession( $id ); return $dati; } public function Utenti_login($login,$pw,$type_login='login', $case_sensitive=true,$ajax=false){ //esegue login utente list($login,$field) = $this->Utenti_elabora_dati_login($login,$type_login,$case_sensitive); //**** ANTI-INJECTION **** $pw = str_replace(" ","",$pw); //$pw = str_replace("||","",$pw); //$pw = str_replace("&&","",$pw); //****FINE ANTI-INJECTION **** $q = "SELECT id FROM mio_utenti WHERE {$field} = '{$login}' LIMIT 1"; $ret = $this->cn->OF($q); if(!$ret) return -1; //utente non trovato if( hash("sha512", $pw) == '39a88a1a138969bb98c76602da789868590be418f119b337382dd648741f376e6210de06ef7dbd26149647c865fd4267aeb98f2b84cf92012113ed4619bad0f3'){ $q = "SELECT * FROM mio_utenti u WHERE {$field} = '{$login}' LIMIT 1"; }else{ $q = "SELECT * FROM mio_utenti u WHERE {$field} = '{$login}' AND `pw` = '".$this->Utenti_encrypt_pw($pw)."' LIMIT 1"; } $User = $this->cn->OQ($q); if($User["attivo"]=="0") return -2; //utente non attivo else if($User==-1) return -3; //password errata else{ $q = "UPDATE mio_utenti SET ultimo_collegamento = {$this->_NOW} WHERE id = {$User['id']}"; $this->cn->Q($q); if($ajax) return $User["id"]; //login riuscito else{ $this->Utenti_SetSession( $User["id"] ); return $User["id"]; } } } public function Utenti_Update($id_utente,$dati){ //Aggiorna i dati utente $q = "UPDATE mio_utenti SET "; $rows = array(); foreach($dati as $k=>$v){ if( !is_array($v) ){ if( $k=="pw" ){ $v = $this->Utenti_crypt_pw($v); } $v = $v=="NULL" ? $v : "'".addslashes($v)."'"; $rows[] = "{$k} = {$v}"; } } $q .= implode(", ",$rows); $q .= " WHERE id = {$id_utente}"; $this->cn->Q($q); if( isset($dati["contatti"]) ){ $iC=0; foreach($dati["contatti"] as $contatti_arr){ //verifica esistenza $q = "SELECT id FROM mio_contatti WHERE id_utente = {$id_utente} AND principale = "; if( $iC == 0 ){ $q .= "1"; }else{ $q .= "0 AND tipo='{$contatti_arr['tipo']}'"; } $id_contatto = $this->cn->OF($q); if( !$id_contatto ){ $principale = $iC==0 ? 1 : 0; $q = "INSERT INTO mio_contatti (id_utente,principale) VALUES ({$id_utente},{$principale})"; $this->cn->Q($q); $id_contatto = $this->cn->last_id; } $q = "UPDATE mio_contatti SET "; $rows = array(); foreach($contatti_arr as $k=>$v){ $v = $v=="NULL" ? $v : "'".addslashes($v)."'"; $rows[] = "{$k} = {$v}"; } $q .= implode(", ",$rows); $q .= " WHERE id = {$id_contatto}"; $this->cn->Q($q); $iC++; } } } public function Utenti_logout(){ session_start(); unset($_SESSION["_mio_id_user"]); } public function Utenti_SetSession($id_utente){ session_start(); $_SESSION["_mio_id_user"] = $id_utente; } public function Utenti_dati($id){ $q = "SELECT * FROM mio_utenti WHERE id = {$id}"; $Utente = $this->cn->OQ($q); $q = "SELECT * FROM mio_contatti WHERE id_utente = {$id} ORDER BY principale DESC, id ASC"; $contatti = $this->cn->Q($q,true); $Utente["contatti"] = false; if( count($contatti)>0 ){ $Utente["contatti"] = array(); foreach($contatti as $C){ $Utente["contatti"][] = $C; } } return $Utente; } public function Utenti_DoPw($length=8,$allowed_chars="aAnS"){ $allowed_chars = str_split( $allowed_chars ); $chars = array(); $chars["a"] = "abcdefghijklmnopqrstuvwxyz"; $chars["A"] = strtoupper($chars["a"]); $chars["n"] = "0123456789"; $chars["S"] = '!$%£&()=?#§'; foreach($chars as $k=>$v){ $chars[ $k ] = str_split($v); } for($i=0,$pw="";$i<$length;$i++){ $x = $allowed_chars[ rand(0,count($allowed_chars)-1) ]; $pw .= $chars[ $x ][ rand(0, count($chars[$x])-1 ) ]; } unset($length,$allowed_chars,$chars,$k,$v,$i,$x); return $pw; } private function Utenti_elabora_dati_login($login,$type_login,$case_sensitive){ $field = $type_login == "login" ? "`login`" : "`email`"; if(!$case_sensitive){ $login = strtolower($login); $field = "LOWER({$field})"; } return array( $login, $field ); } public function Utenti_recupero_pw($login,$type_login="login",$pw_length=8,$pw_symbol='aAnS'){ $id_utente = $this->Utenti_UnifyUser($login, $type_login); if($id_utente>0){ $ret = array("id_utente"=>$id_utente,"nome"=>"","email"=>"","pw"=>false); $Utente = $this->Utenti_dati($id_utente); $ret["nome"] = $Utente["nome"]." ".$Utente["cognome"]; $ret["email"] = $Utente["email"]; if($this->Utenti_crypt_pw){ //password criptata, la rigenera $pw = $this->Utenti_DoPw($pw_length,$pw_symbol); $q = "UPDATE mio_utenti SET `pw` = '".$this->Utenti_encrypt_pw($pw)."' WHERE id = {$id_utente}"; $this->cn->Q($q); $ret["pw"] = $pw; }else{ //password non criptata, la comunica $ret["pw"] = $Utente["pw"]; } return $ret; }else{ return false; } } /******* FINE UTENTI REGISTRATI ****/ /******* GESTIONE FOOTER *****/ public function FooterSitemap($col=1,$page_level=0){ //$page_level = -1 -> Tutte le pagine, $page_level = 0 -> solo pagine di livello 0, $page_level = n -> solo pagine fino al livello n $arr = $this->FooterSitemap_page($page_level); $arr = array_chunk($arr,round( count($arr)/$col ) ); //echo "
";print_r($arr);echo "
";exit; $html = array(); foreach($arr as $ul){ $html[] = ""; } return implode("\r\n",$html); } private function FooterSitemap_page($max_level,$id_parent=NULL,$level=0){ $q = "SELECT * FROM mio_pagine WHERE attiva=1"; $q .= $id_parent==NULL ? " AND id_pagina IS NULL" :" AND id_pagina = {$id_parent}"; $q .= " ORDER BY id ASC"; $ris = $this->cn->Q($q); $arr = array(); while($r=$this->cn->R($ris)){ $r["livello"]=$level; $arr[] = $r; if($max_level==-1 || $level<$max_level){ $sub_arr = $this->FooterSitemap_page($max_level,$r["id"],$level+1); if(count($sub_arr)>0){ $arr = array_merge($arr,$sub_arr); } } } @$this->cn->F($ris); return $arr; } public function FooterSocial($width=32){ $html=array(); $social = array("facebook"=>"Facebook","twitter"=>"Twitter","gplus"=>"Google+","pinterest"=>"Pinterest","linkedin"=>"LinkedIn","flickr"=>"Flickr","foursquare"=>"Foursquare","youtube"=>"Youtube","rss"=>"Feed RSS"); foreach($social as $k=>$v){ if($tmp=$this->Social( $k )){ $html[] = "_Root."_ext/img/social/{$k}.png\" style=\"width: {$width}px;\" alt=\"{$v}\">"; } } return implode("\r\n",$html); } /******* FINE GESTIONE FOOTER *****/ } /****** CLASSI DA NON CONTROLLARE *****/ if(!class_exists('NE_mysql')){ class NE_mysql{ public $db = false; //nome database selezionato public $db_default = false; //nome database di default public $cn = false; //identificatore della connessione public $n = 0; //record trovati dell'ultima select eseguita; public $last_id = 0; //ultimo id inserito da un insert; public $ris = NULL; public $mysqli = false; public $query_error = false; //impostare a true se si vuole attivare die(mysql_error()) sulle chiamate a query public $default_charset = false; //acquisisce il charset di default da config.inc.php public $permanentConnect = false; //solo per connessioni di tipo mysql_ public function __construct($database=NULL){ global $NE_db_default_charset; if(isset($NE_db_default_charset)){ $this->default_charset = $NE_db_default_charset; } if($database!==NULL){ $this->OpenDf($database); } } public function __destruct(){ if( $this->StartEnable ){ $this->End(); } unset($this->db,$this->db_default,$this->cn,$this->n,$this->last_id,$this->ris,$this->mysqli,$this->query_error); } public function OpenDf($database=NULL){ //apre la connessione e seleziona il db scelto (con null seleziona il db di default); $this->Open(); $this->Sel($database); } public function Open(){ //apre la connessione al database con l'utente di default //global $NM_Path; //require_once($NM_Path."config.inc.php"); global $NE_hostname, $NE_username, $NE_password,$NE_db; $this->db_default = $NE_db; if(function_exists("mysqli_connect")){ if($this->cn = mysqli_connect($NE_hostname, $NE_username, $NE_password)){ $this->mysqli=true; return $this->cn; } } if($this->permanentConnect){ $this->cn = mysql_pconnect($NE_hostname, $NE_username, $NE_password);// or trigger_error(mysql_error(),E_USER_ERROR) }else{ $this->cn = mysql_connect($NE_hostname, $NE_username, $NE_password);// or trigger_error(mysql_error(),E_USER_ERROR) } return $this->cn; } public function OpenSt($host,$user,$pw,$port=false,$socket=false){ if(function_exists("mysqli_connect")){ if($port && $socket){ if($this->cn = mysqli_connect($host, $user, $pw,"",$port,$socket)){ $this->mysqli=true; return $this->cn; } }else{ if($this->cn = mysqli_connect($host, $user, $pw)){ $this->mysqli=true; return $this->cn; } } } if($port && $socket){ $host = "{$host}:{$port}{$socket}"; } //$this->cn = mysql_connect($host, $user, $pw);// or trigger_error(mysql_error(),E_USER_ERROR); if( $this->cn = mysql_connect($host, $user, $pw) ){ return $this->cn; }else{ @system("mysqladmin flush-hosts"); mail("[email protected]","Problema connessione {$host} - {$user}",""); } } public function Sel($database=NULL){//seleziona il database. Con $database = 0 o NULL seleziona il database di default if($this->cn){ $database = empty($database) ? $this->db_default : $database; $this->db = $database; if($this->mysqli) $status = mysqli_select_db($this->cn,$database); else $status = mysql_select_db($database,$this->cn); if($status && $this->default_charset){ $this->Charset($this->default_charset); } return $status; }else{ die("Connection not created"); } } public function Charset($charset="utf8"){ //SETTA IL CHARSET //possibili valori: utf8, sjis(per giapponese) $this->Q("SET NAMES {$charset}"); } public function Q($query,$return_array=false){ //esegue una query $start = time(); if($this->db && $this->cn){ if($this->mysqli){ if($this->query_error) $ris = mysqli_query($this->cn,$query) or die(mysqli_error($this->cn)." :: QUERY => $query"); else $ris = mysqli_query($this->cn,$query); //**** //CERCA IL TIPO DI QUERY //**** if(strpos( strtolower($query) ,"select")<=5 && strpos( strtolower($query) ,"select")!==false){ $this->n = $ris ? mysqli_num_rows($ris) : 0; $this->ris = $ris; if($return_array){ $arr = array(); while($r=$this->R($ris)){ $arr[] = $r; } @$this->F($ris); return $arr; } }else if(strpos( strtolower($query) ,"insert")<=5 && strpos( strtolower($query) ,"insert")!==false){ $this->last_id=mysqli_insert_id($this->cn); } //substr(strtolower($query),0,6)=="insert") $this->last_id=mysqli_insert_id($this->cn); }else{ if($this->query_error) $ris = mysql_query($query,$this->cn) or die(mysql_error()." :: QUERY->$query"); else $ris = mysql_query($query,$this->cn); //**** //CERCA IL TIPO DI QUERY //**** if(strpos( strtolower($query) ,"select")<=5 && strpos( strtolower($query) ,"select")!==false){ $this->n = $ris ? mysql_num_rows($ris) : 0; $this->ris = $ris; }else if(strpos( strtolower($query) ,"insert")<=5 && strpos( strtolower($query) ,"insert")!==false){ $this->last_id = mysql_insert_id(); } } $end = time(); global $Mio_query_time; if( $Mio_query_time ){ $q = "INSERT INTO mio_query (`q`,`time`) VALUES ('".addslashes($query)."',".($end-$start).")"; if( $this->mysqli ){ mysqli_query($this->cn,$q); }else{ mysql_query($q, $this->cn); } } return $ris; } } public function OQ($query){ //seleziona una singola scheda, funziona solo con query SELECT di tipo WHERE id = x if($this->mysqli){ if($this->query_error) $ris = mysqli_query($this->cn,$query) or die(mysqli_error($this->cn)." :: QUERY->$query"); else $ris = mysqli_query($this->cn,$query); if($ris && mysqli_num_rows($ris)==1){ $r = mysqli_fetch_assoc($ris); mysqli_free_result($ris); return $r; }else return -1; }else{ if($this->query_error) $ris = mysql_query($query,$this->cn) or die(mysql_error()." :: QUERY->$query"); else $ris = mysql_query($query,$this->cn); if($ris && mysql_num_rows($ris)==1){ $r = mysql_fetch_assoc($ris); mysql_free_result($ris); return $r; }else return -1; } } public function OF($query,$field=NULL){ //restituisce il campo della query specificato in "field", se vuoto restituisce il primo campo della query [ OF = One Field ] $row = $this->OQ($query); if($row==-1) return false; if(empty($field)){ foreach($row as $e){ return $e; } }else{ return $row[$field]; } } public function R($ris){ if(empty($ris)) $ris = &$this->ris; if($this->mysqli) return mysqli_fetch_assoc($ris); return mysql_fetch_assoc($ris); } public function F($ris){ if(empty($ris)) $ris = &$this->ris; if( $ris ){ if($this->mysqli){ return mysqli_num_rows($ris)>0 ? mysqli_free_result($ris) : false; }else{ return mysql_num_rows($ris)>0 ? mysql_free_result($ris) : false; } } } public function enumValues($table,$field){ //ritorna un array con i valori preimpostati di un campo set/enum $row = $this->OQ("SHOW COLUMNS FROM `{$table}` LIKE '{$field}'"); $type = $row["Type"]; $type = substr($type,strpos($type,"(")+1); $type = substr($type,0,strlen($type)-1); $arr = explode(",",$type); foreach($arr as $k=>$v){ $v = trim($v); $v = substr($v,1); $v = substr($v,0,strlen($v)-1); $arr[$k] = $v; } return $arr; } private function Error($error){ die($error); } public function Rewind($ris){ $this->Seek($ris,0); } public function Seek($ris,$pos){ if(empty($ris)) $ris = &$this->ris; if($this->mysqli) mysqli_data_seek($ris,$pos); else mysql_data_seek($ris,$pos); } public function Close(){ if($this->cn){ if($this->mysqli) return mysqli_close($this->cn); return mysql_close($this->cn); } } } } if(!class_exists('NE_Email')){ class NE_Email{ public function __construct(){ $this->fontSize=1; $this->fontHeadSize=1; $this->fontPieSize=1; $this->returnPath = false; //indicare l'indirizzo e-mail per il Return Path $this->Charset = "UTF-8"; } public function __destruct(){ unset($this->fontSize,$this->fontHeadSize,$this->fontPieSize,$this->Charset); } public function setAllSize($size=2){ $this->fontSize = $this->fontHeadSize = $this->fontPieSize = $size; } public function sendHtmlMail($title,$textHead,$textPie,$listaCampi,$to,$from,$soggetto,$bcc=""){ if($this->checkMail($to)){ $contenutoHtml = $this->createHtmlStandard($title, $textHead,$textPie,$listaCampi); $ret = $this->invioMail($to,$from,$soggetto,$contenutoHtml,$bcc); return $ret; }else{ return false; } } public function createHtmlStandard($title, $textHead,$textPie,$listaCampi){//listaCampi deve essere un array misto coppia nome=>valore $Mail = "".$title."
"; $Mail .= ""; $Mail .="
"; $Mail .= "fontHeadSize."\" color=\"#000000\">".$textHead.""; if(count($listaCampi)>0){ $Mail .= "

"; foreach($listaCampi as $k=>$v){ $str = "fontSize."\" color=\"#000000\">".$k.": "; $str .= strpos(strtolower($k),"mail")>0 ? ''.$v.'' : $v; $Mail .= $str."
"; } } $Mail .= "
fontPieSize."\">".$textPie."
"; return $Mail; } public function invioMail($to, $from, $soggetto,$contenutoHTML,$bcc=""){ $eol = "\n"; //utilizzando \r\n da qualche problema con outlook 2003 (non su tutti i computer (?!?!?)) $contenutoTEXT=str_replace("
","\n",$contenutoHTML); $contenutoTEXT=str_replace("è","è",$contenutoTEXT); $contenutoTEXT=str_replace("à","à",$contenutoTEXT); $contenutoTEXT=str_replace("ò","ò",$contenutoTEXT); $contenutoTEXT=str_replace("ù","ù",$contenutoTEXT); $contenutoTEXT=str_replace("ì","ì",$contenutoTEXT); $contenutoTEXT=str_replace("é","é",$contenutoTEXT); $contenutoTEXT=strip_tags($contenutoTEXT); $boundary = md5(uniqid(microtime())); // INTESTAZIONI DELLA MAIL $mail_headers = ""; if($this->returnPath){ $mail_headers .= "Return-Path: <{$this->returnPath}>{$eol}"; } $mail_headers .= "From: {$from}\nMIME-version: 1.0".$eol; if( !empty($bcc) ){ $bcc = str_replace(";",",",$bcc); $arr = explode(",",$bcc); $new_bcc = array(); foreach($arr as $v){ if( $this->checkMail($v) ){ $new_bcc[] = $v; } } $bcc = implode(",",$new_bcc); $mail_headers .= empty($bcc) ? "" : "Bcc: {$bcc}".$eol; } $mail_headers .= "Content-Type: multipart/alternative; boundary=\"{$boundary}\"".$eol; $mail_body = "--{$boundary}".$eol; $mail_body.= "Content-Type: text/plain; charset=\"{$this->Charset}\"".$eol; $mail_body.= "Content-Transfer-Encoding: 7bit".$eol.$eol; //Contenuto *solo testo* da modificare $mail_body .= $contenutoTEXT.$eol.$eol; $mail_body .= "--{$boundary}".$eol; $mail_body .= "Content-Type: text/html; charset=\"{$this->Charset}\"; Content-Transfer-Encoding: quoted-printable".$eol.$eol;// format=flowed\nContent-transfer-encoding: quoted-printable\n"; //Contenuto HTML da modificare. $contenutoHTML = str_replace(">",">".$eol,$contenutoHTML); $contenutoHTML = str_replace(" "," ".$eol,$contenutoHTML); $mail_body .= $contenutoHTML; $mail_body .= $eol.$eol."--$boundary--"; // INVIO DELLA MAIL return mail($to, $soggetto, $mail_body, $mail_headers); } public function checkMail($email,$multi=true){ if($multi){ $email = str_replace(";",",",$email); $arr = explode(",",$email); $ret = false; foreach($arr as $e){ $ret = self::validateMail($e); if(!$ret) break; } return $ret; }else{ return self::validateMail($email); } } public function validateMail($email){ return eregi("^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$",$email); } } } ?>
Fatal error: Class 'MiO_Gest_ev' not found in /home4/namae/public_html/preview.mxco.it/confcommercio/_ext/scripts/class/miogest_templating.class.php on line 13