<?php
  //$url = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; echo $url ; die;
    $sitemap_multipla = false;
if (isset($filter_sitemap))
	{
  //  echo "multipla"; die;
     
     /********************* X LE SITEMAP MULTIPLE ***************************

     $sitemap_multipla = true;
     
     
     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");*/
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;}  

$sitemapIndex = "<sitemapindex xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>";
$max = MAXSITE;
$conta = 0;
$minutitimeout=60;
$n_sitemaps = $_GET['n2'];
//echo $n_sitemaps;
$url = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
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;
		}
	}
} else {
	$postData = array("crea"=>1);
	// Invia la richiesta asincrona
    asyncCurlRequest($url,$postData);	

	//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);
    
    foreach($files as $filename)
    {
      if( $cfile >= MAXSITEMAPS_NEW ){break;}  
      $sitemapIndex .= "<sitemap><loc>$fulldomain/$n_sitemaps/sitemaps/$filename</loc></sitemap>" ;
      $cfile +=1;   
    }  
    $sitemapIndex .="</sitemapindex>";
    echo $sitemapIndex;


}



//-------------------------------------------------------------------------------------------------
    
    /********************* 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;}  

$sitemapIndex = "<sitemapindex xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>";
$max = MAXSITE;
$conta = 0;
$minutitimeout=1;
$url = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
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;
		}
	} 
} else {
	$postData = array("crea"=>1);
	// Invia la richiesta asincrona
    asyncCurlRequest($url,$postData);

	//DISPLAY SITEMAP INDEX
//-------------------------------------------------------------------------------------------------
    $dir = $basesitemap;
    
    chdir($dir);
    $cfile=0;
    array_multisort(array_map('filemtime', ($files = glob("smap-$idsito-*.{xml}", GLOB_BRACE))), SORT_DESC, $files);
    
    foreach($files as $filename)
    {
      if( $cfile >= MAXSITEMAPS_NEW ){break;}  
      $sitemapIndex .= "<sitemap><loc>$fulldomain/sitemaps/$filename</loc></sitemap>" ;
      $cfile +=1;   
    }  
     $sitemapIndex .="</sitemapindex>";
    echo $sitemapIndex;

}


//-------------------------------------------------------------------------------------------------
    
    /********************* 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);
}