[ Index ] |
|
Code source de SPIP 1.9.2c |
1 <?php 2 3 /***************************************************************************\ 4 * SPIP, Systeme de publication pour l'internet * 5 * * 6 * Copyright (c) 2001-2007 * 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 if (!defined("_ECRIRE_INC_VERSION")) return; 14 15 // 16 // Recalculer l'ensemble des donnees associees a l'arborescence des rubriques 17 // (cette fonction est a appeler a chaque modification sur les rubriques) 18 // 19 // http://doc.spip.org/@calculer_rubriques 20 function calculer_rubriques() { 21 if (!spip_get_lock("calcul_rubriques")) return; 22 23 // Mettre les compteurs a zero 24 // Attention, faute de SQL transactionnel on travaille sur 25 // des champs temporaires afin de ne pas casser la base 26 // pendant la demi seconde de recalculs 27 spip_query("UPDATE spip_rubriques 28 SET date_tmp='0000-00-00 00:00:00', statut_tmp='prive'"); 29 30 31 // 32 // Publier et dater les rubriques qui ont un article publie 33 // 34 35 // Afficher les articles post-dates ? 36 include_spip('inc/meta'); 37 $postdates = ($GLOBALS['meta']["post_dates"] == "non") ? 38 "AND fille.date <= NOW()" : ''; 39 40 $r = spip_query("SELECT rub.id_rubrique AS id, max(fille.date) AS date_h 41 FROM spip_rubriques AS rub, spip_articles AS fille 42 WHERE rub.id_rubrique = fille.id_rubrique AND fille.statut='publie' 43 $postdates GROUP BY rub.id_rubrique"); 44 while ($row = spip_fetch_array($r)) 45 spip_query("UPDATE spip_rubriques 46 SET statut_tmp='publie', date_tmp='".$row['date_h']."' 47 WHERE id_rubrique=".$row['id']); 48 49 // Publier et dater les rubriques qui ont une breve publie 50 $r = spip_query("SELECT rub.id_rubrique AS id, 51 max(fille.date_heure) AS date_h 52 FROM spip_rubriques AS rub, spip_breves AS fille 53 WHERE rub.id_rubrique = fille.id_rubrique 54 AND rub.date_tmp <= fille.date_heure AND fille.statut='publie' 55 GROUP BY rub.id_rubrique"); 56 while ($row = spip_fetch_array($r)) 57 spip_query("UPDATE spip_rubriques 58 SET statut_tmp='publie', date_tmp='".$row['date_h']."' 59 WHERE id_rubrique=".$row['id']); 60 61 // Publier et dater les rubriques qui ont un site publie 62 $r = spip_query("SELECT rub.id_rubrique AS id, max(fille.date) AS date_h 63 FROM spip_rubriques AS rub, spip_syndic AS fille 64 WHERE rub.id_rubrique = fille.id_rubrique AND rub.date_tmp <= fille.date 65 AND fille.statut='publie' 66 GROUP BY rub.id_rubrique"); 67 while ($row = spip_fetch_array($r)) 68 spip_query("UPDATE spip_rubriques 69 SET statut_tmp='publie', date_tmp='".$row['date_h']."' 70 WHERE id_rubrique=".$row['id']); 71 72 // Publier et dater les rubriques qui ont un document publie 73 $r = spip_query("SELECT rub.id_rubrique AS id, max(fille.date) AS date_h 74 FROM spip_rubriques AS rub, spip_documents AS fille, 75 spip_documents_rubriques AS lien 76 WHERE rub.id_rubrique = lien.id_rubrique 77 AND lien.id_document=fille.id_document AND rub.date_tmp <= fille.date 78 $postdates GROUP BY rub.id_rubrique"); 79 while ($row = spip_fetch_array($r)) 80 spip_query("UPDATE spip_rubriques 81 SET statut_tmp='publie', date_tmp='".$row['date_h']."' 82 WHERE id_rubrique=".$row['id']); 83 84 85 // Les rubriques qui ont une rubrique fille plus recente 86 // on tourne tant que les donnees remontent vers la racine. 87 do { 88 $continuer = false; 89 $r = spip_query("SELECT rub.id_rubrique AS id, 90 max(fille.date_tmp) AS date_h 91 FROM spip_rubriques AS rub, spip_rubriques AS fille 92 WHERE rub.id_rubrique = fille.id_parent 93 AND (rub.date_tmp < fille.date_tmp OR rub.statut_tmp<>'publie') 94 AND fille.statut_tmp='publie' 95 GROUP BY rub.id_rubrique"); 96 while ($row = spip_fetch_array($r)) { 97 spip_query("UPDATE spip_rubriques 98 SET statut_tmp='publie', date_tmp='".$row['date_h']."' 99 WHERE id_rubrique=".$row['id']); 100 $continuer = true; 101 } 102 } while ($continuer); 103 104 // point d'entree pour permettre a des plugins de gerer le statut 105 // autrement (par ex: toute rubrique est publiee des sa creation) 106 // Ce pipeline fait ce qu'il veut, mais s'il touche aux statuts/dates 107 // c'est statut_tmp/date_tmp qu'il doit modifier 108 pipeline('calculer_rubriques', null); 109 110 // "Commit" des modifs 111 spip_query("UPDATE spip_rubriques SET date=date_tmp, statut=statut_tmp"); 112 // Sauver la date de la derniere mise a jour (pour menu_rubriques) 113 ecrire_meta("date_calcul_rubriques", date("U")); 114 ecrire_metas(); 115 116 // Comme ce calcul est fait apres chaque publication on en profite 117 // pour recalculer les langues utilisees sur le site 118 include_spip('inc/lang'); 119 calculer_langues_utilisees(); 120 } 121 122 // http://doc.spip.org/@propager_les_secteurs 123 function propager_les_secteurs() 124 { 125 // fixer les id_secteur des rubriques racines 126 spip_query("UPDATE spip_rubriques SET id_secteur=id_rubrique 127 WHERE id_parent=0"); 128 129 // reparer les rubriques qui n'ont pas l'id_secteur de leur parent 130 do { 131 $continuer = false; 132 $r = spip_query("SELECT fille.id_rubrique AS id, 133 maman.id_secteur AS secteur 134 FROM spip_rubriques AS fille, spip_rubriques AS maman 135 WHERE fille.id_parent = maman.id_rubrique 136 AND fille.id_secteur <> maman.id_secteur"); 137 while ($row = spip_fetch_array($r)) { 138 spip_query("UPDATE spip_rubriques 139 SET id_secteur=".$row['secteur']." WHERE id_rubrique=".$row['id']); 140 $continuer = true; 141 } 142 } while ($continuer); 143 144 // reparer les articles 145 $r = spip_query("SELECT fille.id_article AS id, maman.id_secteur AS secteur 146 FROM spip_articles 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_log("change " . $row['id'] . " secteur " . $row['secteur']); 151 spip_query("UPDATE spip_articles 152 SET id_secteur=".$row['secteur']." WHERE id_article=".$row['id']); 153 } 154 // reparer les sites 155 $r = spip_query("SELECT fille.id_syndic AS id, maman.id_secteur AS secteur 156 FROM spip_syndic AS fille, spip_rubriques AS maman 157 WHERE fille.id_rubrique = maman.id_rubrique 158 AND fille.id_secteur <> maman.id_secteur"); 159 while ($row = spip_fetch_array($r)) 160 spip_query("UPDATE spip_syndic SET id_secteur=".$row['secteur']." 161 WHERE id_syndic=".$row['id']); 162 163 } 164 165 // 166 // Calculer la langue des sous-rubriques et des articles 167 // 168 // http://doc.spip.org/@calculer_langues_rubriques_etape 169 function calculer_langues_rubriques_etape() { 170 $s = spip_query("SELECT fille.id_rubrique AS id_rubrique, mere.lang AS lang 171 FROM spip_rubriques AS fille, spip_rubriques AS mere 172 WHERE fille.id_parent = mere.id_rubrique 173 AND fille.langue_choisie != 'oui' AND mere.lang<>'' 174 AND mere.lang<>fille.lang"); 175 176 while ($row = spip_fetch_array($s)) { 177 $id_rubrique = $row['id_rubrique']; 178 $t = spip_query("UPDATE spip_rubriques SET lang=" . _q($row['lang']) . ", langue_choisie='non' WHERE id_rubrique=$id_rubrique"); 179 } 180 181 return $t; 182 } 183 184 // http://doc.spip.org/@calculer_langues_rubriques 185 function calculer_langues_rubriques() { 186 187 // rubriques (recursivite) 188 spip_query("UPDATE spip_rubriques SET lang=" . _q($GLOBALS['meta']['langue_site']) . ", langue_choisie='non' WHERE id_parent=0 AND langue_choisie != 'oui'"); 189 while (calculer_langues_rubriques_etape()); 190 191 // articles 192 $s = spip_query("SELECT fils.id_article AS id_article, mere.lang AS lang 193 FROM spip_articles AS fils, spip_rubriques AS mere 194 WHERE fils.id_rubrique = mere.id_rubrique 195 AND fils.langue_choisie != 'oui' AND (fils.lang='' OR mere.lang<>'') 196 AND mere.lang<>fils.lang"); 197 while ($row = spip_fetch_array($s)) { 198 $id_article = $row['id_article']; 199 spip_query("UPDATE spip_articles SET lang=" . _q($row['lang']) . ", langue_choisie='non' WHERE id_article=$id_article"); 200 } 201 202 // breves 203 $s = spip_query("SELECT fils.id_breve AS id_breve, mere.lang AS lang 204 FROM spip_breves AS fils, spip_rubriques AS mere 205 WHERE fils.id_rubrique = mere.id_rubrique 206 AND fils.langue_choisie != 'oui' AND (fils.lang='' OR mere.lang<>'') 207 AND mere.lang<>fils.lang"); 208 while ($row = spip_fetch_array($s)) { 209 $id_breve = $row['id_breve']; 210 spip_query("UPDATE spip_breves SET lang=" . _q($row['lang']) . ", langue_choisie='non' WHERE id_breve=$id_breve"); 211 } 212 213 if ($GLOBALS['meta']['multi_rubriques'] == 'oui') { 214 // Ecrire meta liste langues utilisees dans rubriques 215 include_spip('inc/meta'); 216 $s = spip_query("SELECT lang FROM spip_rubriques 217 WHERE lang != '' GROUP BY lang"); 218 while ($row = spip_fetch_array($s)) { 219 $lang_utilisees[] = $row['lang']; 220 } 221 if ($lang_utilisees) { 222 $lang_utilisees = join (',', $lang_utilisees); 223 ecrire_meta('langues_utilisees', $lang_utilisees); 224 } else { 225 ecrire_meta('langues_utilisees', ""); 226 } 227 } 228 } 229 230 231 // http://doc.spip.org/@calcul_generation 232 function calcul_generation ($generation) { 233 include_spip('base/abstract_sql'); 234 $lesfils = array(); 235 $result = spip_abstract_select(array('id_rubrique'), 236 array('spip_rubriques AS rubriques'), 237 array(calcul_mysql_in('id_parent', 238 $generation, 239 ''))); 240 while ($row = spip_abstract_fetch($result)) 241 $lesfils[] = $row['id_rubrique']; 242 return join(",",$lesfils); 243 } 244 245 // http://doc.spip.org/@calcul_branche 246 function calcul_branche ($generation) { 247 if (!$generation) 248 return '0'; 249 else { 250 $branche[] = $generation; 251 while ($generation = calcul_generation ($generation)) 252 $branche[] = $generation; 253 return join(",",$branche); 254 } 255 } 256 257 // http://doc.spip.org/@cron_rubriques 258 function cron_rubriques($t) { 259 calculer_rubriques(); 260 return 1; 261 } 262 263 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Wed Nov 21 10:20:27 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |