1 | <?php |
---|
2 | |
---|
3 | if ($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 |
---|
12 | function 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 | |
---|
25 | function 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 |
---|
96 | function 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 | |
---|
127 | function 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 | |
---|
190 | function 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 | ?> |
---|