ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
include "inc/conf.php";
//no lang specified, sitemap index (default)
if (empty($_GET["lang"])) {
$sql = "SELECT c.protocol, l.lang, cl.value AS domain
FROM lang l
CROSS JOIN config c
INNER JOIN config_lang cl ON (
cl.lang = l.lang
AND cl.key = 'domain'
AND cl.active = 1
)
WHERE l.active = 1";
$req = $dbh->query($sql);
$sitemaps = "";
while($lang = $req->fetch(PDO::FETCH_OBJ)) {
$sitemaps .= "{$lang->protocol}://{$lang->domain}/sitemap.{$lang->lang}.xml".date("Y-m-d")."" . PHP_EOL;
}
header("Content-type: application/xml; charset=UTF-8");
echo '
' . $sitemaps. '
';
}
else {//Sitemap, per lang
//Load website config
$sql = "SELECT c.protocol,
c.alias,
c.default_lang,
c.ved_api_key,
c.sitemap_max_entries,
c.destinations,
cl.value as `domain`
FROM config c
INNER JOIN config_lang cl ON (
cl.key = 'domain'
AND cl.lang = :lang
AND cl.active = 1
)
LIMIT 1";
$req = $dbh->prepare($sql);
$input = array(
"lang" => $_GET["lang"]
);
$req->execute($input);
$config = $req->fetch(PDO::FETCH_OBJ);
$langparam = ($_GET["lang"]==$config->default_lang)? "/" : "/{$_GET["lang"]}/";
$entries = 0;
$limitEntries = !empty($config->sitemap_max_entries);
if ($limitEntries) {
$config->sitemap_max_entries = intval($config->sitemap_max_entries, 10);
}
$urls = "";
//get pages from freepage content
$PARENT_BLOG_ID = 34; //id of /blog/ parent page, for blog posts
$sql = "SELECT pl.permalink, p.parent AS pp
FROM page_lang pl
INNER JOIN `page` p ON (
pl.id = p.id
AND p.active = 1
AND p.is_external = 0
AND p.is_virtual = 0
AND (p.destination_id IS NULL OR p.destination_id=0)
AND (p.parent != {$PARENT_BLOG_ID} OR p.parent IS NULL)
)
WHERE pl.lang = :lang
UNION
SELECT pl.permalink, p.parent AS pp
FROM page_lang pl
INNER JOIN `page` p ON (
pl.id = p.id
AND p.active = 1
AND p.is_external = 0
AND p.is_virtual = 0
AND (p.destination_id IS NULL OR p.destination_id=0)
AND p.parent = {$PARENT_BLOG_ID}
AND p.published IS NOT NULL AND p.published < NOW()
)
WHERE pl.lang = :lang ";
$req = $dbh->prepare($sql);
$req->execute($input); //input already defined up above with lang
while($item = $req->fetch(PDO::FETCH_OBJ)) {
if (!$limitEntries || ($limitEntries && $entries < $config->sitemap_max_entries)) {
if ($item->pp == $PARENT_BLOG_ID) {
$is_a_blog = "blogue/"; //Francais seulement actuellement
} else {
$is_a_blog = "";
}
$urls .= "{$config->protocol}://{$config->domain}{$langparam}{$is_a_blog}{$item->permalink}/monthly";
++$entries;
}
}
//if VED affiliate, start by fetching destinations pages from external API
/**
* Destinations en mode standard
*/
if (!empty($config->alias) && $config->destinations==1) {
$prefix = "destinations";
//Catégories
$aShortName = array(
"Sun destinations" => array("fr" =>"soleil", "en"=>"sun"),
"Theme holidays" => array("fr" =>"thematique","en"=>"holidays"),
"World destinations"=>array("fr" =>"monde", "en"=>"world")
);
$cats = "http://extapi.voyagesendirect.com/deinfo/{$config->alias}/{$config->ved_api_key}";
$cats_json = file_get_contents($cats);
$oCats = json_decode($cats_json);
$aCategories = array();
foreach($oCats->dest as $cat){
if(!isset($aCategories[$cat->{"nom_".$_GET["lang"]}])){
$oCat = new stdClass();
$test = "nom_";
$oCat->name = $cat->{"nom_{$_GET["lang"]}"};
$oCat->pic = "destinations_categories/{$aShortName[$cat->nom_en]["fr"]}.jpg";
$oCat->link = $aShortName[$cat->nom_en][$_GET["lang"]];
$aCategories[$cat->{"nom_".$_GET["lang"]}] = $oCat;
$catUrl ="{$config->protocol}://{$config->domain}{$langparam}{$prefix}/{$oCat->link}/";
$urls.= "{$catUrl}
monthly";
foreach($cat->listing as $subdest){
$subDestUrl = $catUrl.$subdest->{"link_{$_GET["lang"]}"}."/";
$urls.="{$subDestUrl}
monthly";
foreach($subdest->localities as $city){
$urls.="{$subDestUrl}".$city->{"link_{$_GET["lang"]}"}."/
monthly";
}
}
}
}
//info
$info = "http://extapi.voyagesendirect.com/deinfo/".$config->alias."/".$config->ved_api_key;
$info_json = file_get_contents($info);
$info = json_decode($info_json);
//sous-catégories
//$scats = "http://extapi.voyagesendirect.com/desubcat/".$config->alias."/".$catname."/".$App->lang."/".$App->config->ved_api_key;
//destinations
$url = "http://extapi.voyagesendirect.com/destlist/fr/{$config->alias}/{$config->ved_api_key}";
$json = file_get_contents($url);
$obj = json_decode($json);
}
/**
* Destinations en mode full
*/
if(!empty($config->alias) && $config->destinations==2){
$sql = "SELECT
c.permalink_{$_GET["lang"]} categorie,
country.permalink_{$_GET["lang"]} pays,
d.permalink_{$_GET["lang"]} dest,
h.permalink hotel
FROM destination_categories_assoc ca
JOIN destination_categories c ON c.id = ca.category_id
JOIN destination d ON ca.destination_id = d.id
LEFT JOIN destination country ON d.country = country.id AND country.active =1
LEFT JOIN destinations_hotel h ON h.destination_id = d.id AND h.active =1
WHERE c.active=1 AND d.active=1 ORDER BY categorie, pays, dest, hotel ";
$req = $dbh->query($sql);
$cats = array();
//$prefix = "destinations";
//ramasser les préfixes par niveau
$sql_px = "SELECT cl.value
FROM config_lang cl
WHERE cl.key LIKE '%destination_prefix%'
AND lang='{$_GET["lang"]}'
AND active=1
ORDER BY cl.key ";
$pxlevels = array();
$sql_px = $dbh->query($sql_px);
while($px = $sql_px->fetch(PDO::FETCH_OBJ)){
$pxlevels[]=$px;
}
if(!empty($pxlevels[2]->value)){
$pxlevels[2]->value.="-";
}
while($link = $req->fetch(PDO::FETCH_OBJ)){
if(!isset($cats[$link->categorie])){
$cats[$link->categorie] = $link->categorie;
$urls .= "{$config->protocol}://{$config->domain}{$langparam}{$link->categorie}/
monthly";
}
$durl= "{$config->protocol}://{$config->domain}{$langparam}{$link->categorie}/";
//si la destination n'a pas de pays, c'est qu'elle est elle-même un pays
if(is_null($link->pays)){
$durl.="{$pxlevels[0]->value}-{$link->dest}/";
} else {
$durl.="{$pxlevels[0]->value}-{$link->pays}/";
}
//si on a un pays et une destination, il s'agit d'une ville
if(!is_null($link->pays) && !is_null($link->dest)){
$durl.="{$pxlevels[1]->value}-{$link->dest}/";
}
if(!is_null($link->hotel)){
if(!empty($pxlevels[2]->value)){
$durl.="{$pxlevels[2]->value}-";
}
$durl.="{$link->hotel}/";
}
$durl.="monthly";
$urls.=$durl;
}
}
header("Content-type: application/xml; charset=UTF-8");
echo '' . $urls . '';
return true;
}