[ Index ] |
|
Code source de SPIP Agora 1.4 |
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 global $nl_preview_path; 20 21 if (isset($nl_preview_path)) { 22 $GLOBALS['dossier_squelettes'] = 'ecrire/squelettes_newsletter/' . $nl_preview_path; 23 } 24 else { 25 $GLOBALS['dossier_squelettes'] = ($GLOBALS['dossier_squelettes'] ? $GLOBALS['dossier_squelettes']. '/' : ''); 26 } 27 28 // Filtre SMILEYS - 23 janvier 2003 29 // pour toute suggestion, remarque, proposition d'ajout d'un 30 // smileys, etc ; reprotez vous au forum de l'article : 31 // http://www.uzine.net/spip_contrib/article.php?id_article=38 32 33 function smileys ($chaine) { 34 $chemin = '<img alt="binette" src="IMG/binettes/'; 35 36 // On peut mettre les smileys-images où l'on veut. Mais il faut 37 // penser à modifier la variable $chemin de la fonction en conséquence. 38 $chaine = str_replace(":->", $chemin . "diable.png\">", $chaine); 39 $chaine = str_replace(":-((", $chemin . "en_colere.png\">", $chaine); 40 $chaine = str_replace(":-))", $chemin . "mort_de_rire.png\">", $chaine); 41 $chaine = str_replace(":-D", $chemin . "mort_de_rire.png\">", $chaine); 42 $chaine = str_replace(":-)", $chemin . "sourire.png\">", $chaine); 43 $chaine = str_replace(":'-))", $chemin . "pleure_de_rire.png\">", $chaine); 44 $chaine = str_replace(":'-D", $chemin . "pleure_de_rire.png\">", $chaine); 45 $chaine = str_replace(":o)", $chemin . "rigolo.png\">", $chaine); 46 $chaine = str_replace("B-)", $chemin . "lunettes.png\">", $chaine); 47 $chaine = str_replace(";-)", $chemin . "clin_d-oeil.png\">", $chaine); 48 $chaine = str_replace(":-p", $chemin . "tire_la_langue.png\">", $chaine); 49 $chaine = str_replace(":-|", $chemin . "bof.png\">", $chaine); 50 $chaine = str_replace(":-/", $chemin . "mouai.png\">", $chaine); 51 $chaine = str_replace(":-o", $chemin . "surprit.png\">", $chaine); 52 $chaine = str_replace(":-O", $chemin . "surprit.png\">", $chaine); 53 $chaine = str_replace(":-(", $chemin . "pas_content.png\">", $chaine); 54 $chaine = str_replace(":'-(", $chemin . "triste.png\">", $chaine); 55 56 return $chaine; 57 } 58 59 // Partie dont il faut prévoir l'ajout à l'install 60 /* 61 * Nom du filtre : QCM 62 * Auteur : Mathieu GIANNECCHINI 63 * Date : 7 Août 2003 64 * Fonction du filtre : Parse le code du QCM tapé dans SPIP et stocke 65 * les questions, réponses et commentaires 66 * dans un tableau et retourne le code HTML du QCM 67 */ 68 function qcm ($chaine) { 69 70 /* Messages utilisés dans le QCM 71 */ 72 $titreQCM = "QCM"; 73 $reponseJuste = "La réponse est juste"; 74 $reponseFausse = "La réponse est fausse"; 75 $reponseNulle = "Vous n'avez pas répondu"; 76 77 /* Bascule permettant de gérer les points spécifiés dans le 78 * code du QCM 79 */ 80 $gestionPoint = true; 81 82 /* Booléen permettant de savoir si il y a un QCM dans l'article 83 */ 84 $qcm = false; 85 86 /* Initialisation du score 87 */ 88 $score = 0; 89 90 /* On récupère le code du qcm entre <qcm> et </qcm> 91 */ 92 while (ereg("<qcm>", $chaine)) { 93 $qcm = true; 94 $codeHTML = ""; 95 list($texteAvant, $suite) = explode("<qcm>", $chaine, 2); 96 list($qcm, $texteApres) = explode("</qcm>", $suite, 2); 97 98 /* On isole les questions les réponses et les commentaires 99 */ 100 $ligne = split("\n", $qcm); 101 $nbligne = count($ligne); 102 103 $premierequestion = $nbQuestion; 104 105 for ($i = 0; $i < $nbligne; $i++) { 106 /* Pour chaque ligne on regarde le premier caractère 107 */ 108 switch ($ligne[$i][0]) { 109 case 'T': 110 $titreQCM = substr($ligne[$i], 1); 111 break; 112 113 case 'Q': 114 $nbQuestion++; 115 $question[$nbQuestion] = substr($ligne[$i], 1); 116 break; 117 118 case 'P': 119 /* On extrait les précisions de la proposition 120 */ 121 list($reponse, $precis) = explode("|", $ligne[$i]); 122 123 /* On extrait le numéro de la proposition et son contenu 124 */ 125 ereg("P([0-9]+)(.*)", $reponse, $eregResult1); 126 $numPropos = $eregResult1[1]; 127 128 /* On extrait les points éventuellement associés 129 * à chaque réponse 130 */ 131 if (ereg("[.](-?[0-9]+)(.*)", $eregResult1[2], $eregResult2)) { 132 $points[$nbQuestion][$numPropos] = $eregResult2[1]; 133 $choix[$nbQuestion][$numPropos] = $eregResult2[2]; 134 //$gestionPoint=true; 135 } 136 /* Si une erreur de syntaxe apparait 137 * on passe en mode par défaut pour la gestion des points 138 */ 139 else { 140 $gestionPoint = false; 141 $choix[$nbQuestion][$numPropos] = $eregResult1[2]; 142 } 143 $precision[$nbQuestion][$numPropos] = $precis; 144 break; 145 146 case 'R': 147 /* On récupère le numéro de la bonne réponse 148 */ 149 ereg("R([0-9]+)(.*)", $ligne[$i], $eregResult); 150 $numProposition = $eregResult[1]; 151 $bonneReponse[$nbQuestion] = $numProposition; 152 break; 153 154 default: 155 break; 156 } 157 } 158 159 /* 160 * Affichage du QCM 161 */ 162 // Si on ne corrige pas on affiche le QCM 163 if (!isset($GLOBALS["var_correction"])) { 164 for ($i = $premierequestion + 1; $i <= count($question); $i++) { 165 $nomVarSelect = "var_Q" . $i; 166 $codeHTML .= "<div class=\"spip_qcm_question\"><img src=\"puce.gif\" alt=\"-\"> $question[$i]</div>"; 167 $codeHTML .= "<div class=\"spip_qcm_proposition\">"; 168 169 // Si il ya plus de 5 choix, on utilise une liste 170 if (count($choix[$i]) > 5) { 171 $codeHTML .= "<select name=\"$nomVarSelect\" class=\"spip_qcm_select\">"; 172 173 for ($j = 1; $j <= count($choix[$i]); $j++) { 174 $codeHTML .= "<option value=\"$j\">"; 175 $codeHTML .= $choix[$i][$j]. "</option>"; 176 } 177 $codeHTML .= "</select>"; 178 } 179 // Sinon des radio boutons 180 else { 181 for ($j = 1; $j <= count($choix[$i]); $j++) { 182 $codeHTML 183 .= " 184 <input 185 type=\"radio\" 186 name=\"$nomVarSelect\" 187 value=\"$j\">"; 188 $codeHTML .= $choix[$i][$j]. "<br />"; 189 } 190 } 191 $codeHTML .= "</div><br />"; 192 } // Fin traitement des questions 193 } //Fin du cas sans correction 194 195 // Sinon on affiche la correction 196 else { 197 198 // Initialisation du code à retourner 199 $codeHTML = ""; 200 for ($i = $premierequestion + 1; $i <= count($question); $i++) { 201 $nomVarSelect = "var_Q" . $i; 202 203 /* On comptabilise le maximum de points que l'on peut obtenir 204 */ 205 if ($gestionPoint) { 206 $pointParQuestion = $points[$i][$bonneReponse[$i]]; 207 $scoreMax += $pointParQuestion; 208 } 209 else { 210 $pointParQuestion = 1; 211 $scoreMax += $pointParQuestion; 212 } 213 214 // La réponse choisie 215 $codeHTML 216 .= "<div class=\"spip_qcm_question\"><img src=\"puce.gif\" alt=\"-\">$question[$i]<span class=\"spip_qcm_point\">($pointParQuestion pt)</span></div>"; 217 218 // Si c'est juste 219 if ($bonneReponse[$i] == $GLOBALS[$nomVarSelect]) { 220 // Les points par défaut : 1 par bonne réponse 221 if ($gestionPoint) { 222 $score += $points[$i][$GLOBALS[$nomVarSelect]]; 223 } 224 else { 225 $score++; 226 } 227 228 $codeHTML .= "<div class=\"spip_qcm_reponse\">$introReponse"; 229 $codeHTML .= $choix[$i][$GLOBALS[$nomVarSelect]]; 230 $codeHTML .= "</div>"; 231 $codeHTML .= "<div class=\"spip_qcm_correction_juste\">$reponseJuste</div>"; 232 if (isset($precision[$i][$GLOBALS[$nomVarSelect]])) { 233 $codeHTML .= "<center><div class=\"spip_qcm_precision\">"; 234 $codeHTML .= $precision[$i][$GLOBALS[$nomVarSelect]]; 235 $codeHTML .= "</div></center>"; 236 } 237 } 238 // Si c'est faux 239 else { 240 if (isset($GLOBALS[$nomVarSelect])) { 241 $score += $points[$i][$GLOBALS[$nomVarSelect]]; 242 $codeHTML .= "<div class=\"spip_qcm_reponse\">"; 243 $codeHTML .= $choix[$i][$GLOBALS[$nomVarSelect]]; 244 $codeHTML .= "</div>"; 245 $codeHTML .= "<div class=\"spip_qcm_correction_faux\">$reponseFausse</div>"; 246 if (isset($precision[$i][$GLOBALS[$nomVarSelect]])) { 247 $codeHTML .= "<center><div class=\"spip_qcm_precision\">"; 248 $codeHTML .= $precision[$i][$GLOBALS[$nomVarSelect]]; 249 $codeHTML .= "</div></center>"; 250 } 251 } 252 else { 253 $codeHTML .= "<div class=\"spip_qcm_correction_null\">$reponseNulle</div>"; 254 } 255 } 256 $codeHTML .= "<br />"; 257 } 258 } 259 260 // On ajoute les balises <HTML> et </HTML> 261 $codeHTML = "<html>" . $codeHTML . "</html>"; 262 263 $chaine = $texteAvant . $codeHTML . $texteApres; 264 } //fin du while 265 266 if ($qcm) { 267 if (!isset($GLOBALS["var_correction"])) { 268 $teteFormulaire = "<form method=\"post\" action=\"\">"; 269 $piedFormulaire 270 = " 271 <br> 272 <input type=\"hidden\" name=\"var_correction\" value=\"yes\"> 273 <center><input type=\"submit\" value=\"Corriger\" class=\"spip_qcm_bouton_corriger\"></center> 274 </form>"; 275 $chaine = $teteFormulaire . $chaine . $piedFormulaire; 276 } 277 else { 278 // On ajoute le score final 279 $chaine .= "<center><div class=\"spip_qcm_score\">Score : $score / $scoreMax<br></div></center>"; 280 $chaine 281 .= "<div class=\"spip_qcm_bouton_corriger\" align=\"right\">[ <a href=\"$PHP_SELF\">Réinitialiser le QCM</a> ]</div>"; 282 unset ($GLOBALS["var_correction"]); 283 } 284 $chaine 285 = "<center><div class=\"spip_qcm\"><div class=\"spip_qcm_titre\">" . $titreQCM . "<hr /></div>" . $chaine . "</div></center>"; 286 } 287 288 return $chaine; 289 } 290 291 /* 292 * +----------------------------------+ 293 * Nom du Filtre : decouper_en_page 294 * +----------------------------------+ 295 * Date : Vendredi 6 juin 2003 296 * Auteur : "gpl" : gpl@macplus.org 297 * Aurélien PIERARD : aurelien.pierard@sig.premier-ministre.fr 298 * +-------------------------------------+ 299 * Fonctions de ce filtre : 300 * Il sert a présenter un article sur plusieurs pages 301 * +-------------------------------------+ 302 * 303 * Pour toute suggestion, remarque, proposition d'ajout 304 * reportez-vous au forum de l'article : 305 * http://www.uzine.net/spip_contrib/article.php?id_article=62 306 */ 307 308 function decouper_en_page ($texte) { 309 global $artsuite, $var_recherche, $num_pages; 310 311 if (empty($artsuite)) 312 $artsuite = 0; 313 314 // on divise la page (séparateur : "-----") 315 $page = split('-----', $texte); 316 // Nombre total de pages 317 $num_pages = count($page); 318 319 // Si une seule page ou numéro illégal, alors retourner tout le texte. 320 // Cas spécial : si var_recherche positionné, tout renvoyer pour permettre à la surbrillance de fonctionner correctement. 321 if ($num_pages == 1 || !empty($var_recherche) || $artsuite < 0 || $artsuite > $num_pages) { 322 // On place les ancres sur les intertitres 323 $texte = preg_replace("|\{\{\{(.*)\}\}\}|U", "<a name=\"sommaire_#NB_TITRE_DE_MON_ARTICLE#\">$0</a>", $texte); 324 $array = explode("#NB_TITRE_DE_MON_ARTICLE#", $texte); 325 $res = count($array); 326 $i = 1; 327 $texte = $array[0]; 328 329 while ($i < $res) { 330 $texte = $texte . $i . $array[$i]; 331 $i++; 332 } 333 return $texte; 334 } 335 336 $p_prec = $artsuite - 1; 337 $p_suiv = $artsuite + 1; 338 $uri_art = generer_url_article($GLOBALS['id_article']); 339 $uri_art .= strpos($uri_art, '?') ? '&' : '?'; 340 341 // On place les ancres sur les intertitres 342 $page[$artsuite] = preg_replace("|\{\{\{(.*)\}\}\}|U", "<a name=\"sommaire_#NB_TITRE_DE_MON_ARTICLE#\">$0</a>", 343 $page[$artsuite]); 344 $array = explode("#NB_TITRE_DE_MON_ARTICLE#", $page[$artsuite]); 345 $res = count($array); 346 $i = 1; 347 $page[$artsuite] = $array[0]; 348 349 while ($i < $res) { 350 $page[$artsuite] = $page[$artsuite]. $i . $array[$i]; 351 $i++; 352 } 353 354 // Pagination 355 switch (TRUE) { 356 case ($artsuite == 0): 357 $precedent = ""; 358 $suivant = "<a href='" . $uri_art . "artsuite=" . $p_suiv . "'>>></a>"; 359 break; 360 361 case ($artsuite == ($num_pages - 1)): 362 $precedent = "<a href='" . $uri_art . "artsuite=" . $p_prec . "'><<</a>"; 363 $suivant = ""; 364 break; 365 366 default: 367 $precedent = "<a href='" . $uri_art . "artsuite=" . $p_prec . "'><<</a>"; 368 $suivant = "<a href='" . $uri_art . "artsuite=" . $p_suiv . "'>>></a>"; 369 break; 370 } 371 372 for ($i = 0; $i < $num_pages; $i++) { 373 $j = $i; 374 if ($i == $artsuite) { 375 $milieu .= " <strong>" . ++$j . "</strong> "; 376 } 377 else { 378 $milieu .= " <a href='" . $uri_art . "artsuite=$i'>" . ++$j . "</a> "; 379 } 380 } 381 382 // Ici, on peut personnaliser la présentation 383 $resultat .= $page[$artsuite]; 384 $resultat 385 .= "<p class='pagination'><div class='pagination' align='center'>pages : $precedent $milieu $suivant</div></p>"; 386 return $resultat; 387 } 388 389 // FIN du Filtre decouper_en_page 390 391 /* 392 * +----------------------------------+ 393 * Nom du Filtre : Sommaire de l'article 394 * +----------------------------------+ 395 * Date : Vendredi 6 juin 2003 396 * Auteur : Noplay (noplay@altern.org) 397 * Aurélien PIERARD : aurelien.pierard@sig.premier-ministre.fr 398 * +-------------------------------------+ 399 * Fonctions de ce filtre : 400 * Cette modification permet d'afficher le sommaire de l'article 401 * généré dynamiquement à partir du texte de l'article. Vous pouvez naviguer 402 * dans l'article en cliquant sur les titres du sommaires. 403 * 404 * Tous ce qui ce trouve entre {{{ et }}} est considéré comme un titre à ajouter au sommaire de l'article. 405 * +-------------------------------------+ 406 * 407 * Pour toute suggestion, remarque, proposition d'ajout 408 * reportez-vous au forum de l'article : 409 * http://www.uzine.net/spip_contrib/article.php?id_article=76 410 */ 411 //SOMMAIRE 412 function sommaire_article ($texte) { 413 $artsuite = 0; 414 $page = split('-----', $texte); 415 $uri_art = generer_url_article($GLOBALS['id_article']); 416 $uri_art .= strpos($uri_art, '?') ? '&' : '?'; 417 418 $i = 0; 419 $texte = ""; 420 421 while ($page[$i]) { 422 // On ajoute une ancre aux intertitres "{{{ }}}" que l'on utilise pour créer le sommaire 423 preg_match_all("|\{\{\{(.*)\}\}\}|U", $page[$i], $regs); 424 $nb = 1; 425 426 for ($j = 0; $j < count($regs[1]); $j++) { 427 $p = $i + 1; 428 $texte 429 = $texte . "<a href=\"" . $uri_art . "artsuite=" . $i . "#sommaire_" . $nb . "\" title=\"" . $regs[1][$j]. "\">" . $regs[1][$j]. "</a>, p$p<br />"; 430 $nb++; 431 } 432 $i++; 433 } 434 435 return $texte; 436 } 437 // Fin du filtre sommaire 438 439 /* 440 * +----------------------------------+ 441 * Nom du Filtre : accord_pluriel 442 * +----------------------------------+ 443 * Date : mercredi 16 avril 2003 444 * Auteur : Roustoubi (roustoubi@tiscali.fr) 445 * +-------------------------------------+ 446 * Fonctions de ce filtre : 447 * Accorde le nom singulier passé en paramètre avec le nombre qui le quantifie 448 * Exemple : [#TOTAL_BOUCLE (#TOTAL_BOUCLE|accord_pluriel{article})] 449 * +-------------------------------------+ 450 * 451 * Pour toute suggestion, remarque, proposition d'ajout 452 * reportez-vous au forum de l'article : 453 * http://www.uzine.net/spip_contrib/article.php?id_article=111 454 */ 455 456 function accord_pluriel ($nombre, $nom1 = '', $nom2 = '') { 457 if ($nom1 == '') { 458 return "Erreur filtre <b>« accord_pluriel »</b> : problème de paramètre"; 459 } 460 461 if ($nom2 != '') { 462 $nom2 = " " . $nom2; 463 $nom2s = $nom2 . "s"; 464 } 465 466 if ($nombre == "0" OR $nombre == "1") { 467 $texte = $nombre . " " . $nom1 . $nom2; 468 } 469 else { 470 $texte = $nombre . " " . $nom1 . "s" . $nom2s; 471 } 472 473 return $texte; 474 } 475 // FIN du Filtre accord_pluriel 476 477 // Filtre pour afficher les chiffres en lettre 478 479 function chiffre ($unites, $genre = '') { 480 if ($unites == 1 AND $genre == 'fem') { 481 $retour = "une"; 482 } 483 484 if ($unites == 1 AND $genre != 'fem') { 485 $retour = "un"; 486 } 487 488 if ($unites == 2) { 489 $retour = "deux"; 490 } 491 492 if ($unites == 3) { 493 $retour = "trois"; 494 } 495 496 if ($unites == 4) { 497 $retour = "quatre"; 498 } 499 500 if ($unites == 5) { 501 $retour = "cinq"; 502 } 503 504 if ($unites == 6) { 505 $retour = "six"; 506 } 507 508 if ($unites == 7) { 509 $retour = "sept"; 510 } 511 512 if ($unites == 8) { 513 $retour = "huit"; 514 } 515 516 if ($unites == 9) { 517 $retour = "neuf"; 518 } 519 520 return $retour; 521 } 522 523 function chiffre_sans ($unites) { 524 if ($unites == 2) { 525 $retour = "deux"; 526 } 527 528 if ($unites == 3) { 529 $retour = "trois"; 530 } 531 532 if ($unites == 4) { 533 $retour = "quatre"; 534 } 535 536 if ($unites == 5) { 537 $retour = "cinq"; 538 } 539 540 if ($unites == 6) { 541 $retour = "six"; 542 } 543 544 if ($unites == 7) { 545 $retour = "sept"; 546 } 547 548 if ($unites == 8) { 549 $retour = "huit"; 550 } 551 552 if ($unites == 9) { 553 $retour = "neuf"; 554 } 555 556 return $retour; 557 } 558 559 function chiffre_et ($unites, $genre = '') { 560 if ($unites == 1 AND $genre == 'fem') { 561 $retour = " et une"; 562 } 563 564 if ($unites == 1 AND $genre != 'fem') { 565 $retour = " et un"; 566 } 567 568 if ($unites == 2) { 569 $retour = "-deux"; 570 } 571 572 if ($unites == 3) { 573 $retour = "-trois"; 574 } 575 576 if ($unites == 4) { 577 $retour = "-quatre"; 578 } 579 580 if ($unites == 5) { 581 $retour = "-cinq"; 582 } 583 584 if ($unites == 6) { 585 $retour = "-six"; 586 } 587 588 if ($unites == 7) { 589 $retour = "-sept"; 590 } 591 592 if ($unites == 8) { 593 $retour = "-huit"; 594 } 595 596 if ($unites == 9) { 597 $retour = "-neuf"; 598 } 599 600 return $retour; 601 } 602 603 function chiffre_dix ($unites) { 604 if ($unites == 0) { 605 $retour = "dix"; 606 } 607 608 if ($unites == 1) { 609 $retour = "onze"; 610 } 611 612 if ($unites == 2) { 613 $retour = "douze"; 614 } 615 616 if ($unites == 3) { 617 $retour = "treize"; 618 } 619 620 if ($unites == 4) { 621 $retour = "quatorze"; 622 } 623 624 if ($unites == 5) { 625 $retour = "quinze"; 626 } 627 628 if ($unites == 6) { 629 $retour = "seize"; 630 } 631 632 if ($unites == 7) { 633 $retour = "dix-sept"; 634 } 635 636 if ($unites == 8) { 637 $retour = "dix-huit"; 638 } 639 640 if ($unites == 9) { 641 $retour = "dix-neuf"; 642 } 643 644 return $retour; 645 } 646 647 function chiffre_et_dix ($unites) { 648 if ($unites == 0) { 649 $retour = "-dix"; 650 } 651 652 if ($unites == 1) { 653 $retour = " et onze"; 654 } 655 656 if ($unites == 2) { 657 $retour = "-douze"; 658 } 659 660 if ($unites == 3) { 661 $retour = "-treize"; 662 } 663 664 if ($unites == 4) { 665 $retour = "-quatorze"; 666 } 667 668 if ($unites == 5) { 669 $retour = "-quinze"; 670 } 671 672 if ($unites == 6) { 673 $retour = "-seize"; 674 } 675 676 if ($unites == 7) { 677 $retour = "-dix-sept"; 678 } 679 680 if ($unites == 8) { 681 $retour = "-dix-huit"; 682 } 683 684 if ($unites == 9) { 685 $retour = "-dix-neuf"; 686 } 687 688 return $retour; 689 } 690 691 function dizaines ($dizaines, $unites, $genre = '') { 692 if ($dizaines == 0) { 693 $retour = chiffre($unites, $genre); 694 } 695 696 if ($dizaines == 1) { 697 $retour = chiffre_dix($unites); 698 } 699 700 if ($dizaines == 2) { 701 $retour = "vingt" . chiffre_et($unites, $genre); 702 } 703 704 if ($dizaines == 3) { 705 $retour = "trente" . chiffre_et($unites, $genre); 706 } 707 708 if ($dizaines == 4) { 709 $retour = "quarante" . chiffre_et($unites, $genre); 710 } 711 712 if ($dizaines == 5) { 713 $retour = "cinquante" . chiffre_et($unites, $genre); 714 } 715 716 if ($dizaines == 6) { 717 $retour = "soixante" . chiffre_et($unites, $genre); 718 } 719 720 if ($dizaines == 7) { 721 $retour = "soixante" . chiffre_et_dix($unites); 722 } 723 724 if ($dizaines == 8 & $unites > 0) { 725 $retour = "quatre-vingt-" . chiffre($unites, $genre); 726 } 727 728 if ($dizaines == 8 & $unites == 0) { 729 $retour = "quatre-vingts"; 730 } 731 732 if ($dizaines == 9) { 733 $retour = "quatre-vingt-" . chiffre_dix($unites); 734 } 735 736 return $retour; 737 } 738 739 function par3 ($lavaleur, $demille, $genre = 'masc', $type = '') { 740 if (strlen($lavaleur) == 1) { 741 $lavaleur = "00" . $lavaleur; 742 } 743 744 if (strlen($lavaleur) == 2) { 745 $lavaleur = "0" . $lavaleur; 746 } 747 748 $centaines = substr($lavaleur, 0, 1); 749 $dizaines = substr($lavaleur, 1, 1); 750 $unites = substr($lavaleur, 2, 1); 751 752 if ($centaines > 1) { 753 $cent = "cents"; 754 } 755 756 if ($demille == "mille") { 757 $cent = "cent"; 758 } 759 760 if ($dizaines + $unites > 0) { 761 $cent = "cent"; 762 } 763 764 if (($demille == "million" OR $demille == "milliard")AND $centaines + $dizaines + $unites > 1) { 765 $demille = $demille . "s"; 766 } 767 768 if ($centaines + $dizaines + $unites > 0) { 769 $demille = " " . $demille; 770 } 771 else { 772 $demille = ""; 773 } 774 775 if ($centaines > 0) { 776 $retour = chiffre_sans($centaines). " $cent " . dizaines($dizaines, $unites, $genre); 777 } 778 else { 779 $retour = dizaines($dizaines, $unites, $genre); 780 } 781 782 if (trim($retour) == "un" & trim($demille) == "mille") { 783 $retour = ""; 784 } 785 786 if (trim($retour) == "un" AND $type == 'date') { 787 $retour = "premier"; 788 if ($genre == 'fem') 789 $retour = "première"; 790 } 791 792 if ($genre == 'fem' AND $retour == "un") 793 $retour = "une"; 794 795 return $retour . $demille; 796 } 797 798 function en_lettres ($lavaleur, $genre = 'masc', $type = '') { 799 $lavaleur = strrev($lavaleur); 800 801 $unites = par3(strrev(substr($lavaleur, 0, 3)), "", "$genre", "$type"); 802 $milliers = par3(strrev(substr($lavaleur, 3, 3)), "mille"); 803 $millions = par3(strrev(substr($lavaleur, 6, 3)), "million"); 804 $milliards = par3(strrev(substr($lavaleur, 9, 3)), "milliard"); 805 806 return trim("$milliards $millions $milliers $unites"); 807 } 808 809 function jour_en_lettres ($lavaleur) { 810 return en_lettres($lavaleur, '', 'date'); 811 } 812 813 function en_lettres_fem ($lavaleur) { 814 return en_lettres($lavaleur, 'fem', ''); 815 } 816 817 function enlettres ($lenombre, $unite = '', $unites = '', $entre = '', $apres = '', $apress = '') { 818 $lenombre = ereg_replace(",", ".", $lenombre); 819 $lenombre = explode(".", $lenombre); 820 821 $entier = $lenombre[0]; 822 823 if ($entier > 1 & strlen($unite) > 0) { 824 $unite = $unites; 825 } 826 827 $virgule = $lenombre[1]; 828 829 if ($virgule > 1 & strlen($apres) > 0) { 830 $apres = $apress; 831 } 832 833 if ($entier == 0 OR $virgule == 0) { 834 $entre = ""; 835 } 836 837 if ($entier == 0) { 838 $unite = ""; 839 } 840 841 $entier = en_lettres($entier); 842 843 if ($virgule == 0) { 844 $apres = ""; 845 } 846 847 $virgule = en_lettres($virgule); 848 849 return trim("$entier $unite $entre $virgule $apres"); 850 } 851 852 // Fin du filtre EN LETTRE 853 854 /* 855 * +----------------------------------+ 856 * Nom du Filtre : nb_spip2xhtml 857 * nb_checkparas 858 * +----------------------------------+ 859 * Date : jeudi 22 mai 2003 860 * Auteur : stef + nospam@notabene.f2o.org 861 * Aurélien 862 * +-------------------------------------+ 863 * Fonctions de ces filtres : 864 * Ils rendent conforme à xhtml le contenu généré par spip 865 * +-------------------------------------+ 866 * 867 * Pour toute suggestion, remarque, proposition d'ajout 868 * reportez-vous au forum de l'article : 869 * http://www.uzine.net/spip_contrib/article.php?id_article=164 870 */ 871 872 // FILTRE POUR COMPLIANCE XHTML 1.0 873 874 /* 875 * reformatage des intertitres 876 * */ 877 878 $GLOBALS['debut_intertitre'] = "\n<h3>"; 879 $GLOBALS['fin_intertitre'] = "</h3>\n"; 880 881 /* 882 * formatage du contenu pour validation xhtml 883 * */ 884 885 function nb_spip2xhtml ($str) { 886 if ($str != "") { 887 // suppresion des hspace, vspace 888 $str = preg_replace("/(h|v)space='.'|border=0/i", "", $str); 889 890 // img xhtml <img> -> <img /> 891 $str = preg_replace("/<img([^>]*)>/i", "<img \\1 />", $str); 892 893 // align -> style text-align 894 $str = preg_replace("/align='([a-z]*)'/i", "style=\"float:\\1;\"", $str); 895 896 // h3 imbrique dans un p 897 $str = preg_replace("/<p class=\"spip\"> <h3>/i", "<h3>", $str); 898 $str = preg_replace("/<\/h3>( )*<\/p>/i", "</h3>", $str); 899 900 // tableaux imbriques dans p 901 $str = preg_replace("/<p class=\"spip\"><table class=\"spip\">/i", "<table>", $str); 902 $str = preg_replace("/<\/table>( )*<\/p>/i", "</table>", $str); 903 904 // ol ou ul imbrique dans p 905 $str = preg_replace("/<p class=\"spip\"><(o|u)l class=\"spip\">/i", "<\\1l class=\"spip\">", $str); 906 $str = preg_replace("/<\/(o|u)l>( )*<\/p>/i", "</\\1l>", $str); 907 908 // <br> -> <br /> 909 $str = preg_replace("/<br>/i", "<br />", $str); 910 911 // <b> -> <strong> et <i> -> <em> 912 $str = preg_replace("/(<b class=\"spip\">|<b>)/i", "<strong>", $str); 913 $str = preg_replace("/(<i class=\"spip\">|<i>)/i", "<em>", $str); 914 $str = preg_replace("/<\/b>/i", "</strong>", $str); 915 $str = preg_replace("/<\/i>/i", "</em>", $str); 916 917 // FORMULAIRE 918 // passage des balises en minucule 919 $str = ereg_replace("<FORM", "<form", "$str"); 920 $str = ereg_replace("<INPUT", "<input", "$str"); 921 $str = ereg_replace("<TEXTAREA", "<textarea", "$str"); 922 $str = ereg_replace("</TEXTAREA>", "</textarea>", "$str"); 923 $str = preg_replace("/(<.*?)(TYPE=\')(.*?)(\')(.*?>)/", "\\1type=\"\\3\"\\5", "$str"); 924 $str = ereg_replace("VALUE=", "value=", "$str"); 925 // Pour le formulaire FORUM création des attributs id 926 $str = preg_replace("/(<.*?)(NAME=')(.*?)(')(.*?>)/", "\\1id=\"\\3\" name=\"\\3\"\\5", "$str"); 927 // On remplace name par id dans la balise form 928 $str = preg_replace("/(<form.*?)(name=)(.*?>)/", "\\1id=\\3", "$str"); 929 // on ferme les balises input 930 $str = preg_replace("/(<input.*?)(>)/", "\\1 />", "$str"); 931 // On supprime l'attribut WRAP des zones de texte qui n'est pas valide xhtml 932 $str = preg_replace("/(<textarea.*?)( wrap=hard| wrap=soft| wrap=off)(.*?>)/", "\\1\\3", "$str"); 933 } 934 935 // renvoyer la chaine corrigee 936 return $str; 937 } 938 // FIN du filtre nb_spip2xhtml 939 940 /* 941 * les notes ont un petit bug :il manque parfois le <p> de debut 942 * cette fonction y remedie 943 * fonction utilisee aussi sur mon site pour la bio des auteurs notamment 944 * */ 945 946 function nb_checkparas ($str) { 947 $str = trim($str); 948 949 if ($str != "") { 950 if (substr($str, 0, 2) != "<p") { 951 $str = "<p>" . $str; 952 } 953 if (substr($str, strlen($str) - 4, 4) != "</p>") { 954 $str .= "</p>"; 955 } 956 } 957 958 return $str; 959 } 960 // FIN du filtre nb_checkparas 961 962 function nettoyer_marqueur ($texte) { 963 // Enlève la conversion caractères spéciaux HTML 964 $trans_tbl = get_html_translation_table(HTML_ENTITIES); 965 $trans_tbl = array_flip($trans_tbl); 966 $texte = strtr($texte, $trans_tbl); 967 $accents = 968 /* A */ chr(192). chr(193). chr(194). chr(195). chr(196). chr(197). 969 /* a */ chr(224). chr(225). chr(226). chr(227). chr(228). chr(229). 970 /* O */ chr(210). chr(211). chr(212). chr(213). chr(214). chr(216). 971 /* o */ chr(242). chr(243). chr(244). chr(245). chr(246). chr(248). 972 /* E */ chr(200). chr(201). chr(202). chr(203). 973 /* e */ chr(232). chr(233). chr(234). chr(235). 974 /* Cc */ chr(199). chr(231). 975 /* I */ chr(204). chr(205). chr(206). chr(207). 976 /* i */ chr(236). chr(237). chr(238). chr(239). 977 /* U */ chr(217). chr(218). chr(219). chr(220). 978 /* u */ chr(249). chr(250). chr(251). chr(252). 979 /* yNn */ chr(255). chr(209). chr(241); 980 $texte = ereg_replace("<[^<]*>", "", $texte); 981 $texte = ereg_replace("[\!\?']", " ", $texte); 982 $texte = ereg_replace(" ", "_", $texte); 983 $texte = ereg_replace(" ", "_", $texte); 984 $texte = str_replace('’', '_', $texte); 985 return strtolower(strtr($texte, $accents, "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn")); 986 } 987 988 function pdf_first_clean ($texte) { 989 // $texte = ereg_replace("<p class[^>]*>", "<P>", $texte); 990 //Translation des codes iso 991 // PB avec l'utilisation de <code> 992 $trans = get_html_translation_table(HTML_ENTITIES); 993 $trans = array_flip($trans); 994 $trans["<br />\n"] 995 = "<BR>"; // Pour éviter que le \n ne se tranforme en espace dans les <DIV class=spip_code> (TT, tag SPIP : code) 996 $trans["?"] = "oe"; 997 $trans["?"] = "..."; 998 $trans["'"] = "'"; 999 $trans["-"] = "-"; 1000 $trans["'"] = "'"; 1001 $trans['"'] = "\""; 1002 $trans['"'] = "\""; 1003 $trans["û"] = "û"; 1004 $trans['$'] = '\$'; 1005 $trans['->'] = '-»'; 1006 $trans['<-'] = '«-'; 1007 $texte = strtr($texte, $trans); 1008 1009 // Echappement des " 1010 $texte = ereg_replace("\"", "\\\"", $texte); 1011 1012 // Traitement des Espaces 1013 $texte = ereg_replace("( | )+", " ", $texte); 1014 1015 // Traitement des cadres 1016 $trans = array("\n" => '<BR>'); 1017 1018 while (preg_match('/(.*<textarea[^>]*>)(.*\n.*)(<\/textarea>.*)/ims', $texte, $textarea)) { 1019 $rep = strtr($textarea[2], $trans); 1020 $texte = $textarea[1]. $rep . $textarea[3]; 1021 } 1022 1023 return $texte; 1024 } 1025 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sat Feb 24 14:40:03 2007 | par Balluche grâce à PHPXref 0.7 |