[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/inc/ -> forum.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  include_spip('inc/actions');
  15  
  16  // http://doc.spip.org/@affiche_navigation_forum
  17  function affiche_navigation_forum($script, $args, $debut, $i, $pack, $ancre, $query)
  18  {
  19      $nav = ($i <=0) ? '' : ("<a href='" . generer_url_ecrire($script, $args) ."'>0</a> ... |\n");
  20  
  21      $e = (_SPIP_AJAX === 1 );
  22  
  23      $n = spip_num_rows($query);
  24  
  25      for (;$n;$n--){
  26  
  27          if ($i == $pack*floor($i/$pack)) {
  28              if ($i == $debut)
  29                  $nav .= "<span class='spip_medium'><b>$i</b></span> |\n";
  30              else {
  31                  $h = generer_url_ecrire($script, $args . "&debut=$i");
  32                  if ($e)    $e = "\nonclick=" . ajax_action_declencheur($h,$ancre);
  33                  $nav .= "<a href='$h'$e>$i</a> |\n";
  34              }
  35          }
  36          $i ++;
  37      }
  38  
  39      $h = generer_url_ecrire($script, $args . "&debut=$i");
  40  
  41      if ($e)    $e = "\nonclick=" . ajax_action_declencheur($h,$ancre);
  42  
  43      return "$nav<a href='$h'$e>...</a> |";
  44  }
  45  
  46  
  47  // tous les boutons de controle d'un forum
  48  // nb : les forums prives (privrac ou prive), une fois effaces
  49  // (privoff), ne sont pas revalidables ; le forum d'admin (privadm)
  50  // n'est pas effacable
  51  
  52  // http://doc.spip.org/@boutons_controle_forum
  53  function boutons_controle_forum($id_forum, $forum_stat, $forum_id_auteur=0, $ref, $forum_ip) {
  54      $controle = '';
  55  
  56  
  57      // selection du logo et des boutons correspondant a l'etat du forum
  58      switch ($forum_stat) {
  59          # forum sous un article dans l'espace prive
  60          case "prive":
  61              $logo = "forum-interne-24.gif";
  62              $valider = false;
  63              $valider_repondre = false;
  64              $suppression = 'privoff';
  65              break;
  66          # forum des administrateurs
  67          case "privadmin":
  68              $logo = "forum-admin-24.gif";
  69              $valider = false;
  70              $valider_repondre = false;
  71              $suppression = false;
  72              break;
  73          # forum de l'espace prive, supprime (non revalidable,
  74          # d'ailleurs on ne sait plus a quel type de forum il appartenait)
  75          case "privoff":
  76              $logo = "forum-interne-24.gif";
  77              $valider = false;
  78              $valider_repondre = false;
  79              $suppression = false;
  80              break;
  81          # forum general de l'espace prive
  82          case "privrac":
  83              $logo = "forum-interne-24.gif";
  84              $valider = false;
  85              $valider_repondre = false;
  86              $suppression = 'privoff';
  87              break;
  88  
  89          # forum publie sur le site public
  90          case "publie":
  91              $logo = "forum-public-24.gif";
  92              $valider = false;
  93              $valider_repondre = false;
  94              $suppression = 'off';
  95              break;
  96          # forum supprime sur le site public
  97          case "off":
  98              $logo = "forum-public-24.gif";
  99              $valider = 'publie';
 100              $valider_repondre = false;
 101              $suppression = false;
 102              $controle = "<br /><span style='color: red; font-weight: bold;'>"._T('info_message_supprime')." $forum_ip</span>";
 103              if($forum_id_auteur)
 104                  $controle .= " - <a href='" . generer_url_ecrire('auteur_infos', "id_auteur=$forum_id_auteur") .
 105                    "'>" ._T('lien_voir_auteur'). "</a>";
 106              break;
 107          # forum propose (a moderer) sur le site public
 108          case "prop":
 109              $logo = "forum-public-24.gif";
 110              $valider = 'publie';
 111              $valider_repondre = true;
 112              $suppression = 'off';
 113              break;
 114          # forum original (reponse a un forum modifie) sur le site public
 115          case "original":
 116              $logo = "forum-public-24.gif";
 117              $original = true;
 118              break;
 119          default:
 120              return;
 121      }
 122  
 123      $lien = str_replace('&amp;', '&', self()) . "#id$id_forum";
 124      if ($suppression)
 125        $controle .= icone(_T('icone_supprimer_message'), generer_action_auteur('instituer_forum',"$id_forum-$suppression", _DIR_RESTREINT_ABS . $lien),
 126              $logo,
 127              "supprimer.gif", 'right', 'non');
 128  
 129      if ($valider)
 130        $controle .= icone(_T('icone_valider_message'), generer_action_auteur('instituer_forum',"$id_forum-$valider", _DIR_RESTREINT_ABS . $lien),
 131              $logo,
 132              "creer.gif", 'right', 'non');
 133  
 134      if ($valider_repondre) {
 135        $dblret =  rawurlencode(_DIR_RESTREINT_ABS . $lien);
 136        $controle .= icone(_T('icone_valider_message') . " &amp; " .   _T('lien_repondre_message'), generer_action_auteur('instituer_forum',"$id_forum-$valider", generer_url_public('forum', "$ref&id_forum=$id_forum&retour=$dblret", true)),
 137                   $logo,
 138                   "creer.gif", 'right', 'non');
 139      }
 140  
 141      // TODO: un bouton retablir l'original ?
 142      if ($original) {
 143          $controle .= "<div style='float:".$GLOBALS['spip_lang_right'].";color:green'>"
 144          ."("
 145          ._T('forum_info_original')
 146          .")</div>";
 147      }
 148  
 149      return $controle;
 150  }
 151  
 152  // recuperer le critere SQL qui selectionne nos forums
 153  // http://doc.spip.org/@critere_statut_controle_forum
 154  function critere_statut_controle_forum($page, $id_rubrique=0) {
 155  
 156      if (is_array($id_rubrique))   $id_rubrique = join(',',$id_rubrique);
 157      if (!$id_rubrique) {
 158          $from = 'spip_forum AS F';
 159          $where = "";
 160          $and = "";
 161      } else {
 162          if (strpos($id_rubrique,','))
 163            $eq = " IN ($id_rubrique)";
 164          else $eq = "=$id_rubrique";
 165            
 166          $from = 'spip_forum AS F, spip_articles AS A';
 167          $where = "A.id_secteur$eq AND F.id_article=A.id_article";
 168          $and = ' AND ';
 169      }
 170     
 171      switch ($page) {
 172      case 'public':
 173          $and .= "F.statut IN ('publie', 'off', 'prop') AND F.texte!=''";
 174          break;
 175      case 'prop':
 176          $and .= "F.statut='prop'";
 177          break;
 178      case 'interne':
 179          $and .= "F.statut IN ('prive', 'privrac', 'privoff', 'privadm') AND F.texte!=''";
 180          break;
 181      case 'vide':
 182          $and .= "F.statut IN ('publie', 'off', 'prive', 'privrac', 'privoff', 'privadm') AND F.texte=''";
 183          break;
 184      default:
 185          $where = '0=1';
 186          $and ='';
 187          break;
 188      }
 189      return array($from, "$where$and");
 190  }
 191  
 192  // Index d'invalidation des forums
 193  // http://doc.spip.org/@calcul_index_forum
 194  function calcul_index_forum($id_article, $id_breve, $id_rubrique, $id_syndic) {
 195      if ($id_article) return 'a'.$id_article; 
 196      if ($id_breve) return 'b'.$id_breve;
 197      if ($id_rubrique) return 'r'.$id_rubrique;
 198      if ($id_syndic) return 's'.$id_syndic;
 199  }
 200  
 201  //
 202  // Recalculer tous les threads
 203  //
 204  // http://doc.spip.org/@calculer_threads
 205  function calculer_threads() {
 206      // fixer les id_thread des debuts de discussion
 207      spip_query("UPDATE spip_forum SET id_thread=id_forum WHERE id_parent=0");
 208  
 209      // reparer les messages qui n'ont pas l'id_secteur de leur parent
 210      do {
 211          $discussion = "0";
 212          $precedent = 0;
 213          $r = spip_query("SELECT fille.id_forum AS id,    maman.id_thread AS thread    FROM spip_forum AS fille, spip_forum AS maman    WHERE fille.id_parent = maman.id_forum AND fille.id_thread <> maman.id_thread    ORDER BY thread");
 214          while ($row = spip_fetch_array($r)) {
 215              if ($row['thread'] == $precedent)
 216                  $discussion .= "," . $row['id'];
 217              else {
 218                  if ($precedent)
 219                      spip_query("UPDATE spip_forum SET id_thread=$precedent WHERE id_forum IN ($discussion)");
 220                  $precedent = $row['thread'];
 221                  $discussion = $row['id'];
 222              }
 223          }
 224          spip_query("UPDATE spip_forum SET id_thread=$precedent    WHERE id_forum IN ($discussion)");
 225      } while ($discussion != "0");
 226  }
 227  
 228  // Calculs des URLs des forums (pour l'espace public)
 229  // http://doc.spip.org/@racine_forum
 230  function racine_forum($id_forum){
 231      if (!$id_forum = intval($id_forum)) return;
 232      $result = spip_query("SELECT id_parent, id_rubrique, id_article, id_breve, id_syndic FROM spip_forum WHERE id_forum=".$id_forum);
 233  
 234      if($row = spip_fetch_array($result)){
 235          if($row['id_parent']) {
 236              return racine_forum($row['id_parent']);
 237          }
 238          else {
 239              if($row['id_rubrique']) return array('rubrique',$row['id_rubrique'], $id_forum);
 240               if($row['id_article']) return array('article',$row['id_article'], $id_forum);
 241              if($row['id_breve']) return array('breve',$row['id_breve'], $id_forum);
 242              if($row['id_syndic']) return array('site',$row['id_syndic'], $id_forum);
 243          }
 244      }
 245  } 
 246  
 247  // http://doc.spip.org/@generer_url_forum_dist
 248  function generer_url_forum_dist($id_forum, $show_thread=false) {
 249      if (!$id_forum) return '';
 250      list($type, $id, $id_thread) = racine_forum($id_forum);
 251      if ($id_thread>0 AND $show_thread)
 252          $id_forum = $id_thread;
 253      switch($type) {
 254          case 'article':
 255              return generer_url_article($id)."#forum$id_forum";
 256              break;
 257          case 'breve':
 258              return generer_url_breve($id)."#forum$id_forum";
 259              break;
 260          case 'rubrique':
 261              return generer_url_rubrique($id)."#forum$id_forum";
 262              break;
 263          case 'site':
 264              return generer_url_site($id)."#forum$id_forum";
 265              break;
 266          default:
 267            return '';
 268      }
 269  }
 270  
 271  // Quand on edite un forum, on tient a conserver l'original
 272  // sous forme d'un forum en reponse, de statut 'original'
 273  // http://doc.spip.org/@conserver_original
 274  function conserver_original($id_forum) {
 275      $s = spip_query("SELECT id_forum FROM spip_forum WHERE id_parent="._q($id_forum)." AND statut='original'");
 276  
 277      if (spip_num_rows($s))
 278          return ''; // pas d'erreur
 279  
 280      // recopier le forum
 281      $t = spip_fetch_array(
 282          spip_query("SELECT date_heure,titre,texte,auteur,email_auteur,nom_site,url_site,ip,id_auteur,idx,id_thread FROM spip_forum WHERE id_forum="._q($id_forum))
 283      );
 284  
 285      if ($t
 286      AND spip_query("INSERT spip_forum (date_heure,titre,texte,auteur,email_auteur,nom_site,url_site,ip,id_auteur,idx,id_thread) VALUES (".join(',',array_map('_q', $t)).")")) {
 287          $id_copie = spip_insert_id();
 288          spip_query("UPDATE spip_forum SET id_parent="._q($id_forum).", statut='original' WHERE id_forum=$id_copie");
 289          return ''; // pas d'erreur
 290      }
 291  
 292          return '&erreur';
 293  }
 294  
 295  // appelle conserver_original(), puis modifie le contenu via l'API inc/modifier
 296  // http://doc.spip.org/@enregistre_et_modifie_forum
 297  function enregistre_et_modifie_forum($id_forum, $c=false) {
 298      if ($err = conserver_original($id_forum)) {
 299          spip_log("erreur de sauvegarde de l'original, $err");
 300          return;
 301      }
 302  
 303      include_spip('inc/modifier');
 304      return revision_forum($id_forum, $c);
 305  }
 306  
 307  ?>


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