Bonjour tout le monde,

J'ai une classe qui génère une calendrier.

J'ai récupéré du code pour savoir si un jour est un samedi ou un dimanche :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
private static function isweekend($year, $month, $day){
	$time = mktime(0, 0, 0, $month, $day, $year);
	$weekday = date('w', $time);
	return ($weekday == 0 || $weekday == 6);
}
Je l'appelle de cette façon :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$samedi_ou_dimanche = isweekend($annee,$mois,$jour);
J'obtiens ce message :
Fatal error: Call to undefined function isweekend() in /home/web1196/public_html/classes/Calendrier.class.php on line 268
Voici le code complet de ma classe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
<?php
// $url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
// $url .= $_SERVER['SERVER_NAME'] . dirname($_SERVER['PHP_SELF']);
// define('BASE_URL', $url);
// define('BASE_PATH', realpath('.'));
// Les classes doivent être définies AVANT le session_start(), sinon PHP ne peux pas charger/sauvegarder les objets de page en page
// require_once(BASE_PATH . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'autoload.php');
// session_start();
class Calendrier{
	private $db; // instance PDO
	public function __construct(){
		$this->db = PDO2::getInstance()->db;
	}
	/**
	* Cette méthode retourne du code html affichant le calendrier généré pour le mois et l'année passés en paramètres.
	* Si rien n'est passé en paramètre, la méthode utilise le mois et l'année courante.
	*
	* @params : $mois (string)
	* @$annee (string)
	* @la machine (DD 20/07/2013)
	* @return : string
	*/
	public function generer($mois = null, $annee = null){
		$html = "";
		// Si le mois et l'année ne sont pas spécifiés, on prend le mois et l'année courante.
		if (!$mois || !$annee){
			$mois = date('m');
			$annee = date('Y');
			// $mois = '04';
			// $annee = '2012';
		}
		// on met à jour le mois et l'année selectionnés dans les champs cachés correspondants
		$html .= "<p id=\"moisCourant\">$mois</p>\n";
		$html .= "\t\t\t<p id=\"anneeCourante\">$annee</p>\n";	
		$nombre_jours_mois = (int)date('t', mktime('00', '00', '00', $mois, '01', $annee)); // retourne le nombre de jours du mois à afficher
		$premier_jour_mois = (int)date('N', mktime('00', '00', '00', $mois, '01', $annee)); // retourne le premier jour du mois à afficher (lundi -> dimanche)
		$jour = 1;
		$jour_semaine = 1; //lundi
		$noms_jours = array('lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche');
		$noms_mois = array('janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre');
		$nom_mois = $noms_mois[(int)$mois - 1]; // on récupère le nom du mois selectionné
		$premiere_semaine = true;
		// ouverture de la balise table
		$html .= "\t\t\t<table id=\"calendrier\">\n";
		// navigation
		$html .= "\t\t\t\t<tr id=\"navRow\">\n";
		$html .= "\t\t\t\t\t<td>&nbsp;</td>\n";
		$html .= "\t\t\t\t\t<td class=\"center\"><span id=\"prevYear\" class=\"navCal\" title=\"année précédente\"><img src=\"images/nav-first.png\" alt=\"année précédente\" /></span></td>\n"; 	// bouton année précedente
		$html .= "\t\t\t\t\t<td class=\"center\"><span id=\"prevMonth\" class=\"navCal\" title=\"mois précédent\"><img src=\"images/nav-prev.png\" alt=\"mois précédent\" /></span></td>\n"; 		// bouton mois précedent
		$html .= "\t\t\t\t\t<td class=\"nomMois center\">$nom_mois $annee</td>\n"; 									// mois et année actuellement affichés
		$html .= "\t\t\t\t\t<td class=\"center\"><span id=\"nextMonth\" class=\"navCal\" title=\"mois suivant\"><img src=\"images/nav-next.png\" alt=\"mois suivant\" /></span></td>\n"; 		// bouton mois suivant
		$html .= "\t\t\t\t\t<td class=\"center\"><span id=\"nextYear\" class=\"navCal\" title=\"année suivante\"><img src=\"images/nav-last.png\" alt=\"année suivante\" /></span></td>\n"; 	// bouton année suivante
		$html .= "\t\t\t\t\t<td>&nbsp;</td>\n";
		$html .= "\t\t\t\t</tr>\n";
		// entetes
		$html .= "\t\t\t\t<tr>\n";
		// $html .= "<tr><td>&nbsp;</td>\n";
		for ($i = 0; $i < sizeof($noms_jours); $i++){
			$html .= "\t\t\t\t\t<td class=\"nomsJours center\">$noms_jours[$i]</td>\n"; // affichage des noms des jours de la semaine comme entete des colonnes
		}
		$html .= "\t\t\t\t</tr>\n";
		// contenu
		while ($jour <= $nombre_jours_mois){
			$html .= "\t\t\t\t<tr>\n";
			if ($premiere_semaine){
				$premiere_semaine = false;
				for ($i = 1; $i < $premier_jour_mois; $i++){
					$html .= "\t\t\t\t\t<td>&nbsp;</td>\n";
					$jour_semaine++;
				}
				for ($i = $premier_jour_mois; $i <= 7; $i++){
					$html .= "\t\t\t\t\t<td class=\"conteneurCase\">\n";
					$html .= $this->getReservations($jour, $mois, $annee);
					$html .= "\t\t\t\t\t</td>\n";
					$jour++;
					$jour_semaine++;
				}
			}
			else{
				for ($i = 1; $i <= 7; $i++){
					if($jour > $nombre_jours_mois){
						$html .= "\t\t\t\t\t<td>&nbsp;</td>\n";
					}
					else{
						$html .= "\t\t\t\t\t<td class=\"conteneurCase\">\n";
						$html .= $this->getReservations($jour, $mois, $annee);
						$html .= "\t\t\t\t\t</td>\n";
						$jour++;
					}
					$jour_semaine++;
				}
			}
			//fin de la semaine;
			$html .= "\t\t\t\t</tr>\n";
			// on passe du dimanche au lundi
			$jour_semaine = 1;
		}
		// fermeture de la balise table
		$html .= "\t\t\t</table>\n";
		return $html;
	}
	/**
	* retourne un tableau html représentant une case du calendrier
	*
	* @params :	int $jour
	*			string $mois
	*			string $annee
	* @return : string
	*/
	private function getReservations($jour, $mois, $annee){
		ob_start();
		$jour = ($jour > 0 && $jour < 10) ? '0' . $jour : '' . $jour;
		// contenu de la case par période
		$am = "&nbsp;";
		$pm = "&nbsp;";
		$nu = "&nbsp;";
		// id de l'utilisateur ayant réservé (-1 si pas réservé)
		$idAm = -1;
		$idPm = -1;
		$idNu = -1;
		// couleur de fond de la case
		$colorAm = "#ffffff";
		$colorPm = "#ffffff";
		$colorNu = "#ffffff";
		// classe de la case (utilisé par jQuery pour afficher ou non le menu contextuel)
		$statutAm = "libre";
		$statutPm = "libre";
		$statutNu = "libre";
		$editable = "_éditable"; // utilisé par jQuery, si _éditable est dans la classe, la case est éditable par l'utilisateur
		$debug = '';
		$id = $annee . '_' . $mois . '_' . $jour . '_%';
		$today = ($jour == date('d') && $mois == date('m') && $annee == date('Y')) ? true : false;
		//<debug>
		// ob_start();
		// var_dump(array("jour" => $jour, "mois" => $mois, "annee" => $annee));
		// $debug .= ob_get_clean();
		//</debug>
		//modification DD 21/07/2013 ajout de la machine dans la requête SQL
		$req = $this->db->prepare("SELECT * FROM reservations WHERE jour LIKE :jour ");
		$req->execute(array(':jour' => $id));
		$displayJour = (int)$jour;
		//modification DD 21/07/2013 ajout de la machine dans la requête SQL
		$user_req = $this->db->prepare("SELECT u.nom, u.prenom, sr.couleur, sr.libelle, u.id, r.commentaire
			FROM utilisateurs u
			LEFT JOIN reservations r
			ON u.id = r.id_user
			LEFT JOIN statuts_reservations sr
			ON r.statut = sr.id
			WHERE r.jour = :jour
			AND u.id = :user
		");
		$id = substr($id, 0, -1);
		$periodes = array("AM", "PM");
		//$periodes = array("AM", "PM", "NU");
		while ($res = $req->fetch()){
			foreach ($periodes as $periode){
				$id_res = $id . $periode;
				//<debug>
				// ob_start();
				// var_dump($id_res);
				// $debug .= ob_get_clean();
				//</debug>
				$user_req->bindParam(':jour', $id_res);
				//permet d'afficher QUE les jours de la personne qui vient de se connecter...
				$user_req->bindParam(':user', $_SESSION['utilisateur']->getId());
				//modification DD 21/07/2013: ajout de la machine
				//$user_req->bindParam(':machine',$_SESSION['machine']);
				$user_req->execute();
				$hasComment = false;
				if ($reponse = $user_req->fetch()){
					$user = '<div class="contenuCellule">' . substr($reponse['prenom'], 0, 1) . '. ' . $reponse['nom'];
					if (!empty($reponse['commentaire'])){
						$hasComment = true;
						$user .= ' <div class="commentImage"><img src="images/commentaire2.gif" id="c' . $id_res . '" alt="" title="' . htmlspecialchars($reponse['commentaire']) . '"/></div>';
					}
					$user .= '</div>';
					switch ($periode){
						case "AM":
							$idAm = intval($reponse['id']);
							$am = $user;
							$colorAm = $reponse['couleur'];
							$statutAm = $reponse['libelle'];
							$commentStatutAm = ($hasComment) ? "_commenté" : "";
							break;
						case "PM":
							$idPm = intval($reponse['id']);
							$pm = $user;
							$colorPm = $reponse['couleur'];
							$statutPm = $reponse['libelle'];
							$commentStatutPm = ($hasComment) ? "_commenté" : "";
							break;
						//case "NU":
						//	$idNu = intval($reponse['id']);
						//	$nu = $user;
						//	$colorNu = $reponse['couleur'];
						//	$statutNu = $reponse['libelle'];
						//	$commentStatutNu = ($hasComment) ? "_commenté" : "";
						//	break;
					}
				}
			}
		}
		// Si il s'agit de la date d'aujourd'hui, on entoure la case en rouge à l'aide de la classe 'today'
		if ($today){
			$html =  "\t\t\t\t\t\t<table class=\"today\">\n";
		}
		else{
			$html =  "\t\t\t\t\t\t<table class=\"case\">\n";
		}
		// Si la case du calendrier n'est pas une date passée (ou la date d'aujourd'hui), elle sera réservable.
		// if (mktime('00', '00', '00', $mois, $jour, $annee) > time()) 
		// {
			// $editable = "_éditable";
		// }
		// Affichage du numéro du jour
		$html .= "\t\t\t\t\t\t\t<tr>\n";
		$html .= "\t\t\t\t\t\t\t\t<td colspan=\"2\" class=\"numeroJour\">$displayJour</td>\n";
		$html .= "\t\t\t\t\t\t\t</tr>\n";
		// A.M.
		$html .= "\t\t\t\t\t\t\t<tr>\n";
		$html .= "\t\t\t\t\t\t\t\t<td class=\"periode\">A.M.</td>\n";
		$samedi_ou_dimanche = isweekend($annee,$mois,$jour);
		echo $samedi_ou_dimanche;
		$html .= "\t\t\t\t\t\t\t\t<td id=\"AM_". $annee . '_' . $mois . '_' . $jour . "\" class=\"statutPeriode $statutAm";
		if ($_SESSION['utilisateur']->getRang() == "administrateur" || $statutAm == "libre" || ($statutAm == "proposé" && $idAm == $_SESSION['utilisateur']->getId())) $html .= $editable . $commentStatutAm;
		else $html .= $commentStatutAm;
		$html .= "\" style=\"background-color:$colorAm;\">$am</td>\n";
		$html .= "\t\t\t\t\t\t\t</tr>\n";
		// P.M.
		$html .= "\t\t\t\t\t\t\t<tr>\n";
		$html .= "\t\t\t\t\t\t\t\t<td class=\"periode\">P.M.</td>\n";
		$html .= "\t\t\t\t\t\t\t\t<td id=\"PM_". $annee . '_' . $mois . '_' . $jour . "\" class=\"statutPeriode $statutPm";
		if ($_SESSION['utilisateur']->getRang() == "administrateur" || $statutPm == "libre" || ($statutPm == "proposé" && $idPm == $_SESSION['utilisateur']->getId())) $html .= $editable . $commentStatutPm;
		else $html .= $commentStatutPm;
		$html .= "\" style=\"background-color:$colorPm;\">$pm</td>\n";
		$html .= "\t\t\t\t\t\t\t</tr>\n";
		$html .= "\t\t\t\t\t\t</table>\n";
		//<debug>
		// ob_start();
		// var_dump($_SESSION['utilisateur']);
		// echo "Am : $idAm\nPm : $idPm\nNu : $idNu";
		// $debug .= ob_get_clean();
		//</debug>
		// affichage des données de debug
		$debug .= ob_get_clean();
		// $html .= "<div class=\"debug\">$debug&nbsp;</div>";
		return $html;
	}
	private static function isweekend($year, $month, $day){
		$time = mktime(0, 0, 0, $month, $day, $year);
		$weekday = date('w', $time);
		return ($weekday == 0 || $weekday == 6);
	}
}
?>
Merci d'avance pour l'aide.

bee