Added Remove Reservation functions & Removed Language artefacts
This commit is contained in:
parent
abc00dcca2
commit
81ecec446e
10 changed files with 190 additions and 79 deletions
|
@ -11,8 +11,10 @@ if ($_SESSION['USER']->isLoggedIn() && $_SESSION['USER']->getType() == 'Staff')
|
||||||
case 'add':
|
case 'add':
|
||||||
break;
|
break;
|
||||||
case 'delete':
|
case 'delete':
|
||||||
if(getPost('email', false)){
|
if(getPost('email', false) && getPost('start', false)){
|
||||||
|
if(AccomodationReservation::remove($path[1], getPost('email'),getPost('start'))){
|
||||||
|
echo 'ok';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
29
controller/vip.php
Normal file
29
controller/vip.php
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<?php
|
||||||
|
if ($_SESSION['USER']->isLoggedIn() && $_SESSION['USER']->getType() == 'Staff') {
|
||||||
|
$alert = '';
|
||||||
|
if (isset($path[1],$path[2]) && User::fetchByEmail($path[1]) !== false) {
|
||||||
|
switch ($path[2]) {
|
||||||
|
case 'view':
|
||||||
|
$select_user = User::fetchByEmail($path[1]);
|
||||||
|
$reservations = AccomodationReservation::fetchByUserEmail($select_user->getEmail());
|
||||||
|
require_once(VIEW_PATH . $path[2] . '_' . $path[0] . '.php');
|
||||||
|
break;
|
||||||
|
case 'add':
|
||||||
|
break;
|
||||||
|
case 'delete':
|
||||||
|
if(getPost('id', false) && getPost('start', false)){
|
||||||
|
if(AccomodationReservation::remove(getPost('id'), $path[1],getPost('start'))){
|
||||||
|
echo 'ok';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
redirect();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$users = User::fetch(array(['UserTypeName', '=', 'VIP']));
|
||||||
|
require_once(VIEW_PATH . $path[0] . '.php');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
redirect('login');
|
||||||
|
}
|
|
@ -23,13 +23,6 @@ if(!isset($_SESSION['USER'])){
|
||||||
*/
|
*/
|
||||||
$_SESSION['USER']->refresh();
|
$_SESSION['USER']->refresh();
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* Lang
|
|
||||||
*/
|
|
||||||
$lang = LANG_DEFAULT;
|
|
||||||
$langs = glob(LANG_PATH. '*.{json}', GLOB_BRACE);
|
|
||||||
if(isset($_SESSION['lang']) && in_array(LANG_PATH.$_SESSION['lang'].'.json', $langs)) $lang = $_SESSION['lang'];
|
|
||||||
if(isset($_GET['lang']) && in_array(LANG_PATH.$_GET['lang'].'.json', $langs)){ $lang = $_GET['lang']; $_SESSION['lang'] = $lang; }
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Routing
|
* Routing
|
||||||
|
|
|
@ -41,6 +41,12 @@ class AccomodationReservation extends Model
|
||||||
return $this->data['peopleCount'];
|
return $this->data['peopleCount'];
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
public function getRoomCount(): string
|
||||||
|
{
|
||||||
|
if(isset($this->data['roomCount']))
|
||||||
|
return $this->data['roomCount'];
|
||||||
|
return false;
|
||||||
|
}
|
||||||
public function getStartDate(): string
|
public function getStartDate(): string
|
||||||
{
|
{
|
||||||
if(isset($this->data['startDate']))
|
if(isset($this->data['startDate']))
|
||||||
|
@ -61,9 +67,10 @@ class AccomodationReservation extends Model
|
||||||
}
|
}
|
||||||
public static function fetchByUserEmail(string $email){
|
public static function fetchByUserEmail(string $email){
|
||||||
$data = AccomodationReservation::fetch(array(['UserEmail','=', $email]));
|
$data = AccomodationReservation::fetch(array(['UserEmail','=', $email]));
|
||||||
if(count($data) == 1){
|
return $data;
|
||||||
return $data[0];
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
|
public static function remove($AccomodationId, $email, $startDate){
|
||||||
|
return AccomodationReservation::delete(array(['AccomodationId','=',$AccomodationId],['UserEmail','=',$email],['startDate','=',$startDate]));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -59,6 +59,15 @@ class User extends Model
|
||||||
return $this->data['AccomodationId'];
|
return $this->data['AccomodationId'];
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function fetchByEmail(string $email)
|
||||||
|
{
|
||||||
|
$data = User::fetch(array(['email','=', $email]));
|
||||||
|
if(count($data) === 1){
|
||||||
|
return $data[0];
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* Session
|
* Session
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -125,6 +125,34 @@ class Model {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DELETE
|
||||||
|
*/
|
||||||
|
public static function delete($filters = []): bool
|
||||||
|
{
|
||||||
|
$query = 'DELETE FROM ' . get_called_class();
|
||||||
|
$args = [];
|
||||||
|
$c = 0;
|
||||||
|
$output = [];
|
||||||
|
$_col = get_called_class()::getColumns();
|
||||||
|
forEach($filters as $filter){
|
||||||
|
if (is_array($filter) && count($filter) === 3 && array_key_exists($filter[0], $_col) && in_array($filter[1], ['=','<','>','<>','LIKE'])){
|
||||||
|
if($c === 0){
|
||||||
|
$query .= ' WHERE';
|
||||||
|
}else{
|
||||||
|
$query .= ' AND';
|
||||||
|
}
|
||||||
|
$query .= ' ' . $filter[0] . ' ' . $filter[1] . ' ?';
|
||||||
|
$args[] = $filter[2];
|
||||||
|
}else{
|
||||||
|
throw new Exception('Invalid SQL filters');
|
||||||
|
}
|
||||||
|
$c++;
|
||||||
|
}
|
||||||
|
$q = Model::$db->prepare($query);
|
||||||
|
return ($q->execute($args) == true);
|
||||||
|
}
|
||||||
|
|
||||||
protected function getColumns(): array
|
protected function getColumns(): array
|
||||||
{
|
{
|
||||||
if(!isset(get_called_class()::$column[get_called_class()])) {
|
if(!isset(get_called_class()::$column[get_called_class()])) {
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
break;
|
break;
|
||||||
case 'Staff':
|
case 'Staff':
|
||||||
echo navItem('Gestion des réservations',genURL('manager'));
|
echo navItem('Gestion des réservations',genURL('manager'));
|
||||||
|
echo navItem('Gestion des VIP',genURL('vip'));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
|
|
@ -3,73 +3,12 @@ require_once('template/head.php');
|
||||||
?>
|
?>
|
||||||
<div class="container-fluid section">
|
<div class="container-fluid section">
|
||||||
<h2>Gestions des réservations de "<?=htmlspecialchars($hotel->getName())?>"</h2>
|
<h2>Gestions des réservations de "<?=htmlspecialchars($hotel->getName())?>"</h2>
|
||||||
|
|
||||||
<form class="row g-3 needs-validation justify-content-end" style="padding-top: 30px;">
|
|
||||||
<div class="col-md-4">
|
|
||||||
<div class="form-outline">
|
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
id="validationCustom01"
|
|
||||||
value="Mark"
|
|
||||||
required
|
|
||||||
/>
|
|
||||||
<label for="validationCustom01" class="form-label">VIP</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<div class="form-outline">
|
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
id="validationCustom02"
|
|
||||||
value="Otto"
|
|
||||||
required
|
|
||||||
/>
|
|
||||||
<label for="validationCustom02" class="form-label">Last name</label>
|
|
||||||
<div class="valid-feedback">Looks good!</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<div class="input-group form-outline">
|
|
||||||
<span class="input-group-text" id="inputGroupPrepend">@</span>
|
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
class="form-control"
|
|
||||||
id="validationCustomUsername"
|
|
||||||
aria-describedby="inputGroupPrepend"
|
|
||||||
required
|
|
||||||
/>
|
|
||||||
<label for="validationCustomUsername" class="form-label">Username</label>
|
|
||||||
<div class="invalid-feedback">Please choose a username.</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6">
|
|
||||||
<div class="form-outline">
|
|
||||||
<input type="text" class="form-control" id="validationCustom03" required />
|
|
||||||
<label for="validationCustom03" class="form-label">City</label>
|
|
||||||
<div class="invalid-feedback">Please provide a valid city.</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6">
|
|
||||||
<div class="form-outline">
|
|
||||||
<input type="text" class="form-control" id="validationCustom05" required />
|
|
||||||
<label for="validationCustom05" class="form-label">Zip</label>
|
|
||||||
<div class="invalid-feedback">Please provide a valid zip.</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-1">
|
|
||||||
<button class="btn btn-success" type="submit">Ajouter</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<hr class="my-5">
|
|
||||||
|
|
||||||
|
|
||||||
<table class="table table-hover">
|
<table class="table table-hover">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">Email VIP</th>
|
<th scope="col">Email VIP</th>
|
||||||
<th scope="col">Nombre d'occupants</th>
|
<th scope="col">Nombre d'occupants</th>
|
||||||
|
<th scope="col">Nombre de chambres</th>
|
||||||
<th scope="col">Date d'arrivée</th>
|
<th scope="col">Date d'arrivée</th>
|
||||||
<th scope="col">Date de sortie</th>
|
<th scope="col">Date de sortie</th>
|
||||||
<th scope="col">Action</th>
|
<th scope="col">Action</th>
|
||||||
|
@ -80,11 +19,12 @@ require_once('template/head.php');
|
||||||
forEach($reservations as $reservation){
|
forEach($reservations as $reservation){
|
||||||
?>
|
?>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row"><?=$reservation->getUserEmail()?></th>
|
<th scope="row"><a href="<?=genURL('vip/' . $reservation->getUserEmail() . '/view')?>"><?=$reservation->getUserEmail()?></a></th>
|
||||||
<td><?=$reservation->getPeopleCount()?></td>
|
<td><?=$reservation->getPeopleCount()?></td>
|
||||||
|
<td><?=$reservation->getRoomCount()?></td>
|
||||||
<td><?=$reservation->getStartDate()?></td>
|
<td><?=$reservation->getStartDate()?></td>
|
||||||
<td><?=$reservation->getEndDate()?></td>
|
<td><?=$reservation->getEndDate()?></td>
|
||||||
<td><button onclick="deleteReservation('<?=$reservation->getUserEmail()?>')" class="btn btn-danger">Supprimer</button></td>
|
<td><button onclick="deleteReservation('<?=$reservation->getUserEmail()?>', '<?=$reservation->getStartDate()?>')" class="btn btn-danger">Supprimer</button></td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
|
@ -93,10 +33,20 @@ require_once('template/head.php');
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
function deleteReservation(email){
|
function deleteReservation(email, date){
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.onreadystatechange=function()
|
||||||
|
{
|
||||||
|
if (xhr.readyState==4 && xhr.status==200)
|
||||||
|
{
|
||||||
|
if(xhr.responseText == 'ok'){
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
xhr.open("POST", "<?=genURL('manager/') . $hotel->getId() . '/delete'?>", true);
|
xhr.open("POST", "<?=genURL('manager/') . $hotel->getId() . '/delete'?>", true);
|
||||||
xhr.send('email=' + email);
|
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||||
|
xhr.send('email=' + email + '&start=' + date);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<?php
|
<?php
|
||||||
|
|
55
view/view_vip.php
Normal file
55
view/view_vip.php
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
<?php
|
||||||
|
require_once('template/head.php');
|
||||||
|
?>
|
||||||
|
<div class="container-fluid section">
|
||||||
|
<h2>Gestions des réservations de "<?=htmlspecialchars($select_user->getEmail())?>"</h2>
|
||||||
|
<table class="table table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">Nom de logement</th>
|
||||||
|
<th scope="col">Nombre d'occupants</th>
|
||||||
|
<th scope="col">Nombre de chambres</th>
|
||||||
|
<th scope="col">Date d'arrivée</th>
|
||||||
|
<th scope="col">Date de sortie</th>
|
||||||
|
<th scope="col">Action</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
forEach($reservations as $reservation){
|
||||||
|
$acom = Accomodation::fetchById($reservation->getAccomodationId());
|
||||||
|
?>
|
||||||
|
<tr>
|
||||||
|
<th scope="row"><a href="<?=genURL('manager/' . $acom->getId() . '/view')?>"><?=htmlspecialchars($acom->getName())?></a></th>
|
||||||
|
<td><?=$reservation->getPeopleCount()?></td>
|
||||||
|
<td><?=$reservation->getRoomCount()?></td>
|
||||||
|
<td><?=$reservation->getStartDate()?></td>
|
||||||
|
<td><?=$reservation->getEndDate()?></td>
|
||||||
|
<td><button onclick="deleteReservation('<?=$reservation->getAccomodationId()?>', '<?=$reservation->getStartDate()?>')" class="btn btn-danger">Supprimer</button></td>
|
||||||
|
</tr>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
function deleteReservation(id, date){
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.onreadystatechange=function()
|
||||||
|
{
|
||||||
|
if (xhr.readyState==4 && xhr.status==200)
|
||||||
|
{
|
||||||
|
if(xhr.responseText == 'ok'){
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xhr.open("POST", "<?=genURL('vip/') . $reservation->getUserEmail() . '/delete'?>", true);
|
||||||
|
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||||
|
xhr.send('id=' + id + '&start=' + date);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<?php
|
||||||
|
require_once('template/footer.php');
|
||||||
|
?>
|
37
view/vip.php
Normal file
37
view/vip.php
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
<?php
|
||||||
|
require_once('template/head.php');
|
||||||
|
?>
|
||||||
|
<div class="container-fluid section">
|
||||||
|
<h2>Gestions des VIP</h2>
|
||||||
|
<table class="table table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">Email</th>
|
||||||
|
<th scope="col">Nom</th>
|
||||||
|
<th scope="col">Prénom</th>
|
||||||
|
<th scope="col">Téléphone</th>
|
||||||
|
<th scope="col">Nombre de Reservation(s)</th>
|
||||||
|
<th scope="col">Action</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
foreach ($users as $user){
|
||||||
|
?>
|
||||||
|
<tr>
|
||||||
|
<th scope="row"><?=$user->getEmail()?></th>
|
||||||
|
<td><?=htmlspecialchars($user->getFirstName())?></td>
|
||||||
|
<td><?=htmlspecialchars($user->getLastName())?></td>
|
||||||
|
<td><?=htmlspecialchars($user->getPhoneNumber())?></td>
|
||||||
|
<td><?=count(AccomodationReservation::fetchByUserEmail($user->getEmail()))?></td>
|
||||||
|
<td><a href="<?=genURL('vip/' . $user->getEmail() . '/view')?>" class="btn btn-primary">Liste des reservations</a></td>
|
||||||
|
</tr>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
require_once('template/footer.php');
|
||||||
|
?>
|
Reference in a new issue