184 lines
8.2 KiB
PHP
Executable File
184 lines
8.2 KiB
PHP
Executable File
<?php
|
|
|
|
function reservation($id_joueur, $jour, $mois, $annee, $type, $nom_resa, $heure_debut, $heure_fin, $min_debut, $min_fin,$db_connection) {
|
|
|
|
if($jour<10 and strlen($jour)==1) {$jour="0".$jour;}
|
|
if($mois<10 and strlen($mois)==1) {$mois="0".$mois;}
|
|
|
|
include_once("constantes.php");
|
|
|
|
/* Calcul des timestamp unix pour controle des horaires et controle des horaires*/
|
|
$horaire_debut=mktime($heure_debut, $min_debut, 0, $mois, $jour, $annee);
|
|
$horaire_fin=mktime($heure_fin, $min_fin, 0, $mois, $jour, $annee);
|
|
$horaires_ok=controleHoraires($horaire_debut, $horaire_fin);
|
|
|
|
|
|
$borne_ok=0;
|
|
$resa_ok=1;
|
|
|
|
/* Controle si borne connectée */
|
|
$requete="SELECT * FROM compte WHERE id_joueur='$id_joueur' AND statut='Borne'";
|
|
$reponse=mysqli_query($db_connection, $requete) or die ("Erreur no".mysqli_errno($db_connection)()." : ".mysqli_error($db_connection)()."<br>");
|
|
$existe_borne=mysqli_num_rows($reponse);
|
|
if($existe_borne > 0) {
|
|
$compte=mysqli_fetch_object($reponse);
|
|
$club=$compte->id_club;
|
|
$borne_ok=1;
|
|
}
|
|
|
|
/* Controle si un nom a été saisi */
|
|
if($nom_resa == "" and $borne_ok==1) {
|
|
$resa_ok=-1;
|
|
}
|
|
|
|
$requete="SELECT duree_borne FROM quota_resa WHERE id_club='$club'";
|
|
$reponse=mysqli_query($db_connection, $requete) or die ("Erreur no".mysqli_errno($db_connection)()." : ".mysqli_error($db_connection)()."<br>");
|
|
$existe=mysqli_num_rows($reponse);
|
|
if($existe > 0) {
|
|
$quota_resa=mysqli_fetch_object($reponse);
|
|
$duree=$quota_resa->duree_borne;
|
|
$duree_sec=$horaire_fin - $horaire_debut;
|
|
$duree_h=round($duree_sec / 3600);
|
|
if($duree_h > $duree and $quota_resa->duree_borne > 0) {
|
|
$resa_ok=0;
|
|
}
|
|
}
|
|
|
|
/* tableau contenant les terrains à reserver */
|
|
if($horaires_ok==1 and $borne_ok==1 and $resa_ok>0) {
|
|
$terrain_resa=0;
|
|
$message="";
|
|
|
|
$terrains=$_POST['terrains'];
|
|
|
|
/* Pour chaque terrain contrôler que les heures passent */
|
|
if(count($terrains)==0) {
|
|
$message="Aucun terrain n'a ete selectionné. Veuillez recommencer.";
|
|
}
|
|
else {
|
|
for ($i=0;$i<count($terrains);$i++) {
|
|
$interv_occupe=0;
|
|
$id_terrain=$terrains[$i];
|
|
$requete="SELECT nom FROM reservable WHERE id_reservable='$id_terrain'";
|
|
$reponse=mysqli_query($db_connection, $requete) or die ("Erreur no".mysqli_errno($db_connection)()." : ".mysqli_error($db_connection)()."<br>");
|
|
$terrain=mysqli_fetch_object($reponse);
|
|
/* controle pour chaque demi-heure */
|
|
$ts_debut=mktime($heure_debut, $min_debut, 0, $mois, $jour, $annee);
|
|
$ts_fin=mktime($heure_fin, $min_fin, 0, $mois, $jour, $annee);
|
|
|
|
$ts_interv=$ts_debut;
|
|
|
|
while($interv_occupe==0 and $ts_interv<$ts_fin) {
|
|
$ts_fin_interv=$ts_interv + (30 * 60);
|
|
$h_interv_deb=date("H:i:00", $ts_interv);
|
|
$h_interv_fin=date("H:i:00", $ts_fin_interv);
|
|
$requete="SELECT id_reservation, heure_resa_deb, heure_resa_fin FROM reservation WHERE date_resa='$annee-$mois-$jour' AND id_reservable='$id_terrain' AND ((heure_resa_deb >= '$h_interv_deb' AND heure_resa_deb<'$h_interv_fin') OR (heure_resa_fin>'$h_interv_deb' AND heure_resa_fin<='$h_interv_fin') OR (heure_resa_deb<='$h_interv_deb' AND heure_resa_fin>='$h_interv_fin'))";
|
|
$reponse=mysqli_query($db_connection, $requete) or die ("Erreur no".mysqli_errno($db_connection)()." : ".mysqli_error($db_connection)()."<br>");
|
|
$existe=mysqli_num_rows($reponse);
|
|
if($existe>0) {
|
|
$interv_occupe=1;
|
|
}
|
|
|
|
$ts_interv=$ts_fin_interv;
|
|
}
|
|
/* si l'intervalle est occupé */
|
|
if($interv_occupe==1) {
|
|
$message="La reservation n'a pas ete prise en compte. Le terrain $terrain->nom est occupe a ces horaires ou la reservation n'a pas ete validee par l'administrateur !";
|
|
}
|
|
else {
|
|
$terrain_resa=$terrain_resa+1;
|
|
$debut="$heure_debut:$min_debut:00";
|
|
$fin="$heure_fin:$min_fin:00";
|
|
$date="$annee-$mois-$jour";
|
|
/* Positionne le flag de validation */
|
|
if(is_numeric($type)) {
|
|
if($adverse_ok==1)
|
|
$requete="INSERT INTO reservation(type, type_reservation, id_joueur, heure_resa_deb, heure_resa_fin, date_resa, id_reservable, validation, id_joueur_adverse, id_rubrique) VALUES('Autre', '$nom_resa', '$id_joueur', '$debut','$fin','$date', '$id_terrain', '1','$adverse_bdd->id_joueur','$type')";
|
|
else
|
|
$requete="INSERT INTO reservation(type, type_reservation, id_joueur, heure_resa_deb, heure_resa_fin, date_resa, id_reservable, validation, id_rubrique) VALUES('Autre', '$nom_resa', '$id_joueur', '$debut','$fin','$date', '$id_terrain', '1','$type')";
|
|
}
|
|
else {
|
|
if($adverse_ok==1)
|
|
$requete="INSERT INTO reservation(type, type_reservation, id_joueur, heure_resa_deb, heure_resa_fin, date_resa, id_reservable, validation, id_joueur_adverse, id_rubrique) VALUES('$type', '$nom_resa', '$id_joueur', '$debut','$fin','$date', '$id_terrain', '1','$adverse_bdd->id_joueur','0')";
|
|
else
|
|
$requete="INSERT INTO reservation(type, type_reservation, id_joueur, heure_resa_deb, heure_resa_fin, date_resa, id_reservable, validation, id_rubrique) VALUES('$type', '$nom_resa', '$id_joueur', '$debut','$fin','$date', '$id_terrain', '1','0')";
|
|
}
|
|
$reponse=mysqli_query($db_connection, $requete) or die ("Erreur no".mysqli_errno($db_connection)()." : ".mysqli_error($db_connection)()."<br>");
|
|
|
|
$requete="SELECT nom FROM reservable WHERE id_reservable='$id_terrain'";
|
|
$reponse=mysqli_query($db_connection, $requete) or die ("Erreur no".mysqli_errno($db_connection)()." : ".mysqli_error($db_connection)()."<br>");
|
|
$terrain=mysqli_fetch_object($reponse);
|
|
|
|
$message.="La reservation a ete prise en compte pour le terrain $terrain->nom.";
|
|
/* Message de Log */
|
|
$date_log=date("Y-m-d",time());
|
|
$heure_log=date("H:i:00",time());
|
|
$requete="SELECT MAX(id_reservation) FROM reservation";
|
|
$reponse=mysqli_query($db_connection, $requete) or die ("Erreur no".mysqli_errno($db_connection)()." : ".mysqli_error($db_connection)()."<br>");
|
|
$max_resa=mysqli_fetch_array($reponse);
|
|
/* Durée résa */
|
|
$debut_resa=mktime($heure_debut, $min_debut, 0, $mois, $jour, $annee);
|
|
$fin_resa=mktime($heure_fin, $min_fin, 0, $mois, $jour, $annee);
|
|
$duree=$fin_resa-$debut_resa;
|
|
$heure=$duree/3600;
|
|
$min=($duree-($heure*3600))/60;
|
|
if($min<10) { $min="0".$min; }
|
|
$duree_resa="$heure:$min";
|
|
/* Message de log de la forme Type message - joueur - durée - type_résa - message */
|
|
$requete="SELECT nom, prenom FROM joueur WHERE id_joueur='$id_joueur'";
|
|
$reponse=mysqli_query($db_connection, $requete) or die ("Erreur no".mysqli_errno($db_connection)()." : ".mysqli_error($db_connection)()."<br>");
|
|
$joueur=mysqli_fetch_object($reponse);
|
|
if(is_numeric($type)) {
|
|
$req="SELECT nom FROM rubriques_resa WHERE id_rubrique='$type'";
|
|
$reponse=mysqli_query($db_connection, $requete) or die ("Erreur no".mysqli_errno($db_connection)()." : ".mysqli_error($db_connection)()."<br>");
|
|
$rubrique=mysqli_fetch_object($reponse);
|
|
$type=$rubrique->nom;
|
|
}
|
|
$message_log="Creation - $joueur->nom $joueur->prenom - $jour/$mois/$annee - $terrain->nom - $heure_debut:$min_debut - $duree_resa - $type - $nom_resa - Reservation enregistree";
|
|
$requete="INSERT INTO log_reservation(date,heure,id_reservation,id_joueur,message, id_club) VALUES('$date_log','$heure_log','$max_resa[0]','$id_joueur','$message_log','$club')";
|
|
$reponse=mysqli_query($db_connection, $requete) or die ("Erreur no".mysqli_errno($db_connection)()." : ".mysqli_error($db_connection)()."<br>");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/* Les horaires ne sont pas bons */
|
|
else if($horaires_ok==0) {
|
|
$message="Les horaires sont identiques ou l'horaire de fin se trouve avant l'horaire de debut.";
|
|
}
|
|
else if($borne_ok==0) {
|
|
$message="La borne n'est pas connectee. La reservation n'a pas ete prise en compte.";
|
|
}
|
|
else if($resa_ok==0) {
|
|
$message="Vous avez depasse la duree maximale de la reservation avec la borne.";
|
|
}
|
|
else if($resa_ok==-1) {
|
|
$message= "Un nom doit obligatoirement être saisi dans la case appropriee.";
|
|
}
|
|
else {
|
|
$message="Vous ne pouvez pas effectuer une reservation dans le passé !!";
|
|
}
|
|
|
|
return $message;
|
|
}
|
|
|
|
/* Les horaires sont au format Unix timestamp) */
|
|
function controleHoraires($debut, $fin) {
|
|
$now=time();
|
|
if($debut < $now) {
|
|
$res=-1;
|
|
}
|
|
else if($fin<=$debut) {
|
|
$res=0;
|
|
}
|
|
else if($debut>$fin) {
|
|
$res=0;
|
|
}
|
|
else {
|
|
$res=1;
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
|
|
?>
|