_events) renvoi une erreur parce que la variable n'a jamais été défini * * @ignore */ /** * Composant html calendrier année * @package com.neolao * @subpackage components * @author neolao * @version 1.0 (10/05/2005) * @link http://resources.neolao.com/php/classes/components/calendaryear */ class CalendarYear { // ----------------------------- CONSTANTES -------------------------------- // ----------------------------- VARIABLES --------------------------------- /** * Le style CSS du composant (class) * @var string */ private $_cssClass; /** * Le titre du composant * @var string */ private $_title; /** * Les mois de l'année * @var array */ private $_monthNames; /** * Les jours de la semaine * @var array */ private $_dayNames; /** * Le format des liens des jours (pour sprintf) * @var string */ private $_dayLinkFormat; /** * L'année * @var int */ private $_year; /** * Le lien "année suivante" * @var string */ private $_nextYearLink; /** * Le lien "année précédente" * @var string */ private $_previousYearLink; /** * Les événements * @var array */ private $_events; /** * Le calendrier en html * @var string */ private $_html; /*===================== CONSTRUCTEUR & DESCTRUCTEUR ======================*/ /*========================================================================*/ /** * Initialisation de la class * @param string $cssClass Le style CSS du composant (class) */ function __construct($cssClass=null){ if(!is_null($cssClass)){ $this->_cssClass = $cssClass; } // valeurs par défaut $this->_title = ""; $this->_dayNames = array("S", "M", "T", "W", "T", "F", "S"); $this->_dayLinkFormat = "#"; $this->_monthNames = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); $this->_year = date("Y"); } /** * Destruction de la class */ function __destruct(){ } /*=============== FIN = CONSTRUCTEUR & DESCTRUCTEUR = FIN ================*/ /*========================================================================*/ /*=========================== METHODES PRIVEES ===========================*/ /*========================================================================*/ private function setHtml(){ $ok = false; // Vérification de la validité des variables qui vont être utilisées $year = date("Y", mktime(0, 0, 0, 1, 1, $this->_year)); $checkEvents = true; $eventsTotal = 0; if(isset($this->_events)){ while (list($i, $v1) = each($this->_events)) { // Pour chaque mois ... while (list($j, $v2) = each($v1)) { // Pour chaque jour ... while (list($k, $v3) = each($v2)) { // Pour chaque événement du jour ... $eventsTotal++; if(!checkdate($v3["month"], $v3["day"], $year)){ $checkEvents = false; } } } } } $ok = $checkEvents; if($ok){ // Génération des variables utiles // liste des événements déjà insérés $eventsAlreadySet = array(); // tableau à 2 niveaux : mois, jours $rows = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); for($i=0; $i_dayLinkFormat, $year, $i+1, $j+1)."\">".substr($this->_dayNames[$dayNameIndex], 0, 1).""; } } // génération de ce tableau while($eventsTotal > 0){ // On initialise la longueur du prochain événement $length = 0; // Pour chaque mois ... for($i=1; $i<=12; $i++){ // Pour chaque jour de ce mois ... for($j=1; $j<=count($rows[$i - 1]); $j++){ // On vérifie s'il existe un événement à cette date if($length == 0 && isset($this->_events[$i][$j])){ for($k=0; $k_events[$i][$j]); $k++){ // Pour chaque événement de ce jour ... if(!$eventsAlreadySet[$i][$j][$k]){ // Le contenu html $row = "
_events[$i][$j][$k]["style"]."\"> 
"; $rowFirst = "
_events[$i][$j][$k]["style"]."\">"; $rowFirst .= "_events[$i][$j][$k]["link"]."\">•"; $rowFirst .= "
"; $rowFirst .= "
".$this->_events[$i][$j][$k]["title"]."
"; $rowFirst .= "
".$this->_events[$i][$j][$k]["description"]."
"; $rowFirst .= "
"; $rowFirst .= "
"; // La durée de l'événement $length = $this->_events[$i][$j][$k]["length"]; $maxLength = $length; // On mémorise l'événement if(!isset($eventsAlreadySet[$i])){ $eventsAlreadySet[$i] = array(); } if(!isset($eventsAlreadySet[$i][$j])){ $eventsAlreadySet[$i][$j] = array(); } $eventsAlreadySet[$i][$j][$k] = true; // On décrémente le total des événements $eventsTotal--; // On sort de la boucle des événements $k = count($this->_events[$i][$j]); } } } if($length < 1){ // On n'est pas dans un événement $rows[$i - 1][$j - 1] .= "
 
"; }else{ // On est dans un événement $rows[$i - 1][$j - 1] .= ($length == $maxLength)?$rowFirst:$row; $length--; } } } } // DL $content = "_cssClass)){ $content .= " class=\"".$this->_cssClass."\""; } $content .= ">"; // DT $content .= "
"; if(!empty($this->_previousYearLink)){ $content .= "_previousYearLink."\"><<"; } $content .= $this->_title; if(!empty($this->_nextYearLink)){ $content .= "_nextYearLink."\">>>"; } $content .= "
"; // DD $content .= "
"; // premier semestre $content .= ""; $content .= ""; $content .= ""; for($i=0; $i<6; $i++){ $content .= ""; } $content .= ""; $content .= ""; $content .= ""; $content .= "".str_repeat("", 6).""; $content .= ""; $content .= ""; $content .= ""; // De janvier à juin ... for($i=1; $i<=6; $i++){ $content .= ""; } $content .= ""; $content .= ""; $content .= "
".$this->_monthNames[$i]."
 
"; $content .= "
    "; // Pour chaque jour du mois ... for($j=1; $j<=count($rows[$i - 1]); $j++){ $content .= "
  1. ".$rows[$i - 1][$j - 1]."
  2. "; } $content .= "
"; $content .= "
"; // second semestre $content .= ""; $content .= ""; $content .= ""; for($i=6; $i<12; $i++){ $content .= ""; } $content .= ""; $content .= ""; $content .= ""; $content .= "".str_repeat("", 6).""; $content .= ""; $content .= ""; $content .= ""; // De juillet à décembre ... for($i=7; $i<=12; $i++){ $content .= ""; } $content .= ""; $content .= ""; $content .= "
".$this->_monthNames[$i]."
 
"; $content .= "
    "; // Pour chaque jour du mois ... for($j=1; $j<=count($rows[$i - 1]); $j++){ $content .= "
  1. ".$rows[$i - 1][$j - 1]."
  2. "; } $content .= "
"; $content .= "
"; $content .= "
"; // DL fin $content .= ""; }else{ $content = "[CALENDAR YEAR - ERROR]"; } $this->_html = $content; } /*===================== FIN = METHODES PRIVEES = FIN =====================*/ /*========================================================================*/ /*============================ GETTER SETTER ============================*/ /*========================================================================*/ public function __get($var){ switch($var){ case "html": $this->setHtml(); return $this->_html; case "title": return $this->_title; case "dayNames": return $this->_dayNames; case "dayLinkFormat": return $this->_dayLinkFormat; case "monthNames": return $this->_monthNames; case "year": return $this->_year; default: return null; } } public function __set($var, $value){ switch($var){ case "title": $this->_title = (string) $value; break; case "dayNames": $this->_dayNames = (array) $value; break; case "dayLinkFormat": // pour sprintf, le premier arguments des l'année %d, puis le mois %d et enfin le jour %d $this->_dayLinkFormat = (string) $value; break; case "monthNames": $this->_monthNames = (array) $value; break; case "year": $this->_year = (int) $value; break; default: } } /*====================== FIN = GETTER SETTER = FIN ======================*/ /*========================================================================*/ /*========================== METHODES PUBLIQUES ==========================*/ /*========================================================================*/ /** * Ajoute un événement * @param string $title Le titre de l'événement * @param int $startMonth Le mois de l'événement * @param int $startDay Le jour de l'événement * @param int $length La durée de l'événement, en jour * @param string $url Le lien de l'événement * @param string $description La description de l'événement * @param string $style Le style css de l'événement */ public function addEvent($title, $startMonth, $startDay, $length, $url, $description, $style="event"){ if(!isset($this->_events)){ $this->_events = array(); } $startMonth = ($startMonth >=1 && $startMonth <=12)?(int)$startMonth:1; $startDay = ($startDay >=1 && $startDay <=31)?(int)$startDay:1; if(!isset($this->_events[$startMonth])){ $this->_events[$startMonth] = array(); } if(!isset($this->_events[$startMonth][$startDay])){ $this->_events[$startMonth][$startDay] = array(); } $length = ($length >= 1)?(int)$length:1; $this->_events[$startMonth][$startDay][] = array("title"=>$title, "month"=>$startMonth, "day"=>$startDay, "length"=>$length, "link"=>$url, "description"=>$description, "style"=>$style); } /** * Ajoute un lien "année suivante" * @param string $url Le contenu du lien (contenu du href) */ public function addNextYear($url){ $this->_nextYearLink = $url; } /** * Supprime le lien "année suivante" */ public function removeNextYear(){ $this->_nextYearLink = null; } /** * Ajoute un lien "année précédente" * @param string $url Le contenu du lien (contenu du href) */ public function addPreviousYear($url){ $this->_previousYearLink = $url; } /** * Supprime le lien "année précédente" */ public function removePreviousYear(){ $this->_previousYearLink = null; } /*==================== FIN = METHODES PUBLIQUES = FIN ====================*/ /*========================================================================*/ } ?>