public function _createContent(&$toReturn)
 {
     _classInclude('agenda|dateservices');
     $ppo = new CopixPPO();
     // Récupération des paramètres
     $ppo->cahierId = $this->getParam('cahierId');
     $ppo->jour = $this->getParam('date_jour');
     $ppo->mois = $this->getParam('date_mois');
     $ppo->annee = $this->getParam('date_annee');
     $ppo->current = $this->getParam('current');
     // Timestamp de la date sélectionnée
     $ppo->dateSelectionnee = mktime(0, 0, 0, $ppo->mois, $ppo->jour, $ppo->annee);
     $numeroSemaine = date('W', $ppo->dateSelectionnee);
     $service = new DateService();
     // Récupération des timestamp des jours de la semaine
     $ppo->lun = CopixDateTime::timestampToyyyymmdd($service->numweekToDate($numeroSemaine, $ppo->annee, 1));
     $ppo->mar = CopixDateTime::timestampToyyyymmdd($service->numweekToDate($numeroSemaine, $ppo->annee, 2));
     $ppo->mer = CopixDateTime::timestampToyyyymmdd($service->numweekToDate($numeroSemaine, $ppo->annee, 3));
     $ppo->jeu = CopixDateTime::timestampToyyyymmdd($service->numweekToDate($numeroSemaine, $ppo->annee, 4));
     $ppo->ven = CopixDateTime::timestampToyyyymmdd($service->numweekToDate($numeroSemaine, $ppo->annee, 5));
     $ppo->sam = CopixDateTime::timestampToyyyymmdd($service->numweekToDate($numeroSemaine, $ppo->annee, 6));
     $ppo->semainePrecedente = strtotime("-1 week", $service->numweekToDate($numeroSemaine, $ppo->annee, 1));
     $ppo->semaineSuivante = strtotime("+1 week", $service->numweekToDate($numeroSemaine, $ppo->annee, 1));
     $toReturn = $this->_usePPO($ppo, '_menu_eleve.tpl');
 }
 public function _createContent(&$toReturn)
 {
     $agendaService = new AgendaService();
     $serviceDate = new DateService();
     //on détermine le jour d'affichage
     if ($this->getParam('day') == null) {
         $day = date('Ymd');
     } else {
         $day = $this->getParam('day');
     }
     //on récupère les évènements de la journée
     foreach ($this->getParam('arAgendasAffiches') as $idAgenda) {
         $arEventsSemaine[$idAgenda] = $agendaService->checkEventOfAgendaInBdd($idAgenda, $day, $day);
     }
     //on ordonne les évènements par ordre croissant d'heure de début d'évènement dans la journée
     $arEventByDay = $agendaService->getEventsByDay($arEventsSemaine, $day, $day);
     $arEventByDay = $agendaService->getEventsInOrderByDay($arEventByDay);
     //on simplifie le tableau pour le passer à la zone
     $arDayEvent = $arEventByDay[$day]->events;
     //on récupère la couleur d'affichage de chaque évènement
     //$arColorByEvent = $agendaService->getColorByIdEvent($arDayEvent);
     $arAgendas = $agendaService->getTilteAgendaByIdAgenda($this->getParam('arAgendasAffiches'));
     //on récupère la couleur d'affichage pour chaque agenda
     $boolCroise = array();
     $daoAgenda =& CopixDAOFactory::getInstanceOf('agenda|agenda');
     foreach ($this->getParam('arAgendasAffiches') as $id) {
         $agenda = $daoAgenda->get($id);
         $boolCroise[$agenda->type_agenda] = $boolCroise[$agenda->type_agenda] == false;
         $colors = $agendaService->getColorAgendaByIdAgenda($id);
         $arColorAgenda[$id] = $boolCroise[$agenda->type_agenda] ? $colors[0] : $colors[1];
     }
     $arEventToDisplay = array();
     foreach ($arDayEvent as $event) {
         $event->color = $arColorAgenda[$event->id_agenda];
         $arEventToDisplay[] = $event;
     }
     $jour = substr($day, 6, 2);
     $mois = $serviceDate->moisNumericToMoisLitteral(substr($day, 4, 2));
     $annee = substr($day, 0, 4);
     $tpl = new CopixTpl();
     $tpl->assign('jour', $jour);
     $tpl->assign('mois', $mois);
     $tpl->assign('annee', $annee);
     //$tpl->assign('arEvent'       , $arDayEvent);
     $tpl->assign('arEvent', $arEventToDisplay);
     $tpl->assign('arAgendas', $arAgendas);
     $tpl->assign('arColorByEvent', $arColorByEvent);
     $tpl->assign('arColorAgenda', $arColorAgenda);
     $toReturn = $tpl->fetch('aujourdhui.agenda.tpl');
     return true;
 }
