public function _createContent(&$toReturn) { $service = new DateService(); $serviceAgenda = new AgendaService(); $serviceType = new AgendaType(); $serviceAuth = new AgendaAuth(); //on determine la date du jour en timestamp $dimanche = $service->numweekToDate($this->getParam('elementsSemaineAffichee')->numSemaine, $this->getParam('elementsSemaineAffichee')->annee, 0); $lundi = $service->numweekToDate($this->getParam('elementsSemaineAffichee')->numSemaine, $this->getParam('elementsSemaineAffichee')->annee, 1); $mardi = $service->numweekToDate($this->getParam('elementsSemaineAffichee')->numSemaine, $this->getParam('elementsSemaineAffichee')->annee, 2); $mercredi = $service->numweekToDate($this->getParam('elementsSemaineAffichee')->numSemaine, $this->getParam('elementsSemaineAffichee')->annee, 3); $jeudi = $service->numweekToDate($this->getParam('elementsSemaineAffichee')->numSemaine, $this->getParam('elementsSemaineAffichee')->annee, 4); $vendredi = $service->numweekToDate($this->getParam('elementsSemaineAffichee')->numSemaine, $this->getParam('elementsSemaineAffichee')->annee, 5); $samedi = $service->numweekToDate($this->getParam('elementsSemaineAffichee')->numSemaine, $this->getParam('elementsSemaineAffichee')->annee, 6); $tpl = new CopixTpl(); //date du jour $tpl->assign('dimanche', date('d', $dimanche)); $tpl->assign('lundi', date('d', $lundi)); $tpl->assign('mardi', date('d', $mardi)); $tpl->assign('mercredi', date('d', $mercredi)); $tpl->assign('jeudi', date('d', $jeudi)); $tpl->assign('vendredi', date('d', $vendredi)); $tpl->assign('samedi', date('d', $samedi)); $tpl->assign('date_deb', date('Ymd', $lundi)); $tpl->assign('date_fin', date('Ymd', $dimanche)); $tpl->assign('moisDebutSemaine', $service->moisNumericToMoisLitteral(date('m', $lundi))); $tpl->assign('moisFinSemaine', $service->moisNumericToMoisLitteral(date('m', $dimanche))); $tpl->assign('semaine', $this->getParam('elementsSemaineAffichee')->numSemaine); $tpl->assign('annee', $this->getParam('elementsSemaineAffichee')->annee); //on vérifie si un agenda de classe est affiché //$lecon = false; $readLecon = false; $writeLecon = false; $idAgendaScolaire = null; $agendasAffiches = $this->getParam('agendasAffiches', null); foreach ($this->getParam('elementsSemaineAffichee')->agendas as $id_agenda) { if ($serviceAgenda->getTypeAgendaByIdAgenda($id_agenda) == $serviceType->getClassRoom()) { //on vérifie si l'utilisateur peut écrire des leçons if ($serviceAuth->getCapability($id_agenda) >= $serviceAuth->getWriteLecon()) { $writeLecon = true; //$lecon = true; $idAgendaScolaire = $id_agenda; break; } //on vérifie si l'utilisateur peut lire les leçons if ($serviceAuth->getCapability($id_agenda) >= $serviceAuth->getRead()) { $readLecon = true; //$lecon = true; //$idAgendaScolaire = $id_agenda; //break; } } } //on vérifie si l'utilisateur a les droits d'écriture sur un des agendas affichés $writeAgenda = false; $agendasAffiches = $this->getParam('agendasAffiches', null); foreach ($this->getParam('elementsSemaineAffichee')->agendas as $id_agenda) { if ($serviceAuth->getCapability($id_agenda) >= $serviceAuth->getWriteAgenda()) { $writeAgenda = true; break; } } //on construit un tableau de droits pour chaque agenda affiché $arDroits = array(); foreach ($this->getParam('elementsSemaineAffichee')->agendas as $id_agenda) { if ($serviceAuth->getCapability($id_agenda) >= $serviceAuth->getRead()) { $arDroits[$id_agenda]->canRead = true; } else { $arDroits[$id_agenda]->canRead = false; } if ($serviceAuth->getCapability($id_agenda) >= $serviceAuth->getWriteAgenda()) { $arDroits[$id_agenda]->canWrite = true; } else { $arDroits[$id_agenda]->canWrite = false; } if ($serviceAuth->getCapability($id_agenda) >= $serviceAuth->getModerate()) { $arDroits[$id_agenda]->canModerate = true; } else { $arDroits[$id_agenda]->canModerate = false; } } //on construit le tableau de couleurs associées au type d'agenda $arColorByIdAgenda = array(); foreach ($this->getParam('elementsSemaineAffichee')->agendas as $id_agenda) { $arColor = $serviceType->getColors($serviceAgenda->getTypeAgendaByIdAgenda($id_agenda)); $i = 0; foreach ($arColorByIdAgenda as $idAgenda => $couleurAgenda) { if ($arColorByIdAgenda[$idAgenda] == $arColor[$i]) { $i = $i + 1; } } if ($i < count($arColor)) { $arColorByIdAgenda[$id_agenda] = $arColor[$i]; } else { $arColorByIdAgenda[$id_agenda] = $arColor[0]; } } $tpl->assign('arColorByIdAgenda', $arColorByIdAgenda); //on détermine l'heure de début et de fin pour l'affichage du calendrier $tpl->assign('heure_deb', $this->getParam('heureDeb')); $tpl->assign('heure_fin', $this->getParam('heureFin')); $tpl->assign('arEventByDay', $this->getParam('arEventByDay')); $tpl->assign('readLecon', $readLecon); $tpl->assign('writeLecon', $writeLecon); $tpl->assign('agendaScolaire', $idAgendaScolaire); $tpl->assign('arLecons', $this->getParam('arLecons')); $tpl->assign('arTravauxEnClasse', $this->getParam('arTravauxEnClasse')); $tpl->assign('arTravauxAFaire', $this->getParam('arTravauxAFaire')); $tpl->assign('agenda2cahier', $this->getParam('agenda2cahier')); $tpl->assign('writeAgenda', $writeAgenda); $tpl->assign('arDroits', $arDroits); $tpl->assign('todayJour', date('d')); $tpl->assign('todaySemaine', date('W')); $tpl->assign('todayAnnee', date('Y')); //paramètres pour passer d'une semaine à l'autre $tpl->assign('semaine_precedente', $service->dateToWeeknum(mktime(0, 0, 0, date('m', $lundi), date('d', $lundi) - 7, date('Y', $lundi)))); $tpl->assign('semaine_suivante', $service->dateToWeeknum(mktime(0, 0, 0, date('m', $lundi), date('d', $lundi) + 7, date('Y', $lundi)))); $tpl->assign('annee_precedente', date('Y', mktime(0, 0, 0, date('m', $lundi), date('d', $lundi) - 4, date('Y', $lundi)))); $tpl->assign('annee_suivante', date('Y', mktime(0, 0, 0, date('m', $lundi), date('d', $lundi) + 10, date('Y', $lundi)))); $listAgendas = $this->getParam('listAgendas', null); $tpl->assign('listAgendas', $listAgendas); $toReturn = $tpl->fetch('vuesemaine.agenda.ptpl'); return true; }
/** * Fonction qui prépare l'affichage de la vue semaine */ public function getVueSemaine() { CopixHTMLHeader::addCSSLink(_resource("styles/module_agenda.css")); CopixHtmlHeader::addJSLink(CopixUrl::get() . 'js/iconito/module_agenda.js'); $obj = new AgendaService(); $listAgendas = $obj->getAvailableAgenda(); $agendaService = new AgendaService(); $dateService = new DateService(); if (($params = $this->_getSessionSemaineParams()) == null) { $params = new SemaineParams(); $params->numSemaine = $this->getRequest('numSemaine', $dateService->dateToWeeknum(mktime()), true); $params->annee = $this->getRequest('annee', date('Y'), true); } else { $params->numSemaine = $this->getRequest('numSemaine', $params->numSemaine, true); $params->annee = $this->getRequest('annee', $params->annee, true); } //pour savoir si on a cliqué sur un agenda à afficher if (_request('updateAgendaAffiches')) { $arIdAgendas = array(); foreach ($listAgendas as $agenda) { if (_request('agendas_' . $agenda->id_agenda)) { $arIdAgendas[$agenda->id_agenda] = $agenda->id_agenda; } } $agendaService->setAgendaAffiches($arIdAgendas); } //on récupère en session les agendas à afficher $params->agendas = $agendaService->getAgendaAffiches(); //on met à jour la session $this->_setSessionSemaineParams($params); //on determine la date de début et de fin de la semaine en cours d'affichage $dateDebutSemaine = date('Ymd', $dateService->numweekToDate($params->numSemaine, $params->annee, 1)); //date au format bdd $dateFinSemaine = date('Ymd', $dateService->numweekToDate($params->numSemaine, $params->annee, 0)); //date au format bdd $arEventsSemaine = array(); //on récupère tous les évènements de la semaine en cours de vue foreach ((array) $params->agendas as $idAgenda) { $arEventsSemaine[$idAgenda] = $agendaService->checkEventOfAgendaInBdd($idAgenda, $dateDebutSemaine, $dateFinSemaine); } //on classe ces évènements par jour $arEventByDay = $agendaService->getEventsByDay($arEventsSemaine, $dateDebutSemaine, $dateFinSemaine); //on ordonne les évènements par ordre croissant d'heure de début d'évènement dans la journée $arEventByDay = $agendaService->getEventsInOrderByDay($arEventByDay); //on détermine l'heure de début et l'heure de fin pour l'affichage du calendrier //on travail sur des heures sans séparateur pour pouvoir les comparer $heureDeb = CopixConfig::get('agenda|heuredebcal'); $heureFin = CopixConfig::get('agenda|heurefincal'); foreach ((array) $arEventByDay as $jours) { if (!isset($jours->events)) { continue; } //print_r($jours); foreach ((array) $jours->events as $event) { if ($event->alldaylong_event == 0) { if ($dateService->heureWithSeparateurToheureWithoutSeparateur($event->heuredeb_event) < $dateService->heureWithSeparateurToheureWithoutSeparateur($heureDeb)) { $heureDeb = $dateService->heureWithSeparateurToheureWithoutSeparateur($event->heuredeb_event); } if ($dateService->heureWithSeparateurToheureWithoutSeparateur($heureFin) < $dateService->heureWithSeparateurToheureWithoutSeparateur($event->heurefin_event)) { $heureFin = $dateService->heureWithSeparateurToheureWithoutSeparateur($event->heurefin_event); } } } } //on arrondit à l'heure inférieure pour l'heure de début et à l'heure supérieure pour l'heure de fin $heureDeb = substr($heureDeb, 0, 2); if (substr($heureFin, 2, 2) == 0) { //si les minutes sont à 0, on arrondit à l'heure $heureFin = substr($heureFin, 0, 2); } else { //si les minutes ne sont pas à 0, on arrondit à l'heure supérieure $heureFin = substr($heureFin, 0, 2) + 1; } //on récupère les leçons de la semaine à afficher $arLecons = $agendaService->getLeconsByDay((array) $params->agendas, $dateDebutSemaine, $dateFinSemaine); // On récupère les travaux de la semaine par agenda $travailDAO = _ioDAO('cahierdetextes|cahierdetextestravail'); $agenda2cahier = array(); $arTravauxEnClasse = array(); $arTravauxAFaire = array(); foreach ($params->agendas as $agendaId) { $agendaInfos = Kernel::getModParentInfo('MOD_AGENDA', $agendaId); $agendaType = AgendaType::getAgendaTypeForNode($agendaInfos['type'], $agendaInfos['id']); $mods = Kernel::getModEnabled($agendaInfos['type'], $agendaInfos['id']); $cahierDeTextes = Kernel::filterModuleList($mods, 'MOD_CAHIERDETEXTES'); $agendaLevel = Kernel::getLevel($agendaInfos['type'], $agendaInfos['id']); if (isset($cahierDeTextes[0])) { $agenda2cahier[$agendaId] = $cahierDeTextes[0]->module_id; $travauxEnClasse = $travailDAO->findTravauxEnClasseByAgendaParJour($agendaId, $dateDebutSemaine, $dateFinSemaine, $agendaInfos['type'], $agendaInfos['id'], $agendaLevel); if (!is_null($travauxEnClasse)) { foreach ($travauxEnClasse as $date => $travail) { $arTravauxEnClasse[$date][$agendaId] = $travail; } } $travauxAFaire = $travailDAO->findTravauxAFaireByAgendaParJour($agendaId, $dateDebutSemaine, $dateFinSemaine, $agendaInfos['type'], $agendaInfos['id'], $agendaLevel); if (!is_null($travauxAFaire)) { foreach ($travauxAFaire as $date => $travail) { $arTravauxAFaire[$date][$agendaId] = $travail; } } } } //récupération de la liste des agendas affichés $listAgendasAffiches = $obj->getAgendaAffiches(); //template pour agenda $tplAgenda = new CopixTpl(); $tplAgenda->assign('MAIN_AGENDA', CopixZone::process('agenda|agendavuesemaine', array('elementsSemaineAffichee' => $params, 'arEventByDay' => $arEventByDay, 'heureDeb' => $heureDeb, 'heureFin' => $heureFin, 'arLecons' => $arLecons, 'arTravauxEnClasse' => $arTravauxEnClasse, 'arTravauxAFaire' => $arTravauxAFaire, 'agenda2cahier' => $agenda2cahier))); $title = $obj->getCurrentTitle(); //template principal $tpl = new CopixTpl(); $tpl->assign('TITLE_PAGE', $title['title']); $menu = $agendaService->getAgendaMenu('week'); $tpl->assign('MENU', $menu); $tpl->assign('MAIN', $tplAgenda->fetch('agenda|main.agenda.tpl')); return new CopixActionReturn(COPIX_AR_DISPLAY, $tpl); }
/** * Fonction qui organise par jour, les élèments ayant lieu dans période donnée * @author Audrey Vassal <*****@*****.**> * @since 2006/08/03 * @param array $arEventsSemaine tous les évènements ayant lieu dans la semaine * @param array $dateDebutSemaine date de début de la semaine au format yyyymmdd * @param array $dateFinSemaine date de fin de la semaine au format yyyymmdd * @return array $arEventByDay les évènement de la semaine classés par jour */ public function getEventsByDay($arEventsSemaine, $dateDebutSemaine, $dateFinSemaine) { $dateCourante = $dateDebutSemaine; $dateService = new DateService(); $noEvent = true; //variable à true s'il n'y a pas d'évènements dans la semaine $arEventByDay = array(); while ($dateCourante <= $dateFinSemaine) { foreach ($arEventsSemaine as $idAgenda => $arEvents) { foreach ((array) $arEvents as $event) { $noEvent = false; if ($event->endrepeatdate_event == null) { //cas des évènements qui ne se répètent pas if ($event->datedeb_event == $event->datefin_event) { //l'évènement se déroule entièrement dans la même journée if ($dateCourante >= $event->datedeb_event && $event->datefin_event >= $dateCourante) { $arEventByDay[$dateCourante]->events[$event->heuredeb_event . $event->id_event] = $event; } } else { //l'évènement se déroule sur plusieurs jours $eventDuplicate = $event; //on copie l'évènement pour travailler dessus if ($dateCourante == $event->datedeb_event && $dateCourante < $event->datefin_event) { //premier jour de l'évènement $eventDuplicate->heurefin_event = '24:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } if ($dateCourante > $event->datedeb_event && $dateCourante < $event->datefin_event) { $eventDuplicate->heuredeb_event = '00:00'; $eventDuplicate->heurefin_event = '24:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } if ($dateCourante > $event->datedeb_event && $dateCourante == $event->datefin_event) { //dernier jour de l'évènement $eventDuplicate->heuredeb_event = '00:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } } } else { //cas des évènements qui se répètent //si la date de fin de répétition se situe en plein dans l'évènement, on ne commence pas l'évènement $nbJours = $dateService->getNombreJoursEcoulesEntreDeuxDates($event->datefin_event, $event->datedeb_event); $dateCourantePlusNbJours = $dateService->dateBddToDateFr($dateCourante); $dateCourantePlusNbJours = $dateService->addToDate($dateCourantePlusNbJours, $nbJours, 0, 0); $dateCourantePlusNbJours = $dateService->dateFrToDateBdd($dateCourantePlusNbJours); //évènement qui se répète tous les jours if ($event->everyday_event == 1 && $dateCourantePlusNbJours <= $event->endrepeatdate_event && $event->datedeb_event <= $dateCourante) { if ($event->datedeb_event == $event->datefin_event) { //l'évènement se déroule entièrement dans la même journée $arEventByDay[$dateCourante]->events[$event->heuredeb_event . $event->id_event] = $event; } else { //l'évènement se déroule sur plusieurs jours $eventDuplicate = $event; //on copie l'évènement pour travailler dessus if ($dateCourante == $event->datedeb_event && $dateCourante < $event->datefin_event && $dateCourante < $event->endrepeatdate_event) { //premier jour de l'évènement $eventDuplicate->heurefin_event = '24:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } else { if ($dateCourante > $event->datedeb_event && $dateCourante == $event->endrepeatdate_event) { //dernier jour de l'évènement $eventDuplicate->heuredeb_event = '00:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } else { //fin de l'évènement de la journée précédente $eventDuplicate->heuredeb_event = '00:00'; $eventDuplicate->heurefin_event = $event->heurefin_event; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; //début de l'évènement $eventDuplicate->heuredeb_event = $event->heuredeb_event; $eventDuplicate->heurefin_event = '24:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } } } } if ($event->everyweek_event == 1 && $dateCourantePlusNbJours <= $event->endrepeatdate_event && $event->datedeb_event <= $dateCourante) { $dateCouranteTimestamp = $dateService->dateAndHoureBdToTimestamp($dateCourante, null); $jourCourant = date('w', $dateCouranteTimestamp); $jourDebutEvent = date('w', $dateService->dateAndHoureBdToTimestamp($event->datedeb_event, null)); $jourFinEvent = date('w', $dateService->dateAndHoureBdToTimestamp($event->datefin_event, null)); if ($event->datedeb_event == $event->datefin_event) { //l'évènement se déroule entièrement dans la même journée //si l'évènement se déroule entièrement dans la même semaine if ($dateService->dateToWeeknum($dateService->dateAndHoureBdToTimestamp($event->datedeb_event, null)) == $dateService->dateToWeeknum($dateService->dateAndHoureBdToTimestamp($event->datefin_event, null))) { if ($jourDebutEvent - 1 <= $jourCourant - 1 && $jourCourant - 1 <= $jourFinEvent - 1) { $arEventByDay[$dateCourante]->events[$event->heuredeb_event . $event->id_event] = $event; } } else { //l'évènement commence en fin de semaine et se termine en début de semaine suivante if ($jourCourant <= $jourFinEvent || $jourCourant == $jourDebutEvent) { $arEventByDay[$dateCourante]->events[$event->heuredeb_event . $event->id_event] = $event; } } } else { //l'évènement se déroule sur plusieurs jours $eventDuplicate = $event; //on copie l'évènement pour travailler dessus if ($jourCourant == $jourDebutEvent) { //premier jour de l'évènement $eventDuplicate->heurefin_event = '24:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } else { if ($jourCourant == $jourFinEvent) { //dernier jour de l'évènement $eventDuplicate->heuredeb_event = '00:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } else { if ($dateService->dateToWeeknum($dateService->dateAndHoureBdToTimestamp($event->datedeb_event, null)) == $dateService->dateToWeeknum($dateService->dateAndHoureBdToTimestamp($event->datefin_event, null))) { if ($jourDebutEvent < $jourCourant && $jourCourant < $jourFinEvent) { $eventDuplicate->heuredeb_event = '00:00'; $eventDuplicate->heurefin_event = '24:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } } else { if ($dateService->dateToWeeknum($dateService->dateAndHoureBdToTimestamp($event->datedeb_event, null)) != $dateService->dateToWeeknum($dateService->dateAndHoureBdToTimestamp($event->datefin_event, null))) { if ($jourCourant < $jourFinEvent) { $eventDuplicate->heuredeb_event = '00:00'; $eventDuplicate->heurefin_event = '24:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } } } } } } } //on ne compare que les jours pour un évènement qui se répète tous les mois if ($event->everymonth_event == 1 && $dateCourantePlusNbJours <= $event->endrepeatdate_event && $event->datedeb_event <= $dateCourante) { if ($event->datedeb_event == $event->datefin_event) { //l'évènement se déroule entièrement dans la même journée //si l'évènement se déroule entièrement dans le même mois if (date('m', $dateService->dateAndHoureBdToTimestamp($event->datedeb_event, null)) == date('m', $dateService->dateAndHoureBdToTimestamp($event->datefin_event, null))) { if (substr($event->datedeb_event, 6, 2) <= substr($dateCourante, 6, 2) && substr($dateCourante, 6, 2) <= substr($event->datefin_event, 6, 2)) { $arEventByDay[$dateCourante]->events[$event->heuredeb_event . $event->id_event] = $event; } } else { //l'évènement commence à la fin d'un mois et se termine au début du mois suivant if (substr($event->datedeb_event, 6, 2) <= substr($dateCourante, 6, 2) && substr($dateCourante, 6, 2) <= 31 || 1 <= substr($dateCourante, 6, 2) && substr($dateCourante, 6, 2) <= substr($event->datefin_event, 6, 2)) { $arEventByDay[$dateCourante]->events[$event->heuredeb_event . $event->id_event] = $event; } } } else { //l'évènement se déroule sur plusieurs jours $eventDuplicate = $event; //on copie l'évènement pour travailler dessus if (substr($event->datedeb_event, 6, 2) == substr($dateCourante, 6, 2)) { //premier jour de l'évènement $eventDuplicate->heurefin_event = '24:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } else { if (substr($event->datefin_event, 6, 2) == substr($dateCourante, 6, 2)) { //dernier jour de l'évènement $eventDuplicate->heuredeb_event = '00:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } else { if (date('m', $dateService->dateAndHoureBdToTimestamp($event->datedeb_event, null)) == date('m', $dateService->dateAndHoureBdToTimestamp($event->datefin_event, null))) { //l'évènement se déroule entièrement dans le même mois if (substr($event->datedeb_event, 6, 2) < substr($dateCourante, 6, 2) && substr($event->datefin_event, 6, 2) > substr($dateCourante, 6, 2)) { $eventDuplicate->heuredeb_event = '00:00'; $eventDuplicate->heurefin_event = '24:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } } else { if (date('m', $dateService->dateAndHoureBdToTimestamp($event->datedeb_event, null)) != date('m', $dateService->dateAndHoureBdToTimestamp($event->datefin_event, null))) { //l'évènement commence à la fin d'un mois et se termine au début du mois suivant if (substr($event->datedeb_event, 6, 2) < substr($dateCourante, 6, 2) && substr($dateCourante, 6, 2) <= 31 || 1 <= substr($dateCourante, 6, 2) && substr($dateCourante, 6, 2) < substr($event->datefin_event, 6, 2)) { $eventDuplicate->heuredeb_event = '00:00'; $eventDuplicate->heurefin_event = '24:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } } } } } } } //on ne compare que les jours et mois pour un évènement qui se répète toutes les années if ($event->everyyear_event == 1 && $dateCourantePlusNbJours <= $event->endrepeatdate_event && $event->datedeb_event <= $dateCourante) { if ($event->datedeb_event == $event->datefin_event) { //l'évènement se déroule entièrement dans la même journée //si l'évènement se déroule entièrement dans la même année if (date('Y', $dateService->dateAndHoureBdToTimestamp($event->datedeb_event, null)) == date('Y', $dateService->dateAndHoureBdToTimestamp($event->datefin_event, null))) { if (substr($event->datedeb_event, 4, 4) <= substr($dateCourante, 4, 4) && substr($dateCourante, 4, 4) <= substr($event->datefin_event, 4, 4)) { $arEventByDay[$dateCourante]->events[$event->heuredeb_event . $event->id_event] = $event; } } else { //l'évènement commence à la fin d'une année et se termine au début de l'année suivante if (substr($event->datedeb_event, 4, 4) <= substr($dateCourante, 4, 4) && substr($dateCourante, 4, 4) <= 1231 || 101 <= substr($dateCourante, 4, 4) && substr($dateCourante, 4, 4) <= substr($event->datefin_event, 4, 4)) { $arEventByDay[$dateCourante]->events[$event->heuredeb_event . $event->id_event] = $event; } } } else { //l'évènement se déroule sur plusieurs jours $eventDuplicate = $event; //on copie l'évènement pour travailler dessus if (substr($event->datedeb_event, 4, 4) == substr($dateCourante, 4, 4)) { //premier jour de l'évènement $eventDuplicate->heurefin_event = '24:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } else { if (substr($event->datefin_event, 4, 4) == substr($dateCourante, 4, 4)) { //dernier jour de l'évènement $eventDuplicate->heuredeb_event = '00:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } else { if (date('Y', $dateService->dateAndHoureBdToTimestamp($event->datedeb_event, null)) == date('Y', $dateService->dateAndHoureBdToTimestamp($event->datefin_event, null))) { if (substr($event->datedeb_event, 4, 4) < substr($dateCourante, 4, 4) && substr($event->datefin_event, 4, 4) > substr($dateCourante, 4, 4)) { $eventDuplicate->heuredeb_event = '00:00'; $eventDuplicate->heurefin_event = '24:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } } else { if (date('Y', $dateService->dateAndHoureBdToTimestamp($event->datedeb_event, null)) != date('Y', $dateService->dateAndHoureBdToTimestamp($event->datefin_event, null))) { //l'évènement commence à la fin d'une année et se termine au début de l'année suivante if (substr($event->datedeb_event, 4, 4) < substr($dateCourante, 4, 4) && substr($dateCourante, 4, 4) <= 1231 || 101 <= substr($dateCourante, 4, 4) && substr($dateCourante, 4, 4) < substr($event->datefin_event, 4, 4)) { $eventDuplicate->heuredeb_event = '00:00'; $eventDuplicate->heurefin_event = '24:00'; $arEventByDay[$dateCourante]->events[$eventDuplicate->heuredeb_event . $event->id_event] = $eventDuplicate; } } } } } } } } //si pas d'évènement ce jour là if (!isset($arEventByDay[$dateCourante]) || count($arEventByDay[$dateCourante]) == 0) { $arEventByDay[$dateCourante] = null; } } } //on incrémente le nombre de jours de 1 à chaque passage $dateCourante = $dateService->addToDate($dateService->dateBddToDateFr($dateCourante), 1, 0, 0, '/'); $dateCourante = $dateService->dateFrToDateBdd($dateCourante); } //si pas d'évènements de la semaine, ne passe pas dans le foreach //donc on construit un tableau vide pour pouvoir insérer les cases transparentes par la suite if ($noEvent == true) { $dateCourante = $dateDebutSemaine; while ($dateCourante <= $dateFinSemaine) { $arEventByDay[$dateCourante] = null; //on incrémente le nombre de jours de 1 à chaque passage $dateCourante = $dateService->addToDate($dateService->dateBddToDateFr($dateCourante), 1, 0, 0, '/'); $dateCourante = $dateService->dateFrToDateBdd($dateCourante); } } return $arEventByDay; }