htaccess fini

This commit is contained in:
Yasder5 2026-03-03 22:23:25 +01:00
parent 5071d5f2f3
commit b75ae2542a
22 changed files with 101 additions and 105 deletions

View file

@ -1,33 +1,31 @@
Options -Indexes
# --- Sécurité ---
<FilesMatch ".env">
Require all denied
</FilesMatch>
<FilesMatch "(composer\.json|composer\.lock|package\.json|package-lock\.json|\.git|\.env|\.gitignore|env)">
Require all denied
</FilesMatch>
RewriteEngine On
# Gestion des erreurs
ErrorDocument 404 /error/error_404
ErrorDocument 403 /error/error_403
# 2. Bloquer l'accès direct au dossier vendor
RewriteEngine On
RewriteBase /
# Bloquer l'accès direct au dossier vendor
RewriteRule ^vendor/ - [F,L]
# 3. Autoriser l'accès aux fichiers/dossiers physiques (images, css, js)
# Autoriser l'accès aux fichiers/dossiers physiques (images, css, js)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 4. RACINE : accueil par défaut
# RACINE : accueil par défaut
RewriteRule ^$ index.php?ctrl=project&action=home [QSA,L]
# 5. ID NUMÉRIQUE : /ctrl/action/42
# ID NUMÉRIQUE : /ctrl/action/42
RewriteRule ^([a-zA-Z]+)/([a-zA-Z_]+)/([0-9]+)/?$ index.php?ctrl=$1&action=$2&id=$3 [QSA,L]
# 6. PSEUDO : /user/profile/johndoe
# PSEUDO : /user/profile/johndoe
RewriteRule ^([a-zA-Z]+)/([a-zA-Z_]+)/([a-zA-Z0-9_-]+)/?$ index.php?ctrl=$1&action=$2&pseudo=$3 [QSA,L]
# 7. RÉÉCRITURE GÉNÉRALE (inclut tes erreurs) : /ctrl/action
# C'est cette règle qui va transformer "/error/error_404"
# en "index.php?ctrl=error&action=error_404"
# RÉÉCRITURE GÉNÉRALE : /ctrl/action
RewriteRule ^([a-zA-Z]+)/([a-zA-Z_]+)/?$ index.php?ctrl=$1&action=$2 [QSA,L]

View file

@ -32,7 +32,7 @@
$newCat->setName($_POST['new_category']);
$objCategoryModel->insertCategory($newCat);
$_SESSION['success'] = "La catégorie a bien été ajoutée";
header('Location: index.php?ctrl=admin&action=admin');
header('Location: '.$_ENV['BASE_URL'].'/admin/admin');
exit;
}
@ -42,7 +42,7 @@
$editCat->setName($_POST['new_name']);
$objCategoryModel->editCategory($editCat);
$_SESSION['success'] = "La catégorie a bien été modifiée";
header('Location: index.php?ctrl=admin&action=admin');
header('Location: '.$_ENV['BASE_URL'].'/admin/admin');
exit;
}
@ -73,7 +73,7 @@
$objUserModel->delete_soft($intUserId);
$_SESSION['success'] = "L'utilisateur a été supprimé.";
}
header("Location: index.php?ctrl=admin&action=admin");
header('Location: '.$_ENV['BASE_URL'].'/admin/admin');
exit;
}
}

View file

