source: trunk/spip/esqueleto-redcta/plugins/agenda/1_9_2/inc/agenda_saisie_rapide.php @ 30

Last change on this file since 30 was 30, checked in by sebas, 17 years ago

nueva importacion del codigo del esqueleto de redcta con los plugins

File size: 8.3 KB
Line 
1<?php
2
3if ($GLOBALS['spip_version_code']<1.92){
4 function set_request($var, $val = NULL) {
5        unset($_GET[$var]);
6        unset($_POST[$var]);
7        if ($val !== NULL) $_GET[$var] = $val;
8 }
9}
10
11// retourne un tableau de mots ou d'expressions a partir d'un texte
12function Agenda_retourne_liste_mots($texte) {
13        $texte = filtrer_entites(trim($texte));
14        $texte = preg_replace("/[\|\s\t\n\r]+/", " ", $texte);
15        $split = split('"', $texte);
16        $c = count($split);
17        for($i=0; $i<$c; $i++) if ($i & 1) $split[$i] = preg_replace('/[ ,]+/', '+', trim($split[$i]));
18        $texte = join('', $split);
19        $texte = preg_replace("/ *,+ */","\t", $texte);
20        $texte = preg_replace("/\++/"," ", $texte);
21        return array_unique(split("\t", trim($texte)));
22}
23
24
25function Agenda_compile_texte_saisie_rapide($texte) {
26        $t=split("\n",html_entity_decode($texte));     
27        foreach($t as $e=>$v) {
28                $t[$e]=trim(str_replace("\t", " ", $t[$e]));
29                if (ereg ("([0-9]{1,2})/([0-9]{1,2})/?([0-9]{4})?-?([0-9]{1,2})?/?([0-9]{1,2})?/?([0-9]{4})? +".
30                "([0-9]{1,2})?:?([0-9]{1,2})?-?([0-9]{1,2})?:?([0-9]{1,2})? *".
31                '" *([^ ^"][^"]*) *" *("([^"]*)")? *("([^"]*)")? *'.
32                '((MOTS|REP) *=.*)?', $t[$e]=trim($t[$e]), $regs)) {
33                        $evenement_horaire = true;
34                        // annee_debut omise
35                        if($regs[3]=='') $regs[3]=date('Y', time());
36                        // annee_fin omise
37                        if($regs[6]=='') $regs[6]=$regs[3]; ;
38                        // heure_fin omise
39                        if($regs[9].$regs[10]=='') { $regs[9]=$regs[7]; $regs[10]=$regs[8]; }   
40                        if ($reg[7].$reg[8].$reg[9].$reg[10]=='') $evenement_horaire=false;
41                        // date_fin omise
42                        if($regs[4].$regs[5]=='') { $regs[4]=$regs[1]; $regs[5]=$regs[2]; }   
43                        // format complet
44                        for ($i=0;$i<=10;$i++) $regs[$i]=sprintf("%02d", intval($regs[$i]));
45                        // cas des REP= et MOTS=
46                        $listes = preg_split('/(MOTS|REP) *= */', $regs[16], -1, PREG_SPLIT_DELIM_CAPTURE);
47                        $rep = $mots = array();
48                        foreach($listes as $i => $valeur) 
49                                if ($i & 1) 
50                                        foreach($listes as $i => $valeur) 
51                                        if ($i & 1) {
52                                                if ($valeur=='REP' && ereg('([0-9 /,]*)', $listes[$i+1], $regs2)) 
53                                                        $rep = array_merge($rep, Agenda_retourne_liste_mots($regs2[1]));
54                                                elseif ($valeur=='MOTS') 
55                                                        $mots = array_merge($mots, Agenda_retourne_liste_mots($listes[$i+1]));
56                                        }
57                        // todo : mettre les mots au format des select du formulaire normal
58                        $mots_compiles = Agenda_verifie_les_mots_clefs($mots);
59                        // mettre les repetitions au format du textarea du formulaire normal
60                        $selected_rep = "";
61                        foreach($rep as $k=>$r){
62                                $r =explode("/",$r);
63                                $selected_rep .= ",".sprintf('%02d',$r[1])."/".sprintf('%02d',$r[0])."/".sprintf('%04d',$r[2]);
64                                $rep[$k] = mktime($reg[7],$regs[8],null,$r[1],$r[0],$r[2]);
65                        }
66                        $selected_rep = substr($selected_rep,1);
67                        // remise en forme en doubon : idem a un post ou idem a un spip_query
68                        $t[$e]=array_merge(array(
69                        'jour_evenement_debut' =>$regs[1],
70                        'mois_evenement_debut' =>$regs[2],
71                        'annee_evenement_debut' =>$regs[3],
72                        'heure_evenement_debut' =>$regs[7],
73                        'minute_evenement_debut' =>$regs[8],
74                        'jour_evenement_fin' =>$regs[4],
75                        'mois_evenement_fin' =>$regs[5],
76                        'annee_evenement_fin' =>$regs[6],
77                        'heure_evenement_fin' =>$regs[9],
78                        'minute_evenement_fin' =>$regs[10],
79                        'evenement_horaire' => $evenement_horaire,
80                        'evenement_titre' =>$regs[11],
81                        'evenement_lieu' =>$regs[13],
82                        'evenement_descriptif' =>$regs[15],
83                        'evenement_groupe_mot_select' => $mots_compiles['echo'],
84                        'evenement_repetitions' => $rep,
85                        'selected_date_repetitions' => $selected_rep
86                        ),$mots_compiles['post']);
87                } 
88                else {
89                        if ($t[$e]!="") $t[$e]=array(); else unset($t[$e]);
90                }
91        }
92        return $t;
93}
94
95// retourne le tableau des mots acceptes par groupe
96function Agenda_verifie_les_mots_clefs($mots_envoyes) {
97        $les_mots_ok = $mots_compiles = array();
98        // on recupere tous les mots cles sur les evenements
99        $res = spip_query("SELECT * FROM spip_groupes_mots WHERE evenements='oui'");
100        while ($row = spip_fetch_array($res,SPIP_ASSOC)){
101                $id_groupe = $row['id_groupe'];
102                $titre = supprimer_numero($row['titre']);
103                $res2= spip_query("SELECT * FROM spip_mots WHERE id_groupe=".spip_abstract_quote($id_groupe));
104                while ($row2 = spip_fetch_array($res2,SPIP_ASSOC)){
105                        $les_mots_ok[]=array(   'nb'=>0, 'id_mot'=>$row2['id_mot'], 'titre_mot'=> $row2['titre'], 
106                                                                                        'id_groupe'=>$id_groupe, 'titre_groupe'=> $titre, 
107                                                                                        'echo' => $titre.':'.$row2['titre']);
108                }
109        }
110        $mots_compiles = array('echo'=>array(),'post'=>array());
111        // on voit quels mots cles on retient...
112        foreach($mots_envoyes as $mot) {
113                if (preg_match('/((([^:]+):)?(.*))/', $mot, $regs))
114                        foreach($les_mots_ok as $mot_ok=>$tab){
115                                $test_mot_ok = ($tab['titre_mot']==$regs[4]) || ($tab['id_mot']==$regs[4]);
116                                $test_groupe_ok = (''==$regs[3]) || ($tab['titre_groupe']==$regs[3]) || ($tab['id_groupe']==$regs[3]);
117                                if ($test_mot_ok && $test_groupe_ok) {
118                                        $mots_compiles['echo'][$tab['id_mot']] = $tab['echo'];
119                                        $mots_compiles['post']["evenement_groupe_mot_select_".$tab['id_groupe']][$tab['id_mot']] = $tab['id_mot'];
120                                        break;
121                                }
122                        }
123        }
124        return $mots_compiles;
125}
126
127function Agenda_formulaire_saisie_rapide_previsu() {
128        global $spip_lang_right;
129        $out = "";
130        if ($evenements_saisie_rapide = _request('evenements_saisie_rapide')){
131                $t = Agenda_compile_texte_saisie_rapide($evenements_saisie_rapide);
132                $out .= "<div class='liste liste-evenements'>";
133                $out .= "<table width='100%' cellpadding='3' cellspacing='0' border='0' background=''>";
134                $table = array();
135                foreach($t as $eve) {
136                        $vals = array();
137                        $titre = typo($eve['evenement_titre']);
138                        $lieu = typo($eve['evenement_lieu']);
139                        $descriptif = typo($eve['evenement_descriptif']);
140                        $horaire = $eve['evenement_horaire'];
141                        $date_debut = strtotime($eve['jour_evenement_debut']."-".$eve['mois_evenement_debut']."-".$eve['annee_evenement_debut']." ".$eve['heure_evenement_debut'].":".$eve['minute_evenement_debut']);
142                        $date_fin = strtotime($eve['jour_evenement_fin']."-".$eve['mois_evenement_fin']."-".$eve['annee_evenement_fin']." ".$eve['heure_evenement_fin'].":".$eve['minute_evenement_fin']);
143                       
144                        $s = Agenda_afficher_date_evenement($date_debut,$date_fin, $horaire);
145                        $s_rep = "";
146                        $count_rep = 0;
147                        foreach($eve['evenement_repetitions'] as $rep){
148                                $rep_date_debut = $rep;
149                                $rep_date_fin = $rep_date_debut+$date_fin-$date_debut;
150                                $s_rep .= Agenda_afficher_date_evenement($rep_date_debut,$rep_date_fin,$horaire)."<br/>";
151                                //$s_rep .= $rep."<br/>";
152                                $count_rep++;
153                        }
154                        if (strlen($s_rep)){
155                                $s .= "<br/>".bouton_block_invisible("repetitions_evenement_$id_evenement");
156                                $s .= "$count_rep ". _T('agenda:evenement_repetitions');
157                                $s .= debut_block_invisible("repetitions_evenement_$id_evenement");
158                                $s .= $s_rep;
159                                $s .= fin_block();
160                        }
161                        $vals[] = $s;
162
163                        $vals[] = $titre;
164
165                        $vals[] = $lieu;
166                       
167                        $vals[] = propre($descriptif);
168                       
169                        $vals[] = implode(", ",$eve['evenement_groupe_mot_select']);
170               
171                        $table[] = $vals;
172                       
173                }
174       
175                $largeurs = array('', '', '', '', '');
176                $styles = array('arial11', 'arial11', 'arial2', 'arial11', 'arial11');
177                $out .= afficher_liste($largeurs, $table, $styles, false);
178       
179                $out .= "</table></div>\n";
180          $out .= "<span style='display:none'>";
181          $out .= "<textarea name='evenements_saisie_rapide' rows='10' class='forml' >";
182          $out .= _request('evenements_saisie_rapide');
183          $out .= "</textarea>";
184          $out .= "</span>";
185                $out .= "<div style='text-align:$spip_lang_right;'><input class='fondo' type='submit' value='"._T('bouton_enregistrer')."'></div>";
186        }
187        return $out;
188}
189
190function Agenda_formulaire_saisie_rapide() {
191        global $spip_lang_right;
192        $out = "";
193        //$out .= debut_cadre_enfonce("../"._DIR_PLUGIN_AGENDA."/img_pack/agenda-24.png",true, "", _T('saisierapide:saisie_rapide_votre_liste'));
194        $out .= _T('saisierapide:saisie_rapide_votre_liste_infos');
195        $out .= "<input type='hidden' name='saisie_rapide' value='1' />";
196  $out .= "<textarea name='evenements_saisie_rapide' rows='10' class='forml' >";
197  $out .= _request('evenements_saisie_rapide');
198  $out .= "</textarea>";
199  $out .= "<a href='".generer_url_ecrire("saisie_rapide", "id_article=$id_article")."'>"._T('saisierapide:saisie_rapide_reset')."</a>";
200  $out .= "<div style='text-align:$spip_lang_right;'><input class='fondo' type='submit' value='"._T('previsualiser')."'></div>";
201  $out .= "<p>";
202  //$out .= fin_cadre_enfonce(true);
203
204  $out .= debut_cadre_formulaire('',true);
205  $out .= _T('saisierapide:saisie_rapide_explications');
206  $out .= fin_cadre_formulaire(true);
207  return $out;
208}
209
210?>
Note: See TracBrowser for help on using the repository browser.