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

title

Body

[close]

/ -> inc-messforum.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  if (!defined("_ECRIRE_INC_VERSION")) return;
  15  
  16  include_ecrire('inc_meta.php3');
  17  include_ecrire('inc_forum.php3');
  18  include_ecrire('inc_filtres.php3');
  19  include_ecrire("inc_abstract_sql.php3");
  20  include_local(_FILE_CONNECT);
  21  
  22  // Ce fichier inclus par inc-public a un comportement special
  23  // Voir commentaires dans celui-ci et dans inc-formulaire_forum
  24  
  25  function prevenir_auteurs($auteur, $email_auteur, $id_forum, $id_article, $texte, $titre, $statut) {
  26      global $nom_site_forum, $url_site;
  27      include_ecrire('inc_texte.php3');
  28      include_ecrire('inc_filtres.php3');
  29      include_ecrire('inc_mail.php3');
  30      // Gestionnaire d'URLs
  31      if (@file_exists("inc-urls.php3"))
  32          include_local("inc-urls.php3");
  33      else
  34          include_local("inc-urls-".$GLOBALS['type_urls'].".php3");
  35  
  36      if ($statut == 'prop') # forum modere
  37          $url = "ecrire/controle_forum.php3?debut_id_forum=$id_forum";
  38      else if (function_exists('generer_url_forum'))
  39          $url = generer_url_forum($id_forum);
  40      else {
  41          spip_log('inc-urls personnalise : ajoutez generer_url_forum() !');
  42          $url = generer_url_article($id_article);
  43      }
  44  
  45      $adresse_site = lire_meta("adresse_site");
  46      $url = $adresse_site .'/' .  ereg_replace('^/', '', $url);
  47  
  48      $sujet = "[" .
  49        entites_html(textebrut(typo(lire_meta("nom_site")))) .
  50        "] ["._T('forum_forum')."] $titre";
  51  
  52      $parauteur = (strlen($auteur) <= 2) ? '' :
  53        (" " ._T('forum_par_auteur', array('auteur' => $auteur)) . 
  54         ($email_auteur ? "" : (' <' . $email_auteur . '>')));
  55  
  56      $corps = _T('form_forum_message_auto') .
  57          "\n\n" .
  58          _T('forum_poste_par', array('parauteur' => $parauteur)).
  59          "\n"
  60            . _T('forum_ne_repondez_pas')
  61            . "\n"
  62          . $url
  63          . "\n\n\n".$titre."\n\n".textebrut(propre($texte))
  64          . "\n\n$nom_site_forum\n$url_site\n";
  65  
  66      $old_lang = $GLOBALS['spip_lang'];
  67  
  68      $result = spip_query("SELECT auteurs.email, auteurs.lang FROM spip_auteurs AS auteurs,
  69                  spip_auteurs_articles AS lien
  70                  WHERE lien.id_article='$id_article'
  71                  AND auteurs.id_auteur=lien.id_auteur");
  72      while (list($email, $salangue) = spip_fetch_array($result)) {
  73          $email = trim($email);
  74          if (strlen($email) < 3) continue;
  75          $GLOBALS['spip_lang'] = ($salangue ? $salangue : $old_lang);
  76          envoyer_mail($email, $sujet, $corps) ;
  77      }
  78      $GLOBALS['spip_lang'] = $old_lang;    
  79  }
  80  
  81  
  82  function controler_forum($id_article, $retour) {
  83      global $auteur_session;
  84  
  85      // Reglage forums d'article
  86      if ($id_article) {
  87          $q = spip_query("SELECT accepter_forum FROM spip_articles
  88              WHERE id_article=$id_article");
  89          if ($r = spip_fetch_array($q))
  90              $forums_publics = $r['accepter_forum'];
  91      }
  92  
  93      // Valeur par defaut
  94      if (!$forums_publics)
  95          $forums_publics = substr(lire_meta("forums_publics"),0,3);
  96  
  97      if ($forums_publics == "abo") {
  98          if ($auteur_session) {
  99              $statut = $auteur_session['statut'];
 100              if (!$statut OR $statut == '5poubelle') {
 101                  ask_php_auth(_T('forum_acces_refuse'),
 102                           _T('forum_cliquer_retour',
 103                          array('retour_forum' => $retour)));
 104                  exit;
 105              }
 106          } else {
 107              ask_php_auth(_T('forum_non_inscrit'),
 108                       _T('forum_cliquer_retour',
 109                      array('retour_forum' => $retour)));
 110              exit;
 111          }
 112      }
 113  
 114      return $forums_publics;
 115  }
 116  
 117  function mots_du_forum($ajouter_mot, $id_message)
 118  {
 119      foreach ($ajouter_mot as $id_mot)
 120          if ($id_mot = intval($id_mot))
 121              spip_query("INSERT INTO spip_mots_forum (id_mot, id_forum)
 122                  VALUES ($id_mot, $id_message)");
 123  }
 124  
 125  function enregistre_forum() {
 126      global $REMOTE_ADDR, $auteur_session,
 127          $afficher_texte, $ajouter_mot, $alea, $hash,
 128          $auteur, $confirmer_forum, $email_auteur, $id_auteur,
 129          $nom_site_forum, $retour_forum, $texte, $titre, $url_site;
 130  
 131      $retour_forum = rawurldecode($retour_forum);
 132  
 133      # retour a calculer (cf. inc-formulaire_forum)
 134      if ($retour_forum == '!') {
 135          $retour_forum = new Link();
 136          $retour_forum = $retour_forum->getUrl(); # en cas d'echec du post
 137          $calculer_retour = true;
 138      }
 139  
 140      // Recuperer les donnees postees du formulaire ou stocker '0'
 141      foreach (array('id_article', 'id_breve', 'id_syndic',
 142      'id_rubrique', 'id_forum') as $id)
 143          if (isset($_POST['forum_'.$id]))
 144              $$id = intval($_POST['forum_'.$id]);
 145          else
 146              $$id = 0;
 147  
 148      // initialisation de l'eventuel visiteur connecte
 149      if (!$id_auteur)
 150      $id_auteur = intval($auteur_session['id_auteur']);
 151  
 152      $statut = controler_forum($id_article, $retour_forum);
 153  
 154      // Ne pas autoriser de changement de nom si forum sur abonnement
 155      if ($statut == 'abo') {
 156          $auteur = $auteur_session['nom'];
 157          $email_auteur = $auteur_session['email'];
 158      }
 159  
 160      // trop court ?
 161      if ((strlen($texte) + strlen($titre) + strlen($nom_site_forum) +
 162      strlen($url_site) + strlen($auteur) + strlen($email_auteur)) > 20 * 1024) {
 163          ask_php_auth(_T('forum_message_trop_long'),
 164              _T('forum_cliquer_retour',
 165                  array('retour_forum' => $retour_forum)));
 166          exit;
 167      }
 168  
 169      // Verifier hash securite pour les forums avec previsu
 170      if ($GLOBALS['afficher_texte'] <> 'non') {
 171          include_ecrire("inc_admin.php3");
 172          if (!verifier_action_auteur("ajout_forum $id_rubrique".
 173          " $id_forum $id_article $id_breve".
 174          " $id_syndic $alea", $hash)) {
 175              spip_log('erreur hash forum');
 176              die (_T('forum_titre_erreur'));     # echec du POST
 177          }
 178  
 179          // verifier fichier lock
 180          $alea = preg_replace('/[^0-9]/', '', $alea);
 181          if (!file_exists($hash = _DIR_SESSIONS."forum_$alea.lck"))
 182              return $retour_forum; # echec silencieux du POST
 183          unlink($hash);
 184      }
 185  
 186      // Entrer le message dans la base
 187      $id_message = spip_abstract_insert('spip_forum', '(date_heure)', '(NOW())');
 188  
 189      if ($id_forum)
 190          list($id_thread) = spip_fetch_array(spip_query(
 191          "SELECT id_thread FROM spip_forum WHERE id_forum = $id_forum"));
 192      else
 193          $id_thread = $id_message; # id_thread oblige INSERT puis UPDATE.
 194  
 195      $statut = ($statut == 'non') ? 'off' : (($statut == 'pri') ? 'prop' :
 196                          'publie');
 197  
 198      spip_query("UPDATE spip_forum
 199      SET id_parent = $id_forum,
 200      id_rubrique = $id_rubrique,
 201      id_article = $id_article,
 202      id_breve = $id_breve,
 203      id_syndic = $id_syndic,
 204      id_auteur = $id_auteur,
 205      id_thread = $id_thread,
 206      date_heure = NOW(),
 207      titre = '".addslashes(corriger_caracteres($titre))."',
 208      texte = '".addslashes(corriger_caracteres($texte))."',
 209      nom_site = '".addslashes(corriger_caracteres($nom_site_forum))."',
 210      url_site = '".addslashes(corriger_caracteres($url_site))."',
 211      auteur = '".addslashes(corriger_caracteres($auteur))."',
 212      email_auteur = '".addslashes(corriger_caracteres($email_auteur))."',
 213      ip = '$REMOTE_ADDR',
 214      statut = '$statut'
 215      WHERE id_forum = $id_message
 216      ");
 217  
 218      // Le cas echeant, calculer le retour
 219      if ($calculer_retour) {
 220          // Gestionnaire d'URLs
 221          if (@file_exists("inc-urls.php3"))
 222              include_local("inc-urls.php3");
 223          else
 224              include_local("inc-urls-".$GLOBALS['type_urls'].".php3");
 225  
 226          // le retour automatique envoie sur le thread, ce qui permet
 227          // de traiter elegamment le cas des forums moderes a priori.
 228          // Cela assure aussi qu'on retrouve son message dans le thread
 229          // dans le cas des forums moderes a posteriori, ce qui n'est
 230          // pas plus mal.
 231          $retour_forum = generer_url_forum($id_message, true);
 232      }
 233  
 234      // Entrer les mots-cles associes
 235      if (is_array($ajouter_mot)) mots_du_forum($ajouter_mot, $id_message);
 236  
 237      // Prevenir les auteurs de l'article
 238      if (lire_meta("prevenir_auteurs") == "oui" AND ($afficher_texte != "non"))
 239          prevenir_auteurs($auteur, $email_auteur, $id_message, $id_article, $texte, $titre, $statut);
 240  
 241      // Poser un cookie pour ne pas retaper le nom / email
 242  
 243      spip_setcookie('spip_forum_user',
 244                 serialize(array('nom' => $auteur, 'email' => $email_auteur)));
 245  
 246      if ($statut == 'publie') {
 247      //
 248      // INVALIDATION DES CACHES LIES AUX FORUMS
 249      //
 250          include_ecrire('inc_invalideur.php3');
 251          suivre_invalideur ("id='id_forum/" .
 252              calcul_index_forum($id_article,
 253                  $id_breve,
 254                  $id_rubrique,
 255                  $id_syndic) . "'");
 256      }
 257  
 258      return $retour_forum;
 259  }
 260  
 261  ?>


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