com.neolao.components.Calendar

Cette class s'occupe d'afficher un calendrier en HTML

Exemple

$calendar_view = new Calendar("calendar_view");
echo $calendar_view->html;

Propriétés

Visibilité Type Nom Status Description
public array dayNames Les noms des jours de la semaines. Par défaut : array(“S”, “M”, “T”, “W”, “T”, “F”, “S”)
public int firstDay Le premier jour de la semaine. Par défaut : 0 (=Dimanche)
public array monthNames Les noms mois de l'année
public int year L'année du calendrier
public int month Le mois du calendrier
public int day Le jour du calendrier
public string html Lecture seule L'affichage HTML du calendrier

Méthodes

Visibilité Nom Param 1 Param 2 Description
public addEvent $dayNumber Ajoute un événement à un jour. Uniquement visuel
public addLink $dayNumber $url Ajoute un lien à un jour du mois
public removeLink $dayNumber Supprime un lien à un jour du mois
public addNextMonth $url Ajoute un lien “mois suivant”
public removeNextMonth Supprime le lien “mois suivant”
public addPreviousMonth $url Ajoute un lien “mois précédent”
public removePreviousMonth Supprime le lien “mois précédent”
public addNextYear $url Ajoute un lien “année suivante”
public removeNextYear Supprime le lien “année suivante”
public addPreviousYear $url Ajoute un lien “année précédente”
public removePreviousYear Supprime le lien “année précédente”

Change log

  • [06/05/2005] Version 1.0
  • [12/05/2005] Version 1.1

Ajout de la méthode addEvent et tout ce qui va avec
On indique juste s'il y a un événement ce jour là, sans détails. Peut-être un jour un peu plus …

Source

/**
 * Composant html calendrier
 * @package		com.neolao
 * @subpackage		components
 * @author		neolao <neo@neolao.com>
 * @version		1.1 (12/05/2005)
 * @link		http://resources.neolao.com/php/classes/components/calendar
 */
class Calendar {	
	// ----------------------------- CONSTANTES --------------------------------
 
	// ----------------------------- VARIABLES ---------------------------------
	/**
	 * L'année
	 * @var int
	 */
	private $_year;
	/**
	 * Le mois
	 * @var int
	 */
	private $_month;
	/**
	 * Le jour mis en valeur
	 * @var int
	 */
	private $_day;
	/**
	 * Les jours de la semaine
	 * @var array
	 */
	private $_dayNames;
	/**
	 * Les liens des jours
	 * @var array
	 */
	private $_dayLinks;
	/**
	 * Les mois de l'année
	 * @var array
	 */
	private $_monthNames;
	/**
	 * Indique le premier jour de la semaine
	 * @var int
	 */
	private $_weekFirstDay;
	/**
	 * Le lien "mois suivant"
	 * @var string
	 */
	private $_nextMonthLink;
	/**
	 * Le lien "mois précédent"
	 * @var string
	 */
	private $_previousMonthLink;
	/**
	 * Le lien "année suivante"
	 * @var string
	 */
	private $_nextYearLink;
	/**
	 * Le lien "année précédente"
	 * @var string
	 */
	private $_previousYearLink;
	/**
	 * Les événements du mois
	 * @var array
	 */
	private $_events;
	/**
	 * Le style CSS du composant (class)
	 * @var string
	 */
	private $_cssClass;
	/**
	 * 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->_dayNames = array("S", "M", "T", "W", "T", "F", "S");
		$this->_monthNames = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
		$this->_weekFirstDay = 0; // 0 = Sunday
		$this->_year = (int) date("Y");
		$this->_month = (int) date("n");
		$this->_day = (int) date("j");
		$this->_events = array();
	}
	/**
	 * Destruction de la class
	 */
	function __destruct(){
 
	}
	/*=============== FIN = CONSTRUCTEUR & DESCTRUCTEUR = FIN ================*/
	/*========================================================================*/
 
	/*=========================== METHODES PRIVEES ===========================*/
	/*========================================================================*/
	/**
	 * Génération du html
	 */
	private function _setHtml(){
		$ok = false;
		// Vérification de la validité des variables qui vont être utilisées
		if(checkdate($this->_month, $this->_day, $this->_year)){
			// La date existe
			if(count($this->_dayNames) == 7){
				// Il y a bien 7 noms de jour de semaine
				if(count($this->_monthNames) == 12){
					// Il y a bien 12 noms de mois
					if($this->_weekFirstDay >=0 && $this->_weekFirstDay <=6){
						// Le premier jour de la semaine est valide
						$ok = true;
					}
				}
			}
		}
 
		if($ok){
			// Génération des variables utiles
			$dayFirst = date("w", mktime(0, 0, 0, $this->_month, 1, $this->_year));
			$dayTotal = date("t", mktime(0, 0, 0, $this->_month, 1, $this->_year));
			$days = array();
			$i = 1; // nombre de jour du mois créé
			$n = 0; // semaine
			while($i <= $dayTotal){
				$days[$n] = array();
				for($j=0; $j<7; $j++){
					if($i > 1 || ($n == 0 && $j == ($dayFirst + 7 - $this->_weekFirstDay)%7)){
						if($i <= $dayTotal){
							$days[$n][$j] = $i++;
						}else{
							$days[$n][$j] = "";
						}
					}else{
						$days[$n][$j] = "";
					}
				}
				$n++;
			}
 
			// DL
			$content = "<dl";
			if(!empty($this->_cssClass)){
				$content .= " class=\"".$this->_cssClass."\"";
			}
			$content .= ">";
 
			// DT
			$content .= "<dt>";
			if(!empty($this->_previousYearLink)){
				$content .= "<a class=\"previousYearLink\" href=\"".$this->_previousYearLink."\">&lt;&lt;</a>";
			}
			if(!empty($this->_previousMonthLink)){
				$content .= "<a class=\"previousMonthLink\" href=\"".$this->_previousMonthLink."\">&lt;</a>";
			}
			$content .= $this->_monthNames[$this->_month - 1]." ".$this->_year;
			if(!empty($this->_nextMonthLink)){
				$content .= "<a class=\"nextMonthLink\" href=\"".$this->_nextMonthLink."\">&gt;</a>";
			}
			if(!empty($this->_nextYearLink)){
				$content .= "<a class=\"nextYearLink\" href=\"".$this->_nextYearLink."\">&gt;&gt;</a>";
			}
			$content .= "</dt>";
 
			// DD
			$content .= "<dd>";
			$content .= 	"<table>";
			$content .= 		"<thead><tr>";
			for($i=0; $i<count($this->_dayNames); $i++){
								$content .= "<th>".$this->_dayNames[($i + $this->_weekFirstDay)%7]."</th>";
			}
			$content .= 		"</tr></thead>";
			$content .= 		"<tfoot><tr>";
			for($i=0; $i<count($this->_dayNames); $i++){
								$content .= "<td>&nbsp;</td>";
			}
			$content .= 		"</tr></tfoot>";
			$content .= 		"<tbody>";
			for($i=0; $i<count($days); $i++){
				$content .=			"<tr>";
				for($j=0; $j<7; $j++){
					$content .=			"<td";
					// Jour particulier
					if($days[$i][$j] == $this->_day){
						// C'est le jour sélectionné
						$content .= " class=\"light\"";
					}else if($this->_events[$days[$i][$j]] === true){
						// Il n'est pas sélectionné mais il y a au moins un événement
						$content .= " class=\"event\"";
					}
					$content .= ">";
					if(!empty($this->_dayLinks[$days[$i][$j]])){
						$content .= "<a href=\"".$this->_dayLinks[$days[$i][$j]]."\">".$days[$i][$j]."</a>";
					}else{
						$content .= $days[$i][$j];
					}
					$content .= "</td>";
				}
				$content .=			"</tr>";
			}
			$content .= 		"</tbody>";
			$content .= 	"</table>";
			$content .= "</dd>";
 
			// DL fin
			$content .= "</dl>";
		}else{
			$content = "[CALENDAR - ERROR]";
		}
 
		$this->_html = $content;
	}
	/*===================== FIN = METHODES PRIVEES = FIN =====================*/
	/*========================================================================*/
 
	/*============================ GETTER  SETTER ============================*/
	/*========================================================================*/
	public function __get($var){
		switch($var){
			case "html":
				$this->_setHtml();
				return $this->_html;
			case "firstDay":
				return $this->_weekFirstDay;
			case "dayNames":
				return $this->_weekDays;
			case "monthNames":
				return $this->_monthNames;
			case "year":
				return $this->_year;
			case "month":
				return $this->_month;
			case "day":
				return $this->_day;
			default:
				return null;
		}
	}
	public function __set($var, $value){
		switch($var){
			case "firstDay":
				$this->_weekFirstDay = (int) $value % 7;
				break;
			case "dayNames":
				$this->_dayNames = (array) $value;
				break;
			case "monthNames":
				$this->_monthNames = (array) $value;
				break;
			case "year":
				$this->_year = (int) $value;
				$timestamp = mktime(0, 0, 0, $this->_month, $this->_day, $this->_year);
				$this->_year = date("Y", $timestamp);
				$this->_month = date("m", $timestamp);
				$this->_day = date("d", $timestamp);
				break;
			case "month":
				$this->_month = (int) $value;
				$timestamp = mktime(0, 0, 0, $this->_month, $this->_day, $this->_year);
				$this->_year = date("Y", $timestamp);
				$this->_month = date("m", $timestamp);
				$this->_day = date("d", $timestamp);
				break;
			case "day":
				$this->_day = $value;
				$timestamp = mktime(0, 0, 0, $this->_month, $this->_day, $this->_year);
				$this->_year = date("Y", $timestamp);
				$this->_month = date("m", $timestamp);
				$this->_day = date("d", $timestamp);
				break;
			default:
 
		}
	}
	/*====================== FIN = GETTER  SETTER = FIN ======================*/
	/*========================================================================*/
 
	/*========================== METHODES PUBLIQUES ==========================*/
	/*========================================================================*/
	/**
	 * Ajoute un événement à un jour
	 * Ca ne rajoute qu'un style à la case
	 * @param int $dayNumber Le jour de l'événement
	 */
	public function addEvent($dayNumber){
		if(!isset($this->_events)){
			$this->_events = array();
		}
		$this->_events[$dayNumber] = true;
	}
 
	/**
	 * Ajoute un lien à un jour du mois
	 * @param int $dayNumber Le numéro du mois
	 * @param string $url Le contenu du lien (contenu du href)
	 */
	public function addLink($dayNumber, $url){
		if(!isset($this->_dayLinks)){
			$this->_dayLinks = array();
		}
		$this->_dayLinks[$dayNumber] = $url;
	}
	/**
	 * Supprime un lien à un jour du mois
	 * @param int $dayNumber Le numéro du mois
	 */
	public function removeLink($dayNumber){
		if(!isset($this->_dayLinks)){
			$this->_dayLinks = array();
		}
		$this->_dayLinks[$dayNumber] = null;
	}
 
	/**
	 * Ajoute un lien "mois suivant"
	 * @param string $url Le contenu du lien (contenu du href)
	 */
	public function addNextMonth($url){
		$this->_nextMonthLink = $url;
	}
	/**
	 * Supprime le lien "mois suivant"
	 */
	public function removeNextMonth(){
		$this->_nextMonthLink = null;
	}
 
	/**
	 * Ajoute un lien "mois précédent"
	 * @param string $url Le contenu du lien (contenu du href)
	 */
	public function addPreviousMonth($url){
		$this->_previousMonthLink = $url;
	}
	/**
	 * Supprime le lien "mois précédent"
	 */
	public function removePreviousMonth(){
		$this->_previousMonthLink = null;
	}
 
	/**
	 * 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 ====================*/
	/*========================================================================*/
}