Changeset 7817 in spip-zone


Ignore:
Timestamp:
Dec 8, 2006, 5:41:56 AM (14 years ago)
Author:
patfr@…
Message:
  • resolution d'un bug utf-8
  • retrait de la saisie sur les modifications
  • nouvelle fonction : saisie rapide des mots clés !
Location:
_plugins_/_stable_/agenda/saisie_rapide
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/agenda/saisie_rapide/exec/saisie_rapide.php

    r7438 r7817  
    3636
    3737// essai d'intertionalisation...
     38// les lignes suivantes devront être inclues dans les fichiers de langue
    3839$test = _T('onchargelalangue');
    3940$GLOBALS[$GLOBALS['idx_lang']] += array(
     
    4647 'saisie_rapide_article' => "Article propriétaire : ",
    4748 'saisie_rapide_compilation' => "COMPILATION DE LA LISTE",
    48  'saisie_rapide_compilation_infos' => "Voici votre liste interpr&eacute;t&eacute;e par le compilateur.<br>En absence d'erreur, enregistrez d&eacute;finitvement les &eacute;v&egrave;nements suivants :",
     49 'saisie_rapide_compilation_infos' => "Voici votre liste interpr&eacute;t&eacute;e par le compilateur.<br />En absence d'erreur, enregistrez d&eacute;finitivement les &eacute;v&egrave;nements suivants :",
     50 'saisie_rapide_occurences' => "Autres occurences :",
     51 'saisie_rapide_mots_clefs' => "Mots-cl&eacute;s accept&eacute;s :",
     52 'saisie_rapide_aucun_mot' => "aucun n'existe !",
    4953 'saisie_rapide_evenement_de' => "EVENEMENTS DE : ",
    5054 'saisie_rapide_heure_id' => "Id.",
     
    6670} else include_spip('inc/commencer_page');
    6771
     72// retourne un tableau de mots ou d'expressions a partir d'un texte
     73function retourne_liste_mots($texte) {
     74        $texte = filtrer_entites(trim($texte));
     75        $texte = preg_replace("/[\|\s\t\n\r]+/", " ", $texte);
     76        $split = split('"', $texte);
     77        $c = count($split);
     78        for($i=0; $i<$c; $i++) if ($i & 1) $split[$i] = preg_replace('/[ ,]+/', '+', trim($split[$i]));
     79        $texte = join('', $split);
     80        $texte = preg_replace("/ *,+ */","\t", $texte);
     81        $texte = preg_replace("/\++/"," ", $texte);
     82        return array_unique(split("\t", trim($texte)));
     83}
     84
    6885include_spip('inc/agenda_filtres');
    6986include_spip('inc/agenda_gestion');
     
    7188function affiche_et_enregistre(&$t) {
    7289 global $result;
    73 
    74  debut_cadre_enfonce("../plugins/agenda/img_pack/agenda-24.png", false, "", _T('saisie_rapide_merci'));
     90 // affichage recapitulatif
     91 debut_cadre_enfonce("../"._DIR_PLUGIN_AGENDA."/img_pack/agenda-24.png", false, "", _T('saisie_rapide_merci'));
    7592 foreach($t as $e=>$v) if ($t[$e]=="") unset($t[$e]);
    7693 affiche_table_evenements($t);
    7794 fin_cadre_enfonce();
    7895 echo "<div align='center'><button class='fondo' onClick='javascript:window.close()'>"._T('saisie_rapide_fermer').'</button></div>';
     96 // enregistrer les nouveaux evenements
    7997 set_request('evenement_insert', 1);
    8098 foreach ($result as $r) {
     
    82100  Agenda_action_formulaire_article(_request('id_article'));
    83101 }
     102 unset($result);
    84103 // affiche_evenements_article(); // Peut-etre pas necessaire...
    85104 echo "<script type=\"text/javascript\"><!--
     
    91110 global $titre_defaut;
    92111 //echo Agenda_formulaire_article(_request('id_article'), false);
    93  echo "<br>";
    94  debut_cadre_enfonce("../plugins/agenda/img_pack/agenda-24.png", false, "", _T('saisie_rapide_evenement_de').$titre_defaut);
     112 echo "<br />";
     113 debut_cadre_enfonce("../"._DIR_PLUGIN_AGENDA."/img_pack/agenda-24.png", false, "", _T('saisie_rapide_evenement_de').$titre_defaut);
    95114  list($s, $les_evenements) = Agenda_formulaire_article_afficher_evenements(_request('id_article'), false);
    96115  echo $s;
     
    104123                        "([0-9]{1,2})?:?([0-9]{1,2})?-?([0-9]{1,2})?:?([0-9]{1,2})? *".
    105124                        '" *([^ ^"][^"]*) *" *("([^"]*)")? *("([^"]*)")? *'.
    106                         '(REP *=)?([0-9 /,]*)?', $t[$e]=trim($t[$e]), $regs)) {
     125                        '((MOTS|REP) *=.*)?', $t[$e]=trim($t[$e]), $regs)) {
    107126   // annee_debut omise
    108127   if($regs[3]=='') $regs[3]=date('Y', time());
     
    115134   // format complet
    116135   for ($i=0;$i<=10;$i++) $regs[$i]=sprintf("%02d", intval($regs[$i]));
     136   // cas des REP= et MOTS=
     137   $listes = preg_split('/(MOTS|REP) *= */', $regs[16], -1, PREG_SPLIT_DELIM_CAPTURE);
     138   $rep = $mots = array();
     139   foreach($listes as $i => $valeur) if ($i & 1)
     140   foreach($listes as $i => $valeur) if ($i & 1) {
     141         if ($valeur=='REP' && ereg('([0-9 /,]*)', $listes[$i+1], $regs2))
     142           $rep = array_merge($rep, retourne_liste_mots($regs2[1]));
     143         elseif ($valeur=='MOTS')
     144           $mots = array_merge($mots, retourne_liste_mots($listes[$i+1]));
     145   }
     146   $regs[17] = str_replace(',', ', ', str_replace(' ', '',join(',',$rep)));
     147   $regs[18] = join(', ',$mots);
     148   // remise en forme
    117149   $t[$e]="$regs[1]/$regs[2]/$regs[3]-$regs[4]/$regs[5]/$regs[6] $regs[7]:$regs[8]-$regs[9]:$regs[10]".
    118                   " \"$regs[11]\" \"$regs[13]\" \"$regs[15]\" REP=".str_replace(' ','',trim($regs[17]));
     150                  " \"$regs[11]\" \"$regs[13]\" \"$regs[15]\" REP=$regs[17] MOTS=$regs[18]";
    119151  } else { if ($t[$e]!="") $t[$e]=""; else unset($t[$e]); }
    120152 }
     153}
     154
     155// retourne le tableau des mots acceptés par groupe
     156function verifie_les_mots_clefs($mots_envoyes) {
     157        $les_mots_ok = $mots_compiles = array();
     158        // on recupere tous les mots cles sur les evenements
     159        $res = spip_query("SELECT * FROM spip_groupes_mots WHERE evenements='oui'");
     160        while ($row = spip_fetch_array($res,SPIP_ASSOC)){
     161                $id_groupe = $row['id_groupe'];
     162                $titre = supprimer_numero($row['titre']);
     163                $res2= spip_query("SELECT * FROM spip_mots WHERE id_groupe=".spip_abstract_quote($id_groupe));
     164                while ($row2 = spip_fetch_array($res2,SPIP_ASSOC)){
     165                        $les_mots_ok[]=array(   'nb'=>0, 'id_mot'=>$row2['id_mot'], 'titre_mot'=> $row2['titre'],
     166                                                                                        'id_groupe'=>$id_groupe, 'titre_groupe'=> $titre,
     167                                                                                        'echo' => $titre.':'.$row2['titre']);
     168                }
     169        }
     170        // on voit quels mots cles on retient...
     171        foreach($mots_envoyes as $mot) { if (preg_match('/((([^:]+):)?(.*))/', $mot, $regs))
     172         foreach($les_mots_ok as $mot_ok=>$tab)
     173                if ($tab['titre_mot']==$regs[4] && ($regs[3]=='' || $regs[3]==$tab['titre_groupe']))
     174                        { ++$les_mots_ok[$mot_ok]['nb']; break; }
     175        }
     176        // on renvoie le resultat !
     177        foreach($les_mots_ok as $mot_ok=>$tab) if($tab['nb']) {
     178                $mots_compiles['echo'][] = $tab['echo'];
     179                $mots_compiles['post'][$tab['id_groupe']][] = $tab['id_mot'];
     180        }
     181        return $mots_compiles;
    121182}
    122183
     
    138199  if (ereg ("([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})-([0-9]{1,2})/([0-9]{1,2})/([0-9]{4}) ".
    139200                        "([0-9]{1,2}):([0-9]{1,2})-([0-9]{1,2}):([0-9]{1,2}) ".
    140                         '"([^"]*)" ("([^"]*)") ("([^"]*)") *'.
    141                         '(REP=)([0-9 /,]*)?', $t[$e], $regs)) {
     201                        '"([^"]*)" ("([^"]*)") ("([^"]*)") '.
     202                        'REP=([0-9 /,]*)? MOTS=(.*)', $t[$e], $regs)) { //print_r($regs);
    142203   echo "<td>$regs[1]/$regs[2]/$regs[3]</td><td>$regs[4]/$regs[5]/$regs[6]</td>";
    143204   echo "<td><div align=center>$regs[7]:$regs[8]</div></td><td><div align=center>$regs[9]:$regs[10]</div></td>";
    144205   echo "<td>$regs[11]</td><td>".($regs[13]?$regs[13]:"&nbsp;")."</td><td>".($regs[15]?$regs[15]:"&nbsp;")."</td></tr>\n";
    145    if ($regs[17]!="") echo "<tr ><th>&nbsp;</th><td colspan=7>Autres occurences : ".str_replace(',',', ',$regs[17])."</td></tr>";
     206   if ($regs[16]!="") echo "<tr ><th>&nbsp;</th><td colspan=7>"._T('saisie_rapide_occurences')." $regs[16]</td></tr>";
    146207   $result[$n]['evenement_titre']=$regs[11];
    147208   $result[$n]['evenement_lieu']=$regs[13];
     
    158219   $result[$n]['heure_evenement_fin']=$regs[9];
    159220   $result[$n]['minute_evenement_fin']=$regs[10];
    160    $result[$n]['selected_date_repetitions']=$regs[17];
     221   $result[$n]['selected_date_repetitions']=str_replace(', ',',',$regs[16]);
     222   $groupes_ok = verifie_les_mots_clefs(split(', ', $regs[17]));
     223   if (count($groupes_ok['echo'])) {
     224     $mots_clefs = join(', ', $groupes_ok['echo']);
     225         echo "<tr ><th>&nbsp;</th><td colspan=7>"._T('saisie_rapide_mots_clefs')." $mots_clefs</td></tr>";
     226     foreach($groupes_ok['post'] as $id_groupe=>$mots) $result[$n]["evenement_groupe_mot_select_$id_groupe"]=$mots;
     227   } elseif ($regs[17]!="")
     228          echo "<tr ><th>&nbsp;</th><td colspan=7>"._T('saisie_rapide_mots_clefs')." "._T('saisie_rapide_aucun_mot')."</td></tr>";
    161229  } else echo "<td colspan=7>Format invalide !</td></tr>";
    162230 }
     
    165233
    166234function affiche_compilation(&$t) {
    167  debut_cadre_enfonce("../plugins/agenda/img_pack/agenda-24.png", false, "", _T('saisie_rapide_compilation'));
    168  echo _T('saisie_rapide_compilation_infos');
     235 debut_cadre_enfonce("../"._DIR_PLUGIN_AGENDA."/img_pack/agenda-24.png", false, "", _T('saisie_rapide_compilation'));
     236 echo _T('saisie_rapide_compilation_infos'); 
    169237 ?>
    170238  <form method="POST">
     
    172240  <input name='action' type='hidden' value='enregistre' />
    173241  <input name='id_article' type='hidden' value='<?=_request('id_article')?>' />
    174   <input name='liste_evenements' type='hidden' value="<?=htmlentities(_request('liste_evenements'))?>" />
     242  <input name='liste_evenements' type='hidden' value="<?=htmlspecialchars(_request('liste_evenements'))?>" />
    175243  <?php affiche_table_evenements($t); ?>
    176244 <div align='right'><input class='fondo' type='submit' value='<?=_T('saisie_rapide_enregistrer')?>'></div>
     
    181249
    182250function affiche_formulaire() {
    183   debut_cadre_enfonce("../plugins/agenda/img_pack/agenda-24.png", false, "", _T('saisie_rapide_votre_liste'));
     251  debut_cadre_enfonce("../"._DIR_PLUGIN_AGENDA."/img_pack/agenda-24.png", false, "", _T('saisie_rapide_votre_liste'));
    184252  echo _T('saisie_rapide_votre_liste_infos');
    185253  ?>
     
    192260  <a href="<?=generer_url_ecrire("saisie_rapide", "id_article="._request("id_article"))?>"><?=_T('saisie_rapide_reset')?></a>
    193261  <div align='right'><input class='fondo' type='submit' value='<?=_T('saisie_rapide_compiler')?>'></div></form>
     262  <p>
    194263  <?php fin_cadre_enfonce();
    195264    debut_cadre_formulaire(); ?>
    196265    <strong>Syntaxe</strong> : &quot;jj/mm[/aaaa][-jj/mm[/aaaa]] [hh:mm[-hh:mm]]
    197266    &quot;Le titre&quot;
    198 [&quot;Le lieu&quot; [ &quot;La description&quot;]] [REP=jj/mm/aaaa[,jj/mm/aaaa,etc]]<br>
    199  Les crochets indiquent les &eacute;l&eacute;ments facultatifs. <br>
    200  Les r&eacute;p&eacute;titions de l'&eacute;v&egrave;nement sont indiqu&eacute;es par  'REP=' suivi d'une liste de dates s&eacute;par&eacute;es par des virgules. <br>
    201  Bien respecter les espaces (ou tabulations) entre les &eacute;l&eacute;ments et ne pas mettre de guillemets dans les textes. <br>
    202     <br>
     267[&quot;Le lieu&quot; [ &quot;La description&quot;]] [REP=jj/mm/aaaa[,jj/mm/aaaa,etc.]] [MOTS=[groupe1:]mot1[,[groupe2:]mot2,etc.]]<br />
     268<br />
     269<strong>Notes</strong> : Les crochets indiquent les &eacute;l&eacute;ments facultatifs. <br />
     270Les r&eacute;p&eacute;titions de l'&eacute;v&egrave;nement sont indiqu&eacute;es par  'REP=' suivi d'une liste de dates s&eacute;par&eacute;es par des virgules.<br />
     271Les mots-cl&eacute;s de l'&eacute;v&egrave;nement sont indiqu&eacute;s par  'MOTS=' suivi d'une liste de mots (&eacute;ventuellement pr&eacute;c&eacute;d&eacute;s de leur groupe) s&eacute;par&eacute;s par des virgules. Attention aux majuscules/minuscules. <br />
     272Respectez bien les espaces (ou tabulations) entre les &eacute;l&eacute;ments et ne mettez pas de guillemets &agrave; l'int&eacute;rieur des textes. <br />
     273    <br />
    203274
    204275    <em>Exemple 1</em> :
    20527620/09/2006 19:30-22:00 &quot;R&eacute;p&eacute;tition de rentr&eacute;e&quot; &quot;Temple des Gobelins&quot; &quot;Reprise de contact, Durufl&eacute;, et mise au point des calendriers&quot;<br />
    206 <em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ajoute un &eacute;v&egrave;nement pr&eacute;cis &agrave; une date pr&eacute;cise, et d'une dur&eacute;e  pr&eacute;cise)</em><br>
     277<em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ajoute un &eacute;v&egrave;nement pr&eacute;cis &agrave; une date pr&eacute;cise, et d'une dur&eacute;e  pr&eacute;cise)</em><br />
    207278    <em>Exemple 2</em> :
    208   17/08-23/08 &quot;Stage d'&eacute;t&eacute; <?=date('Y', time())?> &quot; &quot;Les Salines&quot; <br>
    209   <em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ajoute un &eacute;v&egrave;nement cette ann&eacute;e, sans description et sur plusieurs jours)<br />
     279  17/08-23/08 &quot;Stage d'&eacute;t&eacute;
     280  <?=date('Y', time())?>
     281&quot; &quot;Les Salines&quot; MOTS=photos, Agenda:priv&eacute;<br />
     282  <em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ajoute un &eacute;v&egrave;nement cette ann&eacute;e, sans description et sur plusieurs jours en ajoutant deux mots-cl&eacute;s)<br />
    210283  Exemple 3</em> :
    211284  01/01/2007 &quot;Bonne ann&eacute;e &agrave; tous !&quot; REP=01/01/2008,01/01/2009,01/01/2010<br />
    212285  <em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ajoute un &eacute;v&egrave;nement sans horaire, sans lieu, &agrave; une date pr&eacute;cise et r&eacute;p&eacute;t&eacute; sur 3 autres dates)</em><br />
    213   <em></em>
     286  <em></em> </p>
    214287  <?php fin_cadre_formulaire();
    215288}
     
    217290function exec_saisie_rapide_dist()
    218291{ global $titre_defaut;
    219         //header("Content-Type: text/html; charset=utf-8");
     292        header("Content-Type: text/html; charset=utf-8");
    220293        //echo _DOCTYPE_ECRIRE, html_lang_attributes();
    221294        //echo "<head><title>", "L'agenda pour les experts",    "</title></head>\n";
     
    233306        if ($row = spip_fetch_array($res)) $titre_defaut = $row['titre'];
    234307        echo '<h3>'._T('saisie_rapide_article')._request('id_article').". $titre_defaut</h3>";
    235     $t=split("\n",_request('liste_evenements'));
     308    $t=split("\n",html_entity_decode(_request('liste_evenements')));
     309//      print_r($t);
    236310        compile_t($t);
    237         if  (_request('action')=='enregistre') affiche_et_enregistre($t);
     311        if  (_request('action')=='enregistre')
     312                affiche_et_enregistre($t);
    238313        else {
    239314                if (_request('liste_evenements')) affiche_compilation($t);
  • _plugins_/_stable_/agenda/saisie_rapide/inc/agenda_gestion.php

    r7438 r7817  
    569569function Agenda_formulaire_edition_evenement($id_evenement, $neweven, $ndate="", $titre_defaut=""){
    570570        global $spip_lang_right;
    571 //      $out = "";
    572         $out = '<div align="right"><span class="verdana1"><strong><a href="'
     571        $out = "";
     572        // *************** début Modif Patrice ******************** //
     573        if (_request('id_article') && ($neweven || !$id_evenement))
     574          $out .= '<div align="right"><span class="verdana1"><strong><a href="'
    573575                .generer_url_ecrire('saisie_rapide','id_article='._request('id_article'))
    574                 .'" onclick="javascript:window.open(this.href,\'spip_pat\', \'scrollbars=yes, resizable=yes, width=740, height=580\'); return false;" target=spip_pat'
    575                 .'>(Saisie rapide)</a><br></strong><br></span></div>';                  // Modif Patrice
     576                .'" onclick="javascript:window.open(this.href,\'saisie_pat\', \'scrollbars=yes, resizable=yes, width=740, height=580\'); return false;" target=saisie_pat'
     577                .'>('._T('Saisie rapide').')</a><br /></strong><br /></span></div>';                   
     578        // ******************************************************** //
     579        // A placer dans les fichiers de langue : 'Saisie rapide'   //
     580        // *************** fin Modif Patrice ********************** //
    576581        // inits
    577582        $ftitre=$titre_defaut;
Note: See TracChangeset for help on using the changeset viewer.