Ejemplo n.º 3
0
 public function showCalendar($year, $month)
 {
     $date = Carbon::createFromDate($year, $month, 1);
     $data = $this->getCommonData();
     $data['month'] = $date;
     $data['months'] = DateService::getMonths($date);
     $data['days'] = DateService::getDatesInWeeksForMonth($date, Carbon::MONDAY);
     return View::make('home', $data);
 }
Ejemplo n.º 4
0
 /**
  * Test DateService#getDatesInWeeksForMonth() method.
  *
  * @return void
  */
 public function testGetDatesInWeeksForMonth()
 {
     $date = Carbon::now();
     $daysOfWeek = array(Carbon::MONDAY, Carbon::TUESDAY, Carbon::WEDNESDAY, Carbon::THURSDAY, Carbon::FRIDAY, Carbon::SATURDAY, Carbon::SUNDAY);
     foreach ($daysOfWeek as $dayOfweek) {
         for ($i = 1; $i <= 12; $i++) {
             $date->month = $i;
             $days = DateService::getDatesInWeeksForMonth($date, $dayOfweek);
             $this->assertEquals(0, count($days) % 7, join("\n", array('month:             ' . $date->month, 'first day of week: ' . $dayOfweek, 'from:              ' . head($days), 'to:                ' . last($days), 'count:             ' . count($days))));
         }
     }
 }
 public function _createContent(&$toReturn)
 {
     _classInclude('agenda|dateservices');
     $ppo = new CopixPPO();
     // Récupération des paramètres
     $ppo->cahierId = $this->getParam('cahierId');
     $ppo->jour = $this->getParam('date_jour');
     $ppo->mois = $this->getParam('date_mois');
     $ppo->annee = $this->getParam('date_annee');
     $ppo->eleve = $this->getParam('eleve');
     $service = new DateService();
     $ppo->nomMois = $service->moisNumericToMoisLitteral($ppo->mois);
     // Timestamp du 1er du mois sélectionné
     $time = mktime(0, 0, 0, $ppo->mois, 1, $ppo->annee);
     // Récupération du timestamp du mois suivant & précédent
     $ppo->moisPrecedent = strtotime("-1 month", $time);
     $ppo->moisSuivant = strtotime("+1 month", $time);
     $ppo->nombreDeJoursDansLeMois = date('t', $time);
     // Nombre de jours dans le mois
     $ppo->codePremierJourDeLaSemaine = date('w', $time);
     // Premier jour de la semaine (format numérique)
     if ($ppo->codePremierJourDeLaSemaine == 0) {
         $ppo->codePremierJourDeLaSemaine = 7;
     }
     $ppo->codePremierJourSemaine = 1;
     // Récupération des travaux suivant les accès de l'utilisateur courant (élève / responsable / enseignant)
     $cahierInfos = Kernel::getModParent('MOD_CAHIERDETEXTES', $ppo->cahierId);
     $nodeId = isset($cahierInfos[0]) ? $cahierInfos[0]->node_id : null;
     $ppo->estAdmin = Kernel::getLevel('MOD_CAHIERDETEXTES', $ppo->cahierId) >= PROFILE_CCV_PUBLISH ? true : false;
     $travailDAO = _ioDAO('cahierdetextes|cahierdetextestravail');
     if ($ppo->estAdmin) {
         $ppo->travaux = $travailDAO->findByClasseEtMoisParJour($nodeId, $ppo->mois, $ppo->annee);
     } elseif (Kernel::getLevel('MOD_CAHIERDETEXTES', $ppo->cahierId) == PROFILE_CCV_READ) {
         $ppo->travaux = $travailDAO->findByEleveEtMoisParJour($ppo->eleve, $ppo->mois, $ppo->annee);
     } else {
         $ppo->travaux = $travailDAO->findByEleveEtMoisParJour(_currentUser()->getExtra('id'), $ppo->mois, $ppo->annee);
     }
     $toReturn = $this->_usePPO($ppo, '_calendrier.ptpl');
 }
 /**
  * Fonction qui retourne un fichier texte contenant les évènements exportés d'après une période et les agendas concernés
  * @author Audrey Vassal <*****@*****.**>
  * @since 2006/08/17
  * @param array $pArEvents tableau d'évènements à exporter, classés par ordre croissant de début
  * @return string $content chaine de caractère représentant le contenu du fichier iCal exporté
  */
 public function getFileICal($pArEvents)
 {
     $serviceDate = new DateService();
     $content = 'BEGIN:VCALENDAR' . "\n";
     $content .= 'VERSION:2.0' . "\n";
     $content .= 'X-WR-TIMEZONE;VALUE=TEXT:' . CopixConfig::get('agenda|timeZone') . "\n";
     $content .= 'METHOD:PUBLISH' . "\n";
     foreach ((array) $pArEvents as $jour => $day) {
         if (!isset($day->events)) {
             continue;
         }
         foreach ($day->events as $event) {
             $content .= 'BEGIN:VEVENT' . "\n";
             $content .= 'SUMMARY:' . $event->title_event . "\n";
             if ($event->alldaylong_event == 1) {
                 //si l'évènement se déroule toute la journée
                 $dateCourante = $jour;
                 $content .= 'DTSTART;VALUE=DATE:' . $dateCourante . "\n";
                 $dateFin = $serviceDate->dateBddToDateFr($dateCourante);
                 $dateFin = $serviceDate->addToDate($dateFin, 1, 0, 0);
                 $dateFin = $serviceDate->dateFrToDateBdd($dateFin);
                 $content .= 'DTEND;VALUE=DATE:' . $dateFin . "\n";
             } else {
                 if ($event->endrepeatdate_event != null) {
                     //si c'est un évènement qui se répète
                     $content .= 'DTSTART;TZID=' . CopixConfig::get('agenda|timeZone') . ':' . $jour . 'T' . $serviceDate->heureWithSeparateurToheureWithoutSeparateur($event->heuredeb_event) . '00Z' . "\n";
                     $content .= 'DTEND;TZID=' . CopixConfig::get('agenda|timeZone') . ':' . $jour . 'T' . $serviceDate->heureWithSeparateurToheureWithoutSeparateur($event->heurefin_event) . '00Z' . "\n";
                 } else {
                     //cas d'un évènement classique
                     //var_dump($event);
                     $content .= 'DTSTART;TZID=' . CopixConfig::get('agenda|timeZone') . ':' . $event->datedeb_event . 'T' . $serviceDate->heureWithSeparateurToheureWithoutSeparateur($event->heuredeb_event) . '00Z' . "\n";
                     $content .= 'DTEND;TZID=' . CopixConfig::get('agenda|timeZone') . ':' . $event->datefin_event . 'T' . $serviceDate->heureWithSeparateurToheureWithoutSeparateur($event->heurefin_event) . '00Z' . "\n";
                 }
             }
             if ($event->desc_event != null) {
                 $content .= 'DESCRIPTION:' . $event->desc_event . "\n";
             }
             if ($event->place_event != null) {
                 $content .= 'LOCATION:' . $event->place_event . "\n";
             }
             $content .= 'END:VEVENT' . "\n";
         }
     }
     $content .= 'END:VCALENDAR';
     return $content;
 }
 /**
  * Retourne les travaux en classe pour un agenda et une période de date donnés
  *
  * @param int     $agendaId           Identifiant de l'agenda
  * @param string  $dateDebutSemaine   Date de début (YYYYmmdd)
  * @param string  $dateFinSemaine     Date de fin   (YYYYmmdd)
  * @param string  $nodeType           Type du node de l'agenda
  * @param int     $nodeId             Id du node de l'agenda
  * @param int     $agendaLevel        Level de l'utilisateur sur l'agenda
  *
  * @return array
  */
 public function findTravauxEnClasseByAgendaParJour($agendaId, $dateDebutSemaine, $dateFinSemaine, $nodeType, $nodeId, $agendaLevel)
 {
     $arTravauxParJour = array();
     $dateService = new DateService();
     $dateCourante = $dateDebutSemaine;
     while ($dateCourante <= $dateFinSemaine) {
         $arTravauxParJour[$dateCourante] = '';
         $dateCourante = $dateService->addToDate($dateService->dateBddToDateFr($dateCourante), 1, 0, 0, '/');
         $dateCourante = $dateService->dateFrToDateBdd($dateCourante);
     }
     // Eleve
     if ($agendaLevel == PROFILE_CCV_WRITE) {
         $sql = 'SELECT count(module_cahierdetextes_travail.id) as count, module_agenda_work.module_agenda_agenda_id_agenda as id_agenda, "' . $nodeType . '" as node_type, ' . $nodeId . ' as node_id, module_cahierdetextes_travail.date_creation as date_creation, module_cahierdetextes_domaine.nom' . ' FROM module_cahierdetextes_travail' . ' LEFT JOIN module_agenda_work ON (module_agenda_work.module_agenda_agenda_id_agenda = :agendaId)' . ' LEFT JOIN module_cahierdetextes_travail2eleve ON (module_cahierdetextes_travail.id = module_cahierdetextes_travail2eleve.module_cahierdetextes_travail_id)' . ' LEFT JOIN module_cahierdetextes_domaine ON (module_cahierdetextes_domaine.id = module_cahierdetextes_travail.module_cahierdetextes_domaine_id)' . ' WHERE module_agenda_work.module_cahierdetextes_travail_id = module_cahierdetextes_travail.id' . ' AND module_cahierdetextes_travail2eleve.kernel_bu_eleve_idEleve=:idEleve' . ' AND module_cahierdetextes_travail.supprime = 0' . ' AND module_cahierdetextes_travail.a_faire = ' . self::TYPE_EN_CLASSE . ' AND module_cahierdetextes_travail.date_creation >= :dateDebut' . ' AND module_cahierdetextes_travail.date_creation <= :dateFin' . ' GROUP BY module_cahierdetextes_travail.id';
         $results = _doQuery($sql, array('dateDebut' => $dateDebutSemaine, 'dateFin' => $dateFinSemaine, 'idEleve' => _currentUser()->getExtra('id'), 'agendaId' => $agendaId));
         foreach ($results as $result) {
             $arTravauxParJour[$result->date_creation][] = $result;
         }
     } elseif ($agendaLevel == PROFILE_CCV_NONE && _currentUser()->getExtra('type') == 'USER_RES') {
         $myNode = CopixSession::get('myNode');
         $eleveId = $myNode['type'] == "USER_ELE" ? $myNode['id'] : null;
         $sql = 'SELECT count(module_cahierdetextes_travail.id) as count, module_agenda_work.module_agenda_agenda_id_agenda as id_agenda, "' . $nodeType . '" as node_type, ' . $nodeId . ' as node_id, module_cahierdetextes_travail.date_creation as date_creation, module_cahierdetextes_domaine.nom' . ' FROM module_cahierdetextes_travail' . ' LEFT JOIN module_agenda_work ON (module_agenda_work.module_agenda_agenda_id_agenda = :agendaId)' . ' LEFT JOIN module_cahierdetextes_travail2eleve ON (module_cahierdetextes_travail.id = module_cahierdetextes_travail2eleve.module_cahierdetextes_travail_id)' . ' LEFT JOIN module_cahierdetextes_domaine ON (module_cahierdetextes_domaine.id = module_cahierdetextes_travail.module_cahierdetextes_domaine_id)' . ' WHERE module_agenda_work.module_cahierdetextes_travail_id = module_cahierdetextes_travail.id' . ' AND module_cahierdetextes_travail2eleve.kernel_bu_eleve_idEleve = :eleveId' . ' AND module_cahierdetextes_travail.supprime = 0' . ' AND module_cahierdetextes_travail.a_faire = ' . self::TYPE_EN_CLASSE . ' AND module_cahierdetextes_travail.date_creation >= :dateDebut' . ' AND module_cahierdetextes_travail.date_creation <= :dateFin' . ' GROUP BY module_cahierdetextes_travail.id';
         $results = _doQuery($sql, array('dateDebut' => $dateDebutSemaine, 'dateFin' => $dateFinSemaine, 'agendaId' => $agendaId, 'eleveId' => $eleveId));
         foreach ($results as $result) {
             $arTravauxParJour[$result->date_creation][] = $result;
         }
     } elseif ($agendaLevel == PROFILE_CCV_ADMIN) {
         $sql = 'SELECT count(module_cahierdetextes_travail.id) as count, module_agenda_work.module_agenda_agenda_id_agenda as id_agenda, "' . $nodeType . '" as node_type, ' . $nodeId . ' as node_id, module_cahierdetextes_travail.date_creation as date_creation, module_cahierdetextes_domaine.nom' . ' FROM module_cahierdetextes_travail' . ' LEFT JOIN module_agenda_work ON (module_agenda_work.module_agenda_agenda_id_agenda = :agendaId)' . ' LEFT JOIN module_cahierdetextes_domaine ON (module_cahierdetextes_domaine.id = module_cahierdetextes_travail.module_cahierdetextes_domaine_id)' . ' WHERE module_cahierdetextes_domaine.kernel_bu_ecole_classe_id=:nodeId' . ' AND module_agenda_work.module_cahierdetextes_travail_id = module_cahierdetextes_travail.id' . ' AND module_cahierdetextes_travail.supprime = 0' . ' AND module_cahierdetextes_travail.a_faire = ' . self::TYPE_EN_CLASSE . ' AND module_cahierdetextes_travail.date_creation >= :dateDebut' . ' AND module_cahierdetextes_travail.date_creation <= :dateFin' . ' GROUP BY module_cahierdetextes_travail.id';
         $results = _doQuery($sql, array('dateDebut' => $dateDebutSemaine, 'dateFin' => $dateFinSemaine, 'nodeId' => $nodeId, 'agendaId' => $agendaId));
         foreach ($results as $result) {
             $arTravauxParJour[$result->date_creation][] = $result;
         }
     }
     return $arTravauxParJour;
 }
 /**
  * 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 fait la v�rification sur les champs de saisie du formulaire d'ajout d'un �v�nement
  * @access: private
  * @return array $toReturn tableau qui contient les erreurs de saisie de l'utilisateur
  */
 public function _check($obj)
 {
     $toReturn = array();
     //var_dump($obj);
     $datedeb = $obj->datedeb_event;
     $datefin = $obj->datefin_event;
     $datejusquau = isset($obj->dateendrepeat_event) ? $obj->dateendrepeat_event : null;
     $datedebTs = CopixDateTime::dateToTimestamp($datedeb);
     $datefinTs = CopixDateTime::dateToTimestamp($datefin);
     $datejusquauTs = CopixDateTime::dateToTimestamp($datejusquau);
     //conversion des heures au format hhmm pour pouvoir les comparer
     $heuredeb = dateService::heureWithSeparateurToheureWithoutSeparateur($obj->heuredeb_event);
     $heurefin = dateService::heureWithSeparateurToheureWithoutSeparateur($obj->heurefin_event);
     $endrepeat_event = isset($obj->endrepeat_event) ? $obj->endrepeat_event : false;
     //$dateendrepeat_event = $this->getRequest('dateendrepeat_event', null);
     $repeat_event = isset($obj->repeat_event) ? $obj->repeat_event : false;
     //v�rification si les champs sont bien remplis
     if ($obj->title_event == null || $obj->title_event == '') {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.notitle');
     }
     if ($endrepeat_event == 'nbfois' && isset($obj->nb_fois) && !is_numeric($obj->nb_fois)) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.nbFoisIsNotNumeric');
     }
     if (!$datedeb) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.nodatedeb');
     }
     if (!$datefin) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.nodatefin');
     }
     if ($obj->alldaylong_event == null && ($obj->heuredeb_event == null || $obj->heuredeb_event == '')) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.noheuredeb');
     }
     if ($obj->alldaylong_event == null && ($obj->heurefin_event == null || $obj->heurefin_event == '')) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.noheurefin');
     }
     if ($endrepeat_event == 'nbfois' && ($obj->nb_fois == '' || $obj->nb_fois == null)) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.nonbfois');
     }
     if ($endrepeat_event == 'date' && ($datejusquau == '' || $datejusquau == null) && $obj->repeat == 1) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.nodateendrepeat');
     }
     if ($endrepeat_event == 'date' && ($obj->endrepeat_event == '' || $obj->endrepeat_event == null)) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.nodatefinrepeat');
     }
     if (isset($obj->repeat) && $obj->repeat == 1 && (!isset($obj->endrepeat_event) || $obj->endrepeat_event == null)) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.noprecisionrepeat');
     }
     //var_dump($datedebTs);
     //var_dump($datefinTs);
     //v�rification sur le format des dates
     if ($datedeb) {
         if (CopixDateTime::timestampToDate($datedebTs) === false) {
             $toReturn[] = CopixI18N::get('agenda|agenda.error.formdatedeb');
         }
     }
     if ($datefin) {
         if (CopixDateTime::timestampToDate($datefinTs) === false) {
             $toReturn[] = CopixI18N::get('agenda|agenda.error.formdatefin');
         }
     }
     //v�rification sur la coh�rence des dates de d�but et de fin
     if ($datedeb && $datefin && $datedebTs && $datefinTs && $datedebTs > $datefinTs) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.inversiondate');
     }
     if (isset($obj->repeat) && $obj->repeat == 1 && $datedebTs && $datejusquauTs && $obj->endrepeat_event != null && $datedebTs > $datejusquauTs && $obj->endrepeat_event == 'date') {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.inversiondaterepeat');
     }
     //v�rification sur la coh�rence des heures de d�but et de fin
     if ($datedebTs && $datefinTs && $datedebTs == $datefinTs && $heuredeb > $heurefin && $obj->alldaylong_event != 1 && ($obj->heurefin_event != null || $obj->heurefin_event != '')) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.inversionheure');
     }
     if ($datejusquau) {
         if (CopixDateTime::timestampToDate($datejusquauTs) === false) {
             $toReturn[] = CopixI18N::get('agenda|agenda.error.formdatejusqu');
         }
     }
     //v�rification sur le format des heures
     if ($obj->heuredeb_event != null || $obj->heuredeb_event != '') {
         if (!ereg("([0-2])?[0-9]:[0-5][0-9]", $obj->heuredeb_event)) {
             $toReturn[] = CopixI18N::get('agenda|agenda.error.formheuredeb');
         } else {
             $heure = explode(":", $obj->heuredeb_event);
             if ($heure[0] < 0 || $heure[0] > 23 || $heure[1] < 0 || $heure[1] > 59) {
                 $toReturn[] = CopixI18N::get('agenda|agenda.error.formheuredeb');
             }
         }
     }
     if ($obj->heurefin_event != null || $obj->heurefin_event != '') {
         if (!ereg("([0-2])?[0-9]:[0-5][0-9]", $obj->heurefin_event)) {
             $toReturn[] = CopixI18N::get('agenda|agenda.error.formheurefin');
         } else {
             $heure = explode(":", $obj->heurefin_event);
             if ($heure[0] < 0 || $heure[0] > 23 || $heure[1] < 0 || $heure[1] > 59) {
                 $toReturn[] = CopixI18N::get('agenda|agenda.error.formheurefin');
             }
         }
     }
     //v�rifier que la fr�quence de r�p�tition est coh�rente avec la dur�e de l'�v�nement
     if ($obj->datedeb_event && $obj->datefin_event && $obj->heuredeb_event && $obj->heurefin_event && $repeat_event == 'everyday_event' && DateService::getNomberDaysBeetweenTwoDates($obj->datedeb_event, $obj->datefin_event, $obj->heuredeb_event, $obj->heurefin_event) > 1) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.freqrepetitionday');
     }
     if ($repeat_event == 'everyweek_event' && DateService::getNomberDaysBeetweenTwoDates($obj->datedeb_event, $obj->datefin_event, $obj->heuredeb_event, $obj->heurefin_event) > 7) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.freqrepetitionweek');
     }
     if ($repeat_event == 'everymonth_event' && DateService::getNomberDaysBeetweenTwoDates($obj->datedeb_event, $obj->datefin_event, $obj->heuredeb_event, $obj->heurefin_event) > 28) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.freqrepetitionmonth');
     }
     if ($repeat_event == 'everyyear_event' && DateService::getNomberDaysBeetweenTwoDates($obj->datedeb_event, $obj->datefin_event, $obj->heuredeb_event, $obj->heurefin_event) > 365) {
         $toReturn[] = CopixI18N::get('agenda|agenda.error.freqrepetitionyear');
     }
     return $toReturn;
 }
 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;
 }
 /**
  * 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);
             }
         }
     }
 }
Ejemplo n.º 12
0
 /**
  * Return common data used in form related to congregations.
  *
  * @return array An array with common data.
  */
 protected function getCommonData()
 {
     $data = array('weekdays' => DateService::getWeekdays(), 'hours' => DateService::getHours(), 'minutes' => DateService::getMinutes());
     return $data;
 }