[ 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_filtres.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  // Ce fichier ne sera execute qu'une fois
  20  if (defined("_ECRIRE_INC_FILTRES"))
  21      return;
  22  
  23  define("_ECRIRE_INC_FILTRES", "1");
  24  
  25  // Include filtres pour la generation XML du DXS
  26  require_once ("inc_dxs.php");
  27  
  28  // End include
  29  
  30  // Echappement des entites HTML avec correction des entites "brutes"
  31  // (generees par les butineurs lorsqu'on rentre des caracteres n'appartenant
  32  // pas au charset de la page [iso-8859-1 par defaut])
  33  function corriger_entites_html ($texte) {
  34      return ereg_replace('&amp;(#[0-9]+;)', '&\1', $texte);
  35  }
  36  
  37  function entites_html ($texte) {
  38      return corriger_entites_html(htmlspecialchars($texte));
  39  }
  40  
  41  // Transformer les &eacute; dans le charset local
  42  function filtrer_entites ($texte) {
  43      include_ecrire ('inc_charsets.php');
  44      // filtrer
  45      $texte = html2unicode($texte);
  46      // remettre le tout dans le charset cible
  47      return unicode2charset($texte);
  48  }
  49  
  50  // Tout mettre en entites pour l'export backend (sauf iso-8859-1)
  51  function entites_unicode ($texte) {
  52      include_ecrire ('inc_charsets.php');
  53      return charset2unicode($texte);
  54  }
  55  
  56  // Enleve le numero des titres numerotes ("1. Titre" -> "Titre")
  57  function supprimer_numero ($texte) {
  58      $texte = ereg_replace("^[[:space:]]*[0-9]+[.)" . chr(176). "][[:space:]]+", "", $texte);
  59      return $texte;
  60  }
  61  
  62  // Suppression basique et brutale de tous les <...>
  63  function supprimer_tags ($texte, $rempl = "") {
  64      // super gavant : la regexp ci-dessous plante sous php3, genre boucle infinie !
  65      // $texte = ereg_replace("<([^>\"']*|\"[^\"]*\"|'[^']*')*>", $rempl, $texte);
  66      $texte = ereg_replace("<[^>]*>", $rempl, $texte);
  67      return $texte;
  68  }
  69  
  70  // Convertit les <...> en la version lisible en HTML
  71  function echapper_tags ($texte, $rempl = "") {
  72      $texte = ereg_replace("<([^>]*)>", "&lt;\\1&gt;", $texte);
  73      return $texte;
  74  }
  75  
  76  // Convertit un texte HTML en texte brut
  77  function textebrut ($texte) {
  78      $texte = ereg_replace("[\n\r]+", " ", $texte);
  79      $texte = eregi_replace("<(p|br)([[:space:]][^>]*)?" . ">", "\n\n", $texte);
  80      $texte = ereg_replace("^\n+", "", $texte);
  81      $texte = ereg_replace("\n+$", "", $texte);
  82      $texte = ereg_replace("\n +", "\n", $texte);
  83      $texte = supprimer_tags($texte);
  84      $texte = ereg_replace("(&nbsp;| )+", " ", $texte);
  85      return $texte;
  86  }
  87  
  88  // Remplace les liens SPIP en liens ouvrant dans une nouvelle fenetre (target=blank)
  89  function liens_ouvrants ($texte) {
  90      return ereg_replace("<a ([^>]*https?://[^>]*class=\"spip_(out|url)\")>", "<a \\1 target=\"_blank\">", $texte);
  91  }
  92  
  93  // Corrige les caracteres degoutants utilises par les Windozeries
  94  function corriger_caracteres ($texte) {
  95      static $trans;
  96  
  97      if (!$trans) {
  98          // 145,146,180 = simple quote ; 147,148 = double quote ; 150,151 = tiret long
  99          $trans['iso-8859-1'] = array(chr(146)=> "'", chr(180)=> "'", chr(147)=> '&#8220;', chr(148)=> '&#8221;',
 100                                 chr(150)=> '-', chr(151)=> '-', chr(133)=> '...');
 101          $trans['utf-8'] = array(chr(194). chr(146)=> "'", chr(194). chr(180)=> "'", chr(194). chr(147)=> '&#8220;',
 102                            chr(194). chr(148)=> '&#8221;', chr(194). chr(150)=> '-', chr(194). chr(151)=> '-',
 103                            chr(194). chr(133)=> '...');
 104      }
 105  
 106      $charset = lire_meta('charset');
 107  
 108      if (!$trans[$charset])
 109          return $texte;
 110  
 111      if ($GLOBALS['flag_strtr2'])
 112          return strtr($texte, $trans[$charset]);
 113  
 114      reset($trans[$charset]);
 115  
 116      while (list($from, $to) = each($trans[$charset]))
 117          $texte = str_replace($from, $to, $texte);
 118  
 119      return $texte;
 120  }
 121  
 122  // Transformer les sauts de paragraphe en simples passages a la ligne
 123  function PtoBR ($texte) {
 124      $texte = eregi_replace("</p>", "\n", $texte);
 125      $texte = eregi_replace("<p([[:space:]][^>]*)?" . ">", "<br />", $texte);
 126      $texte = ereg_replace("^[[:space:]]*<br />", "", $texte);
 127      return $texte;
 128  }
 129  
 130  // Majuscules y compris accents, en HTML
 131  function majuscules ($texte) {
 132      if (lire_meta('charset') != 'iso-8859-1')
 133          return "<span style='text-transform: uppercase'>$texte</span>";
 134  
 135      $suite = htmlentities($texte);
 136      $suite = ereg_replace('&amp;', '&', $suite);
 137      $suite = ereg_replace('&lt;', '<', $suite);
 138      $suite = ereg_replace('&gt;', '>', $suite);
 139      $texte = '';
 140  
 141      if (ereg('^(.*)&([A-Za-z])([a-zA-Z]*);(.*)$', $suite, $regs)) {
 142          $texte .= majuscules($regs[1]); // quelle horrible recursion
 143          $suite = $regs[4];
 144          $carspe = $regs[2];
 145          $accent = $regs[3];
 146  
 147          if (ereg('^(acute|grave|circ|uml|cedil|slash|caron|ring|tilde|elig)$', $accent))
 148              $carspe = strtoupper($carspe);
 149  
 150          if ($accent == 'elig')
 151              $accent = 'Elig';
 152          $texte .= '&' . $carspe . $accent . ';';
 153      }
 154  
 155      $texte .= strtoupper($suite);
 156      return $texte;
 157  }
 158  
 159  // "127.4 ko" ou "3.1 Mo"
 160  function taille_en_octets ($taille) {
 161      if ($taille < 1024) {
 162          $taille = _T('taille_octets', array('taille' => $taille));
 163      }
 164      else if ($taille < 1024 * 1024) {
 165          $taille = _T('taille_ko', array('taille' => ((floor($taille / 102.4)) / 10)));
 166      }
 167      else {
 168          $taille = _T('taille_mo', array('taille' => ((floor(($taille / 1024) / 102.4)) / 10)));
 169      }
 170  
 171      return $taille;
 172  }
 173  
 174  // Transforme n'importe quel champ en une chaine utilisable
 175  // en PHP ou Javascript en toute securite
 176  // < ? php $x = '[(#TEXTE|texte_script)]'; ? >
 177  function texte_script ($texte) {
 178      $texte = str_replace('\\', '\\\\', $texte);
 179      $texte = str_replace('\'', '\\\'', $texte);
 180      return $texte;
 181  }
 182  
 183  // Rend une chaine utilisable sans dommage comme attribut HTML
 184  function attribut_html ($texte) {
 185      $texte = ereg_replace('"', '&quot;', supprimer_tags($texte));
 186      return $texte;
 187  }
 188  
 189  // Vider les url nulles comme 'http://' ou 'mailto:'
 190  function vider_url ($url) {
 191      if (eregi("^(http:?/?/?|mailto:?)$", trim($url)))
 192          return false;
 193      else
 194          return $url;
 195  }
 196  
 197  // Extraire une date de n'importe quel champ (a completer...)
 198  function extraire_date ($texte) {
 199      // format = 2001-08
 200      if (ereg("([1-2][0-9]{3})[^0-9]*(0?[1-9]|1[0-2])", $texte, $regs))
 201          return $regs[1]. "-" . $regs[2]. "01";
 202  }
 203  
 204  // Maquiller une adresse e-mail
 205  function antispam ($texte) {
 206      include_ecrire ("inc_acces.php");
 207      $masque = creer_pass_aleatoire(3);
 208      return ereg_replace("@", " $masque ", $texte);
 209  }
 210  
 211  // |sinon{rien} : affiche "rien" si la chaine est vide, affiche la chaine si non vide
 212  function sinon ($texte, $sinon = '') {
 213      if ($texte)
 214          return $texte;
 215      else
 216          return $sinon;
 217  }
 218  
 219  //
 220  // Date, heure, saisons
 221  //
 222  
 223  function normaliser_date ($date) {
 224      /* Ajout nhoizey@clever-age.com */
 225      if ($date == '1970-01-01 00:00:00')
 226          $date .= ' GMT';
 227      /* Fin d'ajout */
 228      if ($date != "NULL") {
 229          if (ereg("^[0-9]{8,10}$", $date))
 230              $date = date("Y-m-d H:i:s", $date);
 231          if (ereg("^([12][0-9]{3})([-/]00)?( [-0-9:]+)?$", $date, $regs))
 232              $date = $regs[1]. "-01-01" . $regs[3];
 233          else if (ereg("^([12][0-9]{3}[-/][01]?[0-9])([-/]00)?( [-0-9:]+)?$", $date, $regs))
 234              $date = ereg_replace("/", "-", $regs[1]). "-01" . $regs[3];
 235          else if ($GLOBALS['flag_strtotime']) {
 236              $date = date("Y-m-d H:i:s", strtotime($date));
 237          }
 238          else
 239              $date = ereg_replace('[^-0-9/: ]', '', $date);
 240      }
 241  
 242      return $date;
 243  }
 244  
 245  function vider_date ($letexte) {
 246      if (ereg("^0000-00-00", $letexte))
 247          return '';
 248  
 249      return $letexte;
 250  }
 251  
 252  function recup_heure ($numdate) {
 253      if (!$numdate)
 254          return '';
 255  
 256      if (ereg('([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})', $numdate, $regs)) {
 257          $heures = $regs[1];
 258          $minutes = $regs[2];
 259          $secondes = $regs[3];
 260      }
 261  
 262      return array($heures, $minutes, $secondes);
 263  }
 264  
 265  function heures ($numdate) {
 266      $date_array = recup_heure($numdate);
 267  
 268      if ($date_array)
 269          list($heures, $minutes, $secondes) = $date_array;
 270  
 271      return $heures;
 272  }
 273  
 274  function minutes ($numdate) {
 275      $date_array = recup_heure($numdate);
 276  
 277      if ($date_array)
 278          list($heures, $minutes, $secondes) = $date_array;
 279  
 280      return $minutes;
 281  }
 282  
 283  function secondes ($numdate) {
 284      $date_array = recup_heure($numdate);
 285  
 286      if ($date_array)
 287          list($heures, $minutes, $secondes) = $date_array;
 288  
 289      return $secondes;
 290  }
 291  
 292  function heures_minutes ($numdate) {
 293      return _T('date_fmt_heures_minutes', array('h' => heures($numdate), 'm' => minutes($numdate)));
 294  }
 295  
 296  function recup_date ($numdate) {
 297      if (!$numdate)
 298          return '';
 299  
 300      if (ereg('([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})', $numdate, $regs)) {
 301          $jour = $regs[1];
 302          $mois = $regs[2];
 303          $annee = $regs[3];
 304  
 305          if ($annee < 90) {
 306              $annee = 2000 + $annee;
 307          }
 308          else {
 309              $annee = 1900 + $annee;
 310          }
 311  
 312          $heure = $regs[4];
 313          $minute = $regs[5];
 314          $seconde = $regs[6];
 315      }
 316      elseif (ereg('([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})', $numdate, $regs)) {
 317          $annee = $regs[1];
 318          $mois = $regs[2];
 319          $jour = $regs[3];
 320          $heure = $regs[4];
 321          $minute = $regs[5];
 322          $seconde = $regs[6];
 323      }
 324      elseif (ereg('([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})', $numdate, $regs)) {
 325          $annee = $regs[1];
 326          $mois = $regs[2];
 327          $jour = $regs[3];
 328      }
 329      elseif (ereg('([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2})', $numdate, $regs)) {
 330          $jour = $regs[1];
 331          $mois = $regs[2];
 332          $annee = $regs[3];
 333          if ($annee < 90) {
 334              $annee = 2000 + $annee;
 335          }
 336          else {
 337              $annee = 1900 + $annee;
 338          }
 339      }
 340      elseif (ereg('([0-9]{4})-([0-9]{2})', $numdate, $regs)) {
 341          $annee = $regs[1];
 342          $mois = $regs[2];
 343      }
 344  
 345      if ($annee > 4000)
 346          $annee -= 9000;
 347  
 348      if (substr($jour, 0, 1) == '0')
 349          $jour = substr($jour, 1);
 350  
 351      return array($annee, $mois, $jour, $heure, $minute, $seconde);
 352  }
 353  
 354  function affdate_base ($numdate, $vue) {
 355      global $spip_lang;
 356      $date_array = recup_date($numdate);
 357  
 358      if ($date_array)
 359          list($annee, $mois, $jour, $heure, $minute, $seconde) = $date_array;
 360      else
 361          return '';
 362  
 363      // 1er, 21st, etc.
 364      $journum = $jour;
 365  
 366      switch ($spip_lang) {
 367          case 'en':
 368              switch ($jour) {
 369                  case 0:
 370                      $jour = '';
 371                      break;
 372  
 373                  case 1:
 374                      $jour = '1st';
 375                      break;
 376  
 377                  case 2:
 378                      $jour = '2nd';
 379                      break;
 380  
 381                  case 3:
 382                      $jour = '3rd';
 383                      break;
 384  
 385                  case 21:
 386                      $jour = '21st';
 387                      break;
 388  
 389                  case 22:
 390                      $jour = '22nd';
 391                      break;
 392  
 393                  case 23:
 394                      $jour = '23rd';
 395                      break;
 396  
 397                  case 31:
 398                      $jour = '31st';
 399                      break;
 400  
 401                  default:
 402                      $jour .= 'th';
 403              }
 404  
 405          case 'fr':
 406              if ($jour == '1')
 407                  $jour = '1er';
 408      }
 409  
 410      if ($jour == 0)
 411          $jour = '';
 412  
 413      $mois = intval($mois);
 414  
 415      if ($mois > 0 AND $mois < 13)
 416          $nommois = _T('date_mois_' . $mois);
 417      else
 418          $nommois = '';
 419  
 420      if ($annee < 0) {
 421          $annee = -$annee . " " . _T('date_avant_jc');
 422          $avjc = true;
 423      }
 424      else
 425          $avjc = false;
 426  
 427      switch ($vue) {
 428          case 'complet':
 429              if ($avjc)
 430                  return $annee;
 431              if ($jour)
 432                  return d_apostrophe(_T('date_fmt_jour_mois_annee_heure_minute_seconde',
 433                                         array('jour' => $jour, 'nommois' => $nommois, 'mois' => $mois, 'annee' => $annee,
 434                                         'heure' => $heure, 'minute' => $minute, 'seconde' => $seconde)));
 435              else
 436                  return d_apostrophe(
 437                             _T('date_fmt_jour_mois_annee_heure_minute_seconde',
 438                                array('mois' => $mois, 'nommois' => $nommois, 'annee' => $annee, 'heure' => $heure,
 439                                'minute' => $minute, 'seconde' => $seconde)));
 440  
 441          case 'saison':
 442              if ($mois > 0) {
 443                  $saison = 1;
 444  
 445                  if (($mois == 3 AND $jour >= 21)OR $mois > 3)
 446                      $saison = 2;
 447  
 448                  if (($mois == 6 AND $jour >= 21)OR $mois > 6)
 449                      $saison = 3;
 450  
 451                  if (($mois == 9 AND $jour >= 21)OR $mois > 9)
 452                      $saison = 4;
 453                  if (($mois == 12 AND $jour >= 21)OR $mois > 12)
 454                      $saison = 1;
 455              }
 456              return _T('date_saison_' . $saison);
 457  
 458          case 'court':
 459              if ($avjc)
 460                  return $annee;
 461              $a = date('Y');
 462              if ($annee < ($a - 100)OR $annee > ($a + 100))
 463                  return $annee;
 464              if ($annee != $a)
 465                  return d_apostrophe(_T('date_fmt_mois_annee',
 466                                         array('mois' => $mois, 'nommois' => ucfirst($nommois), 'annee' => $annee)));
 467              return d_apostrophe(_T('date_fmt_jour_mois',
 468                                     array('jour' => $jour, 'nommois' => $nommois, 'mois' => $mois, 'annee' => $annee)));
 469  
 470          case 'jourcourt':
 471              if ($avjc)
 472                  return $annee;
 473              $a = date('Y');
 474              if ($annee < ($a - 100)OR $annee > ($a + 100))
 475                  return $annee;
 476              if ($annee != $a)
 477                  return d_apostrophe(
 478                             _T('date_fmt_jour_mois_annee',
 479                                array('jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee)));
 480              return d_apostrophe(_T('date_fmt_jour_mois',
 481                                     array('jour' => $jour, 'nommois' => $nommois, 'mois' => $mois, 'annee' => $annee)));
 482  
 483          case 'entier':
 484              if ($avjc)
 485                  return $annee;
 486              if ($jour)
 487                  return d_apostrophe(
 488                             _T('date_fmt_jour_mois_annee',
 489                                array('jour' => $jour, 'nommois' => $nommois, 'mois' => $mois, 'annee' => $annee)));
 490              else
 491                  return d_apostrophe(
 492                             _T('date_fmt_mois_annee', array('mois' => $mois, 'nommois' => $nommois, 'annee' => $annee)));
 493  
 494          case 'nom_mois':
 495              return $nommois;
 496  
 497          case 'mois':
 498              return sprintf("%02s", $mois);
 499  
 500          case 'jour':
 501              return $jour;
 502  
 503          case 'journum':
 504              return $journum;
 505  
 506          case 'nom_jour':
 507              if (!$mois OR !$jour)
 508                  return '';
 509              $nom = mktime(1, 1, 1, $mois, $jour, $annee);
 510              $nom = 1 + date('w', $nom);
 511              return _T('date_jour_' . $nom);
 512  
 513          case 'mois_annee':
 514              if ($avjc)
 515                  return $annee;
 516              return trim(d_apostrophe(_T('date_fmt_mois_annee',
 517                                          array('mois' => $mois, 'nommois' => $nommois, 'annee' => $annee))));
 518  
 519          case 'annee':
 520              return $annee;
 521      }
 522  
 523      return "<blink>" . _T('info_format_non_defini'). "</blink>";
 524  }
 525  
 526  function nom_jour ($numdate) {
 527      return affdate_base($numdate, 'nom_jour');
 528  }
 529  
 530  function jour ($numdate) {
 531      return affdate_base($numdate, 'jour');
 532  }
 533  
 534  function journum ($numdate) {
 535      return affdate_base($numdate, 'journum');
 536  }
 537  
 538  function mois ($numdate) {
 539      return affdate_base($numdate, 'mois');
 540  }
 541  
 542  function nom_mois ($numdate) {
 543      return affdate_base($numdate, 'nom_mois');
 544  }
 545  
 546  function annee ($numdate) {
 547      return affdate_base($numdate, 'annee');
 548  }
 549  
 550  function saison ($numdate) {
 551      return affdate_base($numdate, 'saison');
 552  }
 553  
 554  function affdate ($numdate) {
 555      return affdate_base($numdate, 'entier');
 556  }
 557  
 558  function affdate_court ($numdate) {
 559      return affdate_base($numdate, 'court');
 560  }
 561  
 562  function affdate_jourcourt ($numdate) {
 563      return affdate_base($numdate, 'jourcourt');
 564  }
 565  
 566  function affdate_mois_annee ($numdate) {
 567      return affdate_base($numdate, 'mois_annee');
 568  }
 569  
 570  function affdate_heure ($numdate) {
 571      return _T('date_fmt_jour_heure', array('jour' => affdate($numdate), 'heure' => heures_minutes($numdate)));
 572  }
 573  
 574  // renvoie "d'octobre" (ocitan) ou "de octubre" (espagnol)
 575  function d_apostrophe ($texte) {
 576      global $spip_lang;
 577  
 578      if (ereg("^(oci_.+|fr|ca)$", $spip_lang))
 579          return ereg_replace("^(.+ )?de ([aeiou])", "\\1d'\\2", $texte);
 580      else
 581          return $texte;
 582  }
 583  
 584  //
 585  // Alignements en HTML
 586  //
 587  
 588  function aligner ($letexte, $justif) {
 589      /* --- nhoizey ---
 590      $letexte = eregi_replace("<p([^>]*)", "<p\\1 align='$justif'", trim($letexte));
 591      if ($letexte AND !ereg("^[[:space:]]*<p", $letexte)) {
 592          $letexte = "<p class='spip' align='$justif'>" . $letexte . "</p>";
 593      }
 594      */
 595      $letexte = eregi_replace("<p([^>]*)", "<p\\1 style=\"text-align: $justif;\"", trim($letexte));
 596      // ajout Olivier Mansour 
 597      // detection de la class du paragraphe et annulation de l'application du style 
 598      $letexte = eregi_replace("(<p class=\"(spip_vignette|spip_titre_document|spip_descriptif|spip_complement)\")[^>]*>",
 599                               "\\1>",
 600                               $letexte);
 601  
 602      // fin ajout Olivier Mansour
 603      if ($letexte AND !ereg("^[[:space:]]*<p", $letexte)) {
 604          $letexte = '<p class="spip" style="text-align: ' . $justif . ';">' . $letexte . '</p>';
 605      }
 606  
 607      return $letexte;
 608  }
 609  
 610  function justifier ($letexte) {
 611      return aligner($letexte, 'justify');
 612  }
 613  
 614  function aligner_droite ($letexte) {
 615      return aligner($letexte, 'right');
 616  }
 617  
 618  function aligner_gauche ($letexte) {
 619      return aligner($letexte, 'left');
 620  }
 621  
 622  function centrer ($letexte) {
 623      return aligner($letexte, 'center');
 624  }
 625  
 626  //
 627  // Export iCal
 628  //
 629  
 630  function filtrer_ical ($texte) {
 631      $texte = html2unicode($texte);
 632      $texte = unicode2charset(charset2unicode($texte, lire_meta('charset'), 1), 'utf-8');
 633      $texte = ereg_replace("\n", " ", $texte);
 634      $texte = ereg_replace(",", "\,", $texte);
 635  
 636      return $texte;
 637  }
 638  
 639  function date_ical ($date_heure, $minutes = 0) {
 640      return date("Ymd\THis",
 641                  mktime(heures($date_heure), minutes($date_heure) + $minutes, 0, mois($date_heure), jour($date_heure),
 642                         annee($date_heure)));
 643  }
 644  
 645  //
 646  // Recuperation de donnees dans le champ extra
 647  // Ce filtre n'a de sens qu'avec la balise #EXTRA
 648  //
 649  
 650  function extra ($letexte, $champ) {
 651      $champs = unserialize($letexte);
 652      return $champs[$champ];
 653  }
 654  
 655  //
 656  // array_push et array_pop pour php3 (a virer si on n'a pas besoin de la compatibilite php3
 657  // et a passer dans inc_version si on a besoin de ces fonctions ailleurs qu'ici)
 658  //
 659  /*
 660   * Avertissement : Cette librairie de fonctions PHP est distribuee avec l'espoir 
 661   * qu'elle sera utile, mais elle l'est SANS AUCUNE GARANTIE; sans meme la garantie de 
 662   * COMMERCIALISATION ou d'UTILITE POUR UN BUT QUELCONQUE.
 663   * Elle est librement redistribuable tant que la presente licence, ainsi que les credits des 
 664   * auteurs respectifs de chaque fonctions sont laisses ensembles. 
 665   * En aucun cas, Nexen.net ne pourra etre tenu responsable de quelques consequences que ce soit
 666   * de l'utilisation ou la mesutilisation de ces fonctions PHP.
 667   */
 668  /****
 669   * Titre : array_push() et array_pop() pour PHP3 
 670   * Auteur : Cedric Fronteau 
 671   * Email : charlie@nexen.net
 672   * Url : 
 673   * Description : Implementation de array_push() et array_pop pour PHP3
 674  ****/
 675  function php3_array_push (&$stack, $value) {
 676      if (!is_array($stack))
 677          return FALSE;
 678  
 679      end($stack);
 680  
 681      do {
 682          $k = key($stack);
 683  
 684          if (is_long($k))
 685              ;
 686  
 687          break;
 688      } while (prev($stack));
 689  
 690      if (is_long($k))
 691          $stack[$k + 1] = $value;
 692      else
 693          $stack[0] = $value;
 694  
 695      return count($stack);
 696  }
 697  
 698  function php3_array_pop (&$stack) {
 699      if (!is_array($stack) || count($stack) == 0)
 700          return NULL;
 701  
 702      end($stack);
 703      $v = current($stack);
 704      $k = key($stack);
 705      unset($stack[$k]);
 706      return $v;
 707  }
 708  
 709  // Ajout Olivier Mansour 
 710  /****
 711   * titre : absolute_url 
 712   * Auteur : Olivier Mansour
 713   * Email : omansour@clever-age.com
 714   * Description : transforme les URLS relatives en URLS absolues 
 715   (utile pour la newsletter)
 716  ****/
 717  function absolute_url ($chaine) {
 718      // TBI : quid si le href n'est pas en premier ?     
 719      $URL_SITE_SPIP = lire_meta('adresse_site');
 720  
 721      // rajout d'un / éventuellement 
 722      if (substr($URL_SITE_SPIP, strlen($URL_SITE_SPIP) - 1, 1) != '/')
 723          $URL_SITE_SPIP .= '/';
 724  
 725      $chaine = eregi_replace('<a href="', '<a href="' . $URL_SITE_SPIP, $chaine);
 726      $chaine = eregi_replace('<a href="' . $URL_SITE_SPIP . 'http://([^"]*)"', "<a href=\"http://\\1\"", $chaine);
 727  
 728      $chaine = eregi_replace('<img src="', '<img src="' . $URL_SITE_SPIP, $chaine);
 729      $chaine = eregi_replace('<img src="' . $URL_SITE_SPIP . 'http://([^"]*)"', "<img src=\"http://\\1\"", $chaine);
 730  
 731      // virer les http:// devant les #nb (les notes)
 732      $chaine = eregi_replace('<a href="' . $URL_SITE_SPIP . '(#nb[^"]*)"', '<a href="\\1"', $chaine);
 733  
 734      return $chaine;
 735  }
 736  
 737  // fin ajout Olivier Mansour
 738  
 739  // Ajout Olivier Mansour 
 740  /****
 741   * titre : version_texte
 742   * Auteur : Olivier Mansour
 743   * Email : omansour@clever-age.com
 744   * Description : transforme un texte au format HTML en texte brut, 
 745      par rapport a textebrut => traite les notes de bas de page, les liens, les intertitres, les images
 746      // Remplace tous les liens selon la logique suivante :
 747      //   '<a href="link">link</a>' devient 'link'
 748      //   '<a href="link">text</a>' devient 'text (link)'
 749    fonction issues de Clever Mail (-> NHoizey)  
 750    (utile pour la newsletter ? avec textebrut apres ? )
 751    ? a tester ? 
 752    ? gestion des images ? 
 753  ****/
 754  function version_texte ($in) {
 755      // nettoyage des retours chariots
 756      $out = str_replace("\n", '', $out);
 757  
 758      // Nettoyage des liens des notes de bas de page
 759      $out = ereg_replace(
 760                 "<a href=\"#n(b|h)[0-9]+-[0-9]+\" name=\"n(b|h)[0-9]+-[0-9]+\" class=\"spip_note\">([0-9]+)</a>", "\\3",
 761                 $in);
 762  
 763      // les puces 
 764      $out = str_replace($GLOBALS['puce'], "\n" . '-', $out);
 765  
 766      // Remplace tous les liens
 767  
 768      while (eregi("<a href=['\"]([^'\">]+)['\"][^>]*>([^<]+)</a>", $out, $regs)) {
 769          $cleanReg1 = ereg_replace("\\?", "\?", $regs[1]);
 770          $cleanReg1 = ereg_replace("\\+", "\+", $cleanReg1);
 771          $cleanReg1 = ereg_replace("\\(", "\(", $cleanReg1);
 772          $cleanReg1 = ereg_replace("\\)", "\)", $cleanReg1);
 773  
 774          $cleanReg2 = ereg_replace("\\?", "\?", $regs[2]);
 775          $cleanReg2 = ereg_replace("\\+", "\+", $cleanReg2);
 776          $cleanReg2 = ereg_replace("\\(", "\(", $cleanReg2);
 777          $cleanReg2 = ereg_replace("\\)", "\)", $cleanReg2);
 778          if ($regs[1] == $regs[2]) {
 779              $out = eregi_replace("<a href=['\"]" . $cleanReg1 . "['\"][^>]*>" . $cleanReg1 . "</a>", $regs[1], $out);
 780          }
 781          else {
 782              $out = eregi_replace("<a href=['\"]" . $cleanReg1 . "['\"][^>]*>" . $cleanReg2 . "</a>",
 783                                   $regs[2]. " ( " . $regs[1]. " )",
 784                                   $out);
 785          }
 786      }
 787  
 788      // les images 
 789      while (eregi("<img src=['\"]([^'\">]+)['\"][^>]*title=['\"]([^'\">]+)['\"][^>]*>", $out, $regs)) {
 790          $out = str_replace($regs[0], basename($regs[1]). ' (' . $regs[1]. ') ' . $regs[2]. "\n", $out);
 791      }
 792  
 793      while (eregi("<img src=['\"]([^'\">]+)['\"][^>]*>", $out, $regs)) {
 794          $out = str_replace($regs[0], basename($regs[1]). ' (' . $regs[1]. ') ' . "\n", $out);
 795      }
 796  
 797      //$out = translitteration($out, 'iso-8859-1');
 798      $out = str_replace('&oelig;', 'oe', $out . "<br /><br /><br /><br />");
 799      $out = str_replace("<h3 class='spip'>",
 800                         "\n----------------------------------------------------------------------\n",
 801                         $out);
 802      $out = str_replace("<h3>", "\n----------------------------------------------------------------------\n", $out);
 803      $out = str_replace("</h3>", "\n----------------------------------------------------------------------", $out);
 804      $out = str_replace("</p>", "\n", $out);
 805  
 806      // Les notes de bas de page
 807      $out = str_replace("<p class=\"spip_note\">", "\n", $out);
 808      $out = ereg_replace("<sup>([0-9]+)</sup>", "[\\1]", $out);
 809  
 810      //$out = str_replace('<br /><img class=\'spip_puce\' src=\'puce.gif\' alt=\'-\' border=\'0\'>', "\n".'-', $out);
 811      $out = ereg_replace('<li[^>]>', "\n" . '-', $out);
 812      //$out = str_replace('<li>', "\n".'-', $out);
 813  
 814      //$out = ereg_replace("<p align='center'><img src='([^']+)' border=0 width='[0-9]+' height='[0-9]+' align='center' hspace='[0-9]+' vspace='[0-9]+'>'", "\nIllustration : \\1\n", $out);
 815  
 816      // accentuation du gras - 
 817      // <b>texte</b> -> *texte*
 818      $out = ereg_replace('<b[^>|r]*>', '*', $out);
 819      $out = str_replace('</b>', '*', $out);
 820  
 821      // accentuation de l'italique
 822      // <i>texte</i> -> *texte*
 823      $out = ereg_replace('<i[^>|mg]*>', '*', $out);
 824      $out = str_replace('</i>', '*', $out);
 825  
 826      $out = supprimer_tags($out);
 827      $out = unhtmlentities($out);
 828  
 829      $out = str_replace("&nbsp;", " ", $out);
 830      $out = str_replace("&#8217;", "'", $out);
 831      $out = str_replace("&#171;", "«", $out);
 832      $out = str_replace("&#187;", "»", $out);
 833      $out = str_replace("&#8220;", "\"", $out);
 834      $out = str_replace("&#8221;", "\"", $out);
 835      $out = str_replace("&#176;", "°", $out);
 836      $out = str_replace("&#8364;", "E", $out);
 837      $out = str_replace("&#36;", "E", $out);
 838      $out = wordwrap($out, 70, "\n");
 839  
 840      return $out;
 841  }
 842  
 843  // fin ajout Olivier Mansour
 844  
 845  // For users prior to PHP 4.3.0 you may do this:
 846  function unhtmlentities ($string) {
 847      $trans_tbl = get_html_translation_table(HTML_ENTITIES);
 848      $trans_tbl = array_flip($trans_tbl);
 849      //var_dump($trans_tbl);
 850      return strtr($string, $trans_tbl);
 851  }
 852  
 853  //
 854  // Filtre |alterner
 855  //
 856  // Exemple [(#COMPTEUR_BOUCLE|alterner{'bleu','vert','rouge'})]
 857  //
 858  // http://doc.spip.org/@alterner
 859  function alterner($i) {
 860      // recuperer les arguments (attention fonctions un peu space)
 861      $num = func_num_args();
 862      $args = func_get_args();
 863  
 864      // renvoyer le i-ieme argument, modulo le nombre d'arguments
 865      return $args[(intval($i)-1)%($num-1)+1];
 866  }
 867  
 868  ?>


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