@ -79,7 +79,7 @@
*/
public function search(){
$strKeywords = $_POST['keywords']??'';
$strKeywords = $_POST['keywords']??"";
$intAuthor = $_POST['author']??0;
$intPeriod = $_POST['period']??0;
$strDate = $_POST['date']??'';
@ -325,7 +325,7 @@
}
$_SESSION['success'] = (!isset($_GET['id'])) ? "Le projet a bien été créé" : "Le projet a bien été modifié";
header("Location:index.php");
header('Location:'.$_ENV['BASE_URL']);
exit;
} else {
$arrError[] = "Erreur lors de l'enregistrement en base de données";
@ -373,11 +373,11 @@
$this->_display("project_display");
} else {
header("Location: index.php?ctrl=project&action=home");
header('Location: '.$_ENV['BASE_URL'].'/project/home');
exit;
}
} else {
header("Location: index.php?ctrl=project&action=home");
header('Location: '.$_ENV['BASE_URL'].'/project/home');
exit;
}
}
@ -395,7 +395,7 @@
$arrProject = $objProjectModel->findOne($projectId);
if (!$arrProject) {
header("Location: index.php?ctrl=project&action=home");
header('Location: '.$_ENV['BASE_URL'].'/project/home');
exit;
}
@ -429,7 +429,7 @@
$objMail->Subject = "Projet : " . $objProject->getTitle();
$url = "https://php.boulayoune.com/index.php?ctrl=project&action=display&id=" . $projectId;
$url = $_ENV['BASE_URL'].'/project/display/'.$projectId;
$this->_arrData['projectTitle'] = $objProject->getTitle();
$this->_arrData['projectDescription'] = $objProject->getDescription();
@ -438,14 +438,14 @@
$objMail->Body = $this->_display("mail_message", false);
if ($objMail->Send()) {
header("Location: index.php?ctrl=project&action=display&id=".$projectId."&mail=ok");
header('Location: '.$_ENV['BASE_URL'].'/project/display/'.$projectId.'?mail=ok');
} else {
header("Location: index.php?ctrl=project&action=display&id=".$projectId."&mail=fail");
header('Location: '.$_ENV['BASE_URL'].'/project/display/'.$projectId.'?mail=fail');
}
exit;
}
header("Location: index.php?ctrl=project&action=home");
header('Location: '.$_ENV['BASE_URL'].'/project/home');
exit;
}
@ -459,7 +459,7 @@
$objProjectModel = new ProjectModel;
$objProjectModel->accept($intId);
header("Location: index.php");
header('Location: '.$_ENV['BASE_URL']);
exit;
}
@ -473,7 +473,7 @@
$objProjectModel = new ProjectModel;
$objProjectModel->refuse($intId);
header("Location: index.php");
header('Location: '.$_ENV['BASE_URL']);
exit;
}
@ -483,7 +483,7 @@
public function delete(){
if (!isset($_SESSION['user']) || $_SESSION['user']['user_status'] != 2) {
header("Location: index.php");
header('Location: '.$_ENV['BASE_URL']);
exit;
}
@ -498,7 +498,7 @@
}
}
header("Location: index.php");
header('Location: '.$_ENV['BASE_URL']);
exit;
}
@ -518,7 +518,7 @@
}
$urlRedirect = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : "index.php";
header("Location: " . $urlRedirect);
header('Location: ' . $urlRedirect);
exit;
}
@ -541,7 +541,7 @@
}
$url = (isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : "index.php";
header("Location: " . $url);
header('Location: ' . $url);
exit;
}

View file

