Rev 609 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/***************************************************************************\* SPIP, Systeme de publication pour l'internet ** ** Copyright (c) 2001-2005 ** Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James ** ** Ce programme est un logiciel libre distribue sous licence GNU/GPL. ** Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *\***************************************************************************///// Ce fichier ne sera execute qu'une foisif (defined("_ECRIRE_INC_RUBRIQUES")) return;define("_ECRIRE_INC_RUBRIQUES", "1");//// Recalculer l'ensemble des donnees associees a l'arborescence des rubriques// (cette fonction est a appeler a chaque modification sur les rubriques)//function calculer_rubriques() {if (!spip_get_lock("calcul_rubriques")) return;// Mettre les compteurs a zero// Attention, faute de SQL transactionnel on travaille sur// des champs temporaires afin de ne pas casser la base// pendant la demi seconde de recalculsspip_query("UPDATE spip_rubriquesSET date_tmp='0000-00-00 00:00:00', statut_tmp='prive'");//// Publier et dater les rubriques qui ont un article publie//// Afficher les articles post-dates ?include_ecrire('inc_meta.php3');$postdates = (lire_meta("post_dates") == "non") ?"AND fille.date <= NOW()" : '';$r = spip_query("SELECT rub.id_rubrique AS id, max(fille.date) AS date_hFROM spip_rubriques AS rub, spip_articles AS filleWHERE rub.id_rubrique = fille.id_rubrique AND fille.statut='publie'$postdates GROUP BY rub.id_rubrique");while ($row = spip_fetch_array($r))spip_query("UPDATE spip_rubriquesSET statut_tmp='publie', date_tmp='".$row['date_h']."'WHERE id_rubrique=".$row['id']);// Publier et dater les rubriques qui ont une breve publie$r = spip_query("SELECT rub.id_rubrique AS id,max(fille.date_heure) AS date_hFROM spip_rubriques AS rub, spip_breves AS filleWHERE rub.id_rubrique = fille.id_rubriqueAND rub.date_tmp <= fille.date_heure AND fille.statut='publie'GROUP BY rub.id_rubrique");while ($row = spip_fetch_array($r))spip_query("UPDATE spip_rubriquesSET statut_tmp='publie', date_tmp='".$row['date']."'WHERE id_rubrique=".$row['id']);// Publier et dater les rubriques qui ont un site publie$r = spip_query("SELECT rub.id_rubrique AS id, max(fille.date) AS date_hFROM spip_rubriques AS rub, spip_syndic AS filleWHERE rub.id_rubrique = fille.id_rubrique AND rub.date_tmp <= fille.dateAND fille.statut='publie'GROUP BY rub.id_rubrique");while ($row = spip_fetch_array($r))spip_query("UPDATE spip_rubriquesSET statut_tmp='publie', date_tmp='".$row['date_h']."'WHERE id_rubrique=".$row['id']);// Publier et dater les rubriques qui ont un document publie$r = spip_query("SELECT rub.id_rubrique AS id, max(fille.date) AS date_hFROM spip_rubriques AS rub, spip_documents AS fille,spip_documents_rubriques AS lienWHERE rub.id_rubrique = lien.id_rubriqueAND lien.id_document=fille.id_document AND rub.date_tmp <= fille.dateGROUP BY rub.id_rubrique");while ($row = spip_fetch_array($r))spip_query("UPDATE spip_rubriquesSET statut_tmp='publie', date_tmp='".$row['date_h']."'WHERE id_rubrique=".$row['id']);// Les rubriques qui ont une rubrique fille plus recente// on tourne tant que les donnees remontent vers la racine.do {$continuer = false;$r = spip_query("SELECT rub.id_rubrique AS id,max(fille.date_tmp) AS date_hFROM spip_rubriques AS rub, spip_rubriques AS filleWHERE rub.id_rubrique = fille.id_parentAND (rub.date_tmp < fille.date_tmp OR rub.statut_tmp<>'publie')AND fille.statut_tmp='publie'GROUP BY rub.id_rubrique");while ($row = spip_fetch_array($r)) {spip_query("UPDATE spip_rubriquesSET statut_tmp='publie', date_tmp='".$row['date_h']."'WHERE id_rubrique=".$row['id']);$continuer = true;}} while ($continuer);// "Commit" des modifsspip_query("UPDATE spip_rubriques SET date=date_tmp, statut=statut_tmp");//// Propager les secteurs//// fixer les id_secteur des rubriques racinesspip_query("UPDATE spip_rubriques SET id_secteur=id_rubriqueWHERE id_parent=0");// reparer les rubriques qui n'ont pas l'id_secteur de leur parentdo {$continuer = false;$r = spip_query("SELECT fille.id_rubrique AS id,maman.id_secteur AS secteurFROM spip_rubriques AS fille, spip_rubriques AS mamanWHERE fille.id_parent = maman.id_rubriqueAND fille.id_secteur <> maman.id_secteur");while ($row = spip_fetch_array($r)) {spip_query("UPDATE spip_rubriquesSET id_secteur=".$row['secteur']." WHERE id_rubrique=".$row['id']);$continuer = true;}} while ($continuer);// reparer les articles$r = spip_query("SELECT fille.id_article AS id, maman.id_secteur AS secteurFROM spip_articles AS fille, spip_rubriques AS mamanWHERE fille.id_rubrique = maman.id_rubriqueAND fille.id_secteur <> maman.id_secteur");while ($row = spip_fetch_array($r))spip_query("UPDATE spip_articlesSET id_secteur=".$row['secteur']." WHERE id_article=".$row['id']);// reparer les sites$r = spip_query("SELECT fille.id_syndic AS id, maman.id_secteur AS secteurFROM spip_syndic AS fille, spip_rubriques AS mamanWHERE fille.id_rubrique = maman.id_rubriqueAND fille.id_secteur <> maman.id_secteur");while ($row = spip_fetch_array($r))spip_query("UPDATE spip_syndic SET id_secteur=".$row['secteur']."WHERE id_syndic=".$row['id']);// Sauver la date de la derniere mise a jour (pour menu_rubriques)ecrire_meta("date_calcul_rubriques", date("U"));ecrire_metas();}//// Calculer la langue des sous-rubriques et des articles//function calculer_langues_rubriques_etape() {$s = spip_query ("SELECT fille.id_rubrique AS id_rubrique, mere.lang AS langFROM spip_rubriques AS fille, spip_rubriques AS mereWHERE fille.id_parent = mere.id_rubriqueAND fille.langue_choisie != 'oui' AND mere.lang<>''AND mere.lang<>fille.lang");while ($row = spip_fetch_array($s)) {$lang = addslashes($row['lang']);$id_rubrique = $row['id_rubrique'];$t = spip_query ("UPDATE spip_rubriquesSET lang='$lang', langue_choisie='non' WHERE id_rubrique=$id_rubrique");}return $t;}function calculer_langues_rubriques() {// rubriques (recursivite)$langue_site = addslashes(lire_meta('langue_site'));spip_query ("UPDATE spip_rubriquesSET lang='$langue_site', langue_choisie='non'WHERE id_parent=0 AND langue_choisie != 'oui'");while (calculer_langues_rubriques_etape());// articles$s = spip_query ("SELECT fils.id_article AS id_article, mere.lang AS langFROM spip_articles AS fils, spip_rubriques AS mereWHERE fils.id_rubrique = mere.id_rubriqueAND fils.langue_choisie != 'oui' AND (fils.lang='' OR mere.lang<>'')AND mere.lang<>fils.lang");while ($row = spip_fetch_array($s)) {$lang = addslashes($row['lang']);$id_article = $row['id_article'];spip_query ("UPDATE spip_articlesSET lang='$lang', langue_choisie='non' WHERE id_article=$id_article");}// breves$s = spip_query ("SELECT fils.id_breve AS id_breve, mere.lang AS langFROM spip_breves AS fils, spip_rubriques AS mereWHERE fils.id_rubrique = mere.id_rubriqueAND fils.langue_choisie != 'oui' AND (fils.lang='' OR mere.lang<>'')AND mere.lang<>fils.lang");while ($row = spip_fetch_array($s)) {$lang = addslashes($row['lang']);$id_breve = $row['id_breve'];spip_query ("UPDATE spip_brevesSET lang='$lang', langue_choisie='non' WHERE id_breve=$id_breve");}if (lire_meta('multi_rubriques') == 'oui') {// Ecrire meta liste langues utilisees dans rubriquesinclude_ecrire('inc_meta.php3');$s = spip_query ("SELECT lang FROM spip_rubriquesWHERE lang != '' GROUP BY lang");while ($row = spip_fetch_array($s)) {$lang_utilisees[] = $row['lang'];}if ($lang_utilisees) {$lang_utilisees = join (',', $lang_utilisees);ecrire_meta('langues_utilisees', $lang_utilisees);} else {ecrire_meta('langues_utilisees', "");}}}function enfant_rub($collection){global $les_enfants, $couleur_foncee, $lang_dir;global $spip_display, $spip_lang_left, $spip_lang_right, $spip_lang;global $connect_id_auteur;$query2 = "SELECT * FROM spip_rubriques WHERE id_parent='$collection' ORDER BY 0+titre,titre";$result2 = spip_query($query2);if ($spip_display == 4) $les_enfants .= "<ul>";while($row=spip_fetch_array($result2)){$id_rubrique=$row['id_rubrique'];$id_parent=$row['id_parent'];$titre=$row['titre'];$bouton_layer = bouton_block_invisible("enfants$id_rubrique");$les_sous_enfants = sous_enfant_rub($id_rubrique);changer_typo($row['lang']);$descriptif=propre($row['descriptif']);if ($spip_display == 4) $les_enfants .= "<li>";$les_enfants.= "<div class='enfants'>";if ($id_parent == "0") $logo_rub = "secteur-24.gif";else $logo_rub = "rubrique-24.gif";$les_enfants .= debut_cadre_sous_rub($logo_rub, true);if ($spip_display != 1AND $spip_display!=4AND lire_meta('image_process') != "non") {include_ecrire("inc_logos.php3");$logo = decrire_logo("rubon$id_rubrique");if ($logo) {$fichier = $logo[0];$les_enfants .= "<div style='float: $spip_lang_right; margin-$spip_lang_right: -6px; margin-top: -6px;'>";$les_enfants .= reduire_image_logo(_DIR_IMG.$fichier, 48, 36);$les_enfants .= "</div>";}}if (strlen($les_sous_enfants) > 0){$les_enfants .= $bouton_layer;}if (acces_restreint_rubrique($id_rubrique))$les_enfants .= http_img_pack("admin-12.gif", '', "width='12' height='12'", _T('image_administrer_rubrique'));$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>";if (strlen($descriptif)) {$les_enfants .= "<div class='verdana1'>$descriptif</div>";}if ($spip_display != 4) $les_enfants .= $les_sous_enfants;$les_enfants .= "<div style='clear:both;'></div>";$les_enfants .= fin_cadre_sous_rub(true);$les_enfants .= "</div>";if ($spip_display == 4) $les_enfants .= "</li>";}if ($spip_display == 4) $les_enfants .= "</ul>";changer_typo($spip_lang); # remettre la typo de l'interface pour la suite}function sous_enfant_rub($collection2){global $lang_dir, $spip_lang_dir, $spip_lang_left;$query3 = "SELECT * FROM spip_rubriques WHERE id_parent='$collection2' ORDER BY 0+titre,titre";$result3 = spip_query($query3);if (spip_num_rows($result3) > 0){$retour = debut_block_invisible("enfants$collection2")."\n<ul style='margin: 0px; padding: 0px; padding-top: 3px;'>\n";while($row=spip_fetch_array($result3)){$id_rubrique2=$row['id_rubrique'];$id_parent2=$row['id_parent'];$titre2=$row['titre'];changer_typo($row['lang']);$retour.="<div class='arial11' " .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";}$retour .= "</ul>\n\n".fin_block()."\n\n";}return $retour;}function afficher_enfant_rub($id_rubrique, $afficher_bouton_creer=false) {global $les_enfants, $spip_lang_right;enfant_rub($id_rubrique);$les_enfants2=substr($les_enfants,round(strlen($les_enfants)/2),strlen($les_enfants));if (strpos($les_enfants2,"<div class='enfants'>")){$les_enfants2=substr($les_enfants2,strpos($les_enfants2,"<div class='enfants'>"),strlen($les_enfants2));$les_enfants1=substr($les_enfants,0,strlen($les_enfants)-strlen($les_enfants2));}else{$les_enfants1=$les_enfants;$les_enfants2="";}// Afficher les sous-rubriquesecho "<div> </div>";echo "<table cellpadding=0 cellspacing=0 border=0 width='100%'>";echo "<tr><td valign='top' width=50% rowspan=2>$les_enfants1</td>";echo "<td width='20' rowspan='2'>", http_img_pack("rien.gif", ' ', "width='20'") ."</td>\n";echo "<td valign='top' width='50%'>$les_enfants2 ";if (strlen($les_enfants2) > 0) echo "<p>";echo "</td></tr>";echo "<tr><td style='text-align: $spip_lang_right;' valign='bottom'><div align='$spip_lang_right'>";if ($afficher_bouton_creer) {if ($id_rubrique == "0") icone(_T('icone_creer_rubrique'), "rubriques_edit.php3?new=oui&retour=nav", "secteur-24.gif", "creer.gif");else icone(_T('icone_creer_sous_rubrique'), "rubriques_edit.php3?new=oui&retour=nav&id_parent=$id_rubrique", "rubrique-24.gif", "creer.gif");echo "<p>";}echo "</div></td></tr>";echo "</table><p />";//////}?>