/**
  * Purge les évènements d'un agenda sur une période donnée
  *
  * @author Jérémy FOURNAISE <*****@*****.**>
  *
  * @param integer  $pIdAgenda    Identifiant de l'agenda à purger
  * @param string   $pDateDebut   Date de début de la période à purger (format Ymd)
  * @param string   $pDateFin     Date de fin de la période à purger (format Ymd)
  * @param string   $pHeureDebut  Heure pour la date de début de la période (format H:i)
  * @param string   $pHeureFin    Heure pour la date de fin de la période (format H:i)
  */
 public function purgeAgendaByDateInterval($pIdAgenda, $pDateDebut, $pDateFin, $pHeureDebut = '00:00', $pHeureFin = '00:00')
 {
     $dateServices = new DateService();
     $eventDAO = _ioDAO('agenda|event');
     $events = $eventDAO->findByAgendaAndDateInterval($pIdAgenda, $pDateDebut, $pDateFin);
     foreach ($events as $event) {
         // Cas d'un événement qui ne se répète pas
         if (is_null($event->endrepeatdate_event) || $event->endrepeatdate_event < $pDateFin || $event->endrepeatdate_event == $pDateFin && $event->heuredeb_event >= $pHeureFin) {
             if ($event->datefin_event > $pDateDebut && $event->datedeb_event < $pDateFin || $event->datedeb_event == $pDateDebut && $event->heuredeb_event >= $pHeureDebut || $event->datefin_event == $pDateFin && $event->heuredeb_event <= $pHeureFin || ($event->datefin_event == $pDateFin || $event->datedeb_event == $pDateDebut) && $event->alldaylong_event == 1) {
                 $eventDAO->delete($event->id_event);
             }
         } else {
             $duplicateEvent = clone $event;
             $mkDateDebEvent = mktime(0, 0, 0, substr($duplicateEvent->datedeb_event, 4, 2), substr($duplicateEvent->datedeb_event, 6, 2), substr($duplicateEvent->datedeb_event, 0, 4));
             $mkDateFin = mktime(0, 0, 0, substr($pDateFin, 4, 2), substr($pDateFin, 6, 2), substr($pDateFin, 0, 4));
             // Création d'un autre événement qui commence après la période concernée s'il se poursuivait après l'intervalle donné
             if ($duplicateEvent->endrepeatdate_event > $pDateFin || $duplicateEvent->endrepeatdate_event == $pDateFin && $duplicateEvent->heuredeb_event >= $pHeureFin) {
                 $record = _record('event');
                 // Evénement qui se répète tous les jours
                 if ($duplicateEvent->everyday_event == 1) {
                     if ($duplicateEvent->heuredeb_event < $pHeureFin || $duplicateEvent->alldaylong_event == 1) {
                         // La date de début devient la date de la fin de période + 1 jour
                         $record->datedeb_event = date('Ymd', mktime(0, 0, 0, substr($pDateFin, 4, 2), substr($pDateFin, 6, 2) + 1, substr($pDateFin, 0, 4)));
                     } else {
                         $record->datedeb_event = $pDateFin;
                     }
                 } elseif ($duplicateEvent->everyweek_event == 1) {
                     if (date('w', $mkDateDebEvent) == date('w', $mkDateFin)) {
                         if ($duplicateEvent->heuredeb_event < $pHeureFin || $duplicateEvent->alldaylong_event == 1) {
                             $record->datedeb_event = date('Ymd', mktime(0, 0, 0, substr($pDateFin, 4, 2), substr($pDateFin, 6, 2) + 7, substr($pDateFin, 0, 4)));
                         } else {
                             $record->datedeb_event = $pDateFin;
                         }
                     } else {
                         $record->datedeb_event = $dateServices->getDayOfWeekAfterDate($pDateFin, date('w', $dateServices->dateAndHoureBdToTimestamp($pDateFin, null)));
                     }
                 } elseif ($duplicateEvent->everymonth_event == 1) {
                     if (date('md', $mkDateDebEvent) == date('md', $mkDateFin)) {
                         if ($duplicateEvent->heuredeb_event < $pHeureFin || $duplicateEvent->alldaylong_event == 1) {
                             $record->datedeb_event = date('Ymd', mktime(0, 0, 0, substr($pDateFin, 4, 2) + 1, substr($pDateFin, 6, 2), substr($pDateFin, 0, 4)));
                         } else {
                             $record->datedeb_event = $pDateFin;
                         }
                     } else {
                         $record->datedeb_event = $dateServices->getDayOfMonthAfterDate($pDateFin, substr($duplicateEvent->datedeb_event, 6, 2));
                     }
                 } elseif ($duplicateEvent->everyyear_event == 1) {
                     if (date('Ymd', $mkDateDebEvent) == date('Ymd', $mkDateFin)) {
                         if ($duplicateEvent->heuredeb_event < $pHeureFin || $duplicateEvent->alldaylong_event == 1) {
                             $record->datedeb_event = date('Ymd', mktime(0, 0, 0, substr($pDateFin, 4, 2), substr($pDateFin, 6, 2), substr($pDateFin, 0, 4) + 1));
                         } else {
                             $record->datedeb_event = $pDateFin;
                         }
                     } else {
                         $record->datedeb_event = $dateServices->getDayOfYearAfterDate($pDateFin, substr($duplicateEvent->datedeb_event, 4, 4));
                     }
                 }
                 $nbJour = $dateServices->getNombreJoursEcoulesEntreDeuxDates($duplicateEvent->datefin_event, $duplicateEvent->datedeb_event);
                 $record->datefin_event = $dateServices->dateFrToDateBdd($dateServices->addToDate($dateServices->dateBddToDateFr($record->datedeb_event), $nbJour, 0, 0));
                 $record->id_agenda = $duplicateEvent->id_agenda;
                 $record->title_event = $duplicateEvent->title_event;
                 $record->desc_event = $duplicateEvent->desc_event;
                 $record->place_event = $duplicateEvent->place_event;
                 $record->heuredeb_event = $duplicateEvent->heuredeb_event;
                 $record->heurefin_event = $duplicateEvent->heurefin_event;
                 $record->alldaylong_event = $duplicateEvent->alldaylong_event;
                 $record->everyday_event = $duplicateEvent->everyday_event;
                 $record->everyweek_event = $duplicateEvent->everyweek_event;
                 $record->everymonth_event = $duplicateEvent->everymonth_event;
                 $record->everyyear_event = $duplicateEvent->everyyear_event;
                 $record->endrepeatdate_event = $duplicateEvent->endrepeatdate_event;
                 $eventDAO->insert($record);
                 // Modification de la date de fin de répétition de l'événement
                 if ($event->endrepeatdate_event >= $pDateFin) {
                     $event->endrepeatdate_event = $pDateDebut;
                 }
                 $eventDAO->update($event);
             }
         }
     }
 }