[ Index ] |
|
Code source de SPIP 1.8.3 |
1 <?php 2 3 /***************************************************************************\ 4 * SPIP, Systeme de publication pour l'internet * 5 * * 6 * Copyright (c) 2001-2005 * 7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * 8 * * 9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * 10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * 11 \***************************************************************************/ 12 13 14 // 15 // Ce fichier ne sera execute qu'une fois 16 if (defined("_ECRIRE_INC_RUBRIQUES")) return; 17 define("_ECRIRE_INC_RUBRIQUES", "1"); 18 19 20 // 21 // Recalculer l'ensemble des donnees associees a l'arborescence des rubriques 22 // (cette fonction est a appeler a chaque modification sur les rubriques) 23 // 24 function calculer_rubriques() { 25 if (!spip_get_lock("calcul_rubriques")) return; 26 27 // Mettre les compteurs a zero 28 // Attention, faute de SQL transactionnel on travaille sur 29 // des champs temporaires afin de ne pas casser la base 30 // pendant la demi seconde de recalculs 31 spip_query("UPDATE spip_rubriques 32 SET date_tmp='0000-00-00 00:00:00', statut_tmp='prive'"); 33 34 35 // 36 // Publier et dater les rubriques qui ont un article publie 37 // 38 39 // Afficher les articles post-dates ? 40 include_ecrire ('inc_meta.php3'); 41 $postdates = (lire_meta("post_dates") == "non") ? 42 "AND fille.date <= NOW()" : ''; 43 44 $r = spip_query("SELECT rub.id_rubrique AS id, max(fille.date) AS date_h 45 FROM spip_rubriques AS rub, spip_articles AS fille 46 WHERE rub.id_rubrique = fille.id_rubrique AND fille.statut='publie' 47 $postdates GROUP BY rub.id_rubrique"); 48 while ($row = spip_fetch_array($r)) 49 spip_query("UPDATE spip_rubriques 50 SET statut_tmp='publie', date_tmp='".$row['date_h']."' 51 WHERE id_rubrique=".$row['id']); 52 53 // Publier et dater les rubriques qui ont une breve publie 54 $r = spip_query("SELECT rub.id_rubrique AS id, 55 max(fille.date_heure) AS date_h 56 FROM spip_rubriques AS rub, spip_breves AS fille 57 WHERE rub.id_rubrique = fille.id_rubrique 58 AND rub.date_tmp <= fille.date_heure AND fille.statut='publie' 59 GROUP BY rub.id_rubrique"); 60 while ($row = spip_fetch_array($r)) 61 spip_query("UPDATE spip_rubriques 62 SET statut_tmp='publie', date_tmp='".$row['date']."' 63 WHERE id_rubrique=".$row['id']); 64 65 // Publier et dater les rubriques qui ont un site publie 66 $r = spip_query("SELECT rub.id_rubrique AS id, max(fille.date) AS date_h 67 FROM spip_rubriques AS rub, spip_syndic AS fille 68 WHERE rub.id_rubrique = fille.id_rubrique AND rub.date_tmp <= fille.date 69 AND fille.statut='publie' 70 GROUP BY rub.id_rubrique"); 71 while ($row = spip_fetch_array($r)) 72 spip_query("UPDATE spip_rubriques 73 SET statut_tmp='publie', date_tmp='".$row['date_h']."' 74 WHERE id_rubrique=".$row['id']); 75 76 // Publier et dater les rubriques qui ont un document publie 77 $r = spip_query("SELECT rub.id_rubrique AS id, max(fille.date) AS date_h 78 FROM spip_rubriques AS rub, spip_documents AS fille, 79 spip_documents_rubriques AS lien 80 WHERE rub.id_rubrique = lien.id_rubrique 81 AND lien.id_document=fille.id_document AND rub.date_tmp <= fille.date 82 GROUP BY rub.id_rubrique"); 83 while ($row = spip_fetch_array($r)) 84 spip_query("UPDATE spip_rubriques 85 SET statut_tmp='publie', date_tmp='".$row['date_h']."' 86 WHERE id_rubrique=".$row['id']); 87 88 89 // Les rubriques qui ont une rubrique fille plus recente 90 // on tourne tant que les donnees remontent vers la racine. 91 do { 92 $continuer = false; 93 $r = spip_query("SELECT rub.id_rubrique AS id, 94 max(fille.date_tmp) AS date_h 95 FROM spip_rubriques AS rub, spip_rubriques AS fille 96 WHERE rub.id_rubrique = fille.id_parent 97 AND (rub.date_tmp < fille.date_tmp OR rub.statut_tmp<>'publie') 98 AND fille.statut_tmp='publie' 99 GROUP BY rub.id_rubrique"); 100 while ($row = spip_fetch_array($r)) { 101 spip_query("UPDATE spip_rubriques 102 SET statut_tmp='publie', date_tmp='".$row['date_h']."' 103 WHERE id_rubrique=".$row['id']); 104 $continuer = true; 105 } 106 } while ($continuer); 107 108 // "Commit" des modifs 109 spip_query("UPDATE spip_rubriques SET date=date_tmp, statut=statut_tmp"); 110 111 112 // 113 // Propager les secteurs 114 // 115 116 // fixer les id_secteur des rubriques racines 117 spip_query("UPDATE spip_rubriques SET id_secteur=id_rubrique 118 WHERE id_parent=0"); 119 120 // reparer les rubriques qui n'ont pas l'id_secteur de leur parent 121 do { 122 $continuer = false; 123 $r = spip_query("SELECT fille.id_rubrique AS id, 124 maman.id_secteur AS secteur 125 FROM spip_rubriques AS fille, spip_rubriques AS maman 126 WHERE fille.id_parent = maman.id_rubrique 127 AND fille.id_secteur <> maman.id_secteur"); 128 while ($row = spip_fetch_array($r)) { 129 spip_query("UPDATE spip_rubriques 130 SET id_secteur=".$row['secteur']." WHERE id_rubrique=".$row['id']); 131 $continuer = true; 132 } 133 } while ($continuer); 134 135 // reparer les articles 136 $r = spip_query("SELECT fille.id_article AS id, maman.id_secteur AS secteur 137 FROM spip_articles AS fille, spip_rubriques AS maman 138 WHERE fille.id_rubrique = maman.id_rubrique 139 AND fille.id_secteur <> maman.id_secteur"); 140 while ($row = spip_fetch_array($r)) 141 spip_query("UPDATE spip_articles 142 SET id_secteur=".$row['secteur']." WHERE id_article=".$row['id']); 143 144 // reparer les sites 145 $r = spip_query("SELECT fille.id_syndic AS id, maman.id_secteur AS secteur 146 FROM spip_syndic AS fille, spip_rubriques AS maman 147 WHERE fille.id_rubrique = maman.id_rubrique 148 AND fille.id_secteur <> maman.id_secteur"); 149 while ($row = spip_fetch_array($r)) 150 spip_query("UPDATE spip_syndic SET id_secteur=".$row['secteur']." 151 WHERE id_syndic=".$row['id']); 152 153 // Sauver la date de la derniere mise a jour (pour menu_rubriques) 154 ecrire_meta("date_calcul_rubriques", date("U")); 155 ecrire_metas(); 156 157 } 158 159 // 160 // Calculer la langue des sous-rubriques et des articles 161 // 162 function calculer_langues_rubriques_etape() { 163 $s = spip_query ("SELECT fille.id_rubrique AS id_rubrique, mere.lang AS lang 164 FROM spip_rubriques AS fille, spip_rubriques AS mere 165 WHERE fille.id_parent = mere.id_rubrique 166 AND fille.langue_choisie != 'oui' AND mere.lang<>'' 167 AND mere.lang<>fille.lang"); 168 169 while ($row = spip_fetch_array($s)) { 170 $lang = addslashes($row['lang']); 171 $id_rubrique = $row['id_rubrique']; 172 $t = spip_query ("UPDATE spip_rubriques 173 SET lang='$lang', langue_choisie='non' WHERE id_rubrique=$id_rubrique"); 174 } 175 176 return $t; 177 } 178 179 function calculer_langues_rubriques() { 180 181 // rubriques (recursivite) 182 $langue_site = addslashes(lire_meta('langue_site')); 183 spip_query ("UPDATE spip_rubriques 184 SET lang='$langue_site', langue_choisie='non' 185 WHERE id_parent=0 AND langue_choisie != 'oui'"); 186 while (calculer_langues_rubriques_etape()); 187 188 // articles 189 $s = spip_query ("SELECT fils.id_article AS id_article, mere.lang AS lang 190 FROM spip_articles AS fils, spip_rubriques AS mere 191 WHERE fils.id_rubrique = mere.id_rubrique 192 AND fils.langue_choisie != 'oui' AND (fils.lang='' OR mere.lang<>'') 193 AND mere.lang<>fils.lang"); 194 while ($row = spip_fetch_array($s)) { 195 $lang = addslashes($row['lang']); 196 $id_article = $row['id_article']; 197 spip_query ("UPDATE spip_articles 198 SET lang='$lang', langue_choisie='non' WHERE id_article=$id_article"); 199 } 200 201 // breves 202 $s = spip_query ("SELECT fils.id_breve AS id_breve, mere.lang AS lang 203 FROM spip_breves AS fils, spip_rubriques AS mere 204 WHERE fils.id_rubrique = mere.id_rubrique 205 AND fils.langue_choisie != 'oui' AND (fils.lang='' OR mere.lang<>'') 206 AND mere.lang<>fils.lang"); 207 while ($row = spip_fetch_array($s)) { 208 $lang = addslashes($row['lang']); 209 $id_breve = $row['id_breve']; 210 spip_query ("UPDATE spip_breves 211 SET lang='$lang', langue_choisie='non' WHERE id_breve=$id_breve"); 212 } 213 214 if (lire_meta('multi_rubriques') == 'oui') { 215 // Ecrire meta liste langues utilisees dans rubriques 216 include_ecrire ('inc_meta.php3'); 217 $s = spip_query ("SELECT lang FROM spip_rubriques 218 WHERE lang != '' GROUP BY lang"); 219 while ($row = spip_fetch_array($s)) { 220 $lang_utilisees[] = $row['lang']; 221 } 222 if ($lang_utilisees) { 223 $lang_utilisees = join (',', $lang_utilisees); 224 ecrire_meta('langues_utilisees', $lang_utilisees); 225 } else { 226 ecrire_meta('langues_utilisees', ""); 227 } 228 } 229 } 230 231 232 function enfant_rub($collection){ 233 global $les_enfants, $couleur_foncee, $lang_dir; 234 global $spip_display, $spip_lang_left, $spip_lang_right, $spip_lang; 235 global $connect_id_auteur; 236 237 $query2 = "SELECT * FROM spip_rubriques WHERE id_parent='$collection' ORDER BY 0+titre,titre"; 238 $result2 = spip_query($query2); 239 240 241 if ($spip_display == 4) $les_enfants .= "<ul>"; 242 243 while($row=spip_fetch_array($result2)){ 244 $id_rubrique=$row['id_rubrique']; 245 $id_parent=$row['id_parent']; 246 $titre=$row['titre']; 247 248 $bouton_layer = bouton_block_invisible("enfants$id_rubrique"); 249 $les_sous_enfants = sous_enfant_rub($id_rubrique); 250 251 changer_typo($row['lang']); 252 $descriptif=propre($row['descriptif']); 253 254 if ($spip_display == 4) $les_enfants .= "<li>"; 255 $les_enfants.= "<div class='enfants'>"; 256 257 258 if ($id_parent == "0") $logo_rub = "secteur-24.gif"; 259 else $logo_rub = "rubrique-24.gif"; 260 261 $les_enfants .= debut_cadre_sous_rub($logo_rub, true); 262 263 if ($spip_display != 1 264 AND $spip_display!=4 265 AND lire_meta('image_process') != "non") { 266 include_ecrire ("inc_logos.php3"); 267 $logo = decrire_logo("rubon$id_rubrique"); 268 if ($logo) { 269 $fichier = $logo[0]; 270 $les_enfants .= "<div style='float: $spip_lang_right; margin-$spip_lang_right: -6px; margin-top: -6px;'>"; 271 $les_enfants .= reduire_image_logo(_DIR_IMG.$fichier, 48, 36); 272 $les_enfants .= "</div>"; 273 } 274 } 275 276 if (strlen($les_sous_enfants) > 0){ 277 $les_enfants .= $bouton_layer; 278 } 279 280 if (acces_restreint_rubrique($id_rubrique)) 281 $les_enfants .= http_img_pack("admin-12.gif", '', "width='12' height='12'", _T('image_administrer_rubrique')); 282 283 $les_enfants.= "<span dir='$lang_dir'><B><A HREF='naviguer.php3?id_rubrique=$id_rubrique'><font color='$couleur_foncee'>".typo($titre)."</font></A></B></span>"; 284 if (strlen($descriptif)) { 285 $les_enfants .= "<div class='verdana1'>$descriptif</div>"; 286 } 287 288 if ($spip_display != 4) $les_enfants .= $les_sous_enfants; 289 290 $les_enfants .= "<div style='clear:both;'></div>"; 291 292 293 $les_enfants .= fin_cadre_sous_rub(true); 294 $les_enfants .= "</div>"; 295 if ($spip_display == 4) $les_enfants .= "</li>"; 296 } 297 if ($spip_display == 4) $les_enfants .= "</ul>"; 298 299 changer_typo($spip_lang); # remettre la typo de l'interface pour la suite 300 } 301 302 function sous_enfant_rub($collection2){ 303 global $lang_dir, $spip_lang_dir, $spip_lang_left; 304 $query3 = "SELECT * FROM spip_rubriques WHERE id_parent='$collection2' ORDER BY 0+titre,titre"; 305 $result3 = spip_query($query3); 306 307 if (spip_num_rows($result3) > 0){ 308 $retour = debut_block_invisible("enfants$collection2")."\n<ul style='margin: 0px; padding: 0px; padding-top: 3px;'>\n"; 309 while($row=spip_fetch_array($result3)){ 310 $id_rubrique2=$row['id_rubrique']; 311 $id_parent2=$row['id_parent']; 312 $titre2=$row['titre']; 313 changer_typo($row['lang']); 314 315 $retour.="<div class='arial11' " . 316 http_style_background('rubrique-12.gif', "left center no-repeat; padding: 2px; padding-$spip_lang_left: 18px; margin-$spip_lang_left: 3px") . "><A HREF='naviguer.php3?id_rubrique=$id_rubrique2'><span dir='$lang_dir'>".typo($titre2)."</span></a></div>\n"; 317 } 318 $retour .= "</ul>\n\n".fin_block()."\n\n"; 319 } 320 321 return $retour; 322 } 323 324 function afficher_enfant_rub($id_rubrique, $afficher_bouton_creer=false) { 325 global $les_enfants, $spip_lang_right; 326 327 enfant_rub($id_rubrique); 328 329 $les_enfants2=substr($les_enfants,round(strlen($les_enfants)/2),strlen($les_enfants)); 330 if (strpos($les_enfants2,"<div class='enfants'>")){ 331 $les_enfants2=substr($les_enfants2,strpos($les_enfants2,"<div class='enfants'>"),strlen($les_enfants2)); 332 $les_enfants1=substr($les_enfants,0,strlen($les_enfants)-strlen($les_enfants2)); 333 }else{ 334 $les_enfants1=$les_enfants; 335 $les_enfants2=""; 336 } 337 338 339 // Afficher les sous-rubriques 340 echo "<div> </div>"; 341 echo "<table cellpadding=0 cellspacing=0 border=0 width='100%'>"; 342 echo "<tr><td valign='top' width=50% rowspan=2>$les_enfants1</td>"; 343 echo "<td width='20' rowspan='2'>", http_img_pack("rien.gif", ' ', "width='20'") ."</td>\n"; 344 echo "<td valign='top' width='50%'>$les_enfants2 "; 345 if (strlen($les_enfants2) > 0) echo "<p>"; 346 echo "</td></tr>"; 347 348 echo "<tr><td style='text-align: $spip_lang_right;' valign='bottom'><div align='$spip_lang_right'>"; 349 if ($afficher_bouton_creer) { 350 if ($id_rubrique == "0") icone(_T('icone_creer_rubrique'), "rubriques_edit.php3?new=oui&retour=nav", "secteur-24.gif", "creer.gif"); 351 else icone(_T('icone_creer_sous_rubrique'), "rubriques_edit.php3?new=oui&retour=nav&id_parent=$id_rubrique", "rubrique-24.gif", "creer.gif"); 352 echo "<p>"; 353 } 354 echo "</div></td></tr>"; 355 echo "</table><p />"; 356 ////// 357 358 359 } 360 361 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Thu Feb 22 22:27:47 2007 | par Balluche grâce à PHPXref 0.7 |