This commit is contained in:
fra-2107
2024-11-14 16:33:19 -05:00
parent ed2ce209df
commit ae3c200ce2
5 changed files with 507 additions and 0 deletions

View File

@ -0,0 +1,226 @@
<?php
class Database
{
private $db_name;
private $db_user;
private $db_pass;
private $db_host;
private $pdo;
public function __construct($db_name = "", $db_user = '', $db_pass = '', $db_host = 'localhost')
{
$this->db_name = $db_name;
$this->db_user = $db_user;
$this->db_pass = $db_pass;
$this->db_host = $db_host;
}
private function getPDO()
{
if ($this->pdo === null) {
$pdo = new PDO('mysql:dbname=' . $this->db_name . ';host=localhost;charset=UTF8', $this->db_user, $this->db_pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo = $pdo;
}
return $this->pdo;
}
public function query($stmt, $class_name)
{
$req = $this->getPDO()->query($stmt);
return $req->fetchAll(PDO::FETCH_CLASS, $class_name);
}
// TOCHANGE
public function getnbAlerts()
{
$sql = 'SELECT COUNT(*) AS nb_alerts FROM alerts';
$sth = $this->getPDO()->prepare($sql);
$sth->execute();
$result = $sth->fetch();
$nbAlerts = (int) $result['nb_alerts'];
return $nbAlerts;
}
// TODO
public function getAlerts($filters = null, $limit = 10)
{
$whereArgs = [];
if (isset($_GET["page"])) {
$page = intval($_GET['page']);
} else {
$page = 1;
}
$decalage = ($page - 1) * $limit;
$sql = 'SELECT *
FROM alerts ';
if ($filters != null) {
foreach ($filters as $key => $value) {
if ($value != '') $whereArgs[] = $key . ' = :' . $key;
}
}
if (!empty($whereArgs)) $sql .= 'WHERE ' . implode(' AND ', $whereArgs);
$sql .= ' LIMIT :limit OFFSET :offset';
$sth = $this->getPDO()->prepare($sql);
// TODO : edit filters
if ($filters != null) {
if ($filters['date'] != '') $sth->bindParam('date', $filters['date']);
if ($filters['espece'] != '') $sth->bindParam('espece', $filters['espece']);
if ($filters['zone'] != '') $sth->bindParam('zone', $filters['zone']);
}
$sth->bindParam(':limit', $limit, PDO::PARAM_INT);
$sth->bindParam(':offset', $decalage, PDO::PARAM_INT);
$sth->execute();
return $sth->fetchAll(PDO::FETCH_CLASS, 'Alerts');
}
public function getAlertUnique($filters = null)
{
$whereArgs = [];
$sql = 'SELECT *
FROM alerts ';
if ($filters != null) {
foreach ($filters as $key => $value) {
if ($value != '') $whereArgs[] = $key . ' = :' . $key;
}
}
if (!empty($whereArgs)) $sql .= 'WHERE ' . implode(' AND ', $whereArgs);
$sth = $this->getPDO()->prepare($sql);
if ($filters != null) {
if ($filters['id'] != '') $sth->bindParam('id', $filters['id']);
}
$sth->execute();
return $sth->fetchAll(PDO::FETCH_CLASS, 'Alerts');
}
public function getAlertsByGravite()
{
$sql = 'SELECT gravite
FROM alerts
GROUP BY gravite';
$sth = $this->getPDO()->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute();
return $sth->fetchAll(PDO::FETCH_CLASS, 'Alerts');
}
public function getnbbygravite($filters = null)
{
$i=0;
$tmp=0;
$maxrg=0;
$whereArgs = [];
if ($filters != null) {
foreach ($filters as $key) {
$whereArgs[] = $key;
}
$sql = 'SELECT gravite, COUNT(*) as nbbygravite FROM Alerts where date>='. implode(' AND ', $whereArgs).' GROUP BY gravite';
}else {
$sql = 'SELECT gravite, COUNT(*) as nbbygravite FROM Alerts GROUP BY gravite';
}
$sth = $this->getPDO()->prepare($sql);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_CLASS, 'Alerts');
while($i<38)
{
if((int)($result[$i]->nbbyespece)>$tmp)
{
$tmp=(int)($result[$i]->nbbyespece);
$maxrg=$i;
}
$i++;
}
return $result[$maxrg]->espece;
}
// TODO : remplacer par ce qui est demandé
// public function getnbbyzone($filters = null)
// {
// $i=0;
// $tmp=0;
// $maxrg=0;
// $whereArgs = [];
// if ($filters != null) {
// foreach ($filters as $key) {
// $whereArgs[] = $key;
// }
// $sql = 'SELECT zone, COUNT(*) as nbbyzone FROM echouage where date>='. implode(' AND ', $whereArgs).' GROUP BY zone';
// }else {
// $sql = 'SELECT espece, COUNT(*) as nbbyespece FROM echouage GROUP BY espece';
// }
// $sth = $this->getPDO()->prepare($sql);
// $sth->execute();
// $result = $sth->fetchAll(PDO::FETCH_CLASS, 'Echouage');
// while($i<2)
// {
// if((int)($result[$i]->nbbyzone)>$tmp)
// {
// $tmp=(int)($result[$i]->nbbyzone);
// $maxrg=$i;
// }
// $i++;
// }
// return $result[$maxrg]->zone;
// }
// public function getZonesEchouage()
// {
// $sql = 'SELECT zone
// FROM echouage
// GROUP BY zone';
// $sth = $this->getPDO()->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
// $sth->execute();
// return $sth->fetchAll(PDO::FETCH_CLASS, 'Echouage');
// }
public function editEchouage($id, $newCet)
{
$sql = "UPDATE echouage
SET date=".$newCet['date'].", espece='".$newCet['espece']."', zone='".$newCet['zone']."', nombre=".$newCet['nb']
." WHERE id=".$id;
$sth = $this->getPDO()->prepare($sql);
$sth->execute();
}
// TODO : ajouter commentaires
// public function addComm($newCet)
// {
// $sql = "INSERT INTO echouage (date, espece, zone, nombre)
// VALUES (".$newCet['date'].", '".$newCet['espece']."', '".$newCet['zone']."', ".$newCet['nb'].")";
// $sth = $this->getPDO()->prepare($sql);
// $sth->execute();
// }
public function deleteAlerts($id)
{
// $sql = "DELETE from echouage WHERE id=".$id;
// $sth = $this->getPDO()->prepare($sql);
// $sth->execute();
}
}

