Début de la fonctionnalité de dépôt de Img dans le projet

This commit is contained in:
GuillaumeH-Cci 2026-02-10 16:17:59 +01:00
parent 4e9b27772b
commit 1df2ed36a5
35 changed files with 2014 additions and 168 deletions

View file

@ -8,6 +8,8 @@
require("./entities/image_entity.php"); require("./entities/image_entity.php");
require("./models/user_model.php"); require("./models/user_model.php");
require("./entities/user_entity.php"); require("./entities/user_entity.php");
require("./models/authorisation_model.php");
require("./entities/authorisation_entity.php");
require("mother_controller.php"); require("mother_controller.php");
/** /**
@ -18,33 +20,33 @@
class AdminCtrl extends MotherCtrl{ class AdminCtrl extends MotherCtrl{
public function admin(){ public function admin(){
/*accès à la page admin
if (!isset($_SESSION['user']) && ($_SESSION['user']['user_status'] != 1 )){ if (!isset($_SESSION['user']) && ($_SESSION['user']['user_status'] != 1 )){
header("Location:index.php?ctrl=error&action=error_403"); header("Location:index.php?ctrl=error&action=error_403");
exit; exit;
}*/ }
//gestion de l'user
$objCategoryModel = new CategoryModel; $objCategoryModel = new CategoryModel;
if (!empty($_POST['new_category'])) { if (!empty($_POST['new_category'])) {
$objNewCategory = new Category; $newCat = new Category();
if (!empty($objNewCategory->getName())) { $newCat->setName($_POST['new_category']);
$objNewCategory = $_POST['new_category']; $objCategoryModel->insertCategory($newCat);
$objCategoryModel->insertCategory($objNewCategory); header('Location: index.php?ctrl=admin&action=admin');
header("Location:index.php?ctrl=admin&action=admin");
exit; exit;
} }
}
if (!empty($_POST['edit_category'])) { if (!empty($_POST['id_to_edit']) && !empty($_POST['new_name'])) {
$objEditCategory = new Category; $editCat = new Category();
if ($objEditCategory->getId() > 0) { $editCat->setId($_POST['id_to_edit']);
$objEditCategory = $_POST['edit_category']; $editCat->setName($_POST['new_name']);
$objCategoryModel->editCategory($objEditCategory); $objCategoryModel->editCategory($editCat);
header("Location:index.php?ctrl=admin&action=admin"); header('Location: index.php?ctrl=admin&action=admin');
exit; exit;
} }
}
//affichage select des catégories
$arrCategory = $objCategoryModel->findAllCategory(); $arrCategory = $objCategoryModel->findAllCategory();
$arrCategoryToDisplay = array(); $arrCategoryToDisplay = array();
@ -54,9 +56,55 @@
$arrCategoryToDisplay[] = $objCategory; $arrCategoryToDisplay[] = $objCategory;
} }
// Il faudra donner à maman et gérer l'affichage quand Smarty sera prêt //gestion de l'user
$objUserModel = new UserModel;
if (!empty($_POST['action'])) {
$intUserId = (int)$_POST['user_id'];
if ($intUserId > 0) {
if ($_POST['action'] === 'update_status' && !empty($_POST['new_status'])) {
$objUser = new User();
$objUser->setId($intUserId);
$objUser->setStatus((int)$_POST['new_status']);
if ($objUserModel->editStatus($objUser)) {
$_SESSION['message_success'] = "Le statut a bien été modifié !";
}
}
elseif ($_POST['action'] === 'delete_user') {
$objUserModel->delete_soft($intUserId);
$_SESSION['message_success'] = "L'utilisateur a été supprimé.";
}
header("Location: index.php?ctrl=admin&action=admin");
exit;
}
}
//affichage select des users
$arrUser = $objUserModel->findAllUsers();
$arrUserToDisplay = array();
foreach($arrUser as $arrDetUser){
$objUser = new User;
$objUser->hydrate($arrDetUser);
$arrUserToDisplay[] = $objUser;
}
//affichage select des authorisations
$objAuthorisationModel = new AuthorisationModel;
$arrAuthorisation = $objAuthorisationModel->findAllAuthorisation();
$arrAuthorisationToDisplay = array();
foreach($arrAuthorisation as $arrDetAuthorisation){
$objAuthorisation = new Authorisation;
$objAuthorisation->hydrate($arrDetAuthorisation);
$arrAuthorisationToDisplay[] = $objAuthorisation;
}
//gérer l'affichage
$this->_arrData['arrCategoryToDisplay'] = $arrCategoryToDisplay; $this->_arrData['arrCategoryToDisplay'] = $arrCategoryToDisplay;
//$this->_arrData['intCategory'] = $objCategoryModel->; $this->_arrData['arrUserToDisplay'] = $arrUserToDisplay;
$this->_arrData['arrAuthorisationToDisplay'] = $arrAuthorisationToDisplay;
$this->_display("admin"); $this->_display("admin");
} }
} }

View file

@ -24,8 +24,19 @@
public function home(){ public function home(){
$intCategory = 0;
if (!empty($_GET['filter_cat'])) {
$intCategory = (int) $_GET['filter_cat'];
}
$boolOld = false;
if (!empty($_GET['filter_old']) && $_GET['filter_old'] == 'true') {
$boolOld = true;
}
$objProjectModel = new ProjectModel; $objProjectModel = new ProjectModel;
$arrProject = $objProjectModel->findAll(); $arrProject = $objProjectModel->findAll(0,'',0,0,'','','',$intCategory,$boolOld);
$arrProjectToDisplay = array(); $arrProjectToDisplay = array();
foreach($arrProject as $arrDetProject){ foreach($arrProject as $arrDetProject){
$objProject = new Project; $objProject = new Project;
@ -34,8 +45,6 @@
} }
$this->_arrData['arrProjectToDisplay'] = $arrProjectToDisplay; $this->_arrData['arrProjectToDisplay'] = $arrProjectToDisplay;
$this->_display("home"); $this->_display("home");
} }
@ -43,8 +52,8 @@
/** /**
* Fonction d'affichage de la barre de recherche * Fonction d'affichage de la barre de recherche
*/ */
public function search(){ public function search(){
//Récupérer les informations du formulaire //Récupérer les informations du formulaire
$strKeywords = $_POST['keywords']??''; $strKeywords = $_POST['keywords']??'';
$intAuthor = $_POST['author']??0; $intAuthor = $_POST['author']??0;
@ -87,8 +96,6 @@
/** /**
* Fonction d'affichage de la page projet * Fonction d'affichage de la page projet
*/ */
public function project (){ public function project (){
$objProjectModel = new ProjectModel; $objProjectModel = new ProjectModel;
@ -112,32 +119,32 @@
$_SESSION['title'] = $_POST['titleProject']??""; $_SESSION['title'] = $_POST['titleProject']??"";
$_SESSION['description'] = $_POST['descProject']??""; $_SESSION['description'] = $_POST['descProject']??"";
$_SESSION['content'] = $_POST['textProject']??""; $_SESSION['content'] = $_POST['textProject']??"";
$_SESSION['thumbnail'] = $_FILES['imageProject']['name']??""; $_SESSION['thumbnail'] = $_FILES['imageThumbnail']['name']??"";
$_SESSION['status'] = 'en_attente'; $_SESSION['status'] = 'en_attente';
$objProject = new Project(); $objProject = new Project();
/** /**
/* Créer par Besnik le GOAT et l'autre GOAT de Guillaume * Créer par Besnik le GOAT et l'autre GOAT de Guillaume
/* *
/* @return bool pour savoir si le fichier existe, * @return bool pour savoir si le fichier existe,
/* puis déplace vers le fichier uploads avec les images projet des utilisateurs * puis déplace vers le fichier uploads avec les images projet des utilisateurs
/* Communication avec la BDD * Communication avec la BDD
*/ */
if (($_SESSION['thumbnail'] != null)){ if (($_SESSION['thumbnail'] != null)){
$strDest = ""; $strDest = "";
if ((count($_FILES) > 0) && ($_FILES['imageProject']['error'] != 4)){ if ((count($_FILES) > 0) && ($_FILES['imageProject']['error'] != 4)){
$strDest = '../public/uploads/projects/'.$_FILES['imageProject']['name']; $strDest = 'uploads/projects/'.$_FILES['imageProject']['name'];
var_dump($strDest); var_dump($strDest);
move_uploaded_file($_FILES['imageProject']['tmp_name'], $strDest); move_uploaded_file($_FILES['imageProject']['tmp_name'], $strDest);
} }
} }
/** En cas d'appuis sur le bouton d'envoie ou celui de remettre a plus tard /** En cas d'appuis sur le bouton d'envoie ou celui de remettre a plus tard
/* 1. Changement de status * 1. Changement de status
/* 2. Hydratation avec les informations récupéré de l'utilisateur * 2. Hydratation avec les informations récupéré de l'utilisateur
/* 3. Envoie des données à la BDD * 3. Envoie des données à la BDD
*/ */
if (isset($_POST['sendMessage'])) { if (isset($_POST['sendMessage'])) {
$_SESSION['status'] = 'publié'; $_SESSION['status'] = 'publié';
@ -151,14 +158,12 @@
$objProjectModel->insert($objProject); $objProjectModel->insert($objProject);
} }
//Débuggage
var_dump($_SESSION); var_dump($_SESSION);
var_dump($objProject); var_dump($objProject);
$this->_arrData['arrProjectToDiplay'] = $arrProjectToDiplay; $this->_arrData['arrProjectToDiplay'] = $arrProjectToDiplay;
$this->_arrData['arrImageToDiplay'] = $arrImageToDiplay; $this->_arrData['arrImageToDiplay'] = $arrImageToDiplay;
$this->_display("project"); $this->_display("project");
} }

View file

@ -41,12 +41,8 @@ class UserCtrl extends MotherCtrl {
} }
} }
$this->_arrData['arrError'] = $arrError; $this->_arrData['arrError'] = $arrError;
$this->_display("login"); $this->_display("login");
} }

View file

@ -0,0 +1,24 @@
<?php
require_once("mother_entity.php");
class Authorisation extends Entity{
private int $_id;
private string $_name = '';
public function __construct(){
$this->_prefix = 'authorisation_';
}
public function getId():int{
return $this->_id;
}
public function setId(int $id){
$this->_id = $id;
}
public function getName():string{
return $this->_name;
}
}

View file

