diff --git a/app/controllers/project_controller.php b/app/controllers/project_controller.php new file mode 100644 index 0000000..422fb58 --- /dev/null +++ b/app/controllers/project_controller.php @@ -0,0 +1,92 @@ +findAll(4); + $arrProjectToDisplay = array(); + foreach($arrProject as $arrDetProject){ + $objProject = new Project; + $objProject->hydrate($arrDetProject); + $arrProjectToDisplay[] = $objProject; + } + + include('../app/views/partials/header.php'); + include('../app/views/home.php'); + include('../app/views/partials/footer.php'); + + } + + /** + * Fonction d'affichage de la barre de recherche + */ + + public function search(){ + + // inclusion du header + include('../app/views/partials/header.php'); + + //Récupérer les informations du Formulaire + $strKeywords = $_GET['keywords']??''; + $intAuthor = $_GET['author']??0; + $intPeriod = $_GET['period']??0; + $strDate = $_GET['date']??''; + $strStartDate = $_GET['startdate']??''; + $strEndDate = $_GET['enddate']??''; + $intCategory = $_GET['category']??0; + + // Récupération des Projects + $objProjectModel = new ProjectModel; + + // Depuis PHP 8 - accès direct aux paramètres + $arrProject = $objProjectModel->findAll(); + + // Initialisation d'un tableau => objets + $arrProjectToDisplay = array(); + // Boucle de transformation du tableau de tableau en tableau d'objets + foreach($arrProject as $arrDetProject){ + $objProject = new Project; + $objProject->hydrate($arrDetProject); + + $arrProjectToDisplay[] = $objProject; + } + + // Récupération des utilisateurs + require_once("../app/models/user_model.php"); + $objUserModel = new UserModel; + $arrUser = $objUserModel->findAllUsers(); + + // Récupération des catégories + require_once("../app/models/category_model.php"); + $objCategoryModel = new CategoryModel; + $arrCategory = $objCategoryModel->findAllCategory(); + + + include('../app/views/search.php'); + include('../app/views/partials/footer.php'); + } + + /** + * Fonction d'affichage de la page projet + */ + + public function project (){ + include("../app/views/partials/header.php"); + include('../app/views/project.php'); + include('../app/views/partials/footer.php'); + } + } \ No newline at end of file diff --git a/app/controllers/user_controller.php b/app/controllers/user_controller.php new file mode 100644 index 0000000..f612a4a --- /dev/null +++ b/app/controllers/user_controller.php @@ -0,0 +1,61 @@ + 0) { + // Vérifier le formulaire + if ($strMail == ""){ + $arrError['mail'] = "Le mail est obligatoire"; + } + if ($strPwd == ""){ + $arrError['pwd'] = "Le mot de passe est obligatoire"; + } + + // Si le formulaire est rempli correctement + if (count($arrError) == 0){ + // Vérifier l'utilisateur en BDD + $objUserModel = new UserModel; + $arrResult = $objUserModel->verifUser($strMail, $strPwd); + //var_dump($arrResult); + if ($arrResult === false){ // Si la base de données ne renvoie rien + $arrError[] = "Mail ou mot de passe invalide"; + }else{ + // Ajoute l'utilisateur en session + $_SESSION['user'] = $arrResult; + $_SESSION['success'] = "Bienvenue, vous êtes bien connecté"; + + header("Location:index.php"); + exit; + } + } + } + include("../app/views/login.php"); + include("../app/views/partials/footer.php"); + + } + + + public function logout(){ + session_start(); + + // on supprime l'utilisateur en session + unset($_SESSION['user']); + + $_SESSION['success'] = "Vous êtes bien déconnecté"; + + header("Location:index.php"); + exit; + + } + } \ No newline at end of file diff --git a/app/entities/category_entity.php b/app/entities/category_entity.php new file mode 100644 index 0000000..eecebdc --- /dev/null +++ b/app/entities/category_entity.php @@ -0,0 +1,55 @@ +_prefix = 'category_'; + } + + // Méthode Getter et Setter + + /** + * Récuperation de l'id du Projet + * @return int l'id de la catégorie + */ + public function getId():int{ + return $this->_id; + } + + /** + * Mise à jour de l'id de la catégorie + * @param int le nouvelle id + */ + public function setId($id){ + $this->_id = $id; + } + + /** + * Récuperation du nom de la catégorie + * @return string nom de la catégorie + */ + public function getName(){ + return $this->_name; + } + + /** + * Mise à jour du nom de la catégorie + * @param string le nouveau nom de la catégorie + */ + public function setName($name){ + $this->_name = $name; + } + + +} \ No newline at end of file diff --git a/app/entities/mother_entity.php b/app/entities/mother_entity.php new file mode 100644 index 0000000..5f18ab3 --- /dev/null +++ b/app/entities/mother_entity.php @@ -0,0 +1,30 @@ +$value){ + $strMethodName = "set".ucfirst(str_replace($this->_prefix,'',$key)); + var_dump($strMethodName); + if (method_exists($this,$strMethodName)){ + $this->$strMethodName($value); + } + } + } + + protected function nettoyer(string $strText){ + $strText = trim($strText); + $strText = str_replace("", "", $strText); + return $strText; + } + + } \ No newline at end of file diff --git a/app/entities/project_entity.php b/app/entities/project_entity.php new file mode 100644 index 0000000..c4dc9ef --- /dev/null +++ b/app/entities/project_entity.php @@ -0,0 +1,221 @@ +_prefix = 'project_'; + } + + // Méthode Getter et Setter + + /** + * Récuperation de l'id du Projet + * @return int l'id du projet + */ + public function getId():int{ + return $this->_id; + } + + /** + * Mise à jour de l'id du projet + * @param int le nouvelle id + */ + public function setId($id){ + $this->_id = $id; + } + + /** + * Récuperation du titre + * @return string tite du projet + */ + public function getTitle(){ + return $this->_title; + } + + /** + * Mise à jour du titre + * @param string le nouveau titre + */ + public function setTitle($title){ + $this->_title = $title; + } + + /** + * Récuperation de la description + * @return string description du projet + */ + public function getDescription(){ + return $this->_description; + } + + /** + * Mise à jour de la description + * @param string la nouvelle description + */ + public function setDescription($description){ + $this->_description = $description; + } + + + /** + * Récuperation de l'image + * @return string chemin vers l'image + */ + public function getThumbnail(){ + return $this->_thumbnail; + } + + /** + * Mise à jour de l'image + * @param string chemin vers nouvelle image + */ + public function setThumbnail($thumbnail){ + $this->_thumbnail = $thumbnail; + } + + /** + * Récuperation du contenue + * @return string contenue du projet + */ + public function getContent(){ + return $this->_content; + } + + /** + * Mise à jour du contenue + * @param string le nouveau contenue + */ + public function setContent($content){ + $this->_content = $content; + } + + + /** + * Récupération de la date de création + * @param string lang de formatage de la date (par défaut = "fr_FR") + * @return string date de création formatter + */ + public function getCreation_date(string $strFormat = "fr_FR"){ + $objDate = new DateTime($this->_creation_date); + + $objDateFormatter = new IntlDateFormatter( + $strFormat, + IntlDateFormatter::LONG, + IntlDateFormatter::NONE, + + ); + $strFormat = $objDateFormatter->format($objDate); + return $strFormat; + } + + /** + * Mise à jour de la date de création + * @param string la nouvelle date de création + */ + public function setCreation_date($creation_date){ + $this->_creation_date = $creation_date; + } + + /** + * Récupération du statut + * @return string statut + */ + public function getStatus(){ + return $this->_status; + } + + /** + * Mise à jour du statut + * @param string le nouveau statut + */ + public function setStatus($status){ + $this->_status = $status; + } + + /** + * Récupération de l'utilisateur + * @return int id de l'utilisateur + */ + public function getUser(){ + return $this->_user; + } + + /** + * Mise à jour de l'utilisateur + * @param int id de l'utilisateur + */ + public function setUser($user){ + $this->_user = $user; + } + + /** + * Récupération de la catégorie + * @return int id de la catégorie + */ + public function getCategory(){ + return $this->_category; + } + + /** + * Mise à jour de la catégorie + * @param int id de la catégorie + */ + public function setCategory($category){ + $this->_category = $category; + } + + /** + * Récupération du nom du créateur + * @return string nom du créateur + */ + public function getCreatorName(){ + return $this->_creatorname; + } + + /** + * Mise à jour du nom du créateur + * @param string le nom du créateur + */ + public function setCreatorName($creatorname){ + $this->_creatorname = $creatorname; + } + /** + * Récupération du chemin photo profil + * @return string nom du chemin photo profil + */ + public function getUser_image(){ + return $this->_user_image; + } + + /** + * Mise à jour du chemin photo profil + * @param string chemin photo profil + */ + public function setUser_image($user_image){ + $this->_user_image = $user_image; + } + + +} \ No newline at end of file diff --git a/app/entities/user_entity.php b/app/entities/user_entity.php new file mode 100644 index 0000000..6fa9d08 --- /dev/null +++ b/app/entities/user_entity.php @@ -0,0 +1,51 @@ +_prefixe = 'user_'; + } + + // Méthodes - getters et setters + public function getName():string{ + return $this->_name; + } + public function setName(string $strNewName){ + $this->_name = $this->nettoyer($strNewName); + } + public function getFirstname():string{ + return $this->_firstname; + } + public function setFirstname(string $strFirstname){ + $this->_firstname = $this->nettoyer($strFirstname); + } + public function getMail():string{ + return $this->_mail; + } + public function setMail(string $strMail){ + $this->_mail = strtolower($this->nettoyer($strMail)); + } + 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; + } + + + + + } \ No newline at end of file diff --git a/app/models/category_model.php b/app/models/category_model.php new file mode 100644 index 0000000..aa13516 --- /dev/null +++ b/app/models/category_model.php @@ -0,0 +1,25 @@ + 0){ + $strRq .= " LIMIT ".$intLimit; + } + + // Lancer la requête et récupérer les résultats + return $this->_db->query($strRq)->fetchAll(); + } + } \ No newline at end of file diff --git a/app/models/project_model.php b/app/models/project_model.php new file mode 100644 index 0000000..2cb9cbf --- /dev/null +++ b/app/models/project_model.php @@ -0,0 +1,45 @@ + 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'information dans la BDD (Repris de la partie BLOG vu en cours..) + 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) + VALUES (:title, :description, :thumbnail, :content, :status, DATE(NOW()))"; + + // Préparer la requête + $rqPrep = $this->_db->prepare($strRq); + // Donne les informations + $rqPrep->bindValue(":title", $objProject->getTitle(), PDO::PARAM_STR); + $rqPrep->bindValue(":description", $objProject->getDescription(), PDO::PARAM_STR); + $rqPrep->bindValue(":thumbnail", $objProject->getThumbnail(), PDO::PARAM_STR); + $rqPrep->bindValue(":content", $objProject->getContent(), 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(); + } + } \ No newline at end of file diff --git a/app/models/user_model.php b/app/models/user_model.php new file mode 100644 index 0000000..73a5d34 --- /dev/null +++ b/app/models/user_model.php @@ -0,0 +1,74 @@ +_db->query($strRq)->fetchAll(); + } + + /** + * @param string $strMail + * @param string $strPwd + * @return 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 + FROM users + 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(); + // Vérification du mot de passe haché + if (password_verify($strPwd, $arrUser['user_password'])){ + // Renvoi l'utilisateur + unset($arrUser['user_password']); // on enlève le pwd + return $arrUser; + }else{ + return false; + } + } + + //public function insert(string $strName, string $strFirstname, string $strMail, string $strPwd):int{ + /** + * Fonction d'insertion d'un utilisateur en 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 $objUser):bool{ + + // 2. Construire la requête + $strRq = "INSERT INTO users (user_name, user_firstname, user_mail, user_pwd) + VALUES (:name, :firstname, :mail, :pwd)"; + // Préparer la requête + $rqPrep = $this->_db->prepare($strRq); + // Donne les informations + $rqPrep->bindValue(":name", $objUser->getName(), PDO::PARAM_STR); + $rqPrep->bindValue(":firstname", $objUser->getFirstname(), PDO::PARAM_STR); + $rqPrep->bindValue(":mail", $objUser->getMail(), PDO::PARAM_STR); + $rqPrep->bindValue(":pwd", $objUser->getPwdHash(), PDO::PARAM_STR); + + // 3. Executer la requête + return $rqPrep->execute(); + } + } \ No newline at end of file diff --git a/admin.php b/app/views/admin.php similarity index 100% rename from admin.php rename to app/views/admin.php diff --git a/app/views/connexion.php b/app/views/connexion.php new file mode 100644 index 0000000..96e2244 --- /dev/null +++ b/app/views/connexion.php @@ -0,0 +1,97 @@ + + +
+ + +
+
+ + +
+ + +

Connexion

+ + +

+ Connectez-vous à votre compte. +

+ + + +
+ +
+ + +
+ + +
+ + +
+ + +
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+ + Pas encore de compte ? + Créer un compte + +
+ + + + +
+
+ +
+ +
+
+
diff --git a/app/views/home.php b/app/views/home.php new file mode 100644 index 0000000..b85dc3b --- /dev/null +++ b/app/views/home.php @@ -0,0 +1,17 @@ +
+

Folliow

+

Là où les talents rencontrent leur avenir

+

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.

+
+ +
+

Les 4 derniers articles

+
+ +
\ No newline at end of file diff --git a/app/views/inscription.php b/app/views/inscription.php new file mode 100644 index 0000000..efa1750 --- /dev/null +++ b/app/views/inscription.php @@ -0,0 +1,188 @@ + + +
+ + +
+
+ + +
+ + +

Inscription

+ + +

+ Créez votre compte utilisateur. +

+ + + +
+ +
+ + +
+ + +
+ + +
+ + +
+ + +
+ +
+ @ + +
+
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ +
+ + +
+ + Déjà un compte ? + Se connecter + +
+ +
+
+ +
+ +
+
+ + diff --git a/app/views/login.php b/app/views/login.php new file mode 100644 index 0000000..0021e56 --- /dev/null +++ b/app/views/login.php @@ -0,0 +1,23 @@ +
+ 0) {?> +
+ +

+ +
+ +
+

+ + +

+

+ + +

+

+ +

+
+
\ No newline at end of file diff --git a/app/views/partials/footer.php b/app/views/partials/footer.php new file mode 100644 index 0000000..1d2a71c --- /dev/null +++ b/app/views/partials/footer.php @@ -0,0 +1,5 @@ + +

coucou c'est le footer

+ + + \ No newline at end of file diff --git a/app/views/partials/header.php b/app/views/partials/header.php new file mode 100644 index 0000000..1c00337 --- /dev/null +++ b/app/views/partials/header.php @@ -0,0 +1,88 @@ + + + + + + + + + + + Folliow + + + \ No newline at end of file diff --git a/app/views/partials/preview.php b/app/views/partials/preview.php new file mode 100644 index 0000000..1cfefba --- /dev/null +++ b/app/views/partials/preview.php @@ -0,0 +1,38 @@ +
+
+ + +
+ +
+ +
+ + + Photo de profil + + +
+

getTitle(); ?>

+ + + + – getCreatorname(); ?> + + + + Lire la suite → + +
+ +
+ +
+
diff --git a/app/views/project.php b/app/views/project.php new file mode 100644 index 0000000..9dc6fd9 --- /dev/null +++ b/app/views/project.php @@ -0,0 +1,115 @@ + 0) && ($_FILES['imageProject']['error'] != 4)){ + $strDest = '../public/uploads/projects/'.$_FILES['imageProject']['name']; + var_dump($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 + /* 1. Changement de status + /* 2. Hydratation avec les informations récupéré de l'utilisateur + /* 3. Envoie des données à la BDD + */ + if (isset($_POST['sendMessage'])) { + $_SESSION['status'] = 'publié'; + $objProject->hydrate($_SESSION); + $objProject->setThumbnail($strDest); + $objProjectModel->insert($objProject); + + } else if (isset($_POST['toContinue'])) { + $objProject->hydrate($_SESSION); + $objProject->setThumbnail($strDest); + $objProjectModel->insert($objProject); + } + + //Débuggage + var_dump($_SESSION); + var_dump($objProject); + + +?> + +
+
+

Alimenter votre projet

+
+ + + + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + +
+ + +
+
+

Description

+

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.

+
+
+

Photos behind the scene

+
+ +
+
+
+

Other projects

+
+ +
+
+ +
+ \ No newline at end of file diff --git a/app/views/search.php b/app/views/search.php new file mode 100644 index 0000000..c64b875 --- /dev/null +++ b/app/views/search.php @@ -0,0 +1,170 @@ +
+

Rechercher parmi les articles

+
+
+
+

+ + Rechercher des articles +

+ +
+
+ + + + Recherchez dans les titres et contenus + +
+ +
+ + +
+ + +
+
+ Type de recherche par date +
+ + aria-controls="date-exact date-range"> + +
+
+ + aria-controls="date-exact date-range"> + +
+
+
+ +
+
+ Type de recherche par catégories +
+ + +
+
+
+ +
+ + + + Format: JJ/MM/AAAA + +
+ + + +
+ + +
+
+
+
+ + +
+

Liste des projets

+
+ +
+

Pas de résultats

+
+ +
+
+
+
diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..e24c28e --- /dev/null +++ b/config/database.php @@ -0,0 +1,23 @@ +_db = new PDO( + "mysql:host=localhost;dbname=projet_folliow", // Serveur et BDD + "root", //Nom d'utilisateur de la base de données + "",// Mot de passe de la base de données + array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC) // Mode de renvoi + ); + // Pour résoudre les problèmes d’encodage + $this->_db->exec("SET CHARACTER SET utf8"); + // Configuration des exceptions + $this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + } catch(PDOException$e) { + echo "Échec : " . $e->getMessage(); + } + } + } \ No newline at end of file diff --git a/database/database.sql b/database/database.sql new file mode 100644 index 0000000..649db7d --- /dev/null +++ b/database/database.sql @@ -0,0 +1,253 @@ +CREATE DATABASE IF NOT EXISTS `projet_folliow` + DEFAULT CHARACTER SET utf8mb4 + COLLATE utf8mb4_unicode_ci; + +USE `projet_folliow`; + +/*M!999999\- enable the sandbox mode */ +-- MariaDB dump 10.19 Distrib 10.11.14-MariaDB, for debian-linux-gnu (x86_64) +-- +-- Host: localhost Database: projet_folliow +-- ------------------------------------------------------ +-- Server version 10.11.14-MariaDB-0+deb12u2 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `authorisation` +-- + +DROP TABLE IF EXISTS `authorisation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `authorisation` ( + `authorisation_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Identifiant unique des autorisations', + `authorisation_name` varchar(30) NOT NULL COMMENT 'Administrateur, modérateur, utilisateur', + PRIMARY KEY (`authorisation_id`), + UNIQUE KEY `uk_authorisation_name` (`authorisation_name`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `authorisation` +-- + +LOCK TABLES `authorisation` WRITE; +/*!40000 ALTER TABLE `authorisation` DISABLE KEYS */; +INSERT INTO `authorisation` VALUES +(1,'Administrateur'), +(2,'Modérateur'), +(3,'Utilisateur'); +/*!40000 ALTER TABLE `authorisation` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `category` +-- + +DROP TABLE IF EXISTS `category`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `category` ( + `category_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Identifiant unique des catégorie du projet', + `category_name` varchar(150) NOT NULL COMMENT 'Nom de chaque catégorie', + `category_parent` int(10) unsigned DEFAULT NULL COMMENT 'ID de la catégorie parente (NULL = catégorie principale)', + PRIMARY KEY (`category_id`), + UNIQUE KEY `uk_category_name_parent` (`category_name`,`category_parent`), + KEY `fk_category_parent` (`category_parent`), + CONSTRAINT `fk_category_parent` FOREIGN KEY (`category_parent`) REFERENCES `category` (`category_id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `category` +-- + +LOCK TABLES `category` WRITE; +/*!40000 ALTER TABLE `category` DISABLE KEYS */; +INSERT INTO `category` VALUES +(32,'3D',4), +(34,'Aquarelle',4), +(5,'Architecture',NULL), +(36,'Architecture d\'Intérieur',5), +(35,'Architecture Moderne',5), +(24,'Backend',2), +(33,'Bande Dessinée',4), +(1,'Design',NULL), +(2,'Développement Web',NULL), +(31,'Digital Art',4), +(30,'Événementiel',3), +(23,'Frontend',2), +(25,'Full-Stack',2), +(4,'Illustration',NULL), +(20,'Logo & Identité Visuelle',1), +(39,'Marketing',NULL), +(46,'Marketing',NULL), +(26,'Mobile',2), +(21,'Motion Design',1), +(38,'Patrimoine',5), +(28,'Paysage',3), +(3,'Photographie',NULL), +(27,'Portrait',3), +(22,'Print Design',1), +(40,'Rédaction',NULL), +(47,'Rédaction',NULL), +(29,'Sport',3), +(19,'UI/UX Design',1), +(37,'Urbanisme',5), +(41,'Vidéo',NULL), +(48,'Vidéo',NULL); +/*!40000 ALTER TABLE `category` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `image` +-- + +DROP TABLE IF EXISTS `image`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `image` ( + `image_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'identifiant unique des images', + `image_name` varchar(150) NOT NULL COMMENT 'Chemin de l''image enregistrée', + `image_alt` varchar(255) DEFAULT NULL COMMENT 'Alt de l''image', + `image_status` varchar(50) NOT NULL DEFAULT 'en_attente' COMMENT 'Statut de modération de l''image', + `image_project` int(10) unsigned DEFAULT NULL COMMENT 'Identifiant du projet où se trouve l''image', + PRIMARY KEY (`image_id`), + KEY `fk_image_project` (`image_project`), + CONSTRAINT `fk_image_project` FOREIGN KEY (`image_project`) REFERENCES `project` (`project_id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `chk_image_status` CHECK (`image_status` in ('en_attente','approuvé','rejeté')) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `image` +-- + +LOCK TABLES `image` WRITE; +/*!40000 ALTER TABLE `image` DISABLE KEYS */; +INSERT INTO `image` VALUES +(1,'/uploads/projects/ecommerce-01.jpg','Page d\'accueil du site e-commerce refondu','approuvé',1), +(2,'/uploads/projects/ecommerce-02.jpg','Interface mobile du processus de commande','approuvé',1), +(3,'/uploads/projects/taskmanager-01.jpg','Vue kanban de l\'application','approuvé',2), +(4,'/uploads/projects/urban-01.jpg','Architecture moderne à La Défense','en_attente',3); +/*!40000 ALTER TABLE `image` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `project` +-- + +DROP TABLE IF EXISTS `project`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `project` ( + `project_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Identifiant unique du projet', + `project_title` varchar(150) NOT NULL COMMENT 'Titre du projet', + `project_description` text DEFAULT NULL COMMENT 'Description du projet', + `project_thumbnail` varchar(150) DEFAULT NULL COMMENT 'Image miniature du projet', + `project_content` text DEFAULT NULL COMMENT 'Contenu du projet', + `project_creation_date` date NOT NULL COMMENT 'Date de création du projet', + `project_status` varchar(30) NOT NULL DEFAULT 'brouillon' COMMENT 'Statut du projet : brouillon, publié, en_attente', + `project_user` int(10) unsigned DEFAULT NULL COMMENT 'Identifiant de l''user', + `project_category` int(10) unsigned DEFAULT NULL COMMENT 'Identifiant de la catégorie', + + PRIMARY KEY (`project_id`), + KEY `fk_project_user` (`project_user`), + KEY `fk_project_category` (`project_category`), + KEY `idx_project_status` (`project_status`), + KEY `idx_project_creation_date` (`project_creation_date`), + + CONSTRAINT `fk_project_category` + FOREIGN KEY (`project_category`) + REFERENCES `category` (`category_id`) + ON DELETE SET NULL + ON UPDATE CASCADE, + + CONSTRAINT `fk_project_user` + FOREIGN KEY (`project_user`) + REFERENCES `users` (`user_id`) + ON DELETE CASCADE + ON UPDATE CASCADE +) ENGINE=InnoDB +DEFAULT CHARSET=utf8mb4 +COLLATE=utf8mb4_unicode_ci; + +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `project` +-- + +LOCK TABLES `project` WRITE; +/*!40000 ALTER TABLE `project` DISABLE KEYS */; +INSERT INTO `project` VALUES +(1,'Refonte du site e-commerce','Refonte complète de l\'interface utilisateur d\'une boutique en ligne avec focus sur l\'expérience mobile','/uploads/projects/ecommerce-thumb.jpg','Ce projet visait à moderniser entièrement l\'interface d\'un site e-commerce existant. Les principales améliorations incluent une navigation simplifiée, un processus de commande optimisé et une interface responsive.','2025-12-01','publié',1,1), +(2,'Application de gestion de tâches','Développement d\'une application web pour la gestion collaborative de projets','/uploads/projects/taskmanager-thumb.jpg','Application web développée en React et Node.js permettant aux équipes de gérer leurs projets de manière collaborative. Fonctionnalités : kanban, calendrier, notifications en temps réel.','2025-12-15','publié',2,2), +(3,'Série photo urbaine','Collection de photographies capturant l\'architecture moderne de Paris','/uploads/projects/urban-thumb.jpg','Série de 30 photographies prises dans différents quartiers de Paris, mettant en valeur le contraste entre architecture classique et moderne. Travail sur la lumière naturelle et les perspectives.','2026-01-05','en_attente',3,3); +/*!40000 ALTER TABLE `project` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `users` +-- + +DROP TABLE IF EXISTS `users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `users` ( + `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Identifiant unique de l''utilisateur', + `user_name` varchar(100) NOT NULL COMMENT 'Nom de l''utilisateur', + `user_firstname` varchar(100) NOT NULL COMMENT 'Prénom de l''utilisateur', + `user_pseudo` varchar(30) NOT NULL COMMENT 'Pseudo de l''utilisateur', + `user_image` varchar(150) DEFAULT NULL COMMENT 'Photo de profil de l''utilisateur', + `user_mail` varchar(100) NOT NULL COMMENT 'Mail de l''utilisateur', + `user_password` varchar(255) NOT NULL COMMENT 'Mot de passe de l''utilisateur', + `user_phone` varchar(20) DEFAULT NULL COMMENT 'Téléphone de l''utilisateur', + `user_work` varchar(50) DEFAULT NULL COMMENT 'Profession de l''utilisateur', + `user_birth` date DEFAULT NULL COMMENT 'Date de naissance de l''utilisateur', + `user_location` varchar(150) DEFAULT NULL COMMENT 'Localisation de l''utilisateur', + `user_description` varchar(255) DEFAULT NULL COMMENT 'Phrase d''accroche de l''utilisateur', + `user_account_creation` datetime NOT NULL DEFAULT current_timestamp() COMMENT 'Date et heure de création du compte', + `user_status` int(10) unsigned DEFAULT NULL COMMENT 'identifiant de niveau d''autorisation', + PRIMARY KEY (`user_id`), + UNIQUE KEY `uk_user_mail` (`user_mail`), + UNIQUE KEY `uk_user_pseudo` (`user_pseudo`), + KEY `fk_users_authorisation` (`user_status`), + KEY `idx_user_mail` (`user_mail`), + CONSTRAINT `fk_users_authorisation` FOREIGN KEY (`user_status`) REFERENCES `authorisation` (`authorisation_id`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `users` +-- + +LOCK TABLES `users` WRITE; +/*!40000 ALTER TABLE `users` DISABLE KEYS */; +INSERT INTO `users` VALUES +(1,'Dupont','Marie','marie_design','/uploads/users/marie.jpg','marie.dupont@example.com','$2y$10$T5kWRD3NBqXKWtQqrBG3We1Qpq2Odum0/xYAoT2SaCclG7h2Y0Gvq','0612345678','Designer UI/UX','1995-03-15','Paris, France','Passionnée de design et d\'expérience utilisateur','2024-01-15 10:30:00',1), +(2,'Martin','Thomas','thomas_dev','/uploads/users/thomas.jpg','thomas.martin@example.com','$2y$10$T5kWRD3NBqXKWtQqrBG3We1Qpq2Odum0/xYAoT2SaCclG7h2Y0Gvq','0623456789','Développeur Full-Stack','1992-07-22','Lyon, France','Créateur d\'applications web modernes','2024-02-20 14:45:00',2), +(3,'Dubois','Sophie','sophie_photo','/uploads/users/sophie.jpg','sophie.dubois@example.com','$2y$10$T5kWRD3NBqXKWtQqrBG3We1Qpq2Odum0/xYAoT2SaCclG7h2Y0Gvq','0634567890','Photographe','1998-11-08','Marseille, France','Capturer l\'instant présent est ma passion','2024-03-10 09:15:00',3); +/*!40000 ALTER TABLE `users` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2026-01-09 17:33:08 diff --git a/public/assests/css/style.css b/public/assests/css/style.css new file mode 100644 index 0000000..74cb2d6 --- /dev/null +++ b/public/assests/css/style.css @@ -0,0 +1,98 @@ +body { + background-color: #f5f5f5; + padding: 2px; +} + +.navbar { + background-color: #ffffff; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + padding: 0.8rem 2rem; +} + +.navbar-brand { + font-size: 1.5rem; + font-weight: bold; + color: #0d6efd !important; +} + +.navbar-brand span { + color: #6c757d; +} + +.navbar-nav .nav-link { + color: #333; + font-weight: 500; + padding: 0.5rem 1rem; + margin: 0 0.2rem; + transition: color 0.3s; +} + +.navbar-nav .nav-link:hover { + color: #0d6efd; +} + +.btn-login { + color: #333; + background-color: transparent; + border: none; + font-weight: 500; + padding: 0.5rem 1rem; +} + +.btn-login:hover { + color: #0d6efd; +} + +.btn-signup { + background-color: #0d6efd; + color: white; + border: none; + border-radius: 25px; + padding: 0.5rem 2rem; + font-weight: 500; + transition: background-color 0.3s; +} + +.btn-signup:hover { + background-color: #0b5ed7; +} + +.notification-bell { + font-size: 1.2rem; + color: #6c757d; + margin-right: 1rem; + cursor: pointer; + transition: color 0.3s; +} + +.notification-bell:hover { + color: #0d6efd; +} + +.logo-image { + height: 30px; + width: auto; + margin-right: 0.5rem; +} +.logo{ + font-size: 5rem; + font-weight: 700; + background: linear-gradient(90deg, #667eea 0%, #764ba2 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.article-card { + height: 400px; +} + +.article-img { + height: 50px; + width: 100%; + overflow: hidden; +} +.article-content { + height: 20%; + padding: 0.75rem; +} diff --git a/css/styles.css b/public/assests/css/styles.css similarity index 100% rename from css/styles.css rename to public/assests/css/styles.css diff --git a/img/Logo-Wordmark.svg b/public/assests/img/Logo-Wordmark.svg similarity index 100% rename from img/Logo-Wordmark.svg rename to public/assests/img/Logo-Wordmark.svg diff --git a/public/assests/img/Logo.png b/public/assests/img/Logo.png new file mode 100644 index 0000000..ba0b4fe Binary files /dev/null and b/public/assests/img/Logo.png differ diff --git a/js/scripts.js b/public/assests/js/scripts.js similarity index 100% rename from js/scripts.js rename to public/assests/js/scripts.js diff --git a/public/assests/styles.css b/public/assests/styles.css new file mode 100644 index 0000000..f78a396 --- /dev/null +++ b/public/assests/styles.css @@ -0,0 +1,11 @@ +/* Style général appliqué à toute la page */ +body{ + /* Couleur de fond claire pour améliorer la lisibilité */ + background: #f7f8fb; +} + +/* Style de base des cartes Bootstrap */ +.card{ + /* Fond blanc pour mettre en valeur le contenu */ + background: #fff; +} diff --git a/public/coucou.txt b/public/coucou.txt new file mode 100644 index 0000000..d590169 --- /dev/null +++ b/public/coucou.txt @@ -0,0 +1,7 @@ +coucou +coucou depuis le cci +hehehe + +coucoucoucoucou + +encore un teste, y'en a trop wwsh \ No newline at end of file diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..b5dd23f --- /dev/null +++ b/public/index.php @@ -0,0 +1,31 @@ +$strMethod(); + }else{ + $boolError = true; + } + }else{ + $boolError = true; + } + }else{ + $boolError = true; + } + + if($boolError){ + echo "error 404 - la page elle existe pas batard"; + } + diff --git a/public/uploads/profiles/.gitkeep b/public/uploads/profiles/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/public/uploads/profiles/Logo.png b/public/uploads/profiles/Logo.png new file mode 100644 index 0000000..ba0b4fe Binary files /dev/null and b/public/uploads/profiles/Logo.png differ diff --git a/public/uploads/profiles/marie.jpg b/public/uploads/profiles/marie.jpg new file mode 100644 index 0000000..2dee9e2 Binary files /dev/null and b/public/uploads/profiles/marie.jpg differ diff --git a/public/uploads/profiles/sophie.jpg b/public/uploads/profiles/sophie.jpg new file mode 100644 index 0000000..5ca533e Binary files /dev/null and b/public/uploads/profiles/sophie.jpg differ diff --git a/public/uploads/profiles/thomas.jpg b/public/uploads/profiles/thomas.jpg new file mode 100644 index 0000000..051578c Binary files /dev/null and b/public/uploads/profiles/thomas.jpg differ diff --git a/public/uploads/projects/.gitkeep b/public/uploads/projects/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/public/uploads/projects/Capture d'écran 2025-11-06 161706.png b/public/uploads/projects/Capture d'écran 2025-11-06 161706.png new file mode 100644 index 0000000..2b88717 Binary files /dev/null and b/public/uploads/projects/Capture d'écran 2025-11-06 161706.png differ diff --git a/public/uploads/projects/Capture d'écran 2026-01-15 144610.png b/public/uploads/projects/Capture d'écran 2026-01-15 144610.png new file mode 100644 index 0000000..cd2ab68 Binary files /dev/null and b/public/uploads/projects/Capture d'écran 2026-01-15 144610.png differ diff --git a/public/uploads/projects/Capture d'écran 2026-01-20 140950.png b/public/uploads/projects/Capture d'écran 2026-01-20 140950.png new file mode 100644 index 0000000..02b7d0b Binary files /dev/null and b/public/uploads/projects/Capture d'écran 2026-01-20 140950.png differ diff --git a/public/uploads/projects/Logo.png b/public/uploads/projects/Logo.png new file mode 100644 index 0000000..ba0b4fe Binary files /dev/null and b/public/uploads/projects/Logo.png differ diff --git a/public/uploads/projects/ecommerce-thumb.jpg b/public/uploads/projects/ecommerce-thumb.jpg new file mode 100644 index 0000000..2dee9e2 Binary files /dev/null and b/public/uploads/projects/ecommerce-thumb.jpg differ diff --git a/public/uploads/projects/taskmanager-thumb.jpg b/public/uploads/projects/taskmanager-thumb.jpg new file mode 100644 index 0000000..051578c Binary files /dev/null and b/public/uploads/projects/taskmanager-thumb.jpg differ diff --git a/public/uploads/projects/urban-thumb.jpg b/public/uploads/projects/urban-thumb.jpg new file mode 100644 index 0000000..5ca533e Binary files /dev/null and b/public/uploads/projects/urban-thumb.jpg differ diff --git a/sfq.txt b/sfq.txt new file mode 100644 index 0000000..e69de29