[30] | 1 | <?php |
---|
| 2 | |
---|
| 3 | function Agenda_action_update_repetitions($id_evenement,$repetitions,$liste_mots){ |
---|
| 4 | // evenement source |
---|
| 5 | $res = spip_query("SELECT * FROM spip_evenements WHERE id_evenement="._q($id_evenement)); |
---|
| 6 | if ($row = spip_fetch_array(($res))){ |
---|
| 7 | $titre = $row['titre']; |
---|
| 8 | $descriptif = $row['descriptif']; |
---|
| 9 | $horaire = $row['horaire']; |
---|
| 10 | $lieu = $row['lieu']; |
---|
| 11 | $date_debut = strtotime($row['date_debut']); |
---|
| 12 | $date_fin = strtotime($row['date_fin']); |
---|
| 13 | $duree = $date_fin - $date_debut; |
---|
| 14 | $id_evenement_source = $row['id_evenement_source']; |
---|
| 15 | $id_article = $row['id_article']; |
---|
| 16 | if ($id_evenement_source!=0) |
---|
| 17 | return; // pas un evenement source donc rien a faire ici |
---|
| 18 | |
---|
| 19 | $repetitions_updated = array(); |
---|
| 20 | // mettre a jour toutes les repetitions deja existantes ou les supprimer si plus lieu |
---|
| 21 | $res = spip_query("SELECT id_evenement FROM spip_evenements WHERE id_evenement_source="._q($id_evenement)); |
---|
| 22 | while ($row = spip_fetch_array($res)){ |
---|
| 23 | $date = strtotime(date('Y-m-d',$row['date_debut'])); |
---|
| 24 | if (in_array($date,$repetitions)){ |
---|
| 25 | // il est maintenu, on l'update |
---|
| 26 | $repetitions_updated[] = $date; |
---|
| 27 | $update_date_debut = date('Y-m-d',$date)." ".date('H:i:s',$date_debut); |
---|
| 28 | $update_date_fin = date('Y-m-d H:i:s',strtotime($update_date_debut)+$duree); |
---|
| 29 | |
---|
| 30 | // TODO : prendre en charge la mise a jour uniquement si conforme a l'original |
---|
| 31 | $update_titre = $titre; |
---|
| 32 | $update_descriptif = $descriptif; |
---|
| 33 | $update_lieu = $lieu; |
---|
| 34 | |
---|
| 35 | // mettre a jour l'evenement |
---|
| 36 | $res=spip_query("UPDATE spip_evenements SET `titre`="._q($update_titre) |
---|
| 37 | . ",`descriptif`="._q($update_descriptif) |
---|
| 38 | . ",`lieu`="._q($update_lieu) |
---|
| 39 | . ",`horaire`="._q($horaire) |
---|
| 40 | . ",`date_debut`="._q($update_date_debut) |
---|
| 41 | . ",`date_fin`="._q($update_date_fin) |
---|
| 42 | . ",`id_article`="._q($id_article) |
---|
| 43 | . " WHERE `id_evenement` ="._q($row['id_evenement'])); |
---|
| 44 | Agenda_action_update_liste_mots($row['id_evenement'],$liste_mots); |
---|
| 45 | } |
---|
| 46 | else { |
---|
| 47 | // il est supprime |
---|
| 48 | spip_query("DELETE FROM spip_mots_evenements WHERE id_evenement=".$row['id_evenement']); |
---|
| 49 | spip_query("DELETE FROM spip_evenements WHERE id_evenement=".$row['id_evenement']); |
---|
| 50 | } |
---|
| 51 | |
---|
| 52 | } |
---|
| 53 | // regarder les repetitions a ajouter |
---|
| 54 | foreach($repetitions as $date){ |
---|
| 55 | if (!in_array($date,$repetitions_updated)){ |
---|
| 56 | $update_date_debut = date('Y-m-d',$date)." ".date('H:i:s',$date_debut); |
---|
| 57 | $update_date_fin = date('Y-m-d H:i:s',strtotime($update_date_debut)+$duree); |
---|
| 58 | $update_titre = $titre; |
---|
| 59 | $update_descriptif = $descriptif; |
---|
| 60 | $update_lieu = $lieu; |
---|
| 61 | |
---|
| 62 | $id_evenement_new = spip_abstract_insert("spip_evenements", |
---|
| 63 | "(id_evenement_source,maj)", |
---|
| 64 | "("._q($id_evenement).",NOW())"); |
---|
| 65 | if ($id_evenement_new==0) |
---|
| 66 | spip_log("agenda action formulaire article : impossible d'ajouter un evenement repete"); |
---|
| 67 | else { |
---|
| 68 | // mettre a jour l'evenement |
---|
| 69 | $res=spip_query("UPDATE spip_evenements SET `titre`="._q($update_titre) |
---|
| 70 | . ",`descriptif`="._q($update_descriptif) |
---|
| 71 | . ",`lieu`="._q($update_lieu) |
---|
| 72 | . ",`horaire`="._q($horaire) |
---|
| 73 | . ",`date_debut`="._q($update_date_debut) |
---|
| 74 | . ",`date_fin`="._q($update_date_fin) |
---|
| 75 | . ",`id_article`="._q($id_article) |
---|
| 76 | . " WHERE `id_evenement` ="._q($id_evenement_new)); |
---|
| 77 | |
---|
| 78 | Agenda_action_update_liste_mots($id_evenement_new,$liste_mots); |
---|
| 79 | } |
---|
| 80 | } |
---|
| 81 | } |
---|
| 82 | } |
---|
| 83 | } |
---|
| 84 | function Agenda_action_supprime_repetitions($supp_evenement){ |
---|
| 85 | $res = spip_query("SELECT * FROM spip_evenements WHERE id_evenement_source="._q($supp_evenement)); |
---|
| 86 | while ($row = spip_fetch_array($res)){ |
---|
| 87 | $id_evenement = $row['id_evenement']; |
---|
| 88 | spip_query("DELETE FROM spip_mots_evenements WHERE id_evenement="._q($id_evenement)); |
---|
| 89 | spip_query("DELETE FROM spip_evenements WHERE id_evenement="._q($id_evenement)); |
---|
| 90 | } |
---|
| 91 | } |
---|
| 92 | |
---|
| 93 | function Agenda_action_update_liste_mots($id_evenement,$liste_mots){ |
---|
| 94 | // suppression des mots obsoletes |
---|
| 95 | $cond_in = ""; |
---|
| 96 | if (count($liste_mots)) |
---|
| 97 | $cond_in = "AND " . calcul_mysql_in('id_mot', implode(",",$liste_mots), 'NOT'); |
---|
| 98 | spip_query("DELETE FROM spip_mots_evenements WHERE id_evenement="._q($id_evenement)." ".$cond_in); |
---|
| 99 | // ajout/maj des nouveaux mots |
---|
| 100 | foreach($liste_mots as $id_mot){ |
---|
| 101 | if (!spip_fetch_array(spip_query("SELECT * FROM spip_mots_evenements WHERE id_evenement="._q($id_evenement)." AND id_mot="._q($id_mot)))) |
---|
| 102 | spip_query("INSERT INTO spip_mots_evenements (id_mot,id_evenement) VALUES ("._q($id_mot).","._q($id_evenement).")"); |
---|
| 103 | } |
---|
| 104 | } |
---|
| 105 | |
---|
| 106 | |
---|
| 107 | function Agenda_action_formulaire_article($id_article,$id_evenement, $c=NULL){ |
---|
| 108 | include_spip('base/abstract_sql'); |
---|
| 109 | // gestion des requetes de mises a jour dans la base |
---|
| 110 | $insert = _request('evenement_insert',$c); |
---|
| 111 | $modif = _request('evenement_modif',$c); |
---|
| 112 | if (($insert || $modif)){ |
---|
| 113 | |
---|
| 114 | if ( ($insert) && (!$id_evenement) ){ |
---|
| 115 | $id_evenement = spip_abstract_insert("spip_evenements", |
---|
| 116 | "(id_evenement_source,maj)", |
---|
| 117 | "('0',NOW())"); |
---|
| 118 | if ($id_evenement==0){ |
---|
| 119 | spip_log("agenda action formulaire article : impossible d'ajouter un evenement"); |
---|
| 120 | return 0; |
---|
| 121 | } |
---|
| 122 | } |
---|
| 123 | if ($id_article){ |
---|
| 124 | // mettre a jour le lien evenement-article |
---|
| 125 | spip_query("UPDATE spip_evenements SET id_article="._q($id_article)." WHERE id_evenement="._q($id_evenement)); |
---|
| 126 | } |
---|
| 127 | $titre = _request('evenement_titre',$c); |
---|
| 128 | $descriptif = _request('evenement_descriptif',$c); |
---|
| 129 | $lieu = _request('evenement_lieu',$c); |
---|
| 130 | $horaire = _request('evenement_horaire',$c); |
---|
| 131 | if ($horaire!='oui') $horaire='non'; |
---|
| 132 | |
---|
| 133 | // pour les cas ou l'utilisateur a saisi 29-30-31 un mois ou ca n'existait pas |
---|
| 134 | $maxiter=4; |
---|
| 135 | $st_date_deb=FALSE; |
---|
| 136 | $jour_debut=_request('jour_evenement_debut',$c); |
---|
| 137 | // test <= car retour strtotime retourne -1 ou FALSE en cas d'echec suivant les versions |
---|
| 138 | while(($st_date_deb<=FALSE)&&($maxiter-->0)) { |
---|
| 139 | $date_deb=_request('annee_evenement_debut',$c).'-'._request('mois_evenement_debut',$c).'-'.($jour_debut--) |
---|
| 140 | .' '._request('heure_evenement_debut',$c).':'._request('minute_evenement_debut',$c); |
---|
| 141 | $st_date_deb=strtotime($date_deb); |
---|
| 142 | } |
---|
| 143 | $date_deb=format_mysql_date(date("Y",$st_date_deb),date("m",$st_date_deb),date("d",$st_date_deb),date("H",$st_date_deb),date("i",$st_date_deb), $s=0); |
---|
| 144 | |
---|
| 145 | // pour les cas ou l'utilisateur a saisi 29-30-31 un mois ou ca n'existait pas |
---|
| 146 | $maxiter=4; |
---|
| 147 | $st_date_fin=FALSE; |
---|
| 148 | $jour_fin=_request('jour_evenement_fin',$c); |
---|
| 149 | // test <= car retour strtotime retourne -1 ou FALSE en cas d'echec suivant les versions |
---|
| 150 | while(($st_date_fin<=FALSE)&&($maxiter-->0)) { |
---|
| 151 | $st_date_fin=_request('annee_evenement_fin',$c).'-'._request('mois_evenement_fin',$c).'-'.($jour_fin--) |
---|
| 152 | .' '._request('heure_evenement_fin',$c).':'._request('minute_evenement_fin',$c); |
---|
| 153 | $st_date_fin=strtotime($st_date_fin); |
---|
| 154 | } |
---|
| 155 | $st_date_fin = max($st_date_deb,$st_date_fin); |
---|
| 156 | $date_fin=format_mysql_date(date("Y",$st_date_fin),date("m",$st_date_fin),date("d",$st_date_fin),date("H",$st_date_fin),date("i",$st_date_fin), $s=0); |
---|
| 157 | |
---|
| 158 | // mettre a jour l'evenement |
---|
| 159 | $res=spip_query("UPDATE spip_evenements SET `titre`="._q($titre) |
---|
| 160 | . ",`descriptif`="._q($descriptif) |
---|
| 161 | . ",`lieu`="._q($lieu) |
---|
| 162 | . ",`horaire`="._q($horaire) |
---|
| 163 | . ",`date_debut`="._q($date_deb) |
---|
| 164 | . ",`date_fin`="._q($date_fin) |
---|
| 165 | . " WHERE `id_evenement` ="._q($id_evenement)); |
---|
| 166 | |
---|
| 167 | // les mots cles : par groupes |
---|
| 168 | $res = spip_query("SELECT * FROM spip_groupes_mots WHERE evenements='oui' ORDER BY titre"); |
---|
| 169 | $liste_mots = array(); |
---|
| 170 | while ($row = spip_fetch_array($res,SPIP_ASSOC)){ |
---|
| 171 | $id_groupe = $row['id_groupe']; |
---|
| 172 | $id_mot_a = _request("evenement_groupe_mot_select_$id_groupe",$c); // un array |
---|
| 173 | if (is_array($id_mot_a) && count($id_mot_a)){ |
---|
| 174 | if ($row['unseul']=='oui') |
---|
| 175 | $liste_mots[] = intval(reset($id_mot_a)); |
---|
| 176 | else |
---|
| 177 | foreach($id_mot_a as $id_mot) |
---|
| 178 | $liste_mots[] = intval($id_mot); |
---|
| 179 | } |
---|
| 180 | } |
---|
| 181 | |
---|
| 182 | Agenda_action_update_liste_mots($id_evenement,$liste_mots); |
---|
| 183 | |
---|
| 184 | // gestion des repetitions |
---|
| 185 | if (($repetitions = _request('selected_date_repetitions',$c))!=NULL){ |
---|
| 186 | $repetitions = explode(',',$repetitions); |
---|
| 187 | $rep = array(); |
---|
| 188 | foreach($repetitions as $key=>$date){ |
---|
| 189 | if (preg_match(",[0-9][0-9]?/[0-9][0-9]?/[0-9][0-9][0-9][0-9],",$date)){ |
---|
| 190 | $date = explode('/',$date); |
---|
| 191 | $date = $date[2]."/".$date[0]."/".$date[1]; |
---|
| 192 | $date = strtotime($date); |
---|
| 193 | } |
---|
| 194 | else { |
---|
| 195 | $date = preg_replace(",[0-2][0-9]:[0-6][0-9]:[0-6][0-9]\s*(UTC|GMT)(\+|\-)[0-9]{4},","",$date); |
---|
| 196 | $date = explode(' ',$date); |
---|
| 197 | $date = strtotime($date[2]." ".$date[1]." ".$date[3]); |
---|
| 198 | } |
---|
| 199 | if (!in_array($date,$repetitions)) |
---|
| 200 | $rep[] = $date; |
---|
| 201 | } |
---|
| 202 | $repetitions = $rep; |
---|
| 203 | } |
---|
| 204 | else |
---|
| 205 | $repetitions = array(); |
---|
| 206 | Agenda_action_update_repetitions($id_evenement, $repetitions, $liste_mots); |
---|
| 207 | } |
---|
| 208 | return $id_evenement; |
---|
| 209 | } |
---|
| 210 | |
---|
| 211 | function Agenda_action_supprime_evenement($id_article,$supp_evenement){ |
---|
| 212 | $res = spip_query("SELECT * FROM spip_evenements WHERE id_article="._q($id_article)." AND id_evenement="._q($supp_evenement)); |
---|
| 213 | if ($row = spip_fetch_array($res)){ |
---|
| 214 | spip_query("DELETE FROM spip_mots_evenements WHERE id_evenement="._q($supp_evenement)); |
---|
| 215 | spip_query("DELETE FROM spip_evenements WHERE id_evenement="._q($supp_evenement)); |
---|
| 216 | } |
---|
| 217 | Agenda_action_supprime_repetitions($supp_evenement); |
---|
| 218 | $id_evenement = 0; |
---|
| 219 | return $id_evenement; |
---|
| 220 | } |
---|
| 221 | |
---|
| 222 | ?> |
---|