@ -200,6 +200,7 @@ class Project extends Entity{
public function setCreatorName($creatorname){ public function setCreatorName($creatorname){
$this->_creatorname = $creatorname; $this->_creatorname = $creatorname;
} }
/** /**
* Récupération du chemin photo profil * Récupération du chemin photo profil
* @return string nom du chemin photo profil * @return string nom du chemin photo profil

View file

@ -111,6 +111,7 @@
public function getAccountCreation():string{ public function getAccountCreation():string{
return $this->_account_creation; return $this->_account_creation;
} }
public function setAccountCreation(string $account_creation){ public function setAccountCreation(string $account_creation){
$this->_account_creation = $account_creation; $this->_account_creation = $account_creation;
} }

View file

@ -0,0 +1,28 @@
<?php
require_once('mother_model.php');
/**
* Traitement des requêtes pour le status de l'utilisateur
* @author : Laura
*/
class AuthorisationModel extends Connect{
public function __construct(){
parent::__construct();
}
/**
* fonction de récupération des infos d'authorisation
* @return array
*/
public function findAllAuthorisation():array{
$strRq = "SELECT *
FROM authorisation";
return $this->_db->query($strRq)->fetchAll();
}
}

View file

@ -10,6 +10,7 @@
/** /**
* Fonction de récupération des catégories * Fonction de récupération des catégories
* @param int $intLimit
* @return array * @return array
*/ */
@ -27,21 +28,56 @@
/** /**
* fonction d'insertion d'une nouvelle catégorie dans la bdd * fonction d'insertion d'une nouvelle catégorie dans la bdd
* @param object $objUser L'objet utilisateur * @param object $objCategory l'objet catégorie
* @return bool Est-ce que la requête s'est bien passée (true/false) * @return bool Est-ce que la requête s'est bien passée
*/ */
public function insertCategory(object $objCategory):bool{
public function insert(object $objCategory):bool{ $strRq = "INSERT INTO category (category_name)
VALUES (:name)";
$strRq = "INSERT INTO category (category_name, category_parent)
VALUES (:name, :parent)";
$rqPrep = $this->_db->prepare($strRq); $rqPrep = $this->_db->prepare($strRq);
$rqPrep->bindValue(":name", $objCategory->getName(), PDO::PARAM_STR); $rqPrep->bindValue(":name", $objCategory->getName(), PDO::PARAM_STR);
$rqPrep->bindValue(":parent", $objCategory->getParent(), PDO::PARAM_STR);
return $rqPrep->execute(); return $rqPrep->execute();
} }
/**
* fonction de suppression d'une catégorie dans la bdd
* @param object $objCategory l'objet catégorie
* @return bool Est-ce que la requête s'est bien passée
*/
public function deleteCategory(object $objCategory):bool{
$strRq = "DELETE FROM category
WHERE category_id= :id";
$rqPrep = $this->_db->prepare($strRq);
$rqPrep->bindValue(":id", $objCategory->getId(), PDO::PARAM_INT);
return $rqPrep->execute();
} }
/**
* fonction de modification d'une catégorie dans la bdd
* @param object $objCategory l'objet catégorie
* @return bool Est-ce que la requête s'est bien passée
*/
public function editCategory(object $objCategory):bool{
$strRq = "UPDATE category
SET category_name = :name
WHERE category_id = :id";
$rqPrep = $this->_db->prepare($strRq);
$rqPrep->bindValue(":id", $objCategory->getId(), PDO::PARAM_INT);
$rqPrep->bindValue(":name", $objCategory->getName(), PDO::PARAM_STR);
return $rqPrep->execute();
}
}

View file

@ -11,6 +11,7 @@
/** /**
* Fonction de récupération des images * Fonction de récupération des images
* @param int $intLimit
* @return array * @return array
*/ */

View file

