Changeset 7572 in spip-zone for _plugins_/_stable_/qcm/qcm_pipelines.php


Ignore:
Timestamp:
Nov 26, 2006, 6:05:28 AM (13 years ago)
Author:
patfr@…
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/qcm/qcm_pipelines.php

    r7276 r7572  
    1010                        dans un tableau et retourne le code HTML du QCM
    1111  Mode d'emploi          :      http://www.spip-contrib.net/Un-QCM-dans-vos-articles
     12 
     13  Titre du QCM :
     14        - soit sur une ligne de la forme 'T Voici mon titre' placee entre les
     15          balises <qcm> et </qcm>
     16        - soit entre les balises <qcm-titre> et </qcm-titre>
     17        - soit entre les balises <intro> et </intro>
     18                (Spip s'en servira egalement en cas d'absence de descriptif pour
     19                calculer la balise #INTRODUCTION utilisee pour resumer l'article)
     20
     21  Calcul de #INTRODUCTION : si introduction() n'est pas surchargee, Spip cherche
     22  d'abord le descriptif, puis en cas d'echec, le contenu du texte situé entre
     23  les balises <intro> et </intro>. En dernier lieu, Spip utilise les 500 premiers
     24  caractères du chapeau suivi du texte.
     25  Attention donc : pour ne pas faire apparaitre le contenu du QCM avec les
     26  reponses, il vaut mieux penser à bien définir :
     27        - soit le descriptif de l'article
     28        - soit une introduction placee entre les balises <intro> et </intro>
     29                (utiliser dans ce cas les balises <qcm-titre> et </qcm-titre>
     30                pour definir le titre du QCM)
     31        - soit le titre du QCM place entre les balises <intro> et </intro>
     32 
    1233*/
    1334 
    1435 define(_QCM_DEBUT, '<qcm>');
    1536 define(_QCM_FIN, '</qcm>');
     37 define(_QCM_TITRE_DEBUT, '<qcm-titre>');
     38 define(_QCM_TITRE_FIN, '</qcm-titre>');
    1639 
    1740// cette fonction remplit le tableau $qcms sur la question $indexQCM
     
    2447      case 'T' :
    2548                // On extrait le titre
    26                 $titreQCM=substr($li,1);
     49                $titreQCM=propre(substr($li,1));
    2750                break;
    2851
     
    78101} // function
    79102
    80 // cette fonction retourne true si un qcm est trouve, false dans le cas contraire
     103// cette fonction retourne le texte entre deux balises si elles sont presentes
     104// et false dans le cas contraire
     105function qcm_recupere_le_titre(&$chaine, $ouvrant, $fermant) {
     106  // si les balises ouvrantes et fermantes ne sont pas presentes, c'est mort
     107  if (strpos($chaine, $ouvrant)===false || strpos($chaine, $fermant)===false) return false;
     108  list($texteAvant, $suite) = explode($ouvrant, $chaine, 2);
     109  list($texte, $texteApres) = explode($fermant, $suite, 2);
     110  // on supprime les balises de l'affichage...
     111  $chaine = $texteAvant.'<!QCM-DEBUT-#0>'.$texteApres;
     112  return trim($texte);
     113}
     114
     115
     116// cette fonction modifie $chaine et retourne true si un qcm est trouve, false dans le cas contraire
    81117function qcm_recupere_une_question(&$chaine, &$indexQCM, &$titreQCM) {
    82118  global $qcms;
     
    180216        $indexQCM = intval($eregResult[1]);
    181217        list($texteAvant, $texteApres) = explode($eregResult[0], $chaine, 2);
    182         $chaine = "$texteAvant<!-- QCM-DEBUT #$indexQCM -->\n"
     218        $chaine = "$texteAvant<!QCM-DEBUT-#$indexQCM>\n"
    183219                . qcm_affiche_la_question($indexQCM, isset($_POST["var_correction"]), $gestionPoints)
    184                 . "<!-- QCM-FIN #$indexQCM -->\n"
     220                . "<!QCM-FIN-#$indexQCM>\n"
    185221                . qcm_inserer_les_qcm($texteApres, $gestionPoints);
    186222  }
     
    194230  // initialisation 
    195231  global $qcms, $qcm_score;
    196   $titreQCM = _T('qcm:qcm_titre');
     232  $titreQCM = false;
    197233  $indexQCM =  $qcm_score = 0;
    198234  $qcms['nbquestions'] = $qcms['totalscore'] = $qcms['totalpropositions'] = 0;
    199235 
     236  // on cherche les questions
    200237  while (qcm_recupere_une_question($chaine, $indexQCM, $titreQCM)) {
    201238    $qcms['totalpropositions'] +=  count($qcms[$indexQCM]['propositions']);
     
    207244  $gestionPoints = $qcms['totalscore']<>$qcms['nbquestions'];
    208245
     246  // trouver un titre, coute que coute...
     247  if (!$titreQCM) $titreQCM = qcm_recupere_le_titre($chaine, _QCM_TITRE_DEBUT, _QCM_TITRE_FIN);
     248  if (!$titreQCM) $titreQCM = qcm_recupere_le_titre($chaine, '<intro>', '</intro>');
     249  if (!$titreQCM) $titreQCM = _T('qcm:qcm_titre');
     250 
    209251  // reinserer les qcms mis en forme
    210252  $chaine = qcm_inserer_les_qcm($chaine, $gestionPoints);
     
    224266                                . '<div class="spip_qcm_bouton_corriger" align="right">[ <a href="'
    225267                                . parametre_url(self(),'var_mode','recalcul').'">'._T('qcm:qcm_reinitialiser').'</a> ]</div>';
    226      // unset($_POST["var_correction"]);
    227268  }
    228   $chaine = str_replace('<!-- QCM-DEBUT #0 -->', $tete.'<!-- QCM-DEBUT #0 -->', $chaine);
    229   $chaine = str_replace('<!-- QCM-FIN #'.($indexQCM-1).' -->', $pied.'</div>', $chaine);
     269 
     270  // introduire l'entete et le pied
     271  $chaine = preg_replace(',(<!QCM-DEBUT-#0>),', $tete."\\1", $chaine, 1);
     272  $chaine = str_replace($temp='<!QCM-FIN-#'.($indexQCM-1).'>', $temp.$pied.'</div>', $chaine);
    230273
    231274  unset($qcms);
    232   return $chaine;
     275  return "<!PLUGIN-DEBUT>$chaine<!PLUGIN-FIN>";
    233276}
    234277
     
    262305}
    263306
    264 function qcm_pre_typo($texte) {
     307function qcm_pre_propre($texte) {
    265308        return qcm_qcm($texte);
    266309}       
    267310
     311function qcm_post_propre($texte) {
     312        return preg_replace(',<!((QCM|PLUGIN)-(DEBUT|FIN)(-#[0-9]+)?)>,UimsS', '<!-- \\1 -->', $texte);
     313}       
     314
     315
    268316?>
Note: See TracChangeset for help on using the changeset viewer.