1
0
Fork 0

Added Staff Accomodation views

This commit is contained in:
p1907961 2021-01-14 19:01:32 +01:00
parent 88cea3d0bb
commit 2f3925dd95
12 changed files with 265 additions and 20 deletions

View file

@ -1,5 +1,5 @@
<?php <?php
if ($_SESSION['USER']->isLoggedIn()) { if ($_SESSION['USER']->isLoggedIn() && $_SESSION['USER']->getType() == 'AccomodationOwner') {
$accomodationType = ['Hôtel', 'Gîte', 'Camping', 'Villa en location']; $accomodationType = ['Hôtel', 'Gîte', 'Camping', 'Villa en location'];
$alert = ''; $alert = '';
$availableServices = AccomodationServices::getAll(); $availableServices = AccomodationServices::getAll();
@ -8,7 +8,7 @@ if ($_SESSION['USER']->isLoggedIn()) {
if (isset($path[1])) { if (isset($path[1])) {
switch ($path[1]) { switch ($path[1]) {
case 'add': case 'add':
if (!$_SESSION['USER']->getAccomodationId()) { if (!$_SESSION['USER']->getAccomodationId() && $_SESSION['USER']->getType() == 'AccomodationOwner') {
/* /*
* Creating Accomodation * Creating Accomodation
*/ */

View file

@ -1,6 +1,7 @@
<?php <?php
if(!$_SESSION['USER']->isLoggedIn() && !isset($path[1])) { if(!$_SESSION['USER']->isLoggedIn() && !isset($path[1])) {
$alert = '';
if(isset($_POST['email'],$_POST['password'])){ if(isset($_POST['email'],$_POST['password'])){
$user = new User; $user = new User;
$userArray = $user->fetch( $userArray = $user->fetch(
@ -9,7 +10,7 @@ if(!$_SESSION['USER']->isLoggedIn() && !isset($path[1])) {
['passwordHash', '=', hash('sha256',$_POST['password'])] ['passwordHash', '=', hash('sha256',$_POST['password'])]
) )
); );
if(count($userArray) === 1){ if(count($userArray) === 1 && in_array($userArray[0]->getType(), ['AccomodationOwner', 'Staff'])){
/* /*
* Successful login * Successful login
*/ */
@ -19,6 +20,7 @@ if(!$_SESSION['USER']->isLoggedIn() && !isset($path[1])) {
/* /*
* Error message * Error message
*/ */
$alert = alert('danger', 'Information incorrectes.');
} }
} }
require_once(VIEW_PATH . $path[0] . '.php'); require_once(VIEW_PATH . $path[0] . '.php');

27
controller/manager.php Normal file
View file

@ -0,0 +1,27 @@
<?php
if ($_SESSION['USER']->isLoggedIn() && $_SESSION['USER']->getType() == 'Staff') {
$alert = '';
if (isset($path[1],$path[2]) && Accomodation::fetchById($path[1]) !== false) {
switch ($path[2]) {
case 'view':
$hotel = Accomodation::fetchById($path[1]);
$reservations = AccomodationReservation::fetchByAccomodationId($hotel->getId());
require_once(VIEW_PATH . $path[2] . '_' . $path[0] . '.php');
break;
case 'add':
break;
case 'delete':
if(getPost('email', false)){
}
break;
default:
redirect();
}
} else {
$hotels = Accomodation::fetch();
require_once(VIEW_PATH . $path[0] . '.php');
}
} else {
redirect('login');
}

View file

@ -40,6 +40,20 @@ class Accomodation extends Model
{ {
return $this->data['type']; return $this->data['type'];
} }
public function getServices()
{
$out = [];
if(isset($this->data['id'])){
$query = 'SELECT AccomodationServicesName FROM _AccomodationServices WHERE AccomodationId = ?;';
$q = Accomodation::$db->prepare($query);
$q->execute([$this->data['id']]);
forEach($q->fetchAll(PDO::FETCH_ASSOC) as $item){
$out[] = $item['AccomodationServicesName'];
}
return $out;
}
return false;
}
public static function insertUser(User $user, $data): bool public static function insertUser(User $user, $data): bool
{ {
@ -73,20 +87,6 @@ class Accomodation extends Model
} }
return false; return false;
} }
public function getServices()
{
$out = [];
if(isset($this->data['id'])){
$query = 'SELECT AccomodationServicesName FROM _AccomodationServices WHERE AccomodationId = ?;';
$q = Accomodation::$db->prepare($query);
$q->execute([$this->data['id']]);
forEach($q->fetchAll(PDO::FETCH_ASSOC) as $item){
$out[] = $item['AccomodationServicesName'];
}
return $out;
}
return false;
}
public function setServices(array $names) public function setServices(array $names)
{ {
/* /*

View file

@ -0,0 +1,69 @@
<?php
class AccomodationReservation extends Model
{
private $data;
public function __construct($data = null)
{
parent::__construct();
$_col = get_class()::getColumns();
if($data !== null){
forEach($data as $key=>$value){
if(!key_exists($key, $_col)){
throw new Exception('Invalid data entry');
}else{
$this->data[$key] = $value;
}
}
}
return $this;
}
/*
* Getters
*/
public function getUserEmail(): string
{
if(isset($this->data['UserEmail']))
return $this->data['UserEmail'];
return false;
}
public function getAccomodationId(): string
{
if(isset($this->data['AccomodationId']))
return $this->data['AccomodationId'];
return false;
}
public function getPeopleCount(): string
{
if(isset($this->data['peopleCount']))
return $this->data['peopleCount'];
return false;
}
public function getStartDate(): string
{
if(isset($this->data['startDate']))
return $this->data['startDate'];
return false;
}
public function getEndDate(): string
{
if(isset($this->data['endDate']))
return $this->data['endDate'];
return false;
}
public static function fetchByAccomodationId(int $id)
{
$data = AccomodationReservation::fetch(array(['AccomodationId','=', $id]));
return $data;
}
public static function fetchByUserEmail(string $email){
$data = AccomodationReservation::fetch(array(['UserEmail','=', $email]));
if(count($data) == 1){
return $data[0];
}
return false;
}
}

View file

@ -47,7 +47,6 @@ class User extends Model
return $this->data['phoneNumber']; return $this->data['phoneNumber'];
return false; return false;
} }
public function getType(): string public function getType(): string
{ {
if(isset($this->data['UserTypeName'])) if(isset($this->data['UserTypeName']))

View file

@ -50,7 +50,7 @@ function alert($status , $msg){
# Navbar button render # Navbar button render
function navItem($name, $path){ function navItem($name, $path){
$acc = ''; $acc = '';
if(($_SERVER['REQUEST_URI'] === WEBSITE_PATH . $path) || ($path === ($_SERVER["REQUEST_SCHEME"] . '://' . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]))){ if((substr($_SERVER["REQUEST_SCHEME"] . '://' . $_SERVER["SERVER_NAME"] . $_SERVER['REQUEST_URI'], 0, strlen($path)) === $path) || ($path === ($_SERVER["REQUEST_SCHEME"] . '://' . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]))){
$acc = 'active'; $acc = 'active';
} }
return '<li class="nav-item"><a class="nav-link ' .$acc. '" aria-current="page" href="' .htmlspecialchars($path). '">' .htmlspecialchars($name). '</a></li>'; return '<li class="nav-item"><a class="nav-link ' .$acc. '" aria-current="page" href="' .htmlspecialchars($path). '">' .htmlspecialchars($name). '</a></li>';

View file

@ -1,7 +1,11 @@
<?php <?php
require_once('template/head.php'); require_once('template/head.php');
?> ?>
<div class="container-fluid section">
<form action="">
</form>
</div>
<?php <?php
require_once('template/footer.php'); require_once('template/footer.php');
?> ?>

View file

@ -5,6 +5,7 @@ require_once('template/head.php');
<form class="form-signin" method="POST"> <form class="form-signin" method="POST">
<h1><?=WEBSITE_NAME?></h1> <h1><?=WEBSITE_NAME?></h1>
<h1 class="h3 mb-3 font-weight-normal">Please sign in</h1> <h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>
<?=$alert?>
<label for="inputEmail" class="sr-only">Email address</label> <label for="inputEmail" class="sr-only">Email address</label>
<input type="email" name="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus> <input type="email" name="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
<label for="inputPassword" class="sr-only">Password</label> <label for="inputPassword" class="sr-only">Password</label>

39
view/manager.php Normal file
View file

@ -0,0 +1,39 @@
<?php
require_once('template/head.php');
?>
<div class="container-fluid section">
<h2>Gestions des réservations</h2>
<table class="table table-hover">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Nom de logement</th>
<th scope="col">Adresse</th>
<th scope="col">Type</th>
<th scope="col">Service(s)</th>
<th scope="col">Nombre de Reservation(s)</th>
<th scope="col">Action</th>
</tr>
</thead>
<tbody>
<?php
foreach ($hotels as $hotel){
?>
<tr>
<th scope="row"><?=$hotel->getId()?></th>
<td><?=htmlspecialchars($hotel->getName())?></td>
<td><?=htmlspecialchars($hotel->getAddress()) . ', ' . $hotel->getPostalCode() ?></td>
<td><?=htmlspecialchars($hotel->getType())?></td>
<td><?=$hotel->getServices() ? htmlspecialchars(join(',',$hotel->getServices())) : "Aucun" ?></td>
<td>0</td>
<td><a href="<?=genURL('manager/' . $hotel->getId() . '/view')?>" class="btn btn-primary">Editer une reservation</a></td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
<?php
require_once('template/footer.php');
?>

View file

@ -22,7 +22,7 @@
} }
break; break;
case 'Staff': case 'Staff':
echo navItem('Gestion des disponibilités',genURL('accomodation/manager')); echo navItem('Gestion des réservations',genURL('manager'));
break; break;
} }
}else{ }else{

104
view/view_manager.php Normal file
View file

@ -0,0 +1,104 @@
<?php
require_once('template/head.php');
?>
<div class="container-fluid section">
<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">
<thead>
<tr>
<th scope="col">Email VIP</th>
<th scope="col">Nombre d'occupants</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){
?>
<tr>
<th scope="row"><?=$reservation->getUserEmail()?></th>
<td><?=$reservation->getPeopleCount()?></td>
<td><?=$reservation->getStartDate()?></td>
<td><?=$reservation->getEndDate()?></td>
<td><button onclick="deleteReservation('<?=$reservation->getUserEmail()?>')" class="btn btn-danger">Supprimer</button></td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
<script>
function deleteReservation(email){
var xhr = new XMLHttpRequest();
xhr.open("POST", "<?=genURL('manager/') . $hotel->getId() . '/delete'?>", true);
xhr.send('email=' + email);
}
</script>
<?php
require_once('template/footer.php');
?>