[ Index ]
 

Code source de SPIP Agora 1.4

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/Agora1-4/ecrire/ -> inc_extra.php (source)

   1  <?php
   2  /*****************************************************
   3  * This file is part of Agora, web based content management system.
   4  *
   5  * Agora is free software; you can redistribute it and/or modify
   6  * it under the terms of the GNU General Public License as published by
   7  * the Free Software Foundation; version 2 of the License.
   8  *
   9  * Agora is distributed in the hope that it will be useful,
  10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  * GNU General Public License for more details (file "COPYING").
  13  *
  14  * Copyright © Arnaud Martin, Antoine Pitrou et Philippe Rivière.
  15  * List of authors detailed in "copyright_fr.html" file.
  16  * E-mail : agora@sig.premier-ministre.gouv.fr
  17  * Web site : http://www.agora.gouv.fr
  18  *****************************************************/
  19  ////////////////////////////////////////////////////////////////////////////////////
  20  // Pour utiliser les champs "extra", il faut installer dans le fichier
  21  // ecrire/mes_options.php un tableau definissant les champs en question,
  22  // pour chaque type d'objet (article, rubrique, breve, auteur ou mot) que
  23  // l'on veut ainsi etendre ; utiliser dans l'espace public avec
  24  // [(#EXTRA|extra{"nom_du_champ"})]
  25  
  26  /*
  27  
  28  //
  29  // Definition de tous les extras possibles
  30  //
  31  
  32  $GLOBALS['champs_extra'] = Array (
  33      'auteurs' => Array (
  34              "sexe" => "ligne|brut",
  35              "age" => "ligne|propre|&Acirc;ge du capitaine",
  36              "biblio" => "bloc|propre|Bibliographie"
  37          ),
  38  
  39      'articles' => Array (
  40              "prix" => "ligne|typo|PRIX",
  41              "isbn" => "ligne|typo|ISBN"
  42          )
  43      );
  44  */
  45  
  46  /*
  47  
  48  // On peut optionnellement vouloir affiner les extras :
  49  // - pour les articles/rubriques/breves en fonction du secteur ou de la rubrique ;
  50  // L'héritage des champs EXTRA n'est possible qu'à partir d'une définition par secteur. Il est par contre possible de redéfinir pour une rubrique donnee des extras particulier. Dans ce cas cette rubrique n'herite plus des extras definis par le secteur
  51  // - pour les auteurs en fonction du statut
  52  // - pour les mots-cles en fonction du groupe de mots
  53  
  54  $GLOBALS['champs_extra_proposes'] = Array (
  55      'auteurs' => Array (
  56          // tous : par defaut
  57          'tous' =>  'age|sexe',
  58          // une biblio pour les admin (statut='0minirezo')
  59          '0minirezo' => 'age|sexe|biblio'
  60          ),
  61  
  62      'articles' => Array (
  63          // tous : par defaut
  64          'tous' => '',
  65          // 1 : id_secteur=1;
  66          1 => 'prix',
  67          // 4 : id_rubrique=4;
  68          4 => 'isbn',
  69          // -5 : id_rubrique-5;
  70          '-5' => 'isbn|prix'
  71          )
  72      );
  73  
  74  */
  75  
  76  ////////////////////////////////////////////////////////////////////////////////////
  77  
  78  //
  79  // Ce fichier ne sera execute qu'une fois
  80  if (defined("_ECRIRE_INC_EXTRA"))
  81      return;
  82  
  83  define("_ECRIRE_INC_EXTRA", "1");
  84  
  85  // a partir de la liste des champs, generer la liste des input
  86  function extra_saisie ($extra, $type, $ensemble = '') {
  87      $extra = unserialize($extra);
  88  
  89      // quels sont les extras de ce type d'objet
  90      if (!$champs = $GLOBALS['champs_extra'][$type])
  91          $champs = array();
  92  
  93      // prendre en compte, eventuellement, les champs presents dans la base
  94      // mais oublies dans mes_options.
  95      if (is_array($extra))
  96          while (list($key, ) = each($extra))
  97              if (!$champs[$key])
  98                  $champs[$key] = "masque||($key?)";
  99  
 100      // quels sont les extras proposes...
 101      // ... si l'ensemble est connu
 102      /************* Modification elebescond@clever-age.com ****************/
 103      if ($type != 'auteurs' && $type != 'mots') {
 104          $rubriqueMetier = &recuperer_instance_rubrique();
 105          $loadOK = $rubriqueMetier->load($ensemble);
 106          if (!PEAR::isError($loadOK)) {
 107              $id_secteur = $rubriqueMetier->getSecteurId();
 108          }
 109      }
 110  
 111      $heritage = false;
 112  
 113      if ($type != 'mots' && $type != 'auteurs') {
 114          $id_rubrique = $ensemble;
 115          $rubriqueMetier = &recuperer_instance_rubrique();
 116          while ($id_rubrique > 0) {
 117              $loadOK = $rubriqueMetier->load($id_rubrique);
 118              $id_rubrique = $rubriqueMetier->getParentId();
 119              if (!PEAR::isError($loadOK)) {
 120                  if (isset($GLOBALS['champs_extra_proposes'][$type]['-' . $id_rubrique])) {
 121                      $champs_proposes = explode('|', $GLOBALS['champs_extra_proposes'][$type]['-' . $id_rubrique]);
 122                      $id_rubrique = 0;
 123                      $heritage = true;
 124                  }
 125              }
 126          }
 127      }
 128  
 129      //1er cas les Extras sont définis pour la rubrique courante.
 130      if ($ensemble && isset($GLOBALS['champs_extra_proposes'][$type][$ensemble]))
 131          $champs_proposes = explode('|', $GLOBALS['champs_extra_proposes'][$type][$ensemble]);
 132      //Parcours de la hierarchie à la recherche d'héritage d'EXTRA (-xx)
 133      else if ($heritage) { }
 134      //2eme cas les Extras sont définis pour le secteur courant.
 135      else if (isset($GLOBALS['champs_extra_proposes'][$type][$id_secteur]) && $type != 'mots' && $type != 'auteurs') {
 136          $champs_proposes = explode('|', $GLOBALS['champs_extra_proposes'][$type][$id_secteur]);
 137      }
 138      // ... sinon, les champs proposes par defaut
 139      else if (isset($GLOBALS['champs_extra_proposes'][$type]['tous'])) {
 140          $champs_proposes = explode('|', $GLOBALS['champs_extra_proposes'][$type]['tous']);
 141      }
 142      // sinon tous les champs extra du type
 143      else {
 144          $champs_proposes = array();
 145          reset($champs);
 146          while (list($ch, ) = each($champs))
 147              $champs_proposes[] = $ch;
 148      }
 149      /*
 150      if ($ensemble && isset($GLOBALS['champs_extra_proposes'][$type][$ensemble]))
 151          $champs_proposes = explode('|', $GLOBALS['champs_extra_proposes'][$type][$ensemble]);
 152      // ... sinon, les champs proposes par defaut
 153      else if (isset($GLOBALS['champs_extra_proposes'][$type]['tous'])) {
 154          $champs_proposes = explode('|', $GLOBALS['champs_extra_proposes'][$type]['tous']);
 155      }
 156  
 157      // sinon tous les champs extra du type
 158      else {
 159          $champs_proposes =  Array();
 160          reset($champs);
 161          while (list($ch, ) = each($champs)) $champs_proposes[] = $ch;
 162      }
 163      */
 164      /************* Fin modification elebescond@clever-age.com ****************/
 165      // bug explode
 166      if ($champs_proposes == explode('|', ''))
 167          $champs_proposes = array();
 168  
 169      // maintenant, on affiche les formulaires pour les champs renseignes dans $extra
 170      // et pour les champs proposes
 171      reset($champs_proposes);
 172  
 173      while (list(, $champ) = each($champs_proposes)) {
 174          $desc = $champs[$champ];
 175          list($form, $filtre, $prettyname) = explode("|", $desc);
 176  
 177          if (!$prettyname)
 178              $prettyname = ucfirst($champ);
 179  
 180          $affiche .= "<b>$prettyname&nbsp;:</b><br />";
 181  
 182          switch ($form) {
 183              case "bloc":
 184              case "block":
 185                  $affiche .= "<textarea name='suppl_$champ' class='forml' rows='10' cols='40'>" . entites_html($extra[$champ]). "</textarea>\n";
 186                  break;
 187  
 188              case "masque":
 189                  $affiche .= "<font color='#555555'>" . interdire_scripts($extra[$champ]). "</font>\n";
 190                  break;
 191  
 192              case "ligne":
 193              case "line":
 194              default:
 195                  $affiche .= "<input type='text' name='suppl_$champ' class='forml'\n";
 196                  $affiche .= " value=\"" . entites_html($extra[$champ]). "\" size='40' />\n";
 197                  break;
 198          }
 199          $affiche .= "<p>\n";
 200      }
 201  
 202      if ($affiche) {
 203          debut_cadre_enfonce();
 204          echo $affiche;
 205          fin_cadre_enfonce();
 206      }
 207  }
 208  
 209  // recupere les valeurs postees pour reconstituer l'extra
 210  function extra_recup_saisie ($type) {
 211      $champs = $GLOBALS['champs_extra'][$type];
 212  
 213      if (is_array($champs)) {
 214          $extra = array();
 215  
 216          while (list($champ, ) = each($champs))
 217              $extra[$champ] = $GLOBALS["suppl_$champ"];
 218          return serialize($extra);
 219      }
 220      else
 221          return '';
 222  }
 223  
 224  // Retourne la liste des filtres a appliquer pour un champ extra particulier
 225  function extra_filtres ($type, $nom_champ) {
 226      $champ = $GLOBALS['champs_extra'][$type][$nom_champ];
 227  
 228      if (!$champ)
 229          return array();
 230  
 231      ;
 232      list(, $filtre, ) = explode("|", $champ);
 233  
 234      if ($filtre && $filtre != 'brut' && function_exists($filtre))
 235          return array($filtre);
 236  
 237      return array();
 238  }
 239  
 240  function extra_champ_valide ($type, $nom_champ) {
 241      return isset($GLOBALS['champs_extra'][$type][$nom_champ]);
 242  }
 243  
 244  // a partir de la liste des champs, generer l'affichage
 245  function extra_affichage ($extra, $type) {
 246      $extra = unserialize($extra);
 247  
 248      if (!is_array($extra))
 249          return;
 250  
 251      $champs = $GLOBALS['champs_extra'][$type];
 252  
 253      while (list($nom, $contenu) = each($extra)) {
 254          list($type, $filtre, $prettyname) = explode("|", $champs[$nom]);
 255  
 256          if ($filtre != 'brut' AND function_exists($filtre))
 257              $contenu = $filtre($contenu);
 258  
 259          if (!$prettyname)
 260              $prettyname = ucfirst($nom);
 261          if ($contenu)
 262              $affiche .= "<div><strong>$prettyname&nbsp;:</strong> " . interdire_scripts($contenu). "<br /></div>\n";
 263      }
 264  
 265      if ($affiche) {
 266          debut_cadre_enfonce();
 267          echo $affiche;
 268          fin_cadre_enfonce();
 269      }
 270  }
 271  ?>


Généré le : Sat Feb 24 14:40:03 2007 par Balluche grâce à PHPXref 0.7