[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/inc/ -> rubriques.php (source)

   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  ?>


Généré le : Wed Nov 21 10:20:27 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics