[30] | 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 | ?> |
---|