[ PHPXref.com ] [ Generated: Sun Jul 20 20:25:42 2008 ] [ SPIP 1.8.3 ]
[ Index ]     [ Variables ]     [ Functions ]     [ Classes ]     [ Constants ]     [ Statistics ]

title

Body

[close]

/ecrire/ -> inc_rubriques.php3 (source)

   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>&nbsp;</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 &nbsp;";
 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  ?>


[ Powered by PHPXref - Served by Debian GNU/Linux ]