"); } // 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 = "\"$title\""; $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")); } ?>