SAE15_2022/blog/index.php

171 lines
7.7 KiB
PHP
Raw Normal View History

<?php
try {
$error = false;
$dbh = new PDO('mysql:host=saeweb2022.souidi.fr;dbname=saeweb2022', "saeweb2022");
$url = parse_url($_SERVER["REQUEST_URI"])["path"];
if (str_ends_with($url, "/")) {
$url = substr($url, 0, -1);
}
$url = explode("/", $url);
if (end($url) == "blog") {
$mode = "list";
$articles = array();
foreach($dbh->query('SELECT article.title, article.created_at, article.slug, article.excerpt, employee.name AS author, employee.slug AS authorUrl FROM article JOIN employee ON article.author=employee.id ORDER BY created_at DESC;') as $row) {
$articles[] = $row;
}
} else {
$mode = "view";
$sth = $dbh->prepare("SELECT article.title, article.created_at, article.modified_at, article.slug, article.content, article.excerpt, employee.name AS author, employee.slug AS authorUrl FROM article JOIN employee ON article.author=employee.id AND article.slug = ?;");
$sth->execute([end($url)]);
$article = $sth->fetch(PDO::FETCH_ASSOC);
if (empty($article)) {
http_response_code(404);
$error = "notfound";
}
$sth = null;
}
$dbh = null;
} catch (PDOException $e) {
http_response_code(503);
$error = "db";
die($e->getMessage());
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="../assets/img/favicon_dark.ico" media="(prefers-color-scheme: light)">
<link rel="icon" href="../assets/img/favicon_light.ico" media="(prefers-color-scheme: dark)">
<?php
if ($mode == 'list') {
echo '<title>Blog - Elite Solar</title>';
echo '<meta name="description" content="Le blog d\'Elite Solar">';
echo '<meta property="og:title" content="Blog - Elite Solar">';
echo '<meta property="og:description" content="Le blog d\'Elite Solar">';
echo '<meta property="og:type" content="website">';
}
elseif ($mode == 'view') {
echo '<title>' . $article['title'] . ' - Elite Solar</title>';
echo '<meta name="description" content="' . $article['excerpt'] . '">';
echo '<meta property="og:title" content="' . $article['title'] . ' - Elite Solar">';
echo '<meta property="og:description" content="' . $article['excerpt'] . '">';
echo '<meta name="author" content="' . $article['author'] . '">';
echo '<meta property="og:author" content="' . $article['author'] . '">';
echo '<meta property="article:author" content="' . $article['author'] . '">';
echo '<meta property="og:type" content="article">';
echo '<meta property="article:published_time" content="' . $article['created_at'] . '">';
echo '<meta property="article:modified_time" content="' . $article['modified_at'] . '">';
}
?>
<meta property="og:site_name" content="Elite Solar">
<meta property="og:locale" content="fr_FR">
<link rel="stylesheet" href="../assets/css/style.css">
<link rel="stylesheet" href="../assets/css/header.css">
<link rel="stylesheet" href="../assets/css/footer.css">
<link rel="stylesheet" href="../assets/css/blog.css">
<script src="../assets/js/header.js"></script>
</head>
<body>
<header>
<div>
<a href="../"><img id="logo" src="../assets/img/logo_noir.png" height="60"></a>
<img id="burger-menu" alt="Menu" onclick="burgerMenu()" src="../assets/img/open-menu.svg">
<nav>
<ul id="menu" class="invisible">
<li><a href="../">Accueil</a></li>
<li><a href="../about">Qui sommes-nous ?</a></li>
<li><a href="../product">Produit</a></li>
<li><a href="../contact">Contact</a></li>
<li><a href="../faq">FAQ</a></li>
</ul>
</nav>
</div>
</header>
<main>
<?php
if ($error == "db") {
echo '<nav class="crumbs">
<ol>
<li class="crumb"><a href="../">Accueil</a></li> &gt;
<li class="crumb">Blog</li>
</ol>
</nav>
<p>Une erreur est survenue lors du chargement de la page.</p>';
} elseif ($error == "notfound") {
echo '<nav class="crumbs">
<ol>
<li class="crumb"><a href="../">Accueil</a></li> &gt;
<li class="crumb"><a href="./">Blog</a></li>
<li class="crumb">Article</li>
</ol>
</nav>' .
"<h1>Article introuvable</h1>
<p>L'article que vous cherchez à atteindre ne peut pas être trouvée.
Il est possible qu'il ait été supprimé ou déplacé. Si vous avez saisi manuellement son adresse,
veuillez vérifier une éventuelle erreur de saisie.</p><br>
<p><a href='../../'>Retour à la page d'accueil</a></p>";
} else {
if ($mode == 'list') {
echo '<nav class="crumbs">
<ol>
<li class="crumb"><a href="../">Accueil</a></li> &gt;
<li class="crumb">Blog</li>
</ol>
</nav>' .
"<h1>Blog</h1><br><div>";
echo '<ul id="articles">';
foreach ($articles as $article) {
$date = new DateTime($article['created_at']);
echo '<li><a href="../blog/' . $article["slug"] . '">' . $article["title"] . '</a><br>
Publié le ' . $date->format('d/m/Y') . ' par <a href="../team/' . $article["authorUrl"] . '">' . $article["author"] . '</a><br>
Extrait : ' . $article["excerpt"] . '</li>';
}
echo '</ul>';
} elseif ($mode == 'view') {
$date = new DateTime($article['created_at']);
echo '<nav class="crumbs">
<ol>
<li class="crumb"><a href="../">Accueil</a></li> &gt;
<li class="crumb"><a href="./">Blog</a></li> &gt;
<li class="crumb">' . $article["title"] . '</li>
</ol>
</nav>' .
"<h1>" . $article["title"] . "</h1><br>
<p>Publié le " . $date->format('d/m/Y') . " par <a href='../team/" . $article["authorUrl"] . "'>" . $article["author"] . "</a></p><br>
<p>" . $article["content"] . "</p>";
}
}
?>
</main>
<button onclick="topFunction()" id="backToTop" title="Revenir au début de la page">⬆️</button>
<footer>
<div class="content">
<div class="text">
© <?= date("Y") ?> Elite Solar
<a href="legal">Mentions légales</a>
<a href="sitemap">Plan du site</a>
</div>
<div class="social">
<a target="_blank" href="https://linkedin.com"><img src="../assets/img/linkedin.svg" width="25" height="25" alt="LinkedIn"></a>
<a target="_blank" href="https://instagram.com/elitesolar77"><img src="../assets/img/instagram.svg" width="25" height="25" alt="Instagram"></a>
<a target="_blank" href="https://www.facebook.com/profile.php?id=100089332237449"><img src="../assets/img/facebook.svg" width="25" height="25" alt="Facebook"></a>
<a target="_blank" href="https://twitter.com/EliteSolar77"><img src="../assets/img/twitter.svg" width="25" height="25" alt="Twitter"></a>
</div>
</div>
</footer>
<script src="../assets/js/script.js"></script>
</body>
</html>