@ -7,9 +7,9 @@
try{ try{
// Connexion à la base de données // Connexion à la base de données
$this->_db = new PDO( $this->_db = new PDO(
"mysql:host=boulayoune.com;dbname=projet_folliow", // Serveur et BDD "mysql:host=localhost;dbname=projet_folliow", // Serveur et BDD mysql:host=boulayoune.com;dbname=projet_folliow
"projet_user", //Nom d'utilisateur de la base de données "root", //Nom d'utilisateur de la base de données projet_user
"F0lliowRules!",// Mot de passe de la base de données "",// Mot de passe de la base de données F0lliowRules!
array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC) // Mode de renvoi array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC) // Mode de renvoi
); );
// Pour résoudre les problèmes dencodage // Pour résoudre les problèmes dencodage

View file

@ -9,11 +9,16 @@
class ProjectModel extends Connect{ class ProjectModel extends Connect{
/**
* Fonction de recherche des projets
* @param type string, int et bool
* @return array
*/
public function findAll(int $intLimit=0, string $strKeywords='', int $intAuthor=0, public function findAll(int $intLimit=0, string $strKeywords='', int $intAuthor=0,
int $intPeriod=0, string $strDate='', string $strStartDate='', int $intPeriod=0, string $strDate='', string $strStartDate='',
string $strEndDate='', int $intCategory=0):array{ string $strEndDate='', int $intCategory=0, bool $bool6Months=false):array{
// Ecrire la requête
$strRq = "SELECT project.*, $strRq = "SELECT project.*,
CONCAT(user_firstname, ' ', user_name) AS 'project_creatorname', CONCAT(user_firstname, ' ', user_name) AS 'project_creatorname',
user_image user_image
@ -21,6 +26,7 @@
INNER JOIN users ON user_id = project_user"; INNER JOIN users ON user_id = project_user";
$strWhere = " WHERE "; $strWhere = " WHERE ";
// Recherche par mot clé // Recherche par mot clé
if ($strKeywords != '') { if ($strKeywords != '') {
$strRq .= " WHERE (project_title LIKE '%".$strKeywords."%' $strRq .= " WHERE (project_title LIKE '%".$strKeywords."%'
@ -42,22 +48,24 @@
$strWhere = " AND "; $strWhere = " AND ";
} }
//recherche par ancienneté
if ($bool6Months === true) {
$strRq .= $strWhere . " project_creation_date <= DATE_SUB(NOW(), INTERVAL 6 MONTH) ";
$strWhere = " AND ";
}
// Recherche par dates // Recherche par dates
if ($intPeriod == 0){ if ($intPeriod == 0){
// Par date exacte
if ($strDate != ''){ if ($strDate != ''){
$strRq .= $strWhere." project_creation_date = '".$strDate."'"; $strRq .= $strWhere." project_creation_date = '".$strDate."'";
} }
}else{ }else{
// Par période de dates
if ($strStartDate != '' && $strEndDate != ''){ if ($strStartDate != '' && $strEndDate != ''){
$strRq .= $strWhere." project_creation_date BETWEEN '".$strStartDate."' AND '".$strEndDate."'"; $strRq .= $strWhere." project_creation_date BETWEEN '".$strStartDate."' AND '".$strEndDate."'";
}else{ }else{
if ($strStartDate != ''){ if ($strStartDate != ''){
// A partir de
$strRq .= $strWhere." project_creation_date >= '".$strStartDate."'"; $strRq .= $strWhere." project_creation_date >= '".$strStartDate."'";
}else if ($strEndDate != ''){ }else if ($strEndDate != ''){
// Avant le
$strRq .= $strWhere." project_creation_date <= '".$strEndDate."'"; $strRq .= $strWhere." project_creation_date <= '".$strEndDate."'";
} }
} }
@ -65,37 +73,39 @@
$strRq .= " ORDER BY project_creation_date DESC"; $strRq .= " ORDER BY project_creation_date DESC";
if ($intLimit > 0){ if ($intLimit > 0){
$strRq .= " LIMIT ".$intLimit; $strRq .= " LIMIT ".$intLimit;
} }
// Lancer la requête et récupérer les résultats
return $this->_db->query($strRq)->fetchAll(); return $this->_db->query($strRq)->fetchAll();
} }
//Fonction d'insertion d'information dans la BDD (Repris de la partie BLOG vu en cours..) /**
* Fonction d'insertion d'un nouveau projet dans la bdd
* @param object $objProject l'objet projet
* @return bool Est-ce que la requête s'est bien passée
*/
public function insert(object $objProject):bool{ public function insert(object $objProject):bool{
//Construire la requête
$strRq = "INSERT INTO project (project_title, project_description, project_thumbnail, project_content, project_status, project_creation_date) $strRq = "INSERT INTO project (project_title, project_description, project_thumbnail, project_content, project_status, project_creation_date)
VALUES (:title, :description, :thumbnail, :content, :status, DATE(NOW()))"; VALUES (:title, :description, :thumbnail, :content, :status, DATE(NOW()))";
// Préparer la requête
$rqPrep = $this->_db->prepare($strRq); $rqPrep = $this->_db->prepare($strRq);
// Donne les informations
$rqPrep->bindValue(":title", $objProject->getTitle(), PDO::PARAM_STR); $rqPrep->bindValue(":title", $objProject->getTitle(), PDO::PARAM_STR);
$rqPrep->bindValue(":description", $objProject->getDescription(), PDO::PARAM_STR); $rqPrep->bindValue(":description", $objProject->getDescription(), PDO::PARAM_STR);
$rqPrep->bindValue(":thumbnail", $objProject->getThumbnail(), PDO::PARAM_STR); $rqPrep->bindValue(":thumbnail", $objProject->getThumbnail(), PDO::PARAM_STR);
$rqPrep->bindValue(":content", $objProject->getContent(), PDO::PARAM_STR); $rqPrep->bindValue(":content", $objProject->getContent(), PDO::PARAM_STR);
$rqPrep->bindValue(":status", $objProject->getStatus(), PDO::PARAM_STR); $rqPrep->bindValue(":status", $objProject->getStatus(), PDO::PARAM_STR);
//Executer la requête
//var_dump($strRq);die;
//return $db->exec($strRq);
return $rqPrep->execute(); return $rqPrep->execute();
} }
/**
* Fonction de recherche d'un seul projet
* @param int $intId
* @return
*/
public function findOne(int $intId) { public function findOne(int $intId) {
$strRq = "SELECT project.*, $strRq = "SELECT project.*,
CONCAT(users.user_firstname, ' ', users.user_name) AS 'project_creatorname', CONCAT(users.user_firstname, ' ', users.user_name) AS 'project_creatorname',

View file

@ -5,66 +5,58 @@
/** /**
* Traitement des requêtes pour les utilisateurs * Traitement des requêtes pour les utilisateurs
* @author : meilleurGroup * @author : meilleurGroup
* @version : V0.5
*/ */
class UserModel extends Connect{ class UserModel extends Connect{
// Attributs
// Méthodes
public function __construct(){ public function __construct(){
parent::__construct(); parent::__construct();
} }
/** /**
* Fonction de recherche des utilisateurs et leur niveau d'autorisation
* @return array * @return array
*/ */
public function findAllUsers():array{ public function findAllUsers():array{
// Ecrire la requête
$strRq = "SELECT user_id, user_firstname, user_name, user_image, user_status, authorisation_name $strRq = "SELECT user_id, user_firstname, user_name, user_image, user_status, authorisation_name
FROM users INNER JOIN authorisation ON authorisation.authorisation_id = users.user_status"; FROM users INNER JOIN authorisation ON authorisation.authorisation_id = users.user_status
// Lancer la requête et récupérer les résultats WHERE user_deleted_at IS NULL";
return $this->_db->query($strRq)->fetchAll(); return $this->_db->query($strRq)->fetchAll();
} }
/** /**
* Fonction de vérification des utilisateurs
* @param string $strMail * @param string $strMail
* @param string $strPwd * @param string $strPwd
* @return array|bool * @return array|bool
*/ */
public function verifUser(string $strMail, string $strPwd):array|bool{ public function verifUser(string $strMail, string $strPwd):array|bool{
// 2. Construire la requête
$strRq = "SELECT user_id, user_name, user_firstname, user_password, user_image, user_status, authorisation_name $strRq = "SELECT user_id, user_name, user_firstname, user_password, user_image, user_status, authorisation_name
FROM users INNER JOIN authorisation ON authorisation.authorisation_id = users.user_status FROM users INNER JOIN authorisation ON authorisation.authorisation_id = users.user_status
WHERE user_mail = '".$strMail."'"; WHERE user_mail = '".$strMail."'";
// Récupère mon utilisateur
// Executer la requête et récupérer les résultats
$arrUser = $this->_db->query($strRq)->fetch(); $arrUser = $this->_db->query($strRq)->fetch();
// Vérification du mot de passe haché
if (password_verify($strPwd, $arrUser['user_password'])){ if (password_verify($strPwd, $arrUser['user_password'])){
// Renvoi l'utilisateur unset($arrUser['user_password']);
unset($arrUser['user_password']); // on enlève le pwd
return $arrUser; return $arrUser;
}else{ }else{
return false; return false;
} }
} }
//public function insert(string $strName, string $strFirstname, string $strMail, string $strPwd):int{
/** /**
* Fonction d'insertion d'un utilisateur en BDD * Fonction d'insertion d'un utilisateur en BDD
* @param object $objUser L'objet utilisateur * @param object $objUser L'objet utilisateur
* @return bool Est-ce que la requête s'est bien passée (true/false) * @return bool Est-ce que la requête s'est bien passée
*/ */
public function insert(object $objUser):bool{ public function insert(object $objUser):bool{
// 2. Construire la requête
$strRq = "INSERT INTO users (user_name, user_firstname, user_pseudo, user_mail, user_password, user_phone, user_work, user_location, user_description) $strRq = "INSERT INTO users (user_name, user_firstname, user_pseudo, user_mail, user_password, user_phone, user_work, user_location, user_description)
VALUES (:name, :firstname, :pseudo,:mail, :pwd, :phone, :work, :location,:description)"; VALUES (:name, :firstname, :pseudo,:mail, :pwd, :phone, :work, :location,:description)";
// Préparer la requête
$rqPrep = $this->_db->prepare($strRq); $rqPrep = $this->_db->prepare($strRq);
// Donne les informations
$rqPrep->bindValue(":name", $objUser->getName(), PDO::PARAM_STR); $rqPrep->bindValue(":name", $objUser->getName(), PDO::PARAM_STR);
$rqPrep->bindValue(":firstname", $objUser->getFirstname(), PDO::PARAM_STR); $rqPrep->bindValue(":firstname", $objUser->getFirstname(), PDO::PARAM_STR);
$rqPrep->bindValue(":pseudo", $objUser->getPseudo(), PDO::PARAM_STR); $rqPrep->bindValue(":pseudo", $objUser->getPseudo(), PDO::PARAM_STR);
@ -75,19 +67,54 @@
$rqPrep->bindValue(':location', $objUser->getLocation() ?? "", PDO::PARAM_STR); $rqPrep->bindValue(':location', $objUser->getLocation() ?? "", PDO::PARAM_STR);
$rqPrep->bindValue(':description', $objUser->getDescription() ?? "", PDO::PARAM_STR); $rqPrep->bindValue(':description', $objUser->getDescription() ?? "", PDO::PARAM_STR);
// 3. Executer la requête
//var_dump($strRq);die;
//return $db->exec($strRq);
return $rqPrep->execute(); return $rqPrep->execute();
} }
public function mailExists(string $mail): bool
{ /**
* Fonction de vérification de mail
* @param string $mail
* @return bool Est-ce que la requête s'est bien passée
*/
public function mailExists(string $mail): bool{
$rq = $this->_db->prepare("SELECT 1 FROM users WHERE user_mail = :mail LIMIT 1"); $rq = $this->_db->prepare("SELECT 1 FROM users WHERE user_mail = :mail LIMIT 1");
$rq->bindValue(":mail", $mail); $rq->bindValue(":mail", $mail);
$rq->execute(); $rq->execute();
return (bool)$rq->fetchColumn(); return (bool)$rq->fetchColumn();
} }
/**
* Fonction de changement de status d'un utilisateur
* @param object $objUser L'objet utilisateur
* @return bool Est-ce que la requête s'est bien passée
*/
public function editStatus(object $objUser):bool{
$strRq = "UPDATE users
SET user_status = :status
WHERE user_id = :id";
$rqPrep = $this->_db->prepare($strRq);
$rqPrep->bindValue(":id", $objUser->getId(), PDO::PARAM_INT);
$rqPrep->bindValue(":status", $objUser->getStatus(), PDO::PARAM_INT);
return $rqPrep->execute();
}
/**
* Fonction permettant de supprimer un utilisateur avec une date de suppression
* @param int $intId L'identifiant de l'utilisateur
* @return bool Est-ce que la requête s'est bien passée
*/
public function delete_soft(int $intId):bool{
$strRq = "UPDATE users
SET user_deleted_at = NOW()
WHERE user_id = :id";
$rqPrep = $this->_db->prepare($strRq);
$rqPrep->bindValue(":id", $intId, PDO::PARAM_INT);
return $rqPrep->execute();
}
} }

View file

@ -1,11 +1,11 @@
<?php <?php
/* Smarty version 5.7.0, created on 2026-02-09 15:03:02 /* Smarty version 5.7.0, created on 2026-02-10 15:07:18
from 'file:views/_partial/header.tpl' */ from 'file:views/_partial/header.tpl' */
/* @var \Smarty\Template $_smarty_tpl */ /* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array ( if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0', 'version' => '5.7.0',
'unifunc' => 'content_6989f726978651_30802796', 'unifunc' => 'content_698b49a6a94424_69678291',
'has_nocache_code' => false, 'has_nocache_code' => false,
'file_dependency' => 'file_dependency' =>
array ( array (
@ -20,7 +20,7 @@ if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
array ( array (
), ),
))) { ))) {
function content_6989f726978651_30802796 (\Smarty\Template $_smarty_tpl) { function content_698b49a6a94424_69678291 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views\\_partial'; $_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views\\_partial';
?><!DOCTYPE html> ?><!DOCTYPE html>
<html lang="fr"> <html lang="fr">

View file

@ -0,0 +1,110 @@
<?php
/* Smarty version 5.7.0, created on 2026-02-10 08:17:39
from 'file:views/project.tpl' */
/* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0',
'unifunc' => 'content_698ae9a3ee5104_18468093',
'has_nocache_code' => false,
'file_dependency' =>
array (
'3309f8a981537e6cbbf8869c67d6dd307aa06ae3' =>
array (
0 => 'views/project.tpl',
1 => 1770634036,
2 => 'file',
),
),
'includes' =>
array (
'file:../app/views/partials/preview.tpl' => 1,
),
))) {
function content_698ae9a3ee5104_18468093 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
$_smarty_tpl->getInheritance()->init($_smarty_tpl, true);
?>
<?php
$_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_2126029828698ae9a3edc808_29541958', "content");
$_smarty_tpl->getInheritance()->endChild($_smarty_tpl, "views/layout.tpl", $_smarty_current_dir);
}
/* {block "content"} */
class Block_2126029828698ae9a3edc808_29541958 extends \Smarty\Runtime\Block
{
public function callBlock(\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
?>
<body>
<section class="container mt-5 p-5 d-flex flex-column align-items-center">
<div>
<h2>Alimenter votre projet</h2>
<form method="post">
<button type="submit" class="btn btn-primary btn-lg" name="showForm">+</button>
<?php if ((true && (true && null !== ($_POST['toContinue'] ?? null)))) {?>
<button type="submit" class="btn btn-warning btn-lg" name="showFormContinue">Reprendre</button>
<?php }?>
</form>
<?php if ((true && (true && null !== ($_POST['showForm'] ?? null))) || (true && (true && null !== ($_POST['showFormContinue'] ?? null)))) {?>
<form method="post" enctype="multipart/form-data" onsubmit="return confirm('Voulez-vous vraiment envoyer le formulaire ?')">
<div>
<label>Titre</label>
<input type="text" name="titleProject">
</div>
<div>
<label>Description</label>
<input type="text" name="descProject">
</div>
<div>
<label>Texte Portfolio</label>
<input type="text" name="textProject">
</div>
<div>
<input name="imageProject" class="form-control" type="file">
</div>
<button type="submit" class="btn btn-primary btn-md" name="sendMessage">Envoyer</button>
<button type="submit" class="btn btn-warning btn-md" name="toContinue">Remettre à plus tard</button>
</form>
<?php }?>
</div>
<div>
<h3>Description</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
<div>
<h3>Photos behind the scene</h3>
<div class="row mb-2">
<img>
</div>
</div>
<div>
<h3>Other projects</h3>
<div class="row mb-2">
<?php
$_from = $_smarty_tpl->getSmarty()->getRuntime('Foreach')->init($_smarty_tpl, $_smarty_tpl->getValue('arrProjectToDisplay'), 'objProject');
$foreach0DoElse = true;
foreach ($_from ?? [] as $_smarty_tpl->getVariable('objProject')->value) {
$foreach0DoElse = false;
?>
<?php $_smarty_tpl->renderSubTemplate("file:../app/views/partials/preview.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, 0, $_smarty_tpl->cache_lifetime, array(), (int) 0, $_smarty_current_dir);
?>
<?php
}
$_smarty_tpl->getSmarty()->getRuntime('Foreach')->restore($_smarty_tpl, 1);?>
</div>
</div>
</div>
<section>
</body>
<?php
}
}
/* {/block "content"} */
}

View file

@ -1,18 +1,18 @@
<?php <?php
/* Smarty version 5.7.0, created on 2026-02-09 15:03:02 /* Smarty version 5.7.0, created on 2026-02-10 14:04:32
from 'file:views/_partial/preview.tpl' */ from 'file:views/_partial/preview.tpl' */
/* @var \Smarty\Template $_smarty_tpl */ /* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array ( if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0', 'version' => '5.7.0',
'unifunc' => 'content_6989f7269f97f7_68511256', 'unifunc' => 'content_698b3af030ae20_50383766',
'has_nocache_code' => false, 'has_nocache_code' => false,
'file_dependency' => 'file_dependency' =>
array ( array (
'3848b4db17319a951391d803dc4119c46e490c52' => '3848b4db17319a951391d803dc4119c46e490c52' =>
array ( array (
0 => 'views/_partial/preview.tpl', 0 => 'views/_partial/preview.tpl',
1 => 1770646177, 1 => 1770721040,
2 => 'file', 2 => 'file',
), ),
), ),
@ -20,7 +20,7 @@ if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
array ( array (
), ),
))) { ))) {
function content_6989f7269f97f7_68511256 (\Smarty\Template $_smarty_tpl) { function content_698b3af030ae20_50383766 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views\\_partial'; $_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views\\_partial';
?> ?>

View file

@ -0,0 +1,128 @@
<?php
/* Smarty version 5.7.0, created on 2026-02-10 08:16:16
from 'file:views/projet_display.tpl' */
/* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0',
'unifunc' => 'content_698ae9506da109_21542800',
'has_nocache_code' => false,
'file_dependency' =>
array (
'52c011ce77c5dc743b6591550c55ce4a78a4dbca' =>
array (
0 => 'views/projet_display.tpl',
1 => 1770634036,
2 => 'file',
),
),
'includes' =>
array (
),
))) {
function content_698ae9506da109_21542800 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
$_smarty_tpl->getInheritance()->init($_smarty_tpl, true);
?>
<?php
$_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_919254056698ae95061e435_82964089', "content");
$_smarty_tpl->getInheritance()->endChild($_smarty_tpl, "views/layout.tpl", $_smarty_current_dir);
}
/* {block "content"} */
class Block_919254056698ae95061e435_82964089 extends \Smarty\Runtime\Block
{
public function callBlock(\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
?>
<main class="container mt-5 py-5">
<!-- Message après l'envoi d'email -->
<?php if ((true && (true && null !== ($_GET['mail'] ?? null))) && $_GET['mail'] === 'ok') {?>
<div class="alert alert-success">Email envoyé avec succès.</div>
<?php } elseif ((true && (true && null !== ($_GET['mail'] ?? null))) && $_GET['mail'] === 'fail') {?>
<div class="alert alert-danger">Erreur lors de l'envoi de l'email.</div>
<?php }?>
<div class="row g-4">
<!-- Contenu principal du projet -->
<div class="col-lg-8">
<h1 class="fw-bold"><?php echo $_smarty_tpl->getValue('objProject')->getTitle();?>
</h1>
<p class="text-muted">
<?php echo $_smarty_tpl->getValue('arrProject')['category_name'] ?? 'Général';?>
</p>
<div class="mb-4 shadow-sm">
<img src=".<?php echo $_smarty_tpl->getValue('objProject')->getThumbnail();?>
"
class="img-fluid rounded w-100">
</div>
<div class="bg-light p-4 rounded mb-4">
<h4 class="border-bottom pb-2">Description</h4>
<p class="lead"><?php echo $_smarty_tpl->getValue('objProject')->getDescription();?>
</p>
<div class="mt-4">
<?php echo $_smarty_tpl->getValue('objProject')->getContent();?>
</div>
</div>
<!-- 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">
<input type="hidden" name="project_id"
value="<?php echo $_smarty_tpl->getValue('objProject')->getId();?>
">
<input type="email" name="to_email"
class="form-control mb-3"
placeholder="Adresse email" required>
<button type="submit" class="btn btn-primary w-100">
Envoyer par email
</button>
</form>
</div>
</div>
<!-- Sidebar : informations du créateur -->
<div class="col-lg-4">
<div class="card text-center shadow-sm p-4">
<img src=".<?php echo $_smarty_tpl->getValue('objProject')->getUser_image();?>
"
class="rounded-circle mb-3 mx-auto"
style="width:100px;height:100px;object-fit:cover;">
<h5><?php echo $_smarty_tpl->getValue('objProject')->getCreatorName();?>
</h5>
<p class="text-muted small">
Publié le <?php echo $_smarty_tpl->getValue('objProject')->getCreation_date();?>
</p>
<button class="btn btn-primary">Contacter le talent</button>
</div>
</div>
</div>
</main>
<?php
}
}
/* {/block "content"} */
}

View file

@ -0,0 +1,164 @@
<?php
/* Smarty version 5.7.0, created on 2026-02-10 08:16:41
from 'file:views/login.tpl' */
/* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0',
'unifunc' => 'content_698ae969a7db02_27363144',
'has_nocache_code' => false,
'file_dependency' =>
array (
'5375cd75c92fd8c801b429efee0d6437582d377e' =>
array (
0 => 'views/login.tpl',
1 => 1770634036,
2 => 'file',
),
),
'includes' =>
array (
),
))) {
function content_698ae969a7db02_27363144 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
$_smarty_tpl->getInheritance()->init($_smarty_tpl, true);
?>
<?php
$_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_342031104698ae969942f96_18698715', "content");
$_smarty_tpl->getInheritance()->endChild($_smarty_tpl, "views/layout.tpl", $_smarty_current_dir);
}
/* {block "content"} */
class Block_342031104698ae969942f96_18698715 extends \Smarty\Runtime\Block
{
public function callBlock(\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
?>
<section aria-label="Se connecter">
<?php if ($_smarty_tpl->getSmarty()->getModifierCallback('count')($_smarty_tpl->getValue('arrError')) > 0) {?>
<div class="alert alert-danger">
<?php
$_from = $_smarty_tpl->getSmarty()->getRuntime('Foreach')->init($_smarty_tpl, $_smarty_tpl->getValue('arrError'), 'strError');
$foreach0DoElse = true;
foreach ($_from ?? [] as $_smarty_tpl->getVariable('strError')->value) {
$foreach0DoElse = false;
?>
<p><?php echo $_smarty_tpl->getValue('strError');?>
</p>
<?php
}
$_smarty_tpl->getSmarty()->getRuntime('Foreach')->restore($_smarty_tpl, 1);?>
</div>
<?php }?>
<!-- Contenu principal de la page -->
<main class="container py-5">
<!-- Centrage horizontal du formulaire -->
<div class="row justify-content-center">
<!-- Contenu principal de la page -->
<main class="container py-5">
<!-- Centrage horizontal du formulaire -->
<div class="row justify-content-center">
<div class="col-12 col-md-8 col-lg-5">
<!-- Carte contenant le formulaire de connexion -->
<div class="card shadow-sm border-0 rounded-4 p-4 p-lg-5">
<!-- Titre principal -->
<h1 class="h3 fw-bold mb-1">Connexion</h1>
<!-- Texte descriptif -->
<p class="text-secondary mb-4">
Connectez-vous à votre compte.
</p>
<!-- Formulaire de connexion -->
<!-- Le traitement sera effectué en PHP via la méthode POST -->
<form method="POST">
<div class="row g-3">
<!-- Champ : adresse e-mail de l'utilisateur -->
<div class="col-12">
<label for="user_mail" class="form-label">
Adresse e-mail
</label>
<input
value="<?php echo (($tmp = $_smarty_tpl->getValue('strMail') ?? null)===null||$tmp==='' ? '' ?? null : $tmp);?>
"
type="email"
class="form-control <?php if ((true && (true && null !== ($_smarty_tpl->getValue('arrError')['mail'] ?? null)))) {?>is-invalid<?php }?>"
id="user_mail"
name="user_mail"
required
>
</div>
<!-- Champ : mot de passe -->
<div class="col-12">
<label for="user_password" class="form-label">
Mot de passe
</label>
<input
type="password"
class="form-control <?php if ((true && (true && null !== ($_smarty_tpl->getValue('arrError')['pwd'] ?? null)))) {?>is-invalid<?php }?>"
id="user_password"
name="user_password"
required
>
</div>
<!-- Option "Se souvenir de moi" (fonctionnalité optionnelle côté PHP) -->
<div class="col-12">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="remember_me" name="remember_me">
<label class="form-check-label" for="remember_me">
Se souvenir de moi
</label>
</div>
</div>
<!-- Bouton de soumission du formulaire -->
<div class="col-12 d-grid mt-2">
<button type="submit" class="btn btn-primary btn-lg rounded-3">
Se connecter
</button>
</div>
<!-- Lien vers la page d'inscription -->
<div class="col-12 text-center">
<small class="text-secondary">
Pas encore de compte ?
<a href="index.php?ctrl=user&action=signin" class="link-primary">Créer un compte</a>
</small>
</div>
<!-- Lien pour la récupération du mot de passe -->
<div class="col-12 text-center">
<small>
<a href="#" class="link-primary">
Mot de passe oublié ?
</a>
</small>
</div>
</div>
</form>
</div>
</div>
</div>
</main>
</section>
<?php
}
}
/* {/block "content"} */
}

View file

@ -1,11 +1,11 @@
<?php <?php
/* Smarty version 5.7.0, created on 2026-02-09 15:03:02 /* Smarty version 5.7.0, created on 2026-02-10 15:07:18
from 'file:views/layout.tpl' */ from 'file:views/layout.tpl' */
/* @var \Smarty\Template $_smarty_tpl */ /* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array ( if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0', 'version' => '5.7.0',
'unifunc' => 'content_6989f726914163_83904848', 'unifunc' => 'content_698b49a6a1f282_93718699',
'has_nocache_code' => false, 'has_nocache_code' => false,
'file_dependency' => 'file_dependency' =>
array ( array (
@ -22,21 +22,21 @@ if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'file:views/_partial/footer.tpl' => 1, 'file:views/_partial/footer.tpl' => 1,
), ),
))) { ))) {
function content_6989f726914163_83904848 (\Smarty\Template $_smarty_tpl) { function content_698b49a6a1f282_93718699 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views'; $_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views';
$_smarty_tpl->getInheritance()->init($_smarty_tpl, false); $_smarty_tpl->getInheritance()->init($_smarty_tpl, false);
$_smarty_tpl->renderSubTemplate("file:views/_partial/header.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, 0, $_smarty_tpl->cache_lifetime, array(), (int) 0, $_smarty_current_dir); $_smarty_tpl->renderSubTemplate("file:views/_partial/header.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, 0, $_smarty_tpl->cache_lifetime, array(), (int) 0, $_smarty_current_dir);
?> ?>
<?php <?php
$_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_14089017836989f726912e95_86271581', "content"); $_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_1448432322698b49a6a1df69_22260225', "content");
?> ?>
<?php $_smarty_tpl->renderSubTemplate("file:views/_partial/footer.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, 0, $_smarty_tpl->cache_lifetime, array(), (int) 0, $_smarty_current_dir); <?php $_smarty_tpl->renderSubTemplate("file:views/_partial/footer.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, 0, $_smarty_tpl->cache_lifetime, array(), (int) 0, $_smarty_current_dir);
} }
/* {block "content"} */ /* {block "content"} */
class Block_14089017836989f726912e95_86271581 extends \Smarty\Runtime\Block class Block_1448432322698b49a6a1df69_22260225 extends \Smarty\Runtime\Block
{ {
public function callBlock(\Smarty\Template $_smarty_tpl) { public function callBlock(\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views'; $_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views';

View file

@ -1,18 +1,18 @@
<?php <?php
/* Smarty version 5.7.0, created on 2026-02-09 15:03:02 /* Smarty version 5.7.0, created on 2026-02-10 14:04:32
from 'file:views/home.tpl' */ from 'file:views/home.tpl' */
/* @var \Smarty\Template $_smarty_tpl */ /* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array ( if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0', 'version' => '5.7.0',
'unifunc' => 'content_6989f72687e0c8_78461032', 'unifunc' => 'content_698b3af017bda3_81099221',
'has_nocache_code' => false, 'has_nocache_code' => false,
'file_dependency' => 'file_dependency' =>
array ( array (
'7e6dbbb1e41ad859e7f5b7b444b7670474263f88' => '7e6dbbb1e41ad859e7f5b7b444b7670474263f88' =>
array ( array (
0 => 'views/home.tpl', 0 => 'views/home.tpl',
1 => 1770639154, 1 => 1770721040,
2 => 'file', 2 => 'file',
), ),
), ),
@ -21,20 +21,20 @@ if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'file:views/_partial/preview.tpl' => 1, 'file:views/_partial/preview.tpl' => 1,
), ),
))) { ))) {
function content_6989f72687e0c8_78461032 (\Smarty\Template $_smarty_tpl) { function content_698b3af017bda3_81099221 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views'; $_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views';
$_smarty_tpl->getInheritance()->init($_smarty_tpl, true); $_smarty_tpl->getInheritance()->init($_smarty_tpl, true);
?> ?>
<?php <?php
$_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_15962470546989f72687a521_39502617', "content"); $_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_856983399698b3af0178228_49803206', "content");
?> ?>
<?php $_smarty_tpl->getInheritance()->endChild($_smarty_tpl, "views/layout.tpl", $_smarty_current_dir); <?php $_smarty_tpl->getInheritance()->endChild($_smarty_tpl, "views/layout.tpl", $_smarty_current_dir);
} }
/* {block "content"} */ /* {block "content"} */
class Block_15962470546989f72687a521_39502617 extends \Smarty\Runtime\Block class Block_856983399698b3af0178228_49803206 extends \Smarty\Runtime\Block
{ {
public function callBlock(\Smarty\Template $_smarty_tpl) { public function callBlock(\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views'; $_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views';
@ -48,6 +48,19 @@ $_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views';
directement en contact avec les entreprises.</p> directement en contact avec les entreprises.</p>
</section> </section>
<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">
<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>
</form>
</div>
</section>
<section class="container" aria-label="Articles récents"> <section class="container" aria-label="Articles récents">
<h2 class="visually-hidden">Les 4 derniers articles</h2> <h2 class="visually-hidden">Les 4 derniers articles</h2>
<div class="row mb-2"> <div class="row mb-2">

View file

@ -0,0 +1,50 @@
<?php
/* Smarty version 5.7.0, created on 2026-02-10 08:32:47
from 'file:views/layout.tpl' */
/* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0',
'unifunc' => 'content_698aed2fd402f7_78850375',
'has_nocache_code' => false,
'file_dependency' =>
array (
'947d9aa54bf412a952e2af2d8a8255035d91b950' =>
array (
0 => 'views/layout.tpl',
1 => 1770634036,
2 => 'file',
),
),
'includes' =>
array (
'file:views/_partial/header.tpl' => 1,
'file:views/_partial/footer.tpl' => 1,
),
))) {
function content_698aed2fd402f7_78850375 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
$_smarty_tpl->getInheritance()->init($_smarty_tpl, false);
$_smarty_tpl->renderSubTemplate("file:views/_partial/header.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, 0, $_smarty_tpl->cache_lifetime, array(), (int) 0, $_smarty_current_dir);
?>
<?php
$_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_691069574698aed2fd3d8f8_28027733', "content");
?>
<?php $_smarty_tpl->renderSubTemplate("file:views/_partial/footer.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, 0, $_smarty_tpl->cache_lifetime, array(), (int) 0, $_smarty_current_dir);
}
/* {block "content"} */
class Block_691069574698aed2fd3d8f8_28027733 extends \Smarty\Runtime\Block
{
public function callBlock(\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
?>
<?php
}
}
/* {/block "content"} */
}

View file

@ -0,0 +1,235 @@
<?php
/* Smarty version 5.7.0, created on 2026-02-10 08:32:47
from 'file:views/admin.tpl' */
/* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0',
'unifunc' => 'content_698aed2fac7079_66630300',
'has_nocache_code' => false,
'file_dependency' =>
array (
'ac77f39f91cdf26a0eb3f0963ead4008a7bda8fb' =>
array (
0 => 'views/admin.tpl',
1 => 1770712365,
2 => 'file',
),
),
'includes' =>
array (
),
))) {
function content_698aed2fac7079_66630300 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
$_smarty_tpl->getInheritance()->init($_smarty_tpl, true);
?>
<?php
$_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_701047722698aed2faa98f9_91663021', "content");
$_smarty_tpl->getInheritance()->endChild($_smarty_tpl, "views/layout.tpl", $_smarty_current_dir);
}
/* {block "content"} */
class Block_701047722698aed2faa98f9_91663021 extends \Smarty\Runtime\Block
{
public function callBlock(\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
?>
<section class="sb-nav-fixed">
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
<a class="navbar-brand ps-3" href="index.php?ctrl=project&action=home"><img src="assests/img/Logo-Wordmark.svg" alt="Logo du site" width="150px"></a>
<button class="btn btn-link btn-sm order-1 order-lg-0 me-4 me-lg-0" id="sidebarToggle" href="#!"><i class="fas fa-bars"></i></button>
<form class="d-none d-md-inline-block form-inline ms-auto me-0 me-md-3 my-2 my-md-0">
<div class="input-group">
<input class="form-control" type="text" placeholder="Recherche par pseudo..." aria-label="Recherche pseudo" aria-describedby="btnNavbarSearch" />
<button class="btn btn-primary" id="btnNavbarSearch" type="button"><i class="fas fa-search"></i></button>
</div>
</form>
<!-- Navbar - User-->
<ul class="navbar-nav ms-auto ms-md-0 me-3 me-lg-4">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdown" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"><i class="fas fa-user fa-fw"></i></a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
<li><a class="dropdown-item" href="/option.php">Paramètre</a></li>
<li><hr class="dropdown-divider" /></li>
<li><a class="dropdown-item" href="/deconnexion.php">Déconnexion</a></li>
</ul>
</li>
</ul>
</nav>
<!-- SideNav Infos -->
<div id="layoutSidenav">
<div id="layoutSidenav_nav">
<nav class="sb-sidenav accordion sb-sidenav-dark" id="sidenavAccordion">
<div class="sb-sidenav-menu">
<div class="nav">
<div class="sb-sidenav-menu-heading"></div>
<a class="nav-link" href="index.html">
<div class="sb-nav-link-icon"><i class="fas fa-tachometer-alt"></i></div>
Rafraichir la page
</a>
<div class="sb-sidenav-menu-heading"></div>
<div class="collapse" id="collapseLayouts" aria-labelledby="headingOne" data-bs-parent="#sidenavAccordion">
</div>
<form action="post">
<div class="container-fluid ps-2">
<div class="row">
<div class="col-6">
<label for="checkbox1">Par date</label>
</div>
<div class="col-6 text-center">
<input type="checkbox" name="search_date" id="">
</div>
<div class="col-6">
<label for="checkbox2">Par date de creation de compte</label>
</div>
<div class="col-6 text-center">
<input type="checkbox" name="search_creationdate" id="">
</div>
<div class="col-6">
<label for="checkbox3">Recherche par date</label>
</div>
<div class="col-6 text-center">
<input type="checkbox" name="search_date" id="">
</div>
<div class="col-12 text-center">
<button type="submit" class="btn mt-3 bg-primary text-light">Recherche</button>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="sb-sidenav-footer">
<div class="small">Connecté avec le compte : <?php echo $_SESSION['user']['user_name'];?>
<?php echo $_SESSION['user']['user_firstname'];?>
</div>
</div>
</nav>
</div>
<div id="layoutSidenav_content">
<main>
<div class="container-fluid px-4">
<h1 class="mt-4">Dashboard</h1>
<div class="container-fluid px-4">
<!-- USER MODIF -->
<div class="p-3 mt-2 text-primary-emphasis bg-primary-subtle border border-primary-subtle rounded-3">
<div class="container-fluid pt-2">
<h2>Gestion de l'utilsateur</h2>
<p>Changer le statut ou supprimer un utilisateur</p>
<div class="row">
<div class="col-2">
<img src="./assests/img/Logo-Wordmark.svg" alt="" width="100">
</div>
<form method="POST">
<div class="col-6">
<select class="form-select" aria-label="Default select example" name="user_id">
<option value="0">Choisir un utilisateur</option>
<?php
$_from = $_smarty_tpl->getSmarty()->getRuntime('Foreach')->init($_smarty_tpl, $_smarty_tpl->getValue('arrUserToDisplay'), 'user');
$foreach0DoElse = true;
foreach ($_from ?? [] as $_smarty_tpl->getVariable('user')->value) {
$foreach0DoElse = false;
?>
<option value="<?php echo $_smarty_tpl->getValue('user')->getId();?>
"><?php echo $_smarty_tpl->getValue('user')->getName();?>
<?php echo $_smarty_tpl->getValue('user')->getFirstname();?>
</option>
<?php
}
$_smarty_tpl->getSmarty()->getRuntime('Foreach')->restore($_smarty_tpl, 1);?>
</select>
<select class="form-select" aria-label="Default select example" name="new_status">
<option value="0" selected>Modifier le statut de l'Utilisateur...</option>
<?php
$_from = $_smarty_tpl->getSmarty()->getRuntime('Foreach')->init($_smarty_tpl, $_smarty_tpl->getValue('arrAuthorisationToDisplay'), 'arrDetAuthorisation');
$foreach1DoElse = true;
foreach ($_from ?? [] as $_smarty_tpl->getVariable('arrDetAuthorisation')->value) {
$foreach1DoElse = false;
?>
<option value="<?php echo $_smarty_tpl->getValue('arrDetAuthorisation')->getId();?>
"><?php echo $_smarty_tpl->getValue('arrDetAuthorisation')->getName();?>
</option>
<?php
}
$_smarty_tpl->getSmarty()->getRuntime('Foreach')->restore($_smarty_tpl, 1);?>
</select>
</div>
<div class="col-2">
<button type="submit" name="action" value="update_status" class="btn bg-success text-light"> Valider</button>
<button type="submit" name="action" value="delete_user" class="btn bg-danger text-light">Supprimer l'utilisateur</button>
</div>
</form>
</div>
</div>
</div>
<!-- catégorie modif -->
<div class="p-3 mt-2 text-primary-emphasis bg-primary-subtle border border-primary-subtle rounded-3">
<div class="container-fluid pt-2">
<h2>Gestion des catégories</h2>
<div class="row">
<div class="col-6">
<form method="post">
<p>Modifier une catégorie existante</p>
<select class="form-select" aria-label="Default select example" name="id_to_edit">
<option value="0">Choix de la catégorie</option>
<?php
$_from = $_smarty_tpl->getSmarty()->getRuntime('Foreach')->init($_smarty_tpl, $_smarty_tpl->getValue('arrCategoryToDisplay'), 'category');
$foreach2DoElse = true;
foreach ($_from ?? [] as $_smarty_tpl->getVariable('category')->value) {
$foreach2DoElse = false;
?>
<option value="<?php echo $_smarty_tpl->getValue('category')->getId();?>
"><?php echo $_smarty_tpl->getValue('category')->getName();?>
</option>
<?php
}
$_smarty_tpl->getSmarty()->getRuntime('Foreach')->restore($_smarty_tpl, 1);?>
</select>
<br>
<div class="form-floating mb-3">
<input type="text" class="form-control" id="floatingInput" name="new_name">
<label for="floatingInput">Nouveau nom de la catégorie</label>
</div>
<button type="submit" class="btn bg-success text-light rounded-circle"> </button>
</form>
<div>
</div>
<br>
<br>
<div class="row">
<!-- creation cat-->
<div class="col-6">
<form method="POST">
<p>Créer une nouvelle catégorie</p>
<div class="form-floating mb-3">
<input type="text" class="form-control" id="floatingInput" name="new_category">
<label for="floatingInput">Nom de la nouvelle catégorie</label>
</div>
<div class="col-2">
<button type="submit" class="btn bg-success text-light rounded-circle"> </button>
</div>
</form>
</div>
</div>
</div>
</form>
</div>
</div>
</main>
</div>
</section>
<?php
}
}
/* {/block "content"} */
}

View file

@ -0,0 +1,63 @@
<?php
/* Smarty version 5.7.0, created on 2026-02-10 08:32:47
from 'file:views/_partial/footer.tpl' */
/* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0',
'unifunc' => 'content_698aed2fea7fd1_77495932',
'has_nocache_code' => false,
'file_dependency' =>
array (
'b1b065356827f03a32a2809f87f59bd19d86da99' =>
array (
0 => 'views/_partial/footer.tpl',
1 => 1770634036,
2 => 'file',
),
),
'includes' =>
array (
),
))) {
function content_698aed2fea7fd1_77495932 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views\\_partial';
?>
<footer class="footer container-fluid d-flex justify-content-around">
<div class="col-3">
<ul>
<li><a href="#">Découvrir</a>
<li><a href="#">Customisation</a>
<li><a href="#">Emploi</a>
<li><a href="#">A propos</a>
</ul>
</div>
<div class="col-3">
<ul>
<li><a href="#">Recruter</a>
<li><a href="#">Partenariat</a>
<li><a href="#">Blog</a>
<li><a href="#">Aide et support</a>
</ul>
</div>
<div class="col-3">
<ul>
<li><a href="#">Politique de confidentialité</a>
<li><a href="#">Politique sur les données</a>
<li><a href="#">CGU</a>
<li><a href="#">CGV</a>
</ul>
</div>
<div class="col-3">
<p>Suivez-nous</p>
</div>
</footer>
<?php echo '<script'; ?>
src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"><?php echo '</script'; ?>
>
<?php echo '<script'; ?>
src="js/scripts.js"><?php echo '</script'; ?>
>
</body>
</html><?php }
}

View file

@ -0,0 +1,115 @@
<?php
/* Smarty version 5.7.0, created on 2026-02-10 08:32:47
from 'file:views/_partial/header.tpl' */
/* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0',
'unifunc' => 'content_698aed2fe0e338_92194390',
'has_nocache_code' => false,
'file_dependency' =>
array (
'b3c0a235f975d8741b25531347290b4e4994470b' =>
array (
0 => 'views/_partial/header.tpl',
1 => 1770634036,
2 => 'file',
),
),
'includes' =>
array (
),
))) {
function content_698aed2fe0e338_92194390 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views\\_partial';
?><!DOCTYPE html>
<html lang="fr">
<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="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous">
<?php echo '<script'; ?>
src="https://use.fontawesome.com/releases/v6.3.0/js/all.js" crossorigin="anonymous"><?php echo '</script'; ?>
>
<title>Folliow</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light">
<div class="container-fluid">
<a class="navbar-brand d-flex align-items-center" href="#">
<img src="assests/img/logo.png" alt="Logo" class="logo-image">
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link" href="?ctrl=&action=">Découvrir</a>
</li>
<li class="nav-item">
<a class="nav-link" href="?ctrl=&action=">Customisation</a>
</li>
<li class="nav-item">
<a class="nav-link" href="?ctrl=&action=">Orientation</a>
</li>
<li class="nav-item">
<a class="nav-link" href="?ctrl=&action=">À propos</a>
</li>
<li class="nav-item">
<a class="nav-link" href="?ctrl=project&action=search">Rechercher</a>
</li>
<?php if ((true && (true && null !== ($_SESSION['user'] ?? null)))) {?>
<?php if ($_SESSION['user']['authorisation_name'] == "Administrateur") {?>
<li class="nav-item">
<a class="nav-link" href="?ctrl=admin&action=admin">Admin</a>
</li>
<?php }?>
<?php }?>
</ul>
<nav class="col-4 d-flex justify-content-end align-items-center" aria-label="Connexion utilisateur">
<?php if (!(true && (true && null !== ($_SESSION['user'] ?? null)))) {?>
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="index.php?ctrl=user&action=signin" 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" title="Se connecter" aria-label="Se connecter">
Se connecter
</a>
</li>
</ul>
<?php } else { ?>
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="edit_account.php" title="Modifier mon compte" aria-label="Modifier mon compte">
<img src=".<?php echo $_SESSION['user']['user_image'];?>
"
class="rounded-circle flex-shrink-0 mt-2 ml-5"
style="width: 36px; height: 36px; object-fit: cover;"
alt="Photo de profil">
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="index.php?ctrl=user&action=logout" title="Se déconnecter" aria-label="Se déconnecter">
Logout
</a>
</li>
</ul>
<?php }?>
</nav>
</div>
</div>
</nav>
</body>
</html><?php }
}

View file

@ -0,0 +1,69 @@
<?php
/* Smarty version 5.7.0, created on 2026-02-10 08:16:45
from 'file:views/_partial/preview.tpl' */
/* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0',
'unifunc' => 'content_698ae96d52fa95_22666517',
'has_nocache_code' => false,
'file_dependency' =>
array (
'b70ee0d22061ca6100f647634a5658ae38c7b520' =>
array (
0 => 'views/_partial/preview.tpl',
1 => 1770634036,
2 => 'file',
),
),
'includes' =>
array (
),
))) {
function content_698ae96d52fa95_22666517 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views\\_partial';
?>
<article class="col-md-3 mb-4">
<div class="card h-100 shadow-sm article-card">
<div class="ratio ratio-16x9">
<img src=".<?php echo $_smarty_tpl->getValue('objProject')->getThumbnail();?>
"
class="w-100 h-100 object-fit-cover"
alt=""
loading="lazy">
</div>
<div class="d-flex align-items-start gap-3">
<img src=".<?php echo $_smarty_tpl->getValue('objProject')->getUser_image();?>
"
class="rounded-circle flex-shrink-0 mt-2 ml-5"
style="width: 48px; height: 48px; object-fit: cover;"
alt="Photo de profil">
<div class="flex-grow-1 card-body p-3">
<h3 class="h6 mb-1"><?php echo $_smarty_tpl->getValue('objProject')->getTitle();?>
</h3>
<small class="text-body-secondary d-block mb-1">
<time><?php echo $_smarty_tpl->getValue('objProject')->getCreation_date();?>
</time>
<?php echo $_smarty_tpl->getValue('objProject')->getCreatorname();?>
</small>
<a href="index.php?ctrl=project&action=display&id=<?php echo $_smarty_tpl->getValue('objProject')->getId();?>
"
class="stretched-link small">
Lire la suite
</a>
</div>
</div>
</div>
</article><?php }
}

View file

@ -1,11 +1,11 @@
<?php <?php
/* Smarty version 5.7.0, created on 2026-02-09 15:02:52 /* Smarty version 5.7.0, created on 2026-02-10 14:04:25
from 'file:views/login.tpl' */ from 'file:views/login.tpl' */
/* @var \Smarty\Template $_smarty_tpl */ /* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array ( if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0', 'version' => '5.7.0',
'unifunc' => 'content_6989f71c761896_25894348', 'unifunc' => 'content_698b3ae98ff4a6_44263627',
'has_nocache_code' => false, 'has_nocache_code' => false,
'file_dependency' => 'file_dependency' =>
array ( array (
@ -20,18 +20,18 @@ if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
array ( array (
), ),
))) { ))) {
function content_6989f71c761896_25894348 (\Smarty\Template $_smarty_tpl) { function content_698b3ae98ff4a6_44263627 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views'; $_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views';
$_smarty_tpl->getInheritance()->init($_smarty_tpl, true); $_smarty_tpl->getInheritance()->init($_smarty_tpl, true);
?> ?>
<?php <?php
$_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_19992775976989f71c758fc2_34188356', "content"); $_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_1193104747698b3ae98f71d7_06580866', "content");
$_smarty_tpl->getInheritance()->endChild($_smarty_tpl, "views/layout.tpl", $_smarty_current_dir); $_smarty_tpl->getInheritance()->endChild($_smarty_tpl, "views/layout.tpl", $_smarty_current_dir);
} }
/* {block "content"} */ /* {block "content"} */
class Block_19992775976989f71c758fc2_34188356 extends \Smarty\Runtime\Block class Block_1193104747698b3ae98f71d7_06580866 extends \Smarty\Runtime\Block
{ {
public function callBlock(\Smarty\Template $_smarty_tpl) { public function callBlock(\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views'; $_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views';

View file

@ -0,0 +1,84 @@
<?php
/* Smarty version 5.7.0, created on 2026-02-10 08:16:45
from 'file:views/home.tpl' */
/* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0',
'unifunc' => 'content_698ae96d2e58d9_91616548',
'has_nocache_code' => false,
'file_dependency' =>
array (
'ca790de9f8d5a4fc03b03b8d137ec1edb99bdd92' =>
array (
0 => 'views/home.tpl',
1 => 1770711346,
2 => 'file',
),
),
'includes' =>
array (
'file:views/_partial/preview.tpl' => 1,
),
))) {
function content_698ae96d2e58d9_91616548 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
$_smarty_tpl->getInheritance()->init($_smarty_tpl, true);
?>
<?php
$_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_826938963698ae96d2e14b1_12340515', "content");
?>
<?php $_smarty_tpl->getInheritance()->endChild($_smarty_tpl, "views/layout.tpl", $_smarty_current_dir);
}
/* {block "content"} */
class Block_826938963698ae96d2e14b1_12340515 extends \Smarty\Runtime\Block
{
public function callBlock(\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
?>
<section class="container mt-5 p-5 d-flex flex-column align-items-center text-center">
<h1 class="logo">Folliow</h1>
<h2> les talents rencontrent leur avenir</h2>
<p class="col-6">Une plateforme de portfolio adapté à vos besoins et aux besoins des entreprises.
Créer un portfolio réellement pertinent aux exigences du marché et rentrez
directement en contact avec les entreprises.</p>
</section>
<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">
<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>
</form>
</div>
</section>
<section class="container" aria-label="Articles récents">
<h2 class="visually-hidden">Les 4 derniers articles</h2>
<div class="row mb-2">
<?php
$_from = $_smarty_tpl->getSmarty()->getRuntime('Foreach')->init($_smarty_tpl, $_smarty_tpl->getValue('arrProjectToDisplay'), 'objProject');
$foreach0DoElse = true;
foreach ($_from ?? [] as $_smarty_tpl->getVariable('objProject')->value) {
$foreach0DoElse = false;
?>
<?php $_smarty_tpl->renderSubTemplate("file:views/_partial/preview.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, 0, $_smarty_tpl->cache_lifetime, array(), (int) 0, $_smarty_current_dir);
?>
<?php
}
$_smarty_tpl->getSmarty()->getRuntime('Foreach')->restore($_smarty_tpl, 1);?>
</section>
<?php
}
}
/* {/block "content"} */
}

View file

@ -1,11 +1,11 @@
<?php <?php
/* Smarty version 5.7.0, created on 2026-02-09 15:03:02 /* Smarty version 5.7.0, created on 2026-02-10 15:07:18
from 'file:views/_partial/footer.tpl' */ from 'file:views/_partial/footer.tpl' */
/* @var \Smarty\Template $_smarty_tpl */ /* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array ( if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0', 'version' => '5.7.0',
'unifunc' => 'content_6989f726ac4850_67307943', 'unifunc' => 'content_698b49a6b1a9a1_35918373',
'has_nocache_code' => false, 'has_nocache_code' => false,
'file_dependency' => 'file_dependency' =>
array ( array (
@ -20,7 +20,7 @@ if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
array ( array (
), ),
))) { ))) {
function content_6989f726ac4850_67307943 (\Smarty\Template $_smarty_tpl) { function content_698b49a6b1a9a1_35918373 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views\\_partial'; $_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views\\_partial';
?> ?>
<footer class="footer container-fluid d-flex justify-content-around"> <footer class="footer container-fluid d-flex justify-content-around">

View file

@ -0,0 +1,123 @@
<?php
/* Smarty version 5.7.0, created on 2026-02-10 15:07:18
from 'file:views/project.tpl' */
/* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0',
'unifunc' => 'content_698b49a6958128_21190238',
'has_nocache_code' => false,
'file_dependency' =>
array (
'e3f999d4206c004969123c0e3f74733796438d51' =>
array (
0 => 'views/project.tpl',
1 => 1770734029,
2 => 'file',
),
),
'includes' =>
array (
'file:../app/views/partials/preview.tpl' => 1,
),
))) {
function content_698b49a6958128_21190238 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views';
$_smarty_tpl->getInheritance()->init($_smarty_tpl, true);
?>
<?php
$_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_733012504698b49a694f3a4_14549542', "content");
$_smarty_tpl->getInheritance()->endChild($_smarty_tpl, "views/layout.tpl", $_smarty_current_dir);
}
/* {block "content"} */
class Block_733012504698b49a694f3a4_14549542 extends \Smarty\Runtime\Block
{
public function callBlock(\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\Folliow\\projet_php-guillaume\\views';
?>
<body>
<section class="container mt-5 p-5 d-flex flex-column align-items-center">
<div>
<h2>Alimenter votre projet</h2>
<form method="post">
<button type="submit" class="btn btn-primary btn-lg" name="showForm">+</button>
<?php if ((true && (true && null !== ($_POST['toContinue'] ?? null)))) {?>
<button type="submit" class="btn btn-warning btn-lg" name="showFormContinue">Reprendre</button>
<?php }?>
</form>
<?php if ((true && (true && null !== ($_POST['showForm'] ?? null))) || (true && (true && null !== ($_POST['showFormContinue'] ?? null)))) {?>
<?php if ((true && (true && null !== ($_SESSION['user'] ?? null)))) {?>
<form class="m-2" method="post" enctype="multipart/form-data" onsubmit="return confirm('Voulez-vous vraiment envoyer le formulaire ?')">
<div>
<label>Titre</label>
<input type="text" name="titleProject">
</div>
<div>
<label>Description</label>
<input type="text" name="descProject">
</div>
<div>
<label>Texte Portfolio</label>
<input type="text" name="textProject">
</div>
<div>
<h3>Image thumbnail</h3>
<input name="imageThumbnail" class="form-control" type="file">
</div>
<div>
<h3>Image du projet</h3>
<input name="imageProject" class="form-control" type="file">
</div>
<div class="mt-2">
<button type="submit" class="btn btn-primary btn-md" name="sendMessage">Envoyer</button>
<button type="submit" class="btn btn-warning btn-md" name="toContinue">Remettre à plus tard</button>
</div>
</form>
<?php } else { ?>
<div class="border rounded mt-5">
<p class="text-danger p-2">Vous devez vous connecter pour accéder à cette fonctionnalité</p>
</div>
<?php }?>
<?php }?>
</div>
<div>
<h3>Description</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
<div>
<h3>Photos behind the scene</h3>
<div class="row mb-2">
<img>
</div>
</div>
<div>
<h3>Other projects</h3>
<div class="row mb-2">
<?php
$_from = $_smarty_tpl->getSmarty()->getRuntime('Foreach')->init($_smarty_tpl, $_smarty_tpl->getValue('arrProjectToDisplay'), 'objProject');
$foreach0DoElse = true;
foreach ($_from ?? [] as $_smarty_tpl->getVariable('objProject')->value) {
$foreach0DoElse = false;
?>
<?php $_smarty_tpl->renderSubTemplate("file:../app/views/partials/preview.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, 0, $_smarty_tpl->cache_lifetime, array(), (int) 0, $_smarty_current_dir);
?>
<?php
}
$_smarty_tpl->getSmarty()->getRuntime('Foreach')->restore($_smarty_tpl, 1);?>
</div>
</div>
</div>
<section>
</body>
<?php
}
}
/* {/block "content"} */
}

View file

@ -0,0 +1,261 @@
<?php
/* Smarty version 5.7.0, created on 2026-02-10 07:13:04
from 'file:views/search.tpl' */
/* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0',
'unifunc' => 'content_698ada80e47fc8_23614044',
'has_nocache_code' => false,
'file_dependency' =>
array (
'ebfd968608976813e893f497c64277110a78bc40' =>
array (
0 => 'views/search.tpl',
1 => 1770634036,
2 => 'file',
),
),
'includes' =>
array (
'file:views/_partial/preview.tpl' => 1,
),
))) {
function content_698ada80e47fc8_23614044 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
$_smarty_tpl->getInheritance()->init($_smarty_tpl, true);
?>
<?php
$_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_1614324265698ada80a61e02_00521357', "content");
$_smarty_tpl->getInheritance()->endChild($_smarty_tpl, "views/layout.tpl", $_smarty_current_dir);
}
/* {block "content"} */
class Block_1614324265698ada80a61e02_00521357 extends \Smarty\Runtime\Block
{
public function callBlock(\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
?>
<section aria-label="Blog">
<h2 class="visually-hidden">Rechercher parmi les articles</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">
<h3 id="search-heading" class="h4 mb-4">
<i class="fas fa-search me-2" aria-hidden="true"></i>
Rechercher des articles
</h3>
<div class="row g-3">
<div class="col-md-6">
<label for="keywords" class="form-label">Mots-clés</label>
<input
value=""
type="text"
class="form-control"
id="keywords"
name="keywords"
placeholder="Ex: JavaScript, CSS..."
aria-describedby="keywords-help">
<small id="keywords-help" class="form-text text-muted">
Recherchez dans les titres et contenus
</small>
</div>
<div class="col-md-6">
<label for="author" class="form-label">Auteur</label>
<select class="form-select" id="author" name="author">
<option value="0" <?php if ($_smarty_tpl->getValue('intAuthor') == 0) {?>selected<?php }?>>Tous les auteurs</option>
<?php
$_from = $_smarty_tpl->getSmarty()->getRuntime('Foreach')->init($_smarty_tpl, $_smarty_tpl->getValue('arrUser'), 'arrDetUser');
$foreach0DoElse = true;
foreach ($_from ?? [] as $_smarty_tpl->getVariable('arrDetUser')->value) {
$foreach0DoElse = false;
?>
<option value="<?php echo $_smarty_tpl->getValue('arrDetUser')['user_id'];?>
"
<?php if ($_smarty_tpl->getValue('intAuthor') == $_smarty_tpl->getValue('arrDetUser')['user_id']) {?>selected<?php }?>
>
<?php echo $_smarty_tpl->getValue('arrDetUser')['user_firstname'];?>
<?php echo $_smarty_tpl->getValue('arrDetUser')['user_name'];?>
</option>
<?php
}
$_smarty_tpl->getSmarty()->getRuntime('Foreach')->restore($_smarty_tpl, 1);?>
</select>
</div>
<div class="col-6">
<fieldset>
<legend class="form-label">Type de recherche par date</legend>
<div class="form-check form-check-inline">
<input
class="form-check-input"
type="radio"
name="period"
id="period-exact"
value="0"
<?php if ($_smarty_tpl->getValue('intPeriod') == 0) {?>checked<?php }?>
aria-controls="date-exact date-range">
<label class="form-check-label" for="period-exact">
Date exacte
</label>
</div>
<div class="form-check form-check-inline">
<input
class="form-check-input"
type="radio"
name="period"
id="period-range"
value="1"
<?php if ($_smarty_tpl->getValue('intPeriod') == 1) {?>checked<?php }?>
aria-controls="date-exact date-range">
<label class="form-check-label" for="period-range">
Période
</label>
</div>
</fieldset>
</div>
<!-- AJOUT RECHERCHE PAR CATEGORIE -->
<div class="col-6">
<fieldset>
<legend class="form-label">Type de recherche par catégories</legend>
<div class="col-md-6">
<label for="author" class="form-label">Catégorie</label>
<select class="form-select" id="category" name="category">
<option value="0" <?php if ($_smarty_tpl->getValue('intCategory') == 0) {?>selected<?php }?>>Toutes les catégories</option>
<?php
$_from = $_smarty_tpl->getSmarty()->getRuntime('Foreach')->init($_smarty_tpl, $_smarty_tpl->getValue('arrCategory'), 'arrDetCategory');
$foreach1DoElse = true;
foreach ($_from ?? [] as $_smarty_tpl->getVariable('arrDetCategory')->value) {
$foreach1DoElse = false;
?>
<option value="<?php echo $_smarty_tpl->getValue('arrDetCategory')['category_id'];?>
"
<?php if ($_smarty_tpl->getValue('intCategory') == $_smarty_tpl->getValue('arrDetCategory')['category_id']) {?>selected<?php }?>
>
<?php echo $_smarty_tpl->getValue('arrDetCategory')['category_name'];?>
</option>
<?php
}
$_smarty_tpl->getSmarty()->getRuntime('Foreach')->restore($_smarty_tpl, 1);?>
</select>
</div>
</fieldset>
</div>
<div class="col-md-6" id="date-exact">
<label for="date" class="form-label">Date</label>
<input
type="date"
class="form-control"
id="date"
name="date"
aria-describedby="date-help"
value="<?php echo $_smarty_tpl->getValue('strDate');?>
" >
<small id="date-help" class="form-text text-muted">
Format: JJ/MM/AAAA
</small>
</div>
<div id="date-range" style="display: none;">
<div class="row g-3">
<div class="col-md-6">
<label for="startdate" class="form-label">Date de début</label>
<input
type="date"
class="form-control"
id="startdate"
name="startdate"
value="<?php echo $_smarty_tpl->getValue('strStartDate');?>
" >
</div>
<div class="col-md-6">
<label for="enddate" class="form-label">Date de fin</label>
<input
type="date"
class="form-control"
id="enddate"
name="enddate"
value="<?php echo $_smarty_tpl->getValue('strEndDate');?>
" >
</div>
</div>
</div>
<div class="col-12">
<button type="submit" class="btn btn-primary">
<i class="fas fa-search me-2" aria-hidden="true"></i>
Rechercher
</button>
<button type="reset" class="btn btn-secondary ms-2">
<i class="fas fa-redo me-2" aria-hidden="true"></i>
Réinitialiser
</button>
</div>
</div>
</form>
</section>
<!-- Liste des articles -->
<section aria-labelledby="articles-heading">
<h3 id="articles-heading" class="visually-hidden">Liste des projets</h3>
<div class="row mb-2">
<?php if ($_smarty_tpl->getSmarty()->getModifierCallback('count')($_smarty_tpl->getValue('arrProject')) == 0) {?>
<div class="alert alert-warning">
<p>Pas de résultats</p>
</div>
<?php }?>
<?php
$_from = $_smarty_tpl->getSmarty()->getRuntime('Foreach')->init($_smarty_tpl, $_smarty_tpl->getValue('arrProjectToDisplay'), 'objProject');
$foreach2DoElse = true;
foreach ($_from ?? [] as $_smarty_tpl->getVariable('objProject')->value) {
$foreach2DoElse = false;
?>
<?php $_smarty_tpl->renderSubTemplate("file:views/_partial/preview.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, 0, $_smarty_tpl->cache_lifetime, array(), (int) 0, $_smarty_current_dir);
?>
<?php
}
$_smarty_tpl->getSmarty()->getRuntime('Foreach')->restore($_smarty_tpl, 1);?>
</div>
</section>
</div>
</section>
<?php echo '<script'; ?>
>
// Gestion de l'affichage des champs de date
const periodRadios = document.querySelectorAll('input[name="period"]');
const dateExact = document.getElementById('date-exact');
const dateRange = document.getElementById('date-range');
function toggleDateFields() {
const selectedPeriod = document.querySelector('input[name="period"]:checked').value;
if (selectedPeriod === '0') {
dateExact.style.display = 'block';
dateRange.style.display = 'none';
} else {
dateExact.style.display = 'none';
dateRange.style.display = 'block';
}
}
periodRadios.forEach(radio => {
radio.addEventListener('change', toggleDateFields);
});
// Initialisation au chargement
toggleDateFields();
<?php echo '</script'; ?>
>
<?php
}
}
/* {/block "content"} */
}

View file

@ -0,0 +1,218 @@
<?php
/* Smarty version 5.7.0, created on 2026-02-09 14:49:06
from 'file:views/inscription.tpl' */
/* @var \Smarty\Template $_smarty_tpl */
if ($_smarty_tpl->getCompiled()->isFresh($_smarty_tpl, array (
'version' => '5.7.0',
'unifunc' => 'content_6989f3e29dbce4_20550543',
'has_nocache_code' => false,
'file_dependency' =>
array (
'ee86afd5d4dff200944f3436866afa34a71b920e' =>
array (
0 => 'views/inscription.tpl',
1 => 1770634036,
2 => 'file',
),
),
'includes' =>
array (
),
))) {
function content_6989f3e29dbce4_20550543 (\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
$_smarty_tpl->getInheritance()->init($_smarty_tpl, true);
?>
<?php
$_smarty_tpl->getInheritance()->instanceBlock($_smarty_tpl, 'Block_18645663486989f3e29da446_83083224', "content");
$_smarty_tpl->getInheritance()->endChild($_smarty_tpl, "views/layout.tpl", $_smarty_current_dir);
}
/* {block "content"} */
class Block_18645663486989f3e29da446_83083224 extends \Smarty\Runtime\Block
{
public function callBlock(\Smarty\Template $_smarty_tpl) {
$_smarty_current_dir = 'C:\\wamp64\\www\\DWWM_2025\\projet2\\views';
?>
<!-- Page : Inscription -->
<main class="container py-5">
<!-- Centrage horizontal du formulaire -->
<div class="row justify-content-center">
<div class="col-12 col-md-10 col-lg-6">
<!-- Carte contenant le formulaire d'inscription -->
<div class="card shadow-sm border-0 rounded-4 p-4 p-lg-5">
<!-- Titre principal de la page -->
<h1 class="h3 fw-bold mb-1">Inscription</h1>
<!-- Texte descriptif -->
<p class="text-secondary mb-4">
Créez votre compte utilisateur.
</p>
<!-- Formulaire d'inscription -->
<!-- Les données seront traitées côté serveur en PHP via la méthode POST -->
<form method="POST">
<div class="row g-3">
<!-- Champ : prénom de l'utilisateur -->
<div class="col-md-6">
<label class="form-label" for="user_firstname">
Prénom *
</label>
<input
class="form-control"
type="text"
id="user_firstname"
name="user_firstname"
required >
</div>
<!-- Champ : nom de l'utilisateur -->
<div class="col-md-6">
<label class="form-label" for="user_name">
Nom *
</label>
<input
class="form-control"
type="text"
id="user_name"
name="user_name"
required
>
</div>
<!-- Champ : pseudo -->
<div class="col-12">
<label class="form-label" for="user_pseudo">
Pseudo *
</label>
<div class="input-group">
<span class="input-group-text">@</span>
<input
class="form-control"
type="text"
id="user_pseudo"
name="user_pseudo"
required
>
</div>
</div>
<!-- Champ : adresse e-mail -->
<div class="col-12">
<label class="form-label" for="user_mail">
Adresse e-mail *
</label>
<input
class="form-control"
type="email"
id="user_mail"
name="user_mail"
required
>
</div>
<!-- Champ : mot de passe -->
<div class="col-12">
<label class="form-label" for="user_password">
Mot de passe *
</label>
<input
class="form-control"
type="password"
id="user_password"
name="user_password"
required
>
</div>
<!-- Champ optionnel : numéro de téléphone -->
<div class="col-12">
<label class="form-label" for="user_phone">
Téléphone
</label>
<input
class="form-control"
type="text"
id="user_phone"
name="user_phone"
>
</div>
<!-- Champ optionnel : profession de l'utilisateur -->
<div class="col-12">
<label class="form-label" for="user_work">
Profession
</label>
<input
class="form-control"
type="text"
id="user_work"
name="user_work"
>
</div>
<!-- Champ optionnel : localisation de l'utilisateur -->
<div class="col-12">
<label class="form-label" for="user_location">
Localisation
</label>
<input
class="form-control"
type="text"
id="user_location"
name="user_location"
>
</div>
<!-- Champ optionnel : phrase d'accroche -->
<div class="col-12">
<label class="form-label" for="user_description">
Phrase d'accroche
</label>
<textarea
class="form-control"
id="user_description"
name="user_description"
rows="3"
></textarea>
</div>
<!-- Bouton de soumission du formulaire -->
<div class="col-12 d-grid mt-2">
<button type="submit" class="btn btn-primary btn-lg rounded-3">
Créer mon compte
</button>
</div>
<!-- Lien vers la page de connexion -->
<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>
</small>
</div>
</form>
</div>
</div>
</div>
</div>
</main>
<?php
}
}
/* {/block "content"} */
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

View file

@ -72,8 +72,7 @@
</div> </div>
</div> </div>
<div class="sb-sidenav-footer"> <div class="sb-sidenav-footer">
<div class="small">Connecté avec le compte :</div> <div class="small">Connecté avec le compte : {$smarty.session.user.user_name} {$smarty.session.user.user_firstname}</div>
{$smarty.session.user.user_name}
</div> </div>
</nav> </nav>
</div> </div>
@ -86,64 +85,74 @@
<!-- USER MODIF --> <!-- USER MODIF -->
<div class="p-3 mt-2 text-primary-emphasis bg-primary-subtle border border-primary-subtle rounded-3"> <div class="p-3 mt-2 text-primary-emphasis bg-primary-subtle border border-primary-subtle rounded-3">
<div class="container-fluid pt-2"> <div class="container-fluid pt-2">
<h2>Gestion de l'utilsateur</h2>
<p>Changer le statut ou supprimer un utilisateur</p>
<div class="row"> <div class="row">
<div class="col-4"> <div class="col-2">
<img src="./assests/img/Logo-Wordmark.svg" alt="" width="100"> <img src="./assests/img/Logo-Wordmark.svg" alt="" width="100">
</div> </div>
<div class="col-4"> <form method="POST">
<select class="form-select" aria-label="Default select example"> <div class="col-6">
<select class="form-select" aria-label="Default select example" name="user_id">
<option value="0">Choisir un utilisateur</option>
{foreach from=$arrUserToDisplay item=user}
<option value="{$user->getId()}">{$user->getName()} {$user->getFirstname()}</option>
{/foreach}
</select>
<select class="form-select" aria-label="Default select example" name="new_status">
<option value="0" selected>Modifier le statut de l'Utilisateur...</option> <option value="0" selected>Modifier le statut de l'Utilisateur...</option>
{foreach from=$arrStatusToDisplay item=arrDetStatus} {foreach from=$arrAuthorisationToDisplay item=arrDetAuthorisation}
<option value="{$arrDetStatus->getId()}">{$arrDetStatus->getStatusName()}</option> <option value="{$arrDetAuthorisation->getId()}">{$arrDetAuthorisation->getName()}</option>
{/foreach} {/foreach}
</select> </select>
</div> </div>
<div class="col-4"> <div class="col-2">
<button class="btn bg-danger text-light rounded-circle">X</button> <button type="submit" name="action" value="update_status" class="btn bg-success text-light"> Valider</button>
<button type="submit" name="action" value="delete_user" class="btn bg-danger text-light">Supprimer l'utilisateur</button>
</div> </div>
</form>
</div> </div>
</div> </div>
</div> </div>
<!-- catégorie modif --> <!-- catégorie modif -->
<div class="p-3 mt-2 text-primary-emphasis bg-primary-subtle border border-primary-subtle rounded-3"> <div class="p-3 mt-2 text-primary-emphasis bg-primary-subtle border border-primary-subtle rounded-3">
<form method="post">
<div class="container-fluid pt-2"> <div class="container-fluid pt-2">
<h2>Gestion des catégories</h2>
<div class="row"> <div class="row">
<div class="col-6"> <div class="col-6">
<select class="form-select" aria-label="Default select example"> <form method="post">
<option value="0" selected >Modifier un catégorie existante</option> <p>Modifier une catégorie existante</p>
<select class="form-select" aria-label="Default select example" name="id_to_edit">
{foreach from=$arrCategoryToDisplay item=arrDetCategory} <option value="0">Choix de la catégorie</option>
<option value="{$arrDetCategory->getId()}" > {foreach from=$arrCategoryToDisplay item=category}
{$arrDetCategory->getName()} <option value="{$category->getId()}">{$category->getName()}</option>
</option>
{/foreach} {/foreach}
</select> </select>
<br> <br>
<input type="text" class="form-control" id="floatingInput" name="edit_category"> <div class="form-floating mb-3">
<input type="text" class="form-control" id="floatingInput" name="new_name">
<label for="floatingInput">Nouveau nom de la catégorie</label>
</div> </div>
<div class="col-2">
<button type="submit" class="btn bg-success text-light rounded-circle"> ✓</button> <button type="submit" class="btn bg-success text-light rounded-circle"> ✓</button>
</form>
<div>
</div> </div>
<div class="col-2">
<button class="btn bg-danger text-light rounded-circle">X</button>
</div>
</div>
<br>
<br> <br>
<br> <br>
<div class="row"> <div class="row">
<!-- creation cat--> <!-- creation cat-->
<div class="col-6"> <div class="col-6">
<label>Créer une nouvelle catégorie</label> <form method="POST">
<p>Créer une nouvelle catégorie</p>
<div class="form-floating mb-3"> <div class="form-floating mb-3">
<input type="text" class="form-control" id="floatingInput" name="new_category"> <input type="text" class="form-control" id="floatingInput" name="new_category">
<label for="floatingInput">Créer une nouvelle catégorie</label> <label for="floatingInput">Nom de la nouvelle catégorie</label>
</div>
</div> </div>
<div class="col-2"> <div class="col-2">
<button type="submit" class="btn bg-success text-light rounded-circle"> ✓</button> <button type="submit" class="btn bg-success text-light rounded-circle"> ✓</button>
</div> </div>
</form>
</div>
</div> </div>
</div> </div>
</form> </form>
@ -152,4 +161,5 @@
</main> </main>
</div> </div>
</section> </section>
{/block} {/block}

View file

@ -9,6 +9,19 @@
directement en contact avec les entreprises.</p> directement en contact avec les entreprises.</p>
</section> </section>
<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">
<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>
</form>
</div>
</section>
<section class="container" aria-label="Articles récents"> <section class="container" aria-label="Articles récents">
<h2 class="visually-hidden">Les 4 derniers articles</h2> <h2 class="visually-hidden">Les 4 derniers articles</h2>
<div class="row mb-2"> <div class="row mb-2">

View file

@ -14,7 +14,8 @@
{* Affichage d'un formulaire en cas d'appuie sur le bouton "+" *} {* Affichage d'un formulaire en cas d'appuie sur le bouton "+" *}
{if isset($smarty.post.showForm) || isset($smarty.post.showFormContinue)} {if isset($smarty.post.showForm) || isset($smarty.post.showFormContinue)}
<form method="post" enctype="multipart/form-data" onsubmit="return confirm('Voulez-vous vraiment envoyer le formulaire ?')"> {if isset($smarty.session.user)}
<form class="m-2" method="post" enctype="multipart/form-data" onsubmit="return confirm('Voulez-vous vraiment envoyer le formulaire ?')">
<div> <div>
<label>Titre</label> <label>Titre</label>
<input type="text" name="titleProject"> <input type="text" name="titleProject">
@ -28,11 +29,23 @@
<input type="text" name="textProject"> <input type="text" name="textProject">
</div> </div>
<div> <div>
<h3>Image thumbnail</h3>
<input name="imageThumbnail" class="form-control" type="file">
</div>
<div>
<h3>Image du projet</h3>
<input name="imageProject" class="form-control" type="file"> <input name="imageProject" class="form-control" type="file">
</div> </div>
<div class="mt-2">
<button type="submit" class="btn btn-primary btn-md" name="sendMessage">Envoyer</button> <button type="submit" class="btn btn-primary btn-md" name="sendMessage">Envoyer</button>
<button type="submit" class="btn btn-warning btn-md" name="toContinue">Remettre à plus tard</button> <button type="submit" class="btn btn-warning btn-md" name="toContinue">Remettre à plus tard</button>
</div>
</form> </form>
{else}
<div class="border rounded mt-5">
<p class="text-danger p-2">Vous devez vous connecter pour accéder à cette fonctionnalité</p>
</div>
{/if}
{/if} {/if}
</div> </div>