//
include_once "../common/core/init.php";
//
include_once FILESYSTEM_PATH."common/library/input.php"; // nettoyage des saisies utilisateur
include_once FILESYSTEM_PATH."admin/config_sitefinal.php"; // Infos de CNX à la base locale
include_once FILESYSTEM_PATH."scripts/config_user.php"; // Infos de CNX au site central
include_once FILESYSTEM_PATH."scripts/boite_outils.php";
if (DEBUG) {
echo("MODE DEBUG ON
");
}
// toujours nettoyer les entrées
$REF = nettoie_user($_GET['ref']);
//$aref=explode('_',$REF);
//$REF=$aref[0];
if (DEBUG) { echo("annonce ref = $REF
");}
if (file_exists("./$REF.html"))
{ // Si fichier existant, on l'affiche tel quel
readfile("./$REF.html");
}
else
{
$REF=strtolower($REF);
// Au cas ou le nom d'un fichier ai un sfx, mais qu'on appelle par la ref toute seule (rare)
$ref2=getRefComplete($REF);
if (file_exists("./$ref2.html"))
{
readfile("./$ref2.html");
}
else
{
// reformater ref (eventuel nom d'annonce en suffixe)
$pos=strpos ($REF,"_");
if ($pos===false)
{
// ras
}
else
{
$REF = substr ( $REF, 0, $pos);
}
// si ref existe dans la base archive locale, on affiche
if (!(checkArchiveAndPrint($REF)))
{
// sinon, on essaye de demander au serveur distant si il connait.
// (répond si appartient à ce site, pas sinon)
// si oui, on affiche avec un tmpl spécifique.
if (!(checkMainServerAndPrint($REF)))
{
// pas trouvé, afficher erreur.
userMessage('Cette référence est inconnue.Retour', "Erreur");
}
}
}
}
// Recherche dnas la base *locale* des annonces archivées si l'annonce existe.
// Si oui, l'affiche et renvoie TRUE
// Si non, renvoie FALSE
function checkArchiveAndPrint($ref) {
global $CONFIG;
$con=new ThhMySqlConnect($CONFIG['db'],false); // cnx base locale
$sql="select * from annonces_archives where ref_annonce ='$ref'";
$con->onError = "silent";
$line=@$con->queryrow($sql,MYSQL_ASSOC);
if ($line['id_annonce'] == '') { // pas trouvé d'annonce
if (DEBUG) { echo("ref $ref non présente dans les archives");}
$con->close();
return false;
} else {
if (DEBUG) { echo("ref $ref dans les archives");}
return printArchived($con, $line);
}
@$con->close();
}
function getRefComplete($ref) {
global $CONFIG;
$con=new ThhMySqlConnect($CONFIG['db'],false); // cnx base locale
$sql="select titre_annonce from annonces where ref_annonce= '$ref'";
$con->onError = "silent";
$line=$con->queryrow($sql,MYSQL_ASSOC);
if ($line['titre_annonce'] == '') { // pas trouvé d'annonce
return FALSE;
} else {
return $ref."_".makeCoolNameC($line['titre_annonce']);
;
}
$con->close();
}
// Affiche l'annonce archivée à partir d'un template spécifique
// (indique annonce périmée en gros, plus les liens de visu des coordonnées, lien vers dépôt d'annonce +texte spécifique.
function printArchived(&$con, $contentHash) {
return printAnnonce($con, $contentHash, true);
}
function printAnnonce(&$con, $contentHash, $archive) {
global $CONFIGSITE;
global $CONFIG;
global $modules;
require_once "../scripts/config_import.php";
// TODO : utiliser TBS maintenant
//require_once "../common/library/template.inc";
require_once "../scripts/boite_outils.php";
// echo("
TODO JB
\$contentHash contient toutes les infos de l'annonce. ''plus qu'à'' afficher sans requète supplémentaire.
");
// echo("
(ok, une pour afficher la région en entier peut être !)
");
//myPrint_r($contentHash);
// go !
$TBS = new clsTinyButStrongExtension;
if ($archive)
{
$templateName = $CONFIGSITE['tmplAnnonceArchive'];
}
else
{
$templateName = $CONFIGSITE['tmplAnnonceDetailServeurCentral'];
}
$TBS->LoadTemplate($CONFIG['tmplDir'].'/'.$templateName);
// attention aux correspondance cat locales / globales
// pour archive, RAS, mais pour annonces from base centrale, todo V2
if ($archive)
{
$catLocal=$contentHash['cat_annonce'];
//lecture des infos de la catégorie
$sql="SELECT id_categorie,bg_categorie,bd_categorie,title_categorie,niv_categorie,nom_categorie,description_categorie,feuille_categorie,noeud_categorie,logo_categorie,chemin_categorie,chemin_categorie_texte,couleur_categorie FROM categorie WHERE id_categorie=$catLocal";
$ligne=$con->queryRow($sql);
// chemin
$path="";
$title_categorie=$ligne['title_categorie'];
$TBS->MergeField('title_categorie',$title_categorie);
$TBS->MergeField('chemin',doPath($ligne['chemin_categorie_texte'], $path));
} else {
$TBS->MergeField('chemin','');
}
$title="";
// éléments perso de l'annonce
// reset des params
$myParamPerso = array ();
// alimenté avec ref de l'annonce
$myParamPerso['ref'] = $contentHash['ref_annonce'];
// appel du hook
$modules->call_hook('params_perso_annonce',$myParamPerso);
// le tableau est rempli.
$myref='';
foreach ($contentHash as $k=>$v)
{
switch ($k)
{
case "region_diffusion":
$TBS->MergeField("region_diffusion",MygetRegionCodes($con, $v));
break;
case "pays_diffusion":
$TBS->MergeField("pays_diffusion",MygetCountryCodes($con, $v));
break;
case "titre_annonce":
$title=makeItCoolForFile($v);
$TBS->MergeField($k,$title);
// titre_annonce_full à calculer et remplacer
$titleFull = @ $myParamPerso['titre_annonce_full'];
if ($titleFull == '') {
$titleFull = $title;
}
$TBS->MergeField('titre_annonce_full',$titleFull);
// metadescription
$metadescription = @ $myParamPerso['metadescription'];
if ($metadescription == '') {
$metadescription = $title;
}
$TBS->MergeField('metadescription', $metadescription);
$TBS->MergeField('metakeywords',@ $myParamPerso['metakeywords']);
break;
case "date_saisie_annonce":
$TBS->MergeField($k,date("d/m/Y",$v));
break;
case "date_modif_annonce":
$TBS->MergeField($k,date("d/m/Y",$v));
break;
case "date_expir_annonce":
$TBS->MergeField($k,date("d/m/Y",$v));
break;
default:
$TBS->MergeField($k,makeItCoolForFile($v));
if ($k=='ref_annonce') {
$myref=$v;
}
break;
}
}
$cpt=0;
if (!$archive)
{
// insérer les photos
$sql="SELECT url_photo,url_miniature FROM photo WHERE ref_annonce='" . $contentHash['ref_annonce'] . "'";
$ligne=$con->query($sql);
$res = $con->result;
$array_img = array ();
while ($ligne=$con->fetchnextrow($res))
{
$maxi=$ligne['url_photo'];
$mini=$ligne['url_miniature'];
$infosImage = getimagesize($mini);
$largeur = $infosImage[0];
$hauteur = $infosImage[1];
if ($CONFIG['switchCentralToMedia']) {
$mini = ereg_replace(".*".$CONFIG['centralForMediaHost'], "http://".$CONFIG['mediaForCentralHost'], $mini);
$maxi = ereg_replace(".*".$CONFIG['centralForMediaHost'], "http://".$CONFIG['mediaForCentralHost'], $maxi);
}
$img = "
";
$infosImage = getimagesize($maxi);
$largeur = $infosImage[0];
$hauteur = $infosImage[1];
$array_img[] = array (
"image" => "$img",
"bigimage" => "$maxi",
"w" => "$largeur",
"h" => "$hauteur"
);
}
$TBS->MergeBlock('blkimg', $array_img);
}
$TBS->show(TBS_NOTHING);
echo($TBS->Source);
if ($archive) {
logVisuArchive($myref);
} else {
logVisuMain($myref);
}
return true;
}
/*
* Construit le "chemin" sous forme de liens
* Elabore le chemin (arbo)
*/
function doPath($cheminCat, &$path, $table="")
{
global $CONFIGSITE;
$tmpArr=explode(">",$cheminCat);
$tmp=array_shift($tmpArr);
$cpt=count($tmpArr);
$cheminRet="";
$sep="";
//$path="";
$root_site=$CONFIGSITE['root_site'];
for ($i=0; $i<$cpt; ++$i)
{
$tmpCat=makeCoolNameC($tmpArr[$i]);
if ($CONFIGSITE['catPageNameIsIndex'])
{
$cheminRet.=$sep."" . $tmpArr[$i] . "";
}
else
{
$cheminRet.=$sep."" . $tmpArr[$i] . "";
}
$path.= $tmpCat . "/";
$sep=">";
}
if ($table=="annonces_archives")
{
// le chemin en db comprends la racine annonces/
// on travaille ici sur les archives
// attention -> annonces et archives sont donc des mots presques réservés, sauf si suffixe ou prefixe
$path=preg_replace("/^annonces\//","archives/", $path, 1);
$cheminRet=preg_replace("/\/annonces\//","/archives/", $cheminRet, 1);
} else {
if ($CONFIGSITE['repAnnonces'] =='') {
$path= preg_replace("/^annonces\//", "", $path);
}
}
return "$cheminRet";
}
function MygetCountryCodes(&$con, $code)
{
$sql="SELECT nom_pays FROM pays WHERE code_pays='$code'";
$ligne=$con->query($sql);
$res = $con->result;
$ligne=$con->fetchnextrow($res);
return $ligne['nom_pays'];
}
function MygetRegionCodes(&$con, $code)
{
$sql="SELECT nom_region FROM region_france WHERE code_region='$code'";
$ligne=$con->query($sql);
$res = $con->result;
$ligne=$con->fetchnextrow($res);
return $ligne['nom_region'];
}
//
//
function checkMainServerAndPrint($ref) {
global $CONFIG;
$ip= $_SERVER['REMOTE_ADDR'];
// ref a déja été nettoyé.
$url=$CONFIG['centralServerActionUrl']."?site=".$CONFIG['codeSite']."&action=G&annonce=".urlencode($ref)."&ip=$ip";
if (DEBUG) echo("URL: $url
");
// Appel du serveur central
$result = recupere_page_http($url); // cf allow_url_fopen boolean dans phpini si marche pas : http://fr2.php.net/manual/en/ref.filesystem.php#ini.allow-url-fopen
if (DEBUG) echo("Result: $result
");
// cherche KO en fin de chaine
if (ereg("KO$", $result))
{
return(FALSE);
} else {
$result=unserialize($result);
if (DEBUG) {
echo("On a ici tous les champs de l'annonce, reste à les afficher :
\$result : ");
// Attention , on ne peut pas indiquer la catégorie ! (cat = celles du serveur central)
// sauf à re-appliquer l'algo de correspondance (? V2 ?)
print_r($result);
echo("
");
}
$con=new ThhMySqlConnect($CONFIG['db'],false); // cnx base locale
return printAnnonce($con, $result, false);
}
}
function userMessage($msg,$title='') {
global $CONFIG;
$TBS = new clsTinyButStrongExtension;
$TBS->LoadTemplate($CONFIG['tmplDir'].'/'."pge_genericmsg.tmpl.html");
$TBS->MergeField("msg" , $msg);
$TBS->MergeField("title" , $title);
$TBS->show(TBS_NOTHING);
echo($TBS->Source);
}
function logVisuArchive($ref) {
global $CONFIG;
$ip = $_SERVER['REMOTE_ADDR'];
$url = $CONFIG['centralServerActionUrl'] . "?site=" . $CONFIG['codeSite'] . "&action=vp&annonce=" . urlencode($ref) . "&ip=$ip&code=";
// juste encoder ref et code (saisies utilisateur) pour éviter cross scripting
if (DEBUG)
echo ("URL: $url
");
// Appel du serveur central
$result = trim(recupere_page_http($url)); // cf allow_url_fopen boolean dans phpini si marche pas : http://fr2.php.net/manual/en/ref.filesystem.php#ini.allow-url-fopen
if (DEBUG)
echo ("Result : $result
");
}
function logVisuMain($ref) {
global $CONFIG;
$ip = $_SERVER['REMOTE_ADDR'];
$url = $CONFIG['centralServerActionUrl'] . "?site=" . $CONFIG['codeSite'] . "&action=vm&annonce=" . urlencode($ref) . "&ip=$ip&code=";
// juste encoder ref et code (saisies utilisateur) pour éviter cross scripting
if (DEBUG)
echo ("URL: $url
");
// Appel du serveur central
$result = trim(recupere_page_http($url)); // cf allow_url_fopen boolean dans phpini si marche pas : http://fr2.php.net/manual/en/ref.filesystem.php#ini.allow-url-fopen
if (DEBUG)
echo ("Result : $result
");
}
/*
* menus, header ...
*/
function doPageElements(&$stpl, &$tpl)
{
global $CONFIGSITE;
require_once "../scripts/config_import.php";
// header
$stpl->set_file("header",$CONFIGSITE['tmplHeader']);
$tpl->set_var("header",$stpl->parse("affichage","header"));
// menu haut
$stpl->set_file("topmenu",$CONFIGSITE['tmplTopMenu']);
$tpl->set_var("topmenu",$stpl->parse("affichage","topmenu"));
// menu gauche
$stpl->set_file("leftmenu",$CONFIGSITE['tmplLeftMenu']);
$tpl->set_var("leftmenu",$stpl->parse("affichage","leftmenu"));
// menu droite
$stpl->set_file("rightmenu",$CONFIGSITE['tmplRightMenu']);
$tpl->set_var("rightmenu",$stpl->parse("affichage","rightmenu"));
// pied
$stpl->set_file("foot",$CONFIGSITE['tmplFoot']);
$tpl->set_var("foot",$stpl->parse("affichage","foot"));
}
?>