63
web/class/alerts.php Normal file
View File

@ -0,0 +1,63 @@
<?php
class Alerts
{
//attributs TDO change names
private $id;
private $date;
public $espece;
public $zone;
private $nombre;
//methodes TODO : changes names
public function Getid()
{
return $this->id;
}
public function Getdate()
{
return $this->date;
}
public function Getespece()
{
return $this->espece;
}
public function Getzone()
{
return $this->zone;
}
public function Getnombre()
{
return $this->nombre;
}
public function Setid($id)
{
$this->id = $id;
}
public function Setdate($date)
{
$this->date = $date;
}
public function Setespece($espece)
{
$this->espece = $espece;
}
public function Setzone($zone)
{
$this->zone = $zone;
}
public function Setnombre($nombre)
{
$this->nombre = $nombre;
}
// function __construct($id, $date, $espece, $zone, $nombre)
// {
// $this->$id = $id;
// $this->$date = $date;
// $this->$espece = $espece;
// $this->$zone = $zone;
// $this->$nombre = $nombre;
// }
}

13
web/css/styles.css Normal file
View File

@ -0,0 +1,13 @@
html {
scroll-padding-top: 3.5rem;
}
header {
padding-top: 9rem;
padding-bottom: 6rem;
}
section {
padding-top: 9rem;
padding-bottom: 9rem;
}

19
web/css/styles2.css Normal file
View File

@ -0,0 +1,19 @@
html {
scroll-padding-top: 3.5rem;
}
header {
padding-top: 5rem;
padding-bottom: 3rem;
}
section {
padding-top: 9rem;
padding-bottom: 9rem;
}
figcaption{
font-weight: lighter;
font-size: small;
font-style: italic;
}

186
web/index.php Normal file
View File

@ -0,0 +1,186 @@
<?php
ini_set('display_errors', 'on');
error_reporting(E_ALL);
spl_autoload_register(function ($class) {
include 'class/' . $class . '.class.php';
});
$db = new Database();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>IDPS visualization</title>
<link rel="icon" type="image/x-icon" href="assets/favicon.ico"><!-- Core theme CSS (includes Bootstrap)-->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<link href="/css/styles.css" rel="stylesheet">
</head>
<body id="page-top">
<!-- Navigation-->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top" id="mainNav">
<div class="container px-4"><a class="navbar-brand" href="#page-top">Alerts</a><button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ms-auto">
<!-- TODO changer ? -->
<!-- <li class="nav-item"><a class="nav-link" href="/">Accueil</a></li>
<li class="nav-item"><a class="nav-link" href="#echouage">Liste des échouages</a></li>
<li class="nav-item"><a class="nav-link" href="add.php">Enregistrer un echouage</a></li>
<li class="nav-item"><a class="nav-link" href="stats.php">statistiques</a></li> -->
</ul>
</div>
</div>
</nav><!-- Header-->
<header class="bg-primary bg-gradient text-white">
<div class="container px-4 text-center">
<h1 class="fw-bolder">Alertes systemes</h1>
<p class="lead">meilleur outil de surveillance du monde</p>
<a class="btn btn-lg btn-light" href="#alertes">Alertes</a>
</div>
</header>
<section class="bg-light" id="alertes">
<div class="container px-4">
<div class="row gx-4 justify-content-center">
<div class="col-lg-8">
<h2>Liste des échouages</h2>
<p class="lead">veuillez selectionner les filtres de recherche ou parcourez la liste ci-dessous</p>
<form class="row g-3" method="POST">
<div class="col-auto">
<select class="form-select" aria-label="Choisir une date" name="date">
<option selected value="">Année</option>
<?php for ($i = 1990; $i < 2020; $i++) : ?>
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
<?php endfor; ?>
</select>
</div>
<div class="col-auto">
<select class="form-select" aria-label="Chosisir une gravité" name="gravité">
<option selected value="">Gravité</option>
<?php
$especesByType = $db->getAlertsByGravite();
foreach ($especesByType as $espece) : ?>
<option value="<?php echo $espece->Getespece(); ?>"><?php echo $espece->Getespece(); ?></option>
<?php endforeach; ?>
</select>
</div>
<!-- <div class="col-auto">
<select class="form-select" aria-label="Chosisir une zone" name="zone">
<option selected value="">Zone</option>
<?php
// $zonesEchouage = $db->getZonesEchouage();
// foreach ($zonesEchouage as $zone) : ?>
<option value="<?php //echo $zone->Getzone(); ?>"><?php// echo $zone->Getzone(); ?></option>
<?php //endforeach; ?>
</select>
</div> -->
<div class="col-auto ms-auto me-0">
<button type="submit" class="btn btn-primary mb-3">Filtrer</button>
</div>
</form>
<table class="table table-striped">
<thead class="bg-primary text-white">
<tr>
<th scope="col" class="id">N°</th>
<th scope="col" class="Date">Date</th>
<th scope="col" class="label">Espece</th>
<th scope="col" class="label">Zone</th>
<th scope="col" class="label">Nombre</th>
<th scope="col" class="label"></th>
<th scope="col" class="label"></th>
</tr>
</thead>
<tbody style="border: 1px solid black;">
<?php
$echouages = $db->getAlerts($_POST, 20);
foreach ($echouages as $echouage) : ?>
<tr style="border: 1px solid black;">
<td class="id"><?php echo $echouage->Getid(); ?></td>
<td class="id"><?php echo $echouage->Getdate(); ?></td>
<td class="label"><a href="info-echouage.php/?id=<?php echo $echouage->Getid(); ?>"><?php echo $echouage->Getespece(); ?></a></td>
<td class="label"><?php echo $echouage->Getzone(); ?></td>
<td class="label"><?php echo $echouage->Getnombre(); ?></td>
<td class="label"><a href="delete.php/?id=<?php echo $echouage->Getid(); ?>">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash" viewBox="0 0 16 16">
<path d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z"/>
<path fill-rule="evenodd" d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z"/>
</svg></a>
</td>
<td class="label"><a href="edit.php/?id=<?php echo $echouage->Getid(); ?>">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-pencil" viewBox="0 0 16 16">
<path d="M12.146.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1 0 .708l-10 10a.5.5 0 0 1-.168.11l-5 2a.5.5 0 0 1-.65-.65l2-5a.5.5 0 0 1 .11-.168l10-10zM11.207 2.5 13.5 4.793 14.793 3.5 12.5 1.207 11.207 2.5zm1.586 3L10.5 3.207 4 9.707V10h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.293l6.5-6.5zm-9.761 5.175-.106.106-1.528 3.821 3.821-1.528.106-.106A.5.5 0 0 1 5 12.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.468-.325z"/>
</svg></a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<nav aria-label="Page navigation">
<ul class="pagination">
<?php
$nb_echouage = $db->getnbAlerts();
$nb_page = ceil($nb_echouage / 20);
if (isset($_GET["page"])) {
$page = intval($_GET['page']);
} else {
$page = 1;
}
echo "<li class='page-item col-auto'><a class='page-link' href=index.php?page=1'>premiere page</a></li>";
if ($page > 1) {
echo "<li class='page-item col-auto'><a class='page-link' href=index.php?page=" . strval($page - 1) . "'>" . strval($page - 1) . "</a></li>";
}
echo "<li class='page-item col-auto'><a class='page-link' style=href=index.php?page=" . $page . "'>" . $page . "</a></li>";
if (($page) < $nb_page) {
echo "<li class='page-item col-auto'><a class='page-link' href=index.php?page=" . strval($page + 1) . "'>" . strval($page + 1) . "</a></li>";
}
echo "<li class='page-item col-auto'><a class='page-link' href=index.php?page=" . strval($nb_page) . "'>derniere page</a></li>";
?>
</ul>
</nav>
</div>
</div>
</div>
</section><!-- Contact section-->
<footer class="py-5 bg-dark">
<div class="container px-4">
<p class="m-0 text-center text-white">Copyright &copy; CIR2 2023/<a class ="text-white" href="https://www.observatoire-pelagis.cnrs.fr/">Pelagis</a></p>
</div>
</footer><!-- Bootstrap core JS-->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script><!-- Core theme JS-->
<!-- <script src="js/scripts.js"></script> -->
</body>
</html>