Merge pull request #9 from Yasder5/laura

Laura
This commit is contained in:
Yass 2026-01-28 10:14:28 +01:00 committed by GitHub
commit 78bb346dd3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 322 additions and 510 deletions

View file

@ -1,11 +1,44 @@
<?php
<?php
class AdminCtrl{
require("../app/models/project_model.php");
require("../app/entities/project_entity.php");
require("../app/models/category_model.php");
require("../app/entities/category_entity.php");
require("../app/models/image_model.php");
require("../app/entities/image_entity.php");
require("../app/models/user_model.php");
require("../app/entities/user_entity.php");
public function admin(){
/**
* Le controller de la partie accessible uniquement par l'admin
* @author Laura
*/
class AdminCtrl{
public function admin() {
/* $objCategory = new Category ();
$objCategory->setName($_POST['category_name'] ?? "");
$objCategory->setParent($_POST['category_parent'] ?? "");
$objCategoryModel = new CategoryModel();
$boolInsert = $objCategoryModel->insert($objCategory);
EN ATTENTE
if ($boolInsert === true) {
$_SESSION['success'] = "Catégorie ajoutée avec succès";
header("Location:index.php?ctrl=admin&action=admin");
exit;
} else {
// Erreur globale
$arrError['global'] = "Erreur lors de l'ajout";
}
*/
include('../app/views/partials/header.php');
include('../app/views/admin.php');
}
include('../app/views/partials/footer.php');
}
}
}

View file

@ -39,13 +39,10 @@
public function search(){
//variable pour faire fonctionner le script en footer
$strPage = "search";
// inclusion du header
include('../app/views/partials/header.php');
//Récupérer les informations du Formulaire
//Récupérer les informations du formulaire
$strKeywords = $_POST['keywords']??'';
$intAuthor = $_POST['author']??0;
$intPeriod = $_POST['period']??0;
@ -56,7 +53,7 @@
// Récupération des projetc
$objProjectModel = new ProjectModel;
$arrProject = $objProjectModel->findAll(intAuthor:$intAuthor, intPeriod:$intPeriod, strDate:$strDate,
strKeywords:$strKeywords, strStartDate:$strStartDate, strEndDate:$strEndDate, intCategory:$intCategory);
strKeywords:$strKeywords, strStartDate:$strStartDate, strEndDate:$strEndDate, intCategory:$intCategory);
// Initialisation d'un tableau => objets
$arrProjectToDisplay = array();

View file

@ -9,8 +9,9 @@ require_once("mother_entity.php");
class Category extends Entity{
private int $_id;
protected string $_name = '';
private int $_id;
protected string $_name = '';
protected string $_parent = '';
/**
* Constructeur (j'ai toujours pas compris à quoi ça sert)
@ -53,5 +54,20 @@ class Category extends Entity{
$this->_name = $name;
}
/**
* Récuperation du nom du parent de la catégorie
* @return string nom de la catégorie
*/
public function getParent(){
return $this->_parent;
}
/**
* Mise à jour du nom du parent de la catégorie
* @param string le nouveau nom de la catégorie
*/
public function setParent($parent){
$this->_parent = $parent;
}
}

View file

@ -2,50 +2,123 @@
require_once("mother_entity.php");
class User extends Entity{
// Attributs
private int $_id;
private string $_name = '';
private string $_firstname = '';
private string $_pseudo = '';
private string $_image = '';
private string $_mail = '';
private string $_pwd;
private string $_pwd;
private string $_phone = '';
private string $_work = '';
private string $_birth = '';
private string $_location = '';
private string $_description = '';
private string $_account_creation = '';
private int $_status;
/**
* Constructeur
*/
public function __construct(){
// Préfixe de la table pour hydratation
$this->_prefixe = 'user_';
$this->_prefix = 'user_';
}
public function getId():int{
return $this->_id;
}
public function setId(int $id){
$this->_id = $id;
}
// Méthodes - getters et setters
public function getName():string{
return $this->_name;
}
public function setName(string $strNewName){
$this->_name = $this->nettoyer($strNewName);
public function setName(string $name){
$this->_name = $name;
}
public function getFirstname():string{
return $this->_firstname;
}
public function setFirstname(string $strFirstname){
$this->_firstname = $this->nettoyer($strFirstname);
public function setFirstname(string $firstname){
$this->_firstname = $firstname;
}
public function getPseudo():string{
return $this->_pseudo;
}
public function setPseudo(string $pseudo){
$this->_pseudo = $pseudo;
}
public function getImage():string{
return $this->_image;
}
public function setImage(string $image){
$this->_image = $image;
}
public function getMail():string{
return $this->_mail;
}
public function setMail(string $strMail){
$this->_mail = strtolower($this->nettoyer($strMail));
public function setMail(string $mail){
$this->_mail = strtolower($mail);
}
public function getPwd():string{
return $this->_pwd;
}
public function getPwdHash():string{
return password_hash($this->_pwd, PASSWORD_DEFAULT);
}
public function setPwd(string $strPwd){
$this->_pwd = $strPwd;
}
public function setPwd(string $pwd){
$this->_pwd = $pwd;
}
public function getPhone():string{
return $this->_phone;
}
public function setPhone(string $phone){
$this->_phone = $phone;
}
public function getWork():string{
return $this->_work;
}
public function setWork(string $work){
$this->_work = $work;
}
public function getBirth():string{
return $this->_birth;
}
public function setBirth(string $birth){
$this->_birth = $birth;
}
}
public function getLocation():string{
return $this->_location;
}
public function setLocation(string $location){
$this->_location = $location;
}
public function getDescription():string{
return $this->_description;
}
public function setDescription(string $description){
$this->_description = $description;
}
public function getAccountCreation():string{
return $this->_account_creation;
}
public function setAccountCreation(string $account_creation){
$this->_account_creation = $account_creation;
}
public function getStatus():int{
return $this->_status;
}
public function setStatus(int $status){
$this->_status = $status;
}
}

View file

@ -1,124 +0,0 @@
<?php
require_once("mother_entity.php");
class User extends Entity{
private int $_id;
private string $_name = '';
private string $_firstname = '';
private string $_pseudo = '';
private string $_image = '';
private string $_mail = '';
private string $_pwd;
private string $_phone = '';
private string $_work = '';
private string $_birth = '';
private string $_location = '';
private string $_description = '';
private string $_account_creation = '';
private int $_status;
public function __construct(){
$this->_prefix = 'user_';
}
public function getId():int{
return $this->_id;
}
public function setId(int $id){
$this->_id = $id;
}
public function getName():string{
return $this->_name;
}
public function setName(string $name){
$this->_name = $name;
}
public function getFirstname():string{
return $this->_firstname;
}
public function setFirstname(string $firstname){
$this->_firstname = $firstname;
}
public function getPseudo():string{
return $this->_pseudo;
}
public function setPseudo(string $pseudo){
$this->_pseudo = $pseudo;
}
public function getImage():string{
return $this->_image;
}
public function setImage(string $image){
$this->_image = $image;
}
public function getMail():string{
return $this->_mail;
}
public function setMail(string $mail){
$this->_mail = strtolower($mail);
}
public function getPwd():string{
return $this->_pwd;
}
public function getPwdHash():string{
return password_hash($this->_pwd, PASSWORD_DEFAULT);
}
public function setPwd(string $pwd){
$this->_pwd = $pwd;
}
public function getPhone():string{
return $this->_phone;
}
public function setPhone(string $phone){
$this->_phone = $phone;
}
public function getWork():string{
return $this->_work;
}
public function setWork(string $work){
$this->_work = $work;
}
public function getBirth():string{
return $this->_birth;
}
public function setBirth(string $birth){
$this->_birth = $birth;
}
public function getLocation():string{
return $this->_location;
}
public function setLocation(string $location){
$this->_location = $location;
}
public function getDescription():string{
return $this->_description;
}
public function setDescription(string $description){
$this->_description = $description;
}
public function getAccountCreation():string{
return $this->_account_creation;
}
public function setAccountCreation(string $account_creation){
$this->_account_creation = $account_creation;
}
public function getStatus():int{
return $this->_status;
}
public function setStatus(int $status){
$this->_status = $status;
}
}

View file

@ -8,18 +8,40 @@
class CategoryModel extends Connect{
/**
* Fonction de récupération des catégories
* @return array
*/
public function findAllCategory(int $intLimit=0):array{
// Ecrire la requête
$strRq = "SELECT category.*
FROM category";
if ($intLimit > 0){
$strRq .= " LIMIT ".$intLimit;
}
// Lancer la requête et récupérer les résultats
return $this->_db->query($strRq)->fetchAll();
}
/**
* fonction d'insertion d'une nouvelle catégorie dans la bdd
* @param object $objUser L'objet utilisateur
* @return bool Est-ce que la requête s'est bien passée (true/false)
*/
public function insert(object $objCategory):bool{
$strRq = "INSERT INTO category (category_name, category_parent)
VALUES (:name, :parent)";
$rqPrep = $this->_db->prepare($strRq);
$rqPrep->bindValue(":name", $objCategory->getName(), PDO::PARAM_STR);
$rqPrep->bindValue(":parent", $objCategory->getParent(), PDO::PARAM_STR);
return $rqPrep->execute();
}
}

View file

@ -8,9 +8,13 @@
class ImageModel extends Connect{
/**
* Fonction de récupération des images
* @return array
*/
public function findAllImage(int $intLimit=0):array{
// Ecrire la requête
$strRq = "SELECT image.*
FROM image";
@ -19,7 +23,6 @@
$strRq .= " LIMIT ".$intLimit;
}
// Lancer la requête et récupérer les résultats
return $this->_db->query($strRq)->fetchAll();
}
}

View file

@ -58,11 +58,7 @@
public function insert(object $objUser):bool{
// 2. Construire la requête
/*$strRq = "INSERT INTO users (user_name, user_firstname, user_mail, user_pwd)
VALUES ('".$objUser->getName()."',
'".$objUser->getFirstname()."',
'".$objUser->getMail()."',
'".$objUser->getPwdHash()."')";*/
$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)";
// Préparer la requête

View file

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

View file

@ -1,382 +1,175 @@
<!-- Page : Inscription -->
<main class="container py-5">
<!-- Centrage 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="row justify-content-center">
<div class="col-12 col-md-10 col-lg-6">
<!-- Carte contenant le formulaire d'inscription -->
<!-- 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 (identifiant public de l'utilisateur) -->
<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>
<!-- Carte Bootstrap contenant le formulaire -->
<div class="card shadow-sm border-0 rounded-4 p-4 p-lg-5">
<!-- Titre et description -->
<!-- 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.
Créez votre compte utilisateur.
</p>
<?php
// Affichage des messages d'erreur du formulaire, l'affichage en Bootstrap (validation côté serveur)
if (!empty($arrError)) { ?>
<div class="alert alert-danger" role="alert">
<?php foreach ($arrError as $strError) { ?>
<p class="mb-0">
<?php echo htmlspecialchars($strError); ?>
</p>
<?php } ?>
</div>
<?php } ?>
<!-- Formulaire d'inscription -->
<!-- Les données sont envoyées en POST vers la méthode signin du user_controller.php -->
<form method="POST" action="index.php?ctrl=user&action=signin">
<!-- 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 : Nom -->
<div class="col-md-6">
<label class="form-label" for="user_name">
Nom *
</label>
<input
class="form-control <?php if (isset($arrError['user_name'])) echo 'is-invalid'; ?>"
type="text"
id="user_name"
name="user_name"
value="<?php echo htmlspecialchars($objUser->getName()); ?>"
required
>
</div>
<!-- Champ : Prénom -->
<!-- Champ : prénom de l'utilisateur -->
<div class="col-md-6">
<label class="form-label" for="user_firstname">
Prénom *
Prénom *
</label>
<input
class="form-control <?php if (isset($arrError['user_firstname'])) echo 'is-invalid'; ?>"
type="text"
id="user_firstname"
name="user_firstname"
value="<?php echo htmlspecialchars($objUser->getFirstname()); ?>"
required
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 -->
<!-- Champ : pseudo -->
<div class="col-12">
<label class="form-label" for="user_pseudo">
Pseudo *
Pseudo *
</label>
<div class="input-group">
<span class="input-group-text">@</span>
<input
class="form-control <?php if (isset($arrError['user_pseudo'])) echo 'is-invalid'; ?>"
type="text"
id="user_pseudo"
name="user_pseudo"
value="<?php echo htmlspecialchars($objUser->getPseudo()); ?>"
required
>
</div>
</div>
<!-- Champ : Adresse e-mail -->
<div class="col-12">
<label class="form-label" for="user_mail">
Adresse e-mail *
</label>
<span class="input-group-text">@</span>
<input
class="form-control <?php if (isset($arrError['user_mail'])) echo 'is-invalid'; ?>"
type="email"
id="user_mail"
name="user_mail"
value="<?php echo htmlspecialchars($objUser->getMail()); ?>"
required
class="form-control"
type="text"
id="user_pseudo"
name="user_pseudo"
required
>
</div>
</div>
<!-- Champ : Mot de passe -->
<div class="col-12">
<label class="form-label" for="user_password">
Mot de passe *
</label>
<input
class="form-control <?php if (isset($arrError['user_password'])) echo 'is-invalid'; ?>"
type="password"
id="user_password"
name="user_password"
required
>
</div>
<!-- Champ : Confirmation du mot de passe -->
<div class="col-12">
<label class="form-label" for="pwd_confirm">
Confirmation du mot de passe *
</label>
<input
class="form-control <?php if (isset($arrError['pwd_confirm'])) echo 'is-invalid'; ?>"
type="password"
id="pwd_confirm"
name="pwd_confirm"
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 / description courte -->
<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>
<!-- 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>
<!-- Bouton de soumission -->
<div class="col-12 d-grid mt-2">
<button type="submit" class="btn btn-primary btn-lg rounded-3">
Créer mon compte
</button>
<!-- 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>
<!-- 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>
<!-- Confirmation du mot de passe -->
<div class="col-12">
<label class="form-label" for="pwd_confirm">
Confirmation du mot de passe *
</label>
<input
class="form-control <?php if (isset($arrError['pwd_confirm'])) echo 'is-invalid'; ?>"
type="password"
id="pwd_confirm"
name="pwd_confirm"
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 / description courte -->
<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="connexion.php">Se connecter</a>
</small>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</main>
</div>
</main>

View file

@ -28,5 +28,7 @@
<p>Suivez-nous</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="js/scripts.js"></script>
</body>
</html>

View file

@ -11,10 +11,11 @@
<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">
<script src="https://use.fontawesome.com/releases/v6.3.0/js/all.js" crossorigin="anonymous"></script>
<title>Folliow</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light">
<nav class="navbar navbar-expand-lg navbar-light">
<div class="container-fluid">
<!-- Logo -->
<a class="navbar-brand d-flex align-items-center" href="#">
@ -68,7 +69,7 @@
<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"]; ?>"
<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">