<?php
$sitemap_multipla = false;
if (isset($filter_sitemap)) {
	ini_set("memory_limit", "3048M");
	ini_set('max_execution_time', 0); // 0 = Unlimited
	header ("Content-Type:text/xml");
	$DBconn = dbConnection();

	// Caricamento SITO
	//////////////////////////////////////////////////////////////////////////////////////////   
	$res = db_query("select id,fulldomain from siti where sito='".$_SERVER['SERVER_NAME']."'");
	$row = db_fetch($res);
	$idsito = $row["id"];
	$fulldomain = $row["fulldomain"];
	$nrecord = MAXSITEMAPS_NEW * $limitesitemap;
	$nmaps = floor($nrecord / $limitesitemap);
	
	if ($nmaps>=MAXSITEMAPS_NEW){$nmaps=MAXSITEMAPS_NEW;}  
	
	$max = MAXSITE;
	$conta = 0;
	$minutitimeout=60;
	$n_sitemaps = $_GET['n2'];
	//echo $n_sitemaps;
	if(isset($_POST['crea'])){
	for ($x = 0; $x <= $nmaps -1; $x++) {
		if ($conta<$nmaps){
			createSingleSitemap_multi($n_sitemaps,$x,$recordxpagina,$limitesitemap,$basesitemap,$idsito,$fulldomain,$minutitimeout,$config_array);
		  $conta +=1;
		}
	}
	} 
	
	//DISPLAY SITEMAP INDEX
	//-------------------------------------------------------------------------------------------------
		$dir = $basesitemap . ''.$n_sitemaps . '/';
	   //  echo $dir; die;
		chdir($dir);
		$cfile=0;
		array_multisort(array_map('filemtime', ($files = glob("smap-$idsito-*.{xml}", GLOB_BRACE))), SORT_DESC, $files);
		$sitemapIndex = "<sitemapindex xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>";
		foreach($files as $filename)
		{
		  if( $cfile >= MAXSITEMAPS_NEW ){break;}  
		  $sitemapIndex .= "<sitemap><loc>$fulldomain/$n_sitemaps/sitemaps/$filename</loc></sitemap>" ;
		  $cfile +=1;   
		}  
		$sitemapIndex = $sitemapIndex ."</sitemapindex>";
	  
		$url = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
		
		if ($_SERVER['REQUEST_METHOD'] === 'GET') {
			 $sitemapIndex = str_replace(array("\r", "\n"), '', $sitemapIndex);
			  echo $sitemapIndex;
			$postData = array("crea"=>1);
		// Invia la richiesta asincrona
			asyncCurlRequest($url,$postData);
		}
	
	//-------------------------------------------------------------------------------------------------
		
		/********************* FINE X LE SITEMAP MULTIPLE ***************************/
     
} else {
    //   echo "singola"; die ;
      /*********************  X LE SITEMAP SINGOLE ***************************/  
       
//ini_set('display_errors', 1);
//ini_set('display_startup_errors', 1);
//error_reporting(E_ALL);

header ("Content-Type:text/xml");
include("./include/config.php");
include("./include/config_overwrite.php");
include("./include/dbconn.php");
include("./include/functions.php");
include("./include/setup.php");
ini_set("memory_limit", "3048M");
ini_set('max_execution_time', 0); // 0 = Unlimited

$DBconn = dbConnection();

// Caricamento SITO
//////////////////////////////////////////////////////////////////////////////////////////   
$res = db_query("select id,fulldomain from siti where sito='".$_SERVER['SERVER_NAME']."'");
$row = db_fetch($res);
$idsito = $row["id"];
$fulldomain = $row["fulldomain"];
$nrecord = MAXSITEMAPS_NEW * $limitesitemap;
$nmaps = floor($nrecord / $limitesitemap);

if ($nmaps>=MAXSITEMAPS_NEW){$nmaps=MAXSITEMAPS_NEW;}  
$max = MAXSITE;
$conta = 0;
$minutitimeout=1;
if(isset($_POST['crea'])){
for ($x = 0; $x <= $nmaps -1; $x++) {
    if ($conta<$nmaps){
        createSingleSitemap($x,$recordxpagina,$limitesitemap,$basesitemap,$idsito,$fulldomain,$minutitimeout,$config_array);
      $conta +=1;
    }
} 
}


//DISPLAY SITEMAP INDEX
//-------------------------------------------------------------------------------------------------
    $dir = $basesitemap;
    
    chdir($dir);
    $cfile=0;
    array_multisort(array_map('filemtime', ($files = glob("smap-$idsito-*.{xml}", GLOB_BRACE))), SORT_DESC, $files);

    $sitemapIndex = "<sitemapindex xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>";

    foreach($files as $filename)
    {
      if( $cfile >= MAXSITEMAPS_NEW ){break;}  
      $sitemapIndex .= "<sitemap><loc>$fulldomain/sitemaps/$filename</loc></sitemap>" ;
      $cfile +=1;   
    }  
    
    $url = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

	if ($_SERVER['REQUEST_METHOD'] === 'GET') {
		echo $sitemapIndex."</sitemapindex>";
		$postData = array("crea"=>1);
		unset($_POST);
	// Invia la richiesta asincrona
		asyncCurlRequest($url,$postData);
	}

// Invia la richiesta asincrona
	//$postData = array("crea"=>1);
    //asyncCurlRequest($url,$postData);
//-------------------------------------------------------------------------------------------------
    
    /********************* FINE SITEMAP SINGOLE ***************************/  
    
    }	    
    


function createSingleSitemap($pagina,$recordxpagina,$limite,$basesitemap,$idsito,$fulldomain,$minutitimeout,$config_array){
  $filename = "./sitemaps/" . "smap-".$idsito."-".$pagina.".xml";
  $filtrodata = '2023-03-01'; 
  if (file_exists($filename) && (time() - filemtime($filename) <= 1 * $minutitimeout)){
    //echo "esiste ed è recente non sovrascrivo!";
 } 
 else {
    $cpagina = ($pagina) * $limite;
    $conta = 0;
    $srss = "<?xml version='1.0' encoding='UTF-8'?><urlset xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:image='http://www.google.com/schemas/sitemap-image/1.1' xsi:schemaLocation='http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd' xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>";
	//$sql = "SELECT l.* FROM (SELECT id FROM titoli where idsito=$idsito ORDER BY id desc limit 1000) o JOIN titoli l ON l.id = o.id ORDER BY id desc limit $cpagina, $limite;";
	//$sql = "SELECT * FROM titoli where idsito=$idsito ORDER BY id desc limit $cpagina,$limite;";
	//$sql = "SELECT t.* FROM (SELECT id FROM titoli WHERE idsito=$idsito AND data > '$filtrodata' ORDER BY data DESC LIMIT $cpagina,$limite ) a LEFT JOIN titoli t ON t.id = a.id";

	//$res = db_query("SELECT * FROM titoli WHERE id > 0 AND idsito=:idsito AND data > :filtrodata ORDER BY data DESC LIMIT $cpagina,$limite", array(':idsito'=> $idsito,':filtrodata' => $filtrodata));
	eval("\$res = db_query(".$config_array['query_sitemap_index1'].");");
        while ($row=db_fetch($res)) {
            $srss .= "<url><loc>".$fulldomain."/".$config_array['pathArticolo']."/".fixurl2($row['titolo'])."/</loc></url>";
			db_query("UPDATE titoli SET xml=1 WHERE id=:id",array(':id'=>$row['id']));
            $conta +=1;
        }    

    $srss .= "</urlset>";
     
    if ($conta>=1) {
        $sitemapfile = fopen($filename, "w") or die("Unable to open file!");
        fwrite($sitemapfile, $srss);
        fclose($sitemapfile);
    } 
    
    $srss="";

    }
}

function createSingleSitemap_multi($n_sitemaps,$pagina,$recordxpagina,$limite,$basesitemap,$idsito,$fulldomain,$minutitimeout,$config_array){
	$folder_1 = "./sitemaps/" . $n_sitemaps ;
	if (!file_exists($folder_1)) {
    mkdir($folder_1, 0777, true);
}
  $filename = "./sitemaps/"  . $n_sitemaps . '/' . "smap-".$idsito."-".$pagina.".xml";
  $filtrodata = date('Y-m-d',strtotime("-3 months", time())); 
  if (file_exists($filename) && (time() - filemtime($filename) <= 60 * $minutitimeout)){
    //echo "esiste ed è recente non sovrascrivo!";
  } 
 else {
    $cpagina = ($pagina) * $limite;
    $conta = 0;
    $srss = "<?xml version='1.0' encoding='UTF-8'?><urlset xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:image='http://www.google.com/schemas/sitemap-image/1.1' xsi:schemaLocation='http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd' xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>";
	//$sql = "SELECT l.* FROM (SELECT id FROM titoli where idsito=$idsito ORDER BY id desc limit 1000) o JOIN titoli l ON l.id = o.id ORDER BY id desc limit $cpagina, $limite;";
	//$sql = "SELECT * FROM titoli where idsito=$idsito ORDER BY id desc limit $cpagina,$limite;";
	//$sql = "SELECT t.* FROM (SELECT id FROM titoli WHERE idsito=$idsito and idsitemap=$n_sitemaps AND data > '$filtrodata' ORDER BY id DESC LIMIT $cpagina,$limite ) a LEFT JOIN titoli t ON t.id = a.id";

	//$res = db_query("SELECT * FROM titoli WHERE id > 0 and idsito=:idsito and idsitemap=:n_sitemaps AND data > :filtrodata ORDER BY id DESC LIMIT $cpagina,$limite", array(':idsito'=> $idsito,':n_sitemaps' => $n_sitemaps,':filtrodata'=>$filtrodata));
	eval("\$res = db_query(".$config_array['query_sitemap_index2'].");");
    //$res = db_query($sql);  
        while ($row=db_fetch($res)) {
			$titolo = $row['titolo'] ;
            $srss .= "<url><loc>".$fulldomain.'/'.$n_sitemaps."/".$config_array['pathArticolo']."/".fixurl2($titolo)."/</loc></url>";
		//	db_query("UPDATE titoli SET xml=1 WHERE id=:id",array(':id'=>$row['id']));
            $conta +=1;
        }    

    $srss .= "</urlset>";
     
    if ($conta>=1) {
        $sitemapfile = fopen($filename, "w") or die("Unable to open file!");
        fwrite($sitemapfile, $srss);
        fclose($sitemapfile);
    } 
    
    $srss="";

  }
}

function asyncCurlRequest($url,$postData) {
    // Inizializzazione della sessione cURL
    $ch = curl_init();

    // Imposta l'URL
    curl_setopt($ch, CURLOPT_URL, $url);
    
    // Imposta la richiesta come POST (se ci sono dati da inviare)
    if (!empty($postData)) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
    }

    // Impostazioni per la richiesta asincrona:
    // Imposta un timeout minimo per la connessione (evita di aspettare la risposta)
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); // Timeout della connessione di 1 secondo
    curl_setopt($ch, CURLOPT_TIMEOUT, 1); // Timeout totale di 1 secondo

    // Non aspettare o processare il contenuto della risposta
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
    curl_setopt($ch, CURLOPT_HEADER, false);
    
    // Esegui la richiesta cURL
    curl_exec($ch);

    // Chiudi la sessione cURL
    curl_close($ch);
}