function agenda_action_update_repetitions($id_evenement, $repetitions) { // evenement source if ($row = sql_fetsel('*', 'spip_evenements', 'id_evenement=' . intval($id_evenement))) { // Si ce n'est pas un événement source, on n'a rien à faire ici if ($row['id_evenement_source'] != 0) { return; } // On ne garde que les données correctes pour une modification $c = collecter_requests(objet_info('evenement', 'champs_editables'), array('id_evenement', 'id_evenement_source'), $row); // Savoir si la source était publiée ou pas $publie = $row['statut'] == 'publie'; // On calcule la durée en secondes de l'événement source pour la reporter telle quelle aux répétitions $date_debut = strtotime($row['date_debut']); $date_fin = strtotime($row['date_fin']); $duree = $date_fin - $date_debut; $repetitions_updated = array(); // mettre a jour toutes les repetitions deja existantes ou les supprimer si plus lieu $res = sql_select('id_evenement,date_debut', 'spip_evenements', 'id_evenement_source=' . intval($id_evenement)); while ($row = sql_fetch($res)) { $date = strtotime(date('Y-m-d', strtotime($row['date_debut']))); if (in_array($date, $repetitions)) { // Cette répétition existe déjà, on la met à jour $repetitions_updated[] = $date; // On calcule les nouvelles dates/heures en reportant la durée de la source $update_date_debut = date('Y-m-d', $date) . ' ' . date('H:i:s', $date_debut); $update_date_fin = date('Y-m-d H:i:s', strtotime($update_date_debut) + $duree); // Seules les dates sont changées dans les champs de la source // TODO : prendre en charge la mise a jour uniquement si conforme a l'original $c['date_debut'] = $update_date_debut; $c['date_fin'] = $update_date_fin; // mettre a jour l'evenement sql_updateq('spip_evenements', $c, 'id_evenement = ' . $row['id_evenement']); } else { // il est supprime sql_delete('spip_evenements', 'id_evenement=' . $row['id_evenement']); } } // regarder les repetitions a ajouter foreach ($repetitions as $date) { if (!in_array($date, $repetitions_updated)) { // On calcule les dates/heures en reportant la durée de la source $update_date_debut = date('Y-m-d', $date) . ' ' . date('H:i:s', $date_debut); $update_date_fin = date('Y-m-d H:i:s', strtotime($update_date_debut) + $duree); // Seules les dates sont changées dans les champs de la source $c['date_debut'] = $update_date_debut; $c['date_fin'] = $update_date_fin; // On crée la nouvelle répétition if ($id_evenement_new = agenda_action_insert_evenement($c['id_article'], $id_evenement)) { // Si c'est bon, on ajoute tous les champs sql_updateq('spip_evenements', $c, 'id_evenement = ' . $id_evenement_new); // Pour les créations il ne faut pas oublier de dupliquer les liens // En effet, sinon les documents insérés avant la création (0-id_auteur) ne seront pas dupliqués include_spip('action/editer_liens'); objet_dupliquer_liens('evenement', $id_evenement, $id_evenement_new); } } } } }
function agenda_action_update_repetitions($id_evenement,$repetitions,$liste_mots){ // evenement source if ($row = sql_fetsel("*", "spip_evenements","id_evenement=".intval($id_evenement))){ $titre = $row['titre']; $descriptif = $row['descriptif']; $horaire = $row['horaire']; $lieu = $row['lieu']; $adresse = $row['adresse']; $date_debut = strtotime($row['date_debut']); $date_fin = strtotime($row['date_fin']); $duree = $date_fin - $date_debut; $id_evenement_source = $row['id_evenement_source']; $id_article = $row['id_article']; $inscription = $row['inscription']; $places = $row['places']; if ($id_evenement_source!=0) return; // pas un evenement source donc rien a faire ici $repetitions_updated = array(); // mettre a jour toutes les repetitions deja existantes ou les supprimer si plus lieu $res = sql_select("id_evenement,date_debut","spip_evenements","id_evenement_source=".sql_quote($id_evenement)); while ($row = sql_fetch($res)){ $date = strtotime(date('Y-m-d',strtotime($row['date_debut']))); if (in_array($date,$repetitions)){ // il est maintenu, on l'update $repetitions_updated[] = $date; $update_date_debut = date('Y-m-d',$date)." ".date('H:i:s',$date_debut); $update_date_fin = date('Y-m-d H:i:s',strtotime($update_date_debut)+$duree); // TODO : prendre en charge la mise a jour uniquement si conforme a l'original $update_titre = $titre; $update_descriptif = $descriptif; $update_lieu = $lieu; $update_adresse = $adresse; $update_inscription = $inscription; $update_places = $places; // mettre a jour l'evenement sql_updateq('spip_evenements', array( "titre" => $update_titre, "descriptif" => $update_descriptif, "lieu" => $update_lieu, "adresse" => $update_adresse, "horaire" => $horaire, "date_debut" => $update_date_debut, "date_fin" => $update_date_fin, "inscription" => $update_inscription, "places" => $update_places, "id_article" => $id_article),"id_evenement=".intval($row['id_evenement'])); agenda_action_revision_evenement_mots($row['id_evenement'], $liste_mots); } else { // il est supprime sql_delete("spip_mots_evenements","id_evenement=".$row['id_evenement']); sql_delete("spip_evenements","id_evenement=".$row['id_evenement']); } } // regarder les repetitions a ajouter foreach($repetitions as $date){ if (!in_array($date,$repetitions_updated)){ $update_date_debut = date('Y-m-d',$date)." ".date('H:i:s',$date_debut); $update_date_fin = date('Y-m-d H:i:s',strtotime($update_date_debut)+$duree); $update_titre = $titre; $update_descriptif = $descriptif; $update_lieu = $lieu; $update_adresse = $adresse; $update_inscription = $inscription; $update_places = $places; if ($id_evenement_new = agenda_action_insert_evenement($id_article,$id_evenement)) { // mettre a jour l'evenement sql_updateq('spip_evenements', array( "titre" => $update_titre, "descriptif" => $update_descriptif, "lieu" => $update_lieu, "adresse" => $update_adresse, "horaire" => $horaire, "date_debut" => $update_date_debut, "date_fin" => $update_date_fin, "inscription" => $update_inscription, "places" => $update_places, "id_article" => $id_article),"id_evenement=".intval($id_evenement_new)); agenda_action_revision_evenement_mots($id_evenement_new, $liste_mots); } } } } }