@ -48,7 +48,7 @@ class UserCtrl extends MotherCtrl {
setcookie('remember_me', $token, time() + (15*24*60*60), "/", "", true, true);
}
header("Location:index.php");
header("Location:".$_ENV['BASE_URL']);
exit;
}
}
@ -75,7 +75,7 @@ class UserCtrl extends MotherCtrl {
$_SESSION['success'] = "Vous êtes bien déconnecté";
header("Location:index.php");
header("Location:".$_ENV['BASE_URL']);
exit;
}
@ -143,7 +143,7 @@ class UserCtrl extends MotherCtrl {
if ($boolInsert === true) {
$_SESSION['success'] = "Compte créé avec succès";
header("Location:index.php?ctrl=user&action=login");
header("Location:".$_ENV['BASE_URL']."/user/login");
exit;
} else {
$arrError['global'] = "Erreur lors de l'ajout";
@ -169,7 +169,7 @@ class UserCtrl extends MotherCtrl {
$arrUserData = $objUserModel->findUserByPseudo($strPseudo);
if ($arrUserData === false) {
header("Location: index.php");
header("Location: ".$_ENV['BASE_URL']);
exit;
}
@ -195,7 +195,7 @@ class UserCtrl extends MotherCtrl {
*/
public function edit(){
if(!isset($_SESSION['user'])){
header("Location: index.php");
header("Location: ".$_ENV['BASE_URL']);
exit;
}
$objUserModel = new UserModel;
@ -298,7 +298,7 @@ class UserCtrl extends MotherCtrl {
$arrNewInfo = $objUserModel->findUserByPseudo($objUser->getPseudo());
$_SESSION['user'] = $arrNewInfo;
$_SESSION['success'] = "Compte modifier avec succès";
header("Location:?ctrl=user&action=user&pseudo=".$objUser->getPseudo());
header('Location:'.$_ENV['BASE_URL'].'/user/user/'.$objUser->getPseudo());
exit;
} else {
$arrError['global'] = "Erreur lors de l'update";

View file

@ -226,7 +226,7 @@ class Project extends Mother{
* Récupération de la date du projet supprimer
* @return string date du projet
*/
public function getProject_deleted_at(){
public function getDeleted_at(){
return $this->_project_deleted_at;
}
@ -234,7 +234,7 @@ class Project extends Mother{
* Mise à jour de la date de suppression de projet
* @param string date du projet
*/
public function setProject_deleted_at($project_deleted_at){
public function setDeleted_at($project_deleted_at){
$this->_project_deleted_at = $project_deleted_at;
}
}

View file

@ -1,9 +1,7 @@
<?php
//Debut session
session_start();
require(__DIR__ . "/vendor/autoload.php");
// Environnement
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->safeLoad();
@ -27,6 +25,8 @@
}
if ($boolError) {
http_response_code(404); // ← important pour le SEO et les navigateurs
$error = new \Controllers\ErrorCtrl();
return $error->error_404();
$error->error_404(); // ← pas de "return", juste l'appel
exit; // ← stoppe l'exécution après l'affichage
}

View file

@ -4,15 +4,15 @@
<nav aria-label="Navigation pied de page">
<ul class="list-inline">
<li class="list-inline-item">
<a href="?ctrl=page&action=about">A propos</a>
<a href="{$smarty.env.BASE_URL}/page/about">A propos</a>
</li>
<li class="list-inline-item" aria-hidden="true">|</li>
<li class="list-inline-item">
<a href="index.php?ctrl=page&action=help">Aide et support</a>
<a href="{$smarty.env.BASE_URL}/page/help">Aide et support</a>
</li>
<li class="list-inline-item" aria-hidden="true">|</li>
<li class="list-inline-item">
<a href="?ctrl=page&action=mentions">Mentions légales</a>
<a href="{$smarty.env.BASE_URL}/page/mentions">Mentions légales</a>
</li>
<li class="list-inline-item" aria-hidden="true">|</li>
<li class="list-inline-item">
@ -22,6 +22,6 @@
</nav>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="assests/js/scripts.js"></script>
<script src="{$smarty.env.BASE_URL}/assests/js/scripts.js"></script>

View file

@ -3,8 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="assests/css/style.css">
<link rel="shortcut icon" href="assests/img/Group-49.ico" type="image/x-icon">
<link rel="stylesheet" href="{$smarty.env.BASE_URL}/assests/css/style.css">
<link rel="shortcut icon" href="{$smarty.env.BASE_URL}/assests/img/Group-49.ico" type="image/x-icon">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous">
<script src="https://use.fontawesome.com/releases/v6.3.0/js/all.js" crossorigin="anonymous"></script>
<title>Folliow{block name="title"}{/block}</title>
@ -15,8 +15,8 @@
<div class="container-fluid">
<!-- Logo -->
<a class="navbar-brand d-flex align-items-center" href="index.php">
<img src="assests/img/logo.png" alt="Logo" class="logo-image">
<a class="navbar-brand d-flex align-items-center" href="{$smarty.env.BASE_URL}">
<img src="{$smarty.env.BASE_URL}/assests/img/logo.png" alt="Logo" class="logo-image">
</a>
<!-- Bouton hamburger mobile -->
@ -31,18 +31,18 @@
<!-- Liens gauche -->
<ul class="navbar-nav me-auto mb-0">
<li class="nav-item">
<a class="nav-link" href="?ctrl=page&action=about">À propos</a>
<a class="nav-link" href="{$smarty.env.BASE_URL}/page/about">À propos</a>
</li>
<li class="nav-item">
<a class="nav-link" href="?ctrl=project&action=search">Rechercher</a>
<a class="nav-link" href="{$smarty.env.BASE_URL}/project/search">Rechercher</a>
</li>
{if isset($smarty.session.user)}
<li class="nav-item">
<a class="nav-link" href="?ctrl=project&action=addedit_project">Ajouter un projet</a>
<a class="nav-link" href="{$smarty.env.BASE_URL}/project/addedit_project">Ajouter un projet</a>
</li>
{if $smarty.session.user.authorisation_name == "Administrateur"}
<li class="nav-item">
<a class="nav-link" href="?ctrl=admin&action=admin">Admin</a>
<a class="nav-link" href="{$smarty.env.BASE_URL}/admin/admin">Admin</a>
</li>
{/if}
{/if}
@ -53,13 +53,13 @@
{if !isset($smarty.session.user)}
<ul class="navbar-nav d-flex flex-row align-items-center gap-1 mb-0">
<li class="nav-item">
<a class="nav-link" href="index.php?ctrl=user&action=signup"
<a class="nav-link" href="{$smarty.env.BASE_URL}/user/signup"
title="Créer un compte" aria-label="Créer un compte">
S'inscrire
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="index.php?ctrl=user&action=login"
<a class="nav-link" href="{$smarty.env.BASE_URL}/user/login"
title="Se connecter" aria-label="Se connecter">
Se connecter
</a>
@ -68,17 +68,17 @@
{else}
<ul class="navbar-nav d-flex flex-row align-items-center gap-2 mb-0">
<li class="nav-item d-flex align-items-center">
<a class="nav-link p-0" href="index.php?ctrl=user&action=user&pseudo={$smarty.session.user.user_pseudo}"
<a class="nav-link p-0" href="{$smarty.env.BASE_URL}/user/user/{$smarty.session.user.user_pseudo}"
title="Modifier mon compte" aria-label="Modifier mon compte">
<img
src="{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($smarty.session.user.user_image))|file_exists}{$smarty.session.user.user_image}{else}images.jpg{/if}"
src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($smarty.session.user.user_image))|file_exists}{$smarty.session.user.user_image}{else}images.jpg{/if}"
class="nav-avatar"
alt="Photo de profil"
>
</a>
</li>
<li class="nav-item d-flex align-items-center">
<a class="nav-link" href="index.php?ctrl=user&action=logout"
<a class="nav-link" href="{$smarty.env.BASE_URL}/user/logout"
title="Se déconnecter" aria-label="Se déconnecter">
Se déconnecter
</a>

View file

@ -3,8 +3,8 @@
<div class="ratio ratio-4x3">
<a href="index.php?ctrl=project&action=display&id={$objProject->getId()}">
<img src="{$smarty.env.IMG_PROJECT_PATH}{if ($smarty.env.IMG_PROJECT_PATH|cat:$objProject->getThumbnail())|file_exists}{$objProject->getThumbnail()}{else}{math equation="rand(1,4)"}.jpg{/if}"
<a href="{$smarty.env.BASE_URL}/project/display/{$objProject->getId()}">
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_PROJECT_PATH}{if ($smarty.env.IMG_PROJECT_PATH|cat:$objProject->getThumbnail())|file_exists}{$objProject->getThumbnail()}{else}{math equation="rand(1,4)"}.jpg{/if}"
class="w-100 h-100 object-fit-cover"
{if $objProject->getCreatorName()|stripos:'minou' !== false}
style =" box-shadow: 0 0 0 4px #000; "{/if}
@ -26,8 +26,8 @@
position: relative;
z-index: 1;"{/if}>
<div class="d-flex align-items-start gap-3">
<a href="index.php?ctrl=user&action=user&pseudo={$objProject->getCreatorname()}">
<img src="{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($objProject->getUser_image()))|file_exists}{$objProject->getUser_image()}{else}images.jpg{/if}"
<a href="{$smarty.env.BASE_URL}/user/user/{$objProject->getCreatorname()}">
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($objProject->getUser_image()))|file_exists}{$objProject->getUser_image()}{else}images.jpg{/if}"
class="rounded-circle flex-shrink-0 border border-2 border-white"
style="width: 64px; height: 64px; object-fit: cover; margin-top: 8px;{if $objProject->getCreatorName()|stripos:'minou' !== false}
box-shadow: 0 0 0 4px #000; {/if}"
@ -37,7 +37,7 @@
<h3 class="h6 fw-bold mb-2 mt-1">{$objProject->getTitle()}</h3>
<p class="small text-muted mb-1">
<i class="bi bi-person"></i>
<a href="index.php?ctrl=user&action=user&pseudo={$objProject->getCreatorname()}"
<a href="{$smarty.env.BASE_URL}/user/user/{$objProject->getCreatorname()}"
class="text-decoration-none text-muted"
style="position: relative; z-index: 2;
{if $objProject->getCreatorName()|stripos:'minou' !== false}font-weight: 800 !important;
@ -57,7 +57,7 @@
<i class="bi bi-clock"><time>{$objProject->getCreation_date()}</time></i>
</small>
{if $objProject->getStatus() != "refusé"}
<a href="index.php?ctrl=project&action=display&id={$objProject->getId()}"
<a href="{$smarty.env.BASE_URL}/project/display/{$objProject->getId()}"
class="btn btn-sm btn-primary" {if $objProject->getCreatorName()|stripos:'minou' !== false}style="
background-color: #000 !important;
color: #ff8c00 !important;
@ -71,7 +71,7 @@
{if isset($smarty.session.user)}
{if $smarty.session.user.user_id == $objProject->getUser_id()}
<a href="index.php?ctrl=project&action=addedit_project&id={$objProject->getId()}"
<a href="{$smarty.env.BASE_URL}/project/addedit_project/{$objProject->getId()}"
class="btn btn-sm btn-outline-secondary mt-2 w-100"
style="position: relative; z-index: 2;">
Editer
@ -86,13 +86,13 @@
<div class="card-footer bg-white border-top-0 p-2">
<div class="d-flex gap-2">
<a class="btn btn-sm btn-success flex-fill"
href="?ctrl=project&action=accept&id={$objProject->getId()}"
href="{$smarty.env.BASE_URL}/project/accept/{$objProject->getId()}"
name="toPublished">Accepter</a>
<a class="btn btn-sm btn-warning flex-fill"
href="?ctrl=project&action=refuse&id={$objProject->getId()}"
href="{$smarty.env.BASE_URL}/project/refuse/{$objProject->getId()}"
name="toRefused">Refuser</a>
<a class="btn btn-sm btn-danger flex-fill"
href="index.php?ctrl=project&action=delete&id={$objProject->getId()}"
href="{$smarty.env.BASE_URL}/project/delete/{$objProject->getId()}"
name="toDelete"
onclick="return confirm('Attention ! Êtes-vous sûr de vouloir supprimer ce projet ? Cette action est irréversible.');">
Supprimer</a>

View file

@ -44,7 +44,7 @@
<input name="thumbnail" class="form-control" type="file">
{if $objProject && $objProject->getId()}
<label class="h5">Miniature actuelle :</label>
<img src="{$smarty.env.IMG_PROJECT_PATH}{$objProject->getThumbnail()}" alt="Miniature">
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_PROJECT_PATH}{$objProject->getThumbnail()}" alt="Miniature">
{/if}
</div>
@ -69,7 +69,7 @@
{foreach $arrImages as $image}
<div class="col-md-3 mb-3 text-center">
<div class="card shadow-sm h-100 border-{if $image.image_status == 'approuvé'}success{elseif $image.image_status == 'refusé'}danger{else}warning{/if}">
<img src="{$smarty.env.IMG_PROJECT_PATH}{$image.image_name}"
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_PROJECT_PATH}{$image.image_name}"
class="card-img-top img-thumbnail"
alt="{$image.image_alt}"
style="height: 150px; object-fit: cover;">
@ -80,7 +80,7 @@
</span>
<div class="mt-2 d-flex flex-column gap-1">
<a href="index.php?ctrl=project&action=delete_image&id_img={$image.image_id}"
<a href="{$smarty.env.BASE_URL}/project/delete_image/{$image.image_id}"
class="btn btn-sm btn-danger"
onclick="return confirm('Supprimer définitivement cette image ?')">Supprimer</a>
</div>

View file

@ -4,6 +4,6 @@
<div class="text-center">
<h1 class="display-1">Erreur 403</h1>
<h2 class="display-3">Vous n'êtes pas autorisé à accéder à cette page !</h2>
<img class="img-fluid" src="assests/img/error403.jpg">
<img class="img-fluid" src="{$smarty.env.BASE_URL}/assests/img/error403.jpg">
</div>
{/block}

View file

@ -4,6 +4,6 @@
<div class="text-center">
<h1 class="display-1">Erreur 404</h1>
<h2 class="display-3">Cette page n'existe pas !</h2>
<img class="img-fluid" src="assests/img/error404.webp">
<img class="img-fluid" src="{$smarty.env.BASE_URL}/assests/img/error404.webp">
</div>
{/block}

View file

@ -133,7 +133,7 @@
</h2>
<div id="collapseOne" class="accordion-collapse collapse show" data-bs-parent="#accordionExample">
<div class="accordion-body">
<p>Rien de plus simple ! Si vous êtes connecté à votre compte, un lien <a href="index.php?ctrl=admin&action=admin">"admin"</a> sera visible dans votre barre de navigation.
<p>Rien de plus simple ! Si vous êtes connecté à votre compte, un lien <a href="{$smarty.env.BASE_URL}/admin/admin">"admin"</a> sera visible dans votre barre de navigation.
Cliquez dessus et vous voici dans l'antre réservée à nos fabuleux administrateurs !</p>
</div>
</div>
@ -206,7 +206,7 @@
</h2>
<div id="collapseTwo" class="accordion-collapse collapse" data-bs-parent="#accordionExample">
<div class="accordion-body">
<p>En haut à droite de votre écran, vous avez le lien <a href="index.php?ctrl=user&action=signin">"s'inscrire"</a>. Nous demandons certaines informations obligatoires pour l'identification,
<p>En haut à droite de votre écran, vous avez le lien <a href="{$smarty.env.BASE_URL}/user/signin">"s'inscrire"</a>. Nous demandons certaines informations obligatoires pour l'identification,
ensuite à vous de remplir les informations complémentaires pour alimenter votre profil et permettre aux autres utilisateurs de mieux vous connaitre et vous contacter.</p>
</div>
</div>

View file

@ -11,13 +11,11 @@
<section class="container mt-5 p-5 d-flex flex-column align-items-center text-center">
<div class="mb-4">
<form method="GET" action="index.php">
<input type="hidden" name="ctrl" value="project">
<input type="hidden" name="action" value="home">
<form method="GET" action="{$smarty.env.BASE_URL}">
<button type="submit" name="filter_cat" value="1" class="btn btn-primary">Design</button>
<button type="submit" name="filter_cat" value="2" class="btn btn-primary">Développement Web</button>
<button type="submit" name="filter_old" value="true" class="btn btn-primary">Plus de 6 mois</button>
<a href="index.php?ctrl=project&action=home" class="btn btn-primary">Tout</a>
<a href="{$smarty.env.BASE_URL}/project/home" class="btn btn-primary">Tout</a>
</form>
</div>
</section>
@ -30,7 +28,7 @@
{assign var="isAuthor" value=(isset($smarty.session.user) && $smarty.session.user.user_id == $objProject->getUser_id())}
{assign var="isModerator" value=(isset($smarty.session.user) && $smarty.session.user.user_status == 2)}
{assign var="isDeleted" value=($objProject->getProject_deleted_at() !== null)}
{assign var="isDeleted" value=($objProject->getDeleted_at() !== null)}
{assign var="isRefused" value=($objProject->getStatus() == "refusé")}
{if $isModerator

View file

@ -169,7 +169,7 @@
<div class="col-12 text-center">
<small class="text-secondary">
Déjà un compte ?
<a href="index.php?ctrl=user&action=login">Se connecter</a>
<a href="{$smarty.env.BASE_URL}/user/login">Se connecter</a>
</small>
</div>
</form>

View file

@ -69,7 +69,7 @@
<div class="col-12 text-center">
<small class="text-secondary">
Pas encore de compte ?
<a href="index.php?ctrl=user&action=signup" class="link-primary">
<a href="{$smarty.env.BASE_URL}/user/signup" class="link-primary">
Créer un compte
</a>
</small>

View file

@ -24,4 +24,4 @@
Cordialement,<br>
Léquipe Folliow
</p>
<img src="https://php.boulayoune.com/assests/img/logo.png" style="height : 30px;">
<img src="{$smarty.env.BASE_URL}/assests/img/logo.png" style="height : 30px;">

View file

@ -22,7 +22,7 @@
</p>
<div class="mb-4 shadow-sm {if !($smarty.env.IMG_PROJECT_PATH|cat:$objProject->getThumbnail())|file_exists}d-none{/if}" >
<img src="{$smarty.env.IMG_PROJECT_PATH}{$objProject->getThumbnail()}"
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_PROJECT_PATH}{$objProject->getThumbnail()}"
class="img-fluid rounded w-100">
</div>
@ -50,16 +50,16 @@
<div class="col-md-4 mb-4">
<div class="card {if $image.image_status != 'approuvé'}border-warning shadow-none opacity-75{/if}">
<img src="{$smarty.env.IMG_PROJECT_PATH}{$image.image_name}" class="card-img-top" alt="{$image.image_alt}">
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_PROJECT_PATH}{$image.image_name}" class="card-img-top" alt="{$image.image_alt}">
{* Visible uniquement par le modérateur *}
{if isset($smarty.session.user.user_status) && $smarty.session.user.user_status == 2}
<div class="moderator-tools border-top pt-2 mt-2">
<div class="d-flex gap-2">
<a href="index.php?ctrl=project&action=change_image_status&id_img={$image.image_id}&status=approuvé"
<a href="{$smarty.env.BASE_URL}/project/change_image_status/{$image.image_id}&status=approuvé"
class="btn btn-sm btn-success">Valider</a>
<a href="index.php?ctrl=project&action=delete_image&id_img={$image.image_id}"
<a href="{$smarty.env.BASE_URL}/project/delete_image/{$image.image_id}"
class="btn btn-sm btn-outline-danger"
onclick="return confirm('Supprimer définitivement ?')">Supprimer</a>
</div>
@ -77,7 +77,7 @@
<!-- Formulaire qui envoie la demande au contrôleur (sendEmail) -->
<div class="card shadow-sm p-4 mb-5">
<form method="post" action="index.php?ctrl=project&action=sendEmail">
<form method="post" action="{$smarty.env.BASE_URL}/project/sendEmail">
<input type="hidden" name="project_id"
value="{$objProject->getId()}">
@ -110,8 +110,8 @@
position: relative;
z-index: 1;"{/if}>
<a href="index.php?ctrl=user&action=user&pseudo={$objProject->getCreatorName()}" class="text-decoration-none text-dark">
<img src="{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($objProject->getUser_image()))|file_exists}{$objProject->getUser_image()}{else}images.jpg{/if}"
<a href="{$smarty.env.BASE_URL}/user/user/{$objProject->getCreatorName()}" class="text-decoration-none text-dark">
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($objProject->getUser_image()))|file_exists}{$objProject->getUser_image()}{else}images.jpg{/if}"
class="rounded-circle mb-3 mx-auto "
style="width:100px;height:100px;object-fit:cover;{if $objProject->getCreatorName()|stripos:'minou' !== false}
box-shadow: 0 0 0 4px #000; {/if}">
@ -145,18 +145,18 @@
{if isset($smarty.session.user)}
{if ($smarty.session.user.user_status == 2 || $smarty.session.user.user_id == $objProject->getUser_id())}
<div class="border rounded text-center">
<a class="btn btn-sm m-1 btn-danger" href="?ctrl=project&action=delete&id={$objProject->getId()}" name="toDelete">Supprimer le projet</a>
<a class="btn btn-sm m-1 btn-danger" href="{$smarty.env.BASE_URL}/project/delete/{$objProject->getId()}" name="toDelete">Supprimer le projet</a>
{/if}
{if $smarty.session.user.user_id == $objProject->getUser_id()}
<a class="btn btn-sm m-1 btn-warning" href="?ctrl=project&action=addedit_project&id={$objProject->getId()}" name="addedit">Modifier le projet</a>
<a class="btn btn-sm m-1 btn-warning" href="{$smarty.env.BASE_URL}/project/addedit_project/{$objProject->getId()}" name="addedit">Modifier le projet</a>
{/if}
{*Conditions permettant au Modérateur de modifier le status d'un projet*}
{if $smarty.session.user.user_status == 2 && $objProject->getStatus() == "en_attente"}
<a class="btn btn-sm m-1 btn-success" href="?ctrl=project&action=accept&id={$objProject->getId()}" name="toPublished">Accepter</a>
<a class="btn btn-sm m-1 btn-warning" href="?ctrl=project&action=refuse&id={$objProject->getId()}" name="toRefused">Refuser</a>
<a class="btn btn-sm m-1 btn-success" href="{$smarty.env.BASE_URL}/project/accept/{$objProject->getId()}" name="toPublished">Accepter</a>
<a class="btn btn-sm m-1 btn-warning" href="{$smarty.env.BASE_URL}/project/refuse/{$objProject->getId()}" name="toRefused">Refuser</a>
</div>
{elseif $projectStatus == "refusé"}
<p class="text-danger fw-bold">Portfolio refusé</p>

View file

@ -10,7 +10,7 @@
<h2 class="visually-hidden">Rechercher parmi les projets</h2>
<div class="row mb-2">
<section class="mb-5" aria-labelledby="search-heading">
<form name="formSearch" method="post" action="?ctrl=project&action=search" class="border rounded p-4 bg-light">
<form name="formSearch" method="post" action="" class="border rounded p-4 bg-light">
<h3 id="search-heading" class="h4 mb-4">
<i class="fas fa-search me-2" aria-hidden="true"></i>
Rechercher des projets
@ -134,7 +134,7 @@
<i class="fas fa-search me-2" aria-hidden="true"></i>
Rechercher
</button>
<a href="index.php?ctrl=project&action=search" class="btn btn-secondary ms-2">
<a href="{$smarty.env.BASE_URL}/project/search" class="btn btn-secondary ms-2">
<i class="fas fa-redo me-2" aria-hidden="true"></i>
Réinitialiser
</a>
@ -155,7 +155,7 @@
{assign var="isAuthor" value=(isset($smarty.session.user) && $smarty.session.user.user_id == $objProject->getUser_id())}
{assign var="isModerator" value=(isset($smarty.session.user) && $smarty.session.user.user_status == 2)}
{assign var="isDeleted" value=($objProject->getProject_deleted_at() !== null)}
{assign var="isDeleted" value=($objProject->getDeleted_at() !== null)}
{assign var="isRefused" value=($objProject->getStatus() == "refusé")}
{if $isModerator

View file

@ -192,7 +192,7 @@
<div class="col-12 text-center">
<small class="text-secondary">
Déjà un compte ?
<a class="link-primary" href="index.php?ctrl=user&action=login">
<a class="link-primary" href="{$smarty.env.BASE_URL}/user/login">
Se connecter
</a>
</small>

View file

@ -16,7 +16,7 @@
z-index: 1;"{/if}>
<div class="row" >
<div class="col-md-4 text-center">
<img src="{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($user->getImage()))|file_exists}{$user->getImage()}{else}images.jpg{/if}" alt="Avatar de {$user->getPseudo()}" class="rounded-circle flex-shrink-0 border border-2 border-white"
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($user->getImage()))|file_exists}{$user->getImage()}{else}images.jpg{/if}" alt="Avatar de {$user->getPseudo()}" class="rounded-circle flex-shrink-0 border border-2 border-white"
style="width: 256px; height: 256px; object-fit: cover; margin-top: 8px;{if $user->getPseudo()|stripos:'minou' !== false}
box-shadow: 0 0 0 4px #000; {/if}"
>
@ -56,7 +56,7 @@
border: none !important;
font-weight: bold !important;
transition: transform 0.2s;"{/if}
href="?ctrl=user&action=edit">Edit account</a>
href="{$smarty.env.BASE_URL}/user/edit">Edit account</a>
{/if}
</div>

View file

@ -78,7 +78,7 @@
<!-- Avatar preview -->
<img
id="preview-avatar"
src="{if $objUser->getImage()}{$smarty.env.IMG_USER_PATH}{$objUser->getImage()}{else}assests/img/images.jpg{/if}"
src="{$smarty.env.BASE_URL}/{if $objUser->getImage()}{$smarty.env.IMG_USER_PATH}{$objUser->getImage()}{else}assests/img/images.jpg{/if}"
alt="Photo de profil"
class="rounded-circle border"
style="width:80px; height:80px; object-fit:cover;"