diff --git a/app/controllers/project_controller.php b/app/controllers/project_controller.php new file mode 100644 index 0000000..8859d06 --- /dev/null +++ b/app/controllers/project_controller.php @@ -0,0 +1,63 @@ +findAll(4); + $arrProjectToDiplay = array(); + foreach($arrProject as $arrDetProject){ + $objProject = new Project; + $objProject->hydrate($arrDetProject); + $arrProjectToDiplay[] = $objProject; + } + + include('../app/views/partials/header.php'); + include('../app/views/home.php'); + include('../app/views/partials/footer.php'); + + } + + public function search(){ + + // inclusion du header + include('../app/views/partials/header.php'); + + //Récupérer les informations du Formulaire + + // Récupération des Projects + $objProjectModel = new ProjectModel; + //$arrProject = findAll(0, $strKeywords, $intAuthor, $intPeriod, $strDate, $strStartDate, $strEndDate); + // 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("../app/models/user_model.php"); + $objUserModel = new UserModel; + $arrUser = $objUserModel->findAllUsers(); + + include('../app/views/search.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..e6d39d9 --- /dev/null +++ b/app/controllers/user_controller.php @@ -0,0 +1,70 @@ + 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['firstname'] = $arrResult['user_firstname']; + $_SESSION['name'] = $arrResult['user_name']; + $_SESSION['id'] = $arrResult['user_id'];*/ + // j'enlève le mot de passe avant la session + //unset($arrResult['user_pwd']); + $_SESSION['user'] = $arrResult; + $_SESSION['success'] = "Bienvenue, vous êtes bien connecté"; + + header("Location:index.php"); + exit; + //var_dump($_SESSION); + //var_dump("Connecté"); + } + } + } + include("../app/views/login.php"); + include("../app/views/partials/footer.php"); + + } + + + public function logout(){ + session_start(); + /*session_destroy(); + 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/mother_entity.php b/app/entities/mother_entity.php new file mode 100644 index 0000000..05eafb0 --- /dev/null +++ b/app/entities/mother_entity.php @@ -0,0 +1,22 @@ +$value){ + $strMethodName = "set".ucfirst(str_replace($this->_prefix,'',$key)); + if (method_exists($this,$strMethodName)){ + $this->$strMethodName($value); + } + } + } + + } \ 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..ab9047e --- /dev/null +++ b/app/entities/project_entity.php @@ -0,0 +1,220 @@ +_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/project_model.php b/app/models/project_model.php new file mode 100644 index 0000000..85742ae --- /dev/null +++ b/app/models/project_model.php @@ -0,0 +1,23 @@ + 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/user_model.php b/app/models/user_model.php new file mode 100644 index 0000000..aaa33c3 --- /dev/null +++ b/app/models/user_model.php @@ -0,0 +1,81 @@ +_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 ('".$objUser->getName()."', + '".$objUser->getFirstname()."', + '".$objUser->getMail()."', + '".$objUser->getPwdHash()."')";*/ + $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 + //var_dump($strRq);die; + //return $db->exec($strRq); + return $rqPrep->execute(); + } + } \ No newline at end of file diff --git a/app/views/home.php b/app/views/home.php new file mode 100644 index 0000000..1f0fff6 --- /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/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/project.php b/app/views/partials/project.php new file mode 100644 index 0000000..1cfefba --- /dev/null +++ b/app/views/partials/project.php @@ -0,0 +1,38 @@ +
+
+ + +
+ +
+ +
+ + + Photo de profil + + +
+

getTitle(); ?>

+ + + + – getCreatorname(); ?> + + + + Lire la suite → + +
+ +
+ +
+
diff --git a/app/views/search.php b/app/views/search.php new file mode 100644 index 0000000..51945f0 --- /dev/null +++ b/app/views/search.php @@ -0,0 +1,135 @@ +
+

Rechercher parmi les articles

+
+
+
+

+ + Rechercher des articles +

+ +
+
+ + + + Recherchez dans les titres et contenus + +
+ +
+ + +
+ + +
+
+ Type de recherche par date +
+ + +
+
+ + +
+
+
+ +
+ + + + 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/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/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/uploads/profiles/.gitkeep b/public/uploads/profiles/.gitkeep similarity index 100% rename from uploads/profiles/.gitkeep rename to public/uploads/profiles/.gitkeep 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/uploads/projects/.gitkeep b/public/uploads/projects/.gitkeep similarity index 100% rename from uploads/projects/.gitkeep rename to public/uploads/projects/.gitkeep 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