[ Index ]
 

Code source de SPIP 1.8.3

Accédez au Source d'autres logiciels libres | Soutenez Angelica Josefina !

title

Body

[fermer]

/formulaires/ -> inc-formulaire_forum.php3 (source)

   1  <?php
   2  
   3  if (!defined("_ECRIRE_INC_VERSION")) return;    #securite
   4  
   5  include_ecrire ('inc_meta.php3');
   6  include_ecrire ('inc_admin.php3');
   7  include_ecrire ('inc_acces.php3');
   8  include_ecrire ('inc_texte.php3');
   9  include_ecrire ('inc_filtres.php3');
  10  include_ecrire ('inc_lang.php3');
  11  include_ecrire('inc_mail.php3');
  12  include_ecrire ('inc_forum.php3');
  13  include_ecrire("inc_abstract_sql.php3");
  14  include_local(_FILE_CONNECT);
  15  
  16  // Gestionnaire d'URLs
  17  if (@file_exists("inc-urls.php3"))
  18      include_local("inc-urls.php3");
  19  else
  20      include_local("inc-urls-".$GLOBALS['type_urls'].".php3");
  21  
  22  /*******************************/
  23  /* GESTION DU FORMULAIRE FORUM */
  24  /*******************************/
  25  
  26  // Contexte du formulaire
  27  global $balise_FORMULAIRE_FORUM_collecte;
  28  $balise_FORMULAIRE_FORUM_collecte = array('id_rubrique', 'id_forum', 'id_article', 'id_breve', 'id_syndic');
  29  
  30  
  31  // verification des droits a faire du forum
  32  function balise_FORMULAIRE_FORUM_stat($args, $filtres) {
  33  
  34      // Note : ceci n'est pas documente !!
  35      // $filtres[0] peut contenir l'url sur lequel faire tourner le formulaire
  36      // exemple dans un squelette article.html : [(#FORMULAIRE_FORUM|forum.php3)]
  37  
  38      // $args[5] peut contenir l'url sur lequel faire le retour
  39      // exemple dans un squelette article.html : [(#FORMULAIRE_FORUM{#SELF})]
  40  
  41      // recuperer les donnees du forum auquel on repond, false = forum interdit
  42      list ($idr, $idf, $ida, $idb, $ids) = $args;
  43      $idr = intval($idr);
  44      $idf = intval($idf);
  45      $ida = intval($ida);
  46      $idb = intval($idb);
  47      $ids = intval($ids);
  48      if (!$r = sql_recherche_donnees_forum ($idr, $idf, $ida, $idb, $ids))
  49          return '';
  50  
  51      list ($titre, $table, $forums_publics) = $r;
  52  
  53      // Attention id_rubrique est passe pour les articles => on n'en veut pas
  54      if ($idr > 0 AND ($ida OR $idb OR $ids))
  55          $idr = 0;
  56  
  57      return
  58          array($titre, $table, $forums_publics, $idr, $idf, $ida, $idb, $ids,
  59              $filtres[0], $args[5]);
  60  }
  61  
  62  function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic, $url, $url_param_retour) {
  63      global $REMOTE_ADDR, $afficher_texte, $_COOKIE, $_POST;
  64  
  65      // Recuperer les donnees postees du formulaire ou, a defaut, du contexte
  66      foreach (array('id_article', 'id_breve', 'id_syndic',
  67      'id_rubrique', 'id_forum') as $id)
  68          if (isset($_POST['forum_'.$id]))
  69              $$id = intval($_POST['forum_'.$id]);
  70          else
  71              $$id = intval($$id);
  72  
  73      // url de reference
  74      if (!$url) {
  75          $url = new Link();
  76          $url = $url->getUrl();
  77      } else {
  78          // identifiants des parents
  79          $args = array();
  80          if ($id_rubrique) $args[] = "id_rubrique=$id_rubrique";
  81          if ($id_forum) $args[] = "id_forum=$id_forum";
  82          if ($id_article) $args[] = "id_article=$id_article";
  83          if ($id_breve) $args[] = "id_breve=$id_breve";
  84          if ($id_syndic) $args[] = "id_syndic=$id_syndic";
  85          if (count($args))
  86              $url .= (strpos($url,'?') ? '&' : '?'). join('&',$args);
  87      }
  88  
  89      $url = ereg_replace("[?&]var_erreur=[^&]*", '', $url);
  90      $url = ereg_replace("[?&]var_login=[^&]*", '', $url);
  91      $url = ereg_replace("[?&]url=[^&]*", '', $url);
  92  
  93      // verifier l'identite des posteurs pour les forums sur abo
  94      if (($forums_publics == "abo") && (!$GLOBALS["auteur_session"])) {
  95          return array('formulaire_login_forum', 0, array());
  96      }
  97  
  98      // ne pas mettre '', sinon le squelette n'affichera rien.
  99      $previsu = ' ';
 100  
 101      // au premier appel (pas de Post-var nommee "retour_forum")
 102      // memoriser evntuellement l'URL de retour pour y revenir apres
 103      // envoi du message ; aux appels suivants, reconduire la valeur.
 104      // Initialiser aussi l'auteur
 105      if (!$retour_forum = rawurldecode(_request('retour_forum'))) {
 106          if ($retour_forum = rawurldecode(_request('retour')))
 107              $retour_forum = str_replace('&var_mode=recalcul','',$retour_forum);
 108          else {
 109              // par defaut, on veut prendre url_forum(), mais elle ne sera connue
 110              // qu'en sortie, on inscrit donc une valeur absurde ("!")
 111              $retour_forum = "!";
 112              
 113              // sauf si on a passe un parametre en argument (exemple : {#SELF})
 114              if($url_param_retour)
 115                  $retour_forum = str_replace("&amp;", "&", $url_param_retour);
 116          }
 117  
 118          if (isset($_COOKIE['spip_forum_user'])
 119          AND is_array($cookie_user = unserialize($_COOKIE['spip_forum_user']))) {
 120              $auteur = $cookie_user['nom'];
 121              $email_auteur = $cookie_user['email'];
 122          } else {
 123              $auteur = $GLOBALS['auteur_session']['nom'];
 124              $email_auteur = $GLOBALS['auteur_session']['email'];
 125          }
 126  
 127      } else {
 128  
 129          // Recuperer le message a previsualiser
 130          $titre = _request('titre');
 131          $texte = _request('texte');
 132          $auteur = _request('auteur');
 133          $email_auteur = _request('email_auteur');
 134          $nom_site_forum = _request('nom_site_forum');
 135          $url_site = _request('url_site');
 136          $ajouter_mot = _request('ajouter_mot'); // array
 137  
 138          // Verifier mots associes au message
 139          if (is_array($ajouter_mot))
 140          $mots = preg_replace('/[^0-9,]/', '', join(',',$ajouter_mot));
 141          else $mots = '0';
 142  
 143          // affichage {par num type, type, num titre,titre}
 144          $result_mots = spip_query("SELECT id_mot, titre, type
 145              FROM spip_mots
 146              WHERE id_mot IN ($mots)
 147              ORDER BY 0+type,type,0+titre,titre");
 148          if (spip_num_rows($result_mots)>0) {
 149              $mots_forums = "<p>"._T('forum_avez_selectionne')."</p><ul>";
 150              while ($row = spip_fetch_array($result_mots)) {
 151                  $les_mots[$row['id_mot']] = "checked='checked'";
 152                  $presence_mots = true;
 153                  $mots_forums .= "<li style='font-size: 80%;'> "
 154                  . typo($row['type']) . "&nbsp;: <b>"
 155                  . typo($row['titre']) ."</b></li>";
 156              }
 157              $mots_forums .= '</ul>';
 158          }
 159  
 160          //
 161          // Preparer la previsualisation
 162          //
 163          if ($afficher_texte != 'non') {
 164              if (strlen($texte) < 10 AND !$presence_mots)
 165                  $erreur = _T('forum_attention_dix_caracteres');
 166              else if (strlen($titre) < 3 AND $afficher_texte <> "non")
 167                  $erreur = _T('forum_attention_trois_caracteres');
 168              else
 169                  $bouton = _T('forum_message_definitif');
 170  
 171              $previsu = inclure_balise_dynamique(
 172                  array(
 173                      'formulaire_forum_previsu',
 174                      0,
 175                      array(
 176                          'titre' => safehtml(typo($titre)),
 177                          'email_auteur' => safehtml($email_auteur),
 178                          'auteur' => safehtml(typo($auteur)),
 179                          'texte' => safehtml(propre($texte)),
 180                          'url_site' => safehtml($url_site),
 181                          'nom_site_forum' =>
 182                              safehtml(typo($nom_site_forum)),
 183                          'mots_forum' => $mots_forum,
 184                          'erreur' => $erreur,
 185                          'bouton' => $bouton
 186                      )
 187                  ), false);
 188  
 189              // supprimer les <form> de la previsualisation
 190              // (sinon on ne peut pas faire <cadre>...</cadre> dans les forums)
 191              $previsu = preg_replace("@<(/?)f(orm[>[:space:]])@ism",
 192                  "<\\1no-f\\2", $previsu);
 193          }
 194  
 195      // Une securite qui nous protege contre :
 196      // - les doubles validations de forums (derapages humains ou des brouteurs)
 197      // - les abus visant a mettre des forums malgre nous sur un article (??)
 198      // On installe un fichier temporaire dans _DIR_SESSIONS (et pas _DIR_CACHE
 199      // afin de ne pas bugguer quand on vide le cache)
 200      // Le lock est leve au moment de l'insertion en base (inc-messforum.php3)
 201      // Ce systeme n'est pas fonctionnel pour les forums sans previsu (notamment
 202      // si $afficher_texte = 'non')
 203  
 204          $alea = preg_replace('/[^0-9]/', '', $alea);
 205          if(!$alea OR !@file_exists(_DIR_SESSIONS."forum_$alea.lck")) {
 206              while (
 207                  # astuce : mt_rand pour autoriser les hits simultanes
 208                  $alea = time() + @mt_rand()
 209                  AND @file_exists($f = _DIR_SESSIONS."forum_$alea.lck")) {};
 210              spip_touch ($f);
 211          }
 212  
 213          # et maintenant on purge les locks de forums ouverts depuis > 4 h
 214          if ($dh = @opendir(_DIR_SESSIONS))
 215              while (($file = @readdir($dh)) !== false)
 216                  if (preg_match('/^forum_([0-9]+)\.lck$/', $file)
 217                  AND (time()-@filemtime(_DIR_SESSIONS.$file) > 4*3600))
 218                      @unlink(_DIR_SESSIONS.$file);
 219  
 220          $hash = calculer_action_auteur("ajout_forum $id_rubrique $id_forum $id_article $id_breve $id_syndic $alea");
 221      }
 222  
 223      // Faut-il ajouter des propositions de mots-cles
 224      if ($table AND (lire_meta("mots_cles_forums") == "oui"))
 225          $table = table_des_mots($table, $les_mots);
 226      else
 227          $table = '';
 228  
 229      // preparer les parametres du forum en input hidden
 230      $parametres_forum = '';
 231      foreach (array('alea', 'hash', 'retour_forum') as $var)
 232          if ($val = entites_html($$var))
 233              $parametres_forum .=
 234              "<input type='hidden' name='$var' value=\"$val\" />\n";
 235      foreach (array(
 236      'id_article', 'id_breve', 'id_syndic', 'id_rubrique', 'id_forum')
 237      as $var)
 238          if ($val = $$var)
 239              $parametres_forum .=
 240              "<input type='hidden' name='forum_$var' value='$val' />\n";
 241  
 242      return array('formulaire_forum', 0,
 243      array(
 244          'auteur' => $auteur,
 245          'disabled' => ($forums_publics == "abo")? " disabled='disabled'" : '',
 246          'email_auteur' => $email_auteur,
 247          'modere' => (($forums_publics != 'pri') ? '' : _T('forum_info_modere')),
 248          'nom_site_forum' => $nom_site_forum,
 249          'previsu' => $previsu,
 250          'table' => $table,
 251          'texte' => $texte,
 252          'titre' => extraire_multi($titre),
 253          'url' =>  $url,
 254          'url_site' => ($url_site ? $url_site : "http://"),
 255          'parametres_forum' => $parametres_forum,
 256  
 257          ## gestion des la variable de personnalisation $afficher_texte
 258          # mode normal : afficher le texte en < input text >, cf. squelette
 259          'afficher_texte_input' => (($afficher_texte <> 'non') ? '&nbsp;' : ''),
 260          # mode 'non' : afficher les elements en < input hidden >
 261          'afficher_texte_hidden' => (($afficher_texte <> 'non') ? '' :
 262              (boutonne('hidden', 'titre', htmlspecialchars($titre)) .
 263                  $table .
 264                  "\n<br /><div align='right'>" .
 265                  boutonne('submit', '', _T('forum_valider'),
 266                  "class='spip_bouton'") .
 267                  "</div>"))
 268  
 269          ));
 270  }
 271  
 272  
 273  function barre_forum($texte)
 274  {
 275      include_ecrire('inc_layer.php3');
 276      $texte = entites_html($texte);
 277  
 278      if (!$GLOBALS['browser_barre'])
 279          return "<textarea name='texte' rows='12' class='forml' cols='40'>$texte</textarea>";
 280      static $num_formulaire = 0;
 281      $num_formulaire++;
 282      include_ecrire('inc_barre.php3');
 283      return afficher_barre("document.getElementById('formulaire_$num_formulaire')", true) .
 284        "
 285  <textarea name='texte' rows='12' class='forml' cols='40'
 286  id='formulaire_$num_formulaire'
 287  onselect='storeCaret(this);'
 288  onclick='storeCaret(this);'
 289  onkeyup='storeCaret(this);'
 290  ondbclick='storeCaret(this);'>$texte</textarea>";
 291  }
 292  
 293  // Mots-cles dans les forums :
 294  // Si la variable de personnalisation $afficher_groupe[] est definie
 295  // dans le fichier d'appel, et si la table de reference est OK, proposer
 296  // la liste des mots-cles
 297  function table_des_mots($table, $les_mots) {
 298      global $afficher_groupe;
 299  
 300      if (is_array($afficher_groupe))
 301          $in_group = " AND id_groupe IN (" . join($afficher_groupe, ", ") .")";
 302      else
 303          $in_group = '';
 304  
 305      $result_groupe = spip_query("SELECT * FROM spip_groupes_mots
 306      WHERE forum = 'oui' AND $table = 'oui'". $in_group);
 307  
 308      $ret = '';
 309      while ($row_groupe = spip_fetch_array($result_groupe)) {
 310          $id_groupe = $row_groupe['id_groupe'];
 311          $titre_groupe = propre($row_groupe['titre']);
 312          $unseul = ($row_groupe['unseul']== 'oui') ? 'radio' : 'checkbox';
 313          $result =spip_query("SELECT * FROM spip_mots
 314          WHERE id_groupe='$id_groupe'");
 315          $total_rows = spip_num_rows($result);
 316  
 317          if ($total_rows > 0) {
 318              $ret .= "\n<p />"
 319                . "<div class='spip_encadrer' style='font-size: 80%;'>"
 320                . "<b>$titre_groupe&nbsp;:</b>"
 321                . "<table cellpadding='0' cellspacing='0' border='0' width='100%'>\n"
 322                ."<tr><td width='47%' valign='top'>";
 323              $i = 0;
 324  
 325          while ($row = spip_fetch_array($result)) {
 326              $id_mot = $row['id_mot'];
 327              $titre_mot = propre($row['titre']);
 328              $descriptif_mot = propre($row['descriptif']);
 329  
 330              if ($i >= ($total_rows/2) AND $i < $total_rows) {
 331                  $i = $total_rows + 1;
 332                  $ret .= "</td><td width='6%'>&nbsp;</td>
 333                  <td width='47%' valign='top'>";
 334              }
 335  
 336              $ret .= boutonne($unseul, "ajouter_mot[]", $id_mot, "id='mot$id_mot' " . $les_mots[$id_mot]) .
 337                afficher_petits_logos_mots($id_mot)
 338              . "<b><label for='mot$id_mot'>$titre_mot</label></b><br />";
 339  
 340              if ($descriptif_mot)
 341                  $ret .= "$descriptif_mot<br />";
 342              $i++;
 343          }
 344  
 345          $ret .= "</td></tr></table>";
 346          $ret .= "</div>";
 347          }
 348      }
 349  
 350      return $ret;
 351  }
 352  
 353  
 354  function afficher_petits_logos_mots($id_mot) {
 355      include_ecrire ('inc_logos.php3');
 356      $on = cherche_image_nommee("moton$id_mot");
 357      if ($on) {
 358        $image = ("$on[0]$on[1].$on[2]");
 359          $taille = @getimagesize($image);
 360          $largeur = $taille[0];
 361          $hauteur = $taille[1];
 362          if ($largeur < 100 AND $hauteur < 100)
 363              return "<img src='$image' align='middle' width='$largeur'
 364              height='$hauteur' hspace='1' vspace='1' alt=' ' border='0'
 365              class='spip_image' /> ";
 366      }
 367  }
 368  
 369  
 370  
 371  /*******************************************************/
 372  /* FONCTIONS DE CALCUL DES DONNEES DU FORMULAIRE FORUM */
 373  /*******************************************************/
 374  
 375  //
 376  // Chercher le titre et la configuration du forum de l'element auquel on repond
 377  //
 378  
 379  function sql_recherche_donnees_forum ($idr, $idf, $ida, $idb, $ids) {
 380  
 381      // changer la table de reference s'il y a lieu (pour afficher_groupes[] !!)
 382      if ($ida) {
 383          $r = "SELECT titre FROM spip_articles WHERE id_article = $ida";
 384          $table = "articles";
 385      } else if ($idb) {
 386          $r = "SELECT titre FROM spip_breves WHERE id_breve = $idb";
 387          $table = "breves";
 388      } else if ($ids) {
 389          $r = "SELECT nom_site AS titre FROM spip_syndic WHERE id_syndic = $ids";
 390          $table = "syndic";
 391      } else if ($idr) {
 392          $r = "SELECT titre FROM spip_rubriques WHERE id_rubrique = $idr";
 393          $table = "rubriques";
 394      }
 395  
 396      if ($idf)
 397          $r = "SELECT titre FROM spip_forum WHERE id_forum = $idf";
 398  
 399      if ($r) {
 400          list($titre) = spip_fetch_array(spip_query($r));
 401          $titre = supprimer_numero($titre);
 402      } else 
 403          return;
 404  
 405      // quelle est la configuration du forum ?
 406      if ($ida)
 407          list($accepter_forum) = spip_fetch_array(spip_query(
 408          "SELECT accepter_forum FROM spip_articles WHERE id_article=$ida"));
 409      if (!$accepter_forum)
 410          $accepter_forum = substr(lire_meta("forums_publics"),0,3);
 411      // valeurs possibles : 'pos'teriori, 'pri'ori, 'abo'nnement
 412      if ($accepter_forum == "non")
 413          return false;
 414  
 415      return array ($titre, $table, $accepter_forum);
 416  }
 417  
 418  ?>


Généré le : Thu Feb 22 22:27:47 2007 par Balluche grâce à PHPXref 0.7