From 80dcaee91c7809eb071d838c0265b67f96737154 Mon Sep 17 00:00:00 2001 From: GuillaumeH-Cci Date: Wed, 25 Feb 2026 20:19:35 +0100 Subject: [PATCH] =?UTF-8?q?D=C3=A9but=20du=20soft-delete=20c=C3=B4t=C3=A9?= =?UTF-8?q?=20projet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 98 ++++++++ controllers/project_controller.php | 21 +- database/.gitkeep | 0 database/database.sql | 253 ++++++++++++++++++++ models/project_model.php | 99 ++++---- sfq.txt | 0 uploads/profiles/699f20ffe7dcc.webp | Bin 0 -> 4360 bytes uploads/projects/699f20b493c07.webp | Bin 0 -> 5286 bytes uploads/projects/699f20b4a826c_gallery.webp | Bin 0 -> 3454 bytes uploads/projects/699f315fe7382.webp | Bin 0 -> 4196 bytes uploads/projects/699f316006dea_gallery.webp | Bin 0 -> 1042 bytes uploads/projects/699f31601272b_gallery.webp | Bin 0 -> 3320 bytes uploads/projects/699f31601d2e5_gallery.webp | Bin 0 -> 5930 bytes uploads/projects/699f31602732d_gallery.webp | Bin 0 -> 3454 bytes uploads/projects/699f31919901d.webp | Bin 0 -> 4196 bytes uploads/projects/699f32e7df968.webp | Bin 0 -> 4196 bytes views/_partial/preview.tpl | 6 +- views/inscription.tpl | 197 +++++++++++++++ 18 files changed, 610 insertions(+), 64 deletions(-) create mode 100644 README.md create mode 100644 database/.gitkeep create mode 100644 database/database.sql create mode 100644 sfq.txt create mode 100644 uploads/profiles/699f20ffe7dcc.webp create mode 100644 uploads/projects/699f20b493c07.webp create mode 100644 uploads/projects/699f20b4a826c_gallery.webp create mode 100644 uploads/projects/699f315fe7382.webp create mode 100644 uploads/projects/699f316006dea_gallery.webp create mode 100644 uploads/projects/699f31601272b_gallery.webp create mode 100644 uploads/projects/699f31601d2e5_gallery.webp create mode 100644 uploads/projects/699f31602732d_gallery.webp create mode 100644 uploads/projects/699f31919901d.webp create mode 100644 uploads/projects/699f32e7df968.webp create mode 100644 views/inscription.tpl diff --git a/README.md b/README.md new file mode 100644 index 0000000..ff24f70 --- /dev/null +++ b/README.md @@ -0,0 +1,98 @@ +# Folliow – Projet PHP + +A platform for sharing portfolios and projects, designed as a mix between Behance and LinkedIn. Folliow focuses on highlighting real projects while making it easy to connect with other users. + +This project was developed as part of the **DWWM (Développeur Web et Web Mobile)** training. + +--- + +## Features + +- User authentication and profile management +- Portfolio and project creation +- Project showcase with descriptions and technologies +- User connections / follow system +- Project feed and discovery +- Profile and project search + +--- + +## Tech Stack + +**Client:** HTML, CSS, JavaScript +**Server:** PHP (MVC architecture) +**Database:** MySQL +**Web Server:** Apache + +--- + +## Project Structure + +```text +folliow/ +├── app/ +│ ├── controllers/ +│ ├── models/ +│ └── views/ +├── public/ +│ ├── assets/ +│ └── index.php +├── config/ +│ └── database.php +├── sql/ +│ └── folliow.sql +└── README.md +``` + +--- + +## Installation + +Clone the project + +```bash +git clone https://github.com/Yasder5/projet_php.git +``` + +Go to the project directory + +```bash +cd projet_php +``` + +Import the database + +- Use the SQL file located in the `sql/` directory + +Configure database access + +- Update credentials in `config/database.php` + +Run the project + +- Use a local server (XAMPP, WAMP, or Apache on Linux) + +--- + +## Learning Objectives + +- Build a complete PHP web application +- Apply MVC architecture +- Manage a relational database +- Design a user-oriented portfolio platform + +--- + +## Future Improvements + +- Private messaging +- Likes and comments on projects +- Tags and categories +- Improved responsive design +- Advanced authentication and roles + +--- + +## License + +This project is for educational purposes. diff --git a/controllers/project_controller.php b/controllers/project_controller.php index ae44662..cf00bca 100644 --- a/controllers/project_controller.php +++ b/controllers/project_controller.php @@ -506,13 +506,22 @@ * @author Guillaume */ public function delete(){ + //Vérif utilisateur soit bien modérateur + if (!isset($_SESSION['user']) || $_SESSION['user']['user_status'] != 2) { + header("Location: index.php"); + exit; + } + + $intId = $_GET['id'] ?? null; - //Récupéré l'id dans l'url - $intId = $_GET['id']; - - //Je créer un nouveau model pour exec la commande SQL - $objProjectModel = new ProjectModel; - $objProjectModel->delete($intId); + if ($intId) { + $objProjectModel = new ProjectModel(); + if ($objProjectModel->delete_soft_project((int) $intId)) { + $_SESSION['success'] = "Le projet a été archivé avec succès."; + } else { + $_SESSION['error'] = "Une erreur est survenue lors de l'archivage."; + } + } //Redirection vers la page header("Location: index.php"); diff --git a/database/.gitkeep b/database/.gitkeep new file mode 100644 index 0000000..e69de29 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/models/project_model.php b/models/project_model.php index 04bd1a6..0a72059 100644 --- a/models/project_model.php +++ b/models/project_model.php @@ -24,80 +24,62 @@ user_pseudo AS 'project_creatorname', user_image FROM project - INNER JOIN users ON user_id = project_user_id - WHERE 1=1"; + INNER JOIN users ON user_id = project_user_id"; + + $strRq .= " WHERE project_deleted_at IS NULL"; + + $strAnd = " AND "; + // Recherche par mot clé avec quote pour éviter bug du ' if ($strKeywords != '') { - $strRq .= " AND (project_title LIKE :keywords OR project_content LIKE :keywords)"; - } + + $strSafeKeywords = $this->_db->quote("%" . $strKeywords . "%"); + $strRq .= $strAnd. " (project_title LIKE ".$strSafeKeywords." + OR project_content LIKE ".$strSafeKeywords.") "; + + } + + // Recherche par auteur if ($intAuthor > 0){ - $strRq .= " AND project_user_id = :author"; + $strRq .= $strAnd." user_id = ".$intAuthor; + } + // Recherche par catégorie if ($intCategory > 0){ - $strRq .= " AND project_category = :category"; + $strRq .= $strAnd." project_category = ".$intCategory; } + //recherche par ancienneté if ($boolOlderThan6Months === true) { - $strRq .= " AND project_creation_date <= DATE_SUB(NOW(), INTERVAL 6 MONTH)"; + $strRq .= $strAnd . " project_creation_date <= DATE_SUB(NOW(), INTERVAL 6 MONTH) "; } - + + // Recherche par dates if ($intPeriod == 0){ if ($strDate != ''){ - $strRq .= " AND project_creation_date = :date_exacte"; + $strRq .= $strAnd." project_creation_date = '".$strDate."'"; } - } else { + }else{ if ($strStartDate != '' && $strEndDate != ''){ - $strRq .= " AND project_creation_date BETWEEN :date_debut AND :date_fin"; - } else { + $strRq .= $strAnd." project_creation_date BETWEEN '".$strStartDate."' AND '".$strEndDate."'"; + }else{ if ($strStartDate != ''){ - $strRq .= " AND project_creation_date >= :date_debut"; - } else if ($strEndDate != ''){ - $strRq .= " AND project_creation_date <= :date_fin"; + $strRq .= $strAnd." project_creation_date >= '".$strStartDate."'"; + }else if ($strEndDate != ''){ + $strRq .= $strAnd." project_creation_date <= '".$strEndDate."'"; } } } - + $strRq .= " ORDER BY project_creation_date DESC"; if ($intLimit > 0){ - $strRq .= " LIMIT :limit"; + $strRq .= " LIMIT ".$intLimit; } - $rqPrep = $this->_db->prepare($strRq); - - if ($strKeywords != '') { - $rqPrep->bindValue(':keywords', '%' . $strKeywords . '%', PDO::PARAM_STR); - } - if ($intAuthor > 0){ - $rqPrep->bindValue(':author', $intAuthor, PDO::PARAM_INT); - } - if ($intCategory > 0){ - $rqPrep->bindValue(':category', $intCategory, PDO::PARAM_INT); - } - if ($intPeriod == 0){ - if ($strDate != ''){ - $rqPrep->bindValue(':date_exacte', $strDate, PDO::PARAM_STR); - } - } else { - if ($strStartDate != '' && $strEndDate != ''){ - $rqPrep->bindValue(':date_debut', $strStartDate, PDO::PARAM_STR); - $rqPrep->bindValue(':date_fin', $strEndDate, PDO::PARAM_STR); - } else { - if ($strStartDate != ''){ - $rqPrep->bindValue(':date_debut', $strStartDate, PDO::PARAM_STR); - } else if ($strEndDate != ''){ - $rqPrep->bindValue(':date_fin', $strEndDate, PDO::PARAM_STR); - } - } - } - if ($intLimit > 0){ - $rqPrep->bindValue(':limit', $intLimit, PDO::PARAM_INT); - } - - $rqPrep->execute(); - return $rqPrep->fetchAll(); + return $this->_db->query($strRq)->fetchAll(); } @@ -146,7 +128,8 @@ FROM project INNER JOIN users ON users.user_id = project.project_user_id LEFT JOIN category ON category.category_id = project.project_category - WHERE project.project_id = :id"; + WHERE project.project_id = :id + AND project.project_deleted_at IS NULL"; $rqPrep = $this->_db->prepare($strRq); $rqPrep->bindValue(":id", $intId, PDO::PARAM_INT); @@ -191,12 +174,15 @@ * @param int $id l'id du projet * @return bool Est-ce que la requête s'est bien passée */ - public function delete(int $id){ + public function delete_soft_project(int $intId): bool { + $strRq = "UPDATE project + SET project_deleted_at = NOW() + WHERE project_id = :id"; + + $rqPrep = $this->_db->prepare($strRq); + $rqPrep->bindValue(":id", $intId, PDO::PARAM_INT); - $strRq = "DELETE FROM project - WHERE project_id =".$id; - - return $this->_db->query($strRq); + return $rqPrep->execute(); } /** @@ -312,4 +298,5 @@ return $rqPrep->execute(); } + } \ No newline at end of file diff --git a/sfq.txt b/sfq.txt new file mode 100644 index 0000000..e69de29 diff --git a/uploads/profiles/699f20ffe7dcc.webp b/uploads/profiles/699f20ffe7dcc.webp new file mode 100644 index 0000000000000000000000000000000000000000..cfad5330a11e643fbea10f5200b82860d033c973 GIT binary patch literal 4360 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 CCVX)K literal 0 HcmV?d00001 diff --git a/uploads/projects/699f20b493c07.webp b/uploads/projects/699f20b493c07.webp new file mode 100644 index 0000000000000000000000000000000000000000..d07b20e3406b478c831c6b1e4e554bcabc07fe39 GIT binary patch literal 5286 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 literal 0 HcmV?d00001 diff --git a/uploads/projects/699f20b4a826c_gallery.webp b/uploads/projects/699f20b4a826c_gallery.webp new file mode 100644 index 0000000000000000000000000000000000000000..76941cd5106fd46ac03d358dd752cb9f14623c01 GIT binary patch literal 3454 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 literal 0 HcmV?d00001 diff --git a/uploads/projects/699f315fe7382.webp b/uploads/projects/699f315fe7382.webp new file mode 100644 index 0000000000000000000000000000000000000000..8b576511ea5e7b229bc9d10c75bca86635f430fa GIT binary patch literal 4196 zcmV-q5S#B(Nk&Fo5C8yIMM6+kP&gn^5C8zsRREm6(X;j zE5z6$?*%1Gk3QV@rp>oLHc#R{qc*6<6`%fZPv>R-}b$gkrGtzF~QE;Ma#IZdmd!Fqh%Bin)_z`L%8sP3#VLk&dIa{ zjeG}8JhczRO>nn`aMhQo`kIIaG!7uRd+di`gyWy#&FNVW@MC~E7Iuqq2nR{c%(rvz z>f%X#8KP!+(sTL-074RQkuuF{oSjH>TbnsyJ1crbAcqQoJ-QN=2t&DgHAESeMbW=w z-z*L|MaZ<_5UR_KX8GFQ@|Nl$pmYU?xqab7XcA#>IB-^7`tuJ|x;9LvGyVoI2V7&_ zdUQv;30Teh!)@(6S$z|m$X;OZEkOIJMIoHu@k{>+GhLsq<~-92&CVPM*#m~tDKD{Y z$CiM2_n>fb$k)ZH{eO@XO}{d#TfB#JF>Owyo)QY6@0V;KF1@hq9iGBW-2|j+T!W8D zk!t%ir;1L4JMh-=7EA3VP%{=*F_!&Tbx`F0b!vm8a+29x{EFuw|HaiBhsZM8wqz1~ z^Enii?vI8X$|nk&?T(M3<11^FqIrN(32UrnHSY%pucYVeg8NcgwkN>>UrH?gOm&z2 zcOJzk#8ZKD3ZzH5SLCr`{yJk0GdFq(gvfL_!y+KhPTdhJfR}t3l;k4CoG+=l&^Z@) zjmjVX$Jy`KEh^Zg@~M7-+Ji4BG^I4i^=KxJ8zK9@M?ege9Lqr1;V3zlcz^)@|6Kq8 z0000Gt3}R{V=tM^#1Bcy8bIUjf@v6 zrC^xvXl)4aq#G#frxF23ld>8{+PB(UPMgtO%&)OjG zq<8xxuP0yZ z%wf!{^=0N#h&4=NKMB<4yQfFmO`3sJwzZf)aX9F5ldA4ljug7fqU+xBsR<)V;cW5LJ(Vq% zLkD$>s(&;Cf|~BiKndV51k^W54)*dy9~l-fZN0=mvGw^HQf-b>M7!Dc!3m5hojU8wJFz!~()*zve$7smm4(eU|v z2uZIXZwHXa^@G{k&=Nn;vCVg0M-~PJ^4kc&tfqZB!1_OIs5obneuZ}_tc{@(^(^YA za_&~1HEo$++$@9iS#1+QU*}*DQ@w1XK0G*Qq@6b&Blt<8I2-Qwmi>mk3MTImR&V#5 z;UC#adRuRbIwsk$7^(J3!U)DhWZfN$m^QxPm$jRf(ST9Tv2ljL$~{G=&yl5*vRehp zMjp=*WuL_&#`+k>tFDw-af}CmPb9QUY)jDRGpWRpw`@xo+!!*y7tp9mrmht>0P8u*};fhn2Zv?94R!jq=?Rtw={k)k;^8}qjAfaXXK3LUL9tTqyqQ43dlES-0v82Cpb|nS`cyoA%EAd*L`iF9*>4s!8&~#|;!e(5l%hxrC zUmc|2?l5sTSEw|k_ZpWxGgbvIvB;;M0bHLDy#GPIelSxYm#yV10blETEvkjfk#6(z z*LU=4e(J>CEer1Y8+x8|`qdmvg!90MTlK`wQgxI9D&%&|f7%fpfn*&5fva)bjmswF zk$uDjdnh}QTUl{;vrv=DE|%aV4vsbChTsIWFA zy6kdA>0-G$K?h(IQC7ob@YZ&G>&gl(FFjX4MgC};olb1x6|Y~KJ_-I-XCh6}`0exR zrVD6Gs?C5zAJk_P8WedGh$EV6@BEQ%y}SDr^UhGYMW3;7vn=!f@biw(J_o+m%VF@Y zxh*#tGK|$fI@90eIM`DH-MevBuL~&PotfiIOedZNa}ICR9(d>Mf`^3OZK*XIbsq3T z{#K>^_sk8eGj=r?A$&w({%=sPqQtI&(4mP&+FLhaeZNWhW0zvmZZb53EeuP}12F;L z2WpS_9*1>PLT{|-C*|+XBUuBe6wLraED6&lhFXF%0AdyLRFKSd9g5&6avVz5ZSGb# zVtXLHs9c-9St><&cM-|k+u7@yzZ^CHC(B~ZgWMnuoSn{q>wOh%>wNaN33VGq zxp6bxCb>igzgQdUIs=Akkyfwe5^CHQ$^6@E*3i_Ms;tuLT;m3rDC>TUKAGw-B;dh; zwL@;?Z`#~ACFfv3tiighC(8v$@V0SgIG_e$sg7fC)Oih2A%PoV>@8>daKkw*p#*{p zIuambwUW{qAn|PpBXRSgnFS-q#3YqlAnn2U-0Wu7Ur`x#e6rjRQ3zo94s|{ta7HM? z0tYDvj!>MCYQKv&8E(~%Frp9G_$S@9h7}7n4fjrDQPmwVL@&koNuTB(QCCo}3Ty1W zPyeD}Z;)Iu0*$;n|Ar{!p@)B+2gLOR7%j$VvV9`_}yt~#acpAEP1$4?d{ z5#pX;a5EgWx4!7(muN6VzUL%J*j?=5O74+5ZHkMOrNiRfSObz2y#24P5+>mBUOBv`Xc$P%MWZ0ND2*7;wa zAcz|QQ=$^8YeEi>Z`zURfmuk2N86W-%<#c-;;N0=F%5YPs%@CUy40skY9zZg$Vfyw z02BL1diJolA||WU*7gnv8G#Kf!o+5$EU=pYh?W09LBc+QgY@<9%=1CBMTKVUBXn<< zR6|Np7;y9%WbV+EIQYYfHp%5cw8KyzNOHfUh)WqjrTJGxH1R)2BD1%}fc3}pn6`SH z5q?Mrr@kQ9QtD8rtxmZ;kpNAK12R!xYC$(DQA50E^>-ZTqjM7jTz<|0UPFNvMZBcE zb{g@~=QL#fh3Q~4Dm?md@CNL-+PFgMG{)tXwdd2X=XO=Z;y1+`p?H)-F7f`?qIn1h zv|}_XPr(~GZ6zch%sN6G1|Ws2Ab>(X)DpB-4w&@=RGvO@aDLxAGN+t53~s zpe#US|ni72v>XPWA704v;%o60=Hb=bGjbUU-TEh7U8cPolgO&Md^F zGMkz)(kO>9Du&U`FLBH&P9b~D8(bbrdH=A5vp&3PuC`+S9`l1t>h7OU6CVY(U&MW1 zfx#t36<*u^Ey^c%c4WEVTT|y@bLWqT&~)c7KY*b%DFZ5$E*ePS|GV-JzuSbNw*lXU z=a`%z6x$&nsiOIC>;l=MaQF@f*bn7L=j4IOXRz<@fccDm?~7>Icn_0eIve6Z9KQhJ zh)AeT>}}6IweiiECX4`KCb|9J?1r6Ax!iSP=wmM6MlMzD_#SmND@bMXgHt|bu+lzO ze~P1+fm_R;{S{ab$qe?m*}&wVO`YnW@@iMxI+$q^P!z#P7UA?iNaS!oGQ} zqdhUr?XYiWVeQFM58#{f2QtodesiFy@kCAIgTv$bIRTF3fRh=3z|GHI8zYSC5UrQh zrf*c%N(rdP(^r!39kCboXBCx)L5q6EaH}zaaqYeGWt~WwZgp?g4FVXiLPVqy87NNt zZ}gT+yKojE6-p5J@-v|S0E62HG;1B!@e3%BvYk^d6=v>9aC6$luGQ*Hvlw~)c_zO- zEGjktj!uy7*KH1kmocema{?YS(w;l1#03n|7)U4m>>YA4KSnymu1dkV)ei&gH1esE zmWZA{b#^Raf&#Scv6=o~Okg)p4MFRqDc1a%6DZBwAB>FcgXpDhpm3UyPUu-%)Ox&s z=9f-b!@(`VGZI+ubF+z!e^S_-ju9URcn4d|EI?Yyd zp&riwPb*EP=41SeHrrXa>e*=QwkN7}Iyi`l-MQna?UYhjS2LnIW>*c+CDUyo&8{MY zI44Xh1tyHxE~Lv-ssbYz8aWbS78^DuSxAmE$6Vc`xe}W8N4-MpT;ijW6%voxTV}70 zDcep>irLSt&WFr5xKbue-p0IIUkj_#f;~FOByAPk{33{r>UA{BA#bEQH#AfVfu)1wcrhA9O8Hll9bIh9kLht(iW@LME#omfSGrPdZHl+lgK)F zGpW}(g<-pOtvH40U8bmoZ6) zCY|*Kjg4tNpQW`%8#Z!uj5RXGiBd$lcnhC+esHs3{V>|mS4naXDrS!|iPO5-s`HRT u^OsDrzia;BBZ~Y;S$s)_Ubl%{kV15&Mz6 zL6^7u8gMWvnOuFCeC3&*HmeLh!L)SF|8bUZON~D;9J|Kp>f7G(EQu_`77;Kyfr>m;OO&6L{YZjX7q)X1Nn~TYPEH> zFC_bZEZ-eUa?phni%PFZ+{$H`l9g;s=brb5rs~l*m;T$kySux)ySux)0092~xNra} zOfQtHCX@59+za8^&eQ?m{LFRt=y59^^F~RnP9XjSmc>)s%wNR*iT~ok%Xtw@ZljHf z6wj+2FxULNffrzx$BaE(8&z|Swj$VcyU-Il9m!`xnZ#8oL%HwU%x$5?O7jSO+Qk|k zr8bZ9LTOHk?(M5I$IAeo<+Q_;`TSvm_?CetU1LNPS<@5do*Xhfnu0FI?+=8C<2sSp z+<8yjJ@fdSMJ)UE8Rk(@$qDY}TqTQ$zwG`1-w$XiyGRU=Q8wsRg%oMIN@|C^Qcp9< zx!Q@XRZ!ZGCq4}H40azlgy%ZArp`$s=V6xqX@+w~tB6Pvdmmu=jj0SuUiH4)dR3&W zx9^_iXF&}mv8ErE7dAj{>-J%{og5cA{=BFt@}_xJ+LyX2>vx;i-j(YTbq7F|m?@#@WtUgEt`8 zyD@e}87Q;S&ntjA3vc+yT@J=3nXA6ev(~f&`;{X^$7;8%vy~m98uX9+<;MwnY}-N& zRA~M8SVfiQR7rGW{hJVdsyaBpo=qpY?<#e{SNGF+7F)o|j7ZY(oUc>RS%@71Z=;A) z5SKsb{%sg4aHK{^v(fiGVM9Tygule`nEFZDz(Q{GEOtM%w%<5Oq4&?}C|E88*Z^+S zu+p9b3XPkHn>|FMph4BCTg^NnOn_Z`ftOWAG-<0`i07E$LQCBuL`p}ma7gAxX);N! z+6$B6@_+rEQsV6{=W)2To9?{y9LN>3n|TdwL=TmX>t+ylwcrS`Tr**jI2*~ zx7R4K)ROFil_bHSzHJK)P5rEDRl@|34CUadVQKy_)I!C)VdiVb*kxyPDlHfyMiJy} MOY6~yOTz#F07@(j6951J literal 0 HcmV?d00001 diff --git a/uploads/projects/699f31601272b_gallery.webp b/uploads/projects/699f31601272b_gallery.webp new file mode 100644 index 0000000000000000000000000000000000000000..88d37ae1a9f98344f83dc778c5fc0f2bfd47c536 GIT binary patch literal 3320 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 CD{A`y literal 0 HcmV?d00001 diff --git a/uploads/projects/699f31601d2e5_gallery.webp b/uploads/projects/699f31601d2e5_gallery.webp new file mode 100644 index 0000000000000000000000000000000000000000..bd69290784d2199885e434c08abd6036b45b333c GIT binary patch literal 5930 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 literal 0 HcmV?d00001 diff --git a/uploads/projects/699f31919901d.webp b/uploads/projects/699f31919901d.webp new file mode 100644 index 0000000000000000000000000000000000000000..8b576511ea5e7b229bc9d10c75bca86635f430fa GIT binary patch literal 4196 zcmV-q5S#B(Nk&Fo5C8yIMM6+kP&gn^5C8zsRREm6(X;j zE5z6$?*%1Gk3QV@rp>oLHc#R{qc*6<6`%fZPv>R-}b$gkrGtzF~QE;Ma#IZdmd!Fqh%Bin)_z`L%8sP3#VLk&dIa{ zjeG}8JhczRO>nn`aMhQo`kIIaG!7uRd+di`gyWy#&FNVW@MC~E7Iuqq2nR{c%(rvz z>f%X#8KP!+(sTL-074RQkuuF{oSjH>TbnsyJ1crbAcqQoJ-QN=2t&DgHAESeMbW=w z-z*L|MaZ<_5UR_KX8GFQ@|Nl$pmYU?xqab7XcA#>IB-^7`tuJ|x;9LvGyVoI2V7&_ zdUQv;30Teh!)@(6S$z|m$X;OZEkOIJMIoHu@k{>+GhLsq<~-92&CVPM*#m~tDKD{Y z$CiM2_n>fb$k)ZH{eO@XO}{d#TfB#JF>Owyo)QY6@0V;KF1@hq9iGBW-2|j+T!W8D zk!t%ir;1L4JMh-=7EA3VP%{=*F_!&Tbx`F0b!vm8a+29x{EFuw|HaiBhsZM8wqz1~ z^Enii?vI8X$|nk&?T(M3<11^FqIrN(32UrnHSY%pucYVeg8NcgwkN>>UrH?gOm&z2 zcOJzk#8ZKD3ZzH5SLCr`{yJk0GdFq(gvfL_!y+KhPTdhJfR}t3l;k4CoG+=l&^Z@) zjmjVX$Jy`KEh^Zg@~M7-+Ji4BG^I4i^=KxJ8zK9@M?ege9Lqr1;V3zlcz^)@|6Kq8 z0000Gt3}R{V=tM^#1Bcy8bIUjf@v6 zrC^xvXl)4aq#G#frxF23ld>8{+PB(UPMgtO%&)OjG zq<8xxuP0yZ z%wf!{^=0N#h&4=NKMB<4yQfFmO`3sJwzZf)aX9F5ldA4ljug7fqU+xBsR<)V;cW5LJ(Vq% zLkD$>s(&;Cf|~BiKndV51k^W54)*dy9~l-fZN0=mvGw^HQf-b>M7!Dc!3m5hojU8wJFz!~()*zve$7smm4(eU|v z2uZIXZwHXa^@G{k&=Nn;vCVg0M-~PJ^4kc&tfqZB!1_OIs5obneuZ}_tc{@(^(^YA za_&~1HEo$++$@9iS#1+QU*}*DQ@w1XK0G*Qq@6b&Blt<8I2-Qwmi>mk3MTImR&V#5 z;UC#adRuRbIwsk$7^(J3!U)DhWZfN$m^QxPm$jRf(ST9Tv2ljL$~{G=&yl5*vRehp zMjp=*WuL_&#`+k>tFDw-af}CmPb9QUY)jDRGpWRpw`@xo+!!*y7tp9mrmht>0P8u*};fhn2Zv?94R!jq=?Rtw={k)k;^8}qjAfaXXK3LUL9tTqyqQ43dlES-0v82Cpb|nS`cyoA%EAd*L`iF9*>4s!8&~#|;!e(5l%hxrC zUmc|2?l5sTSEw|k_ZpWxGgbvIvB;;M0bHLDy#GPIelSxYm#yV10blETEvkjfk#6(z z*LU=4e(J>CEer1Y8+x8|`qdmvg!90MTlK`wQgxI9D&%&|f7%fpfn*&5fva)bjmswF zk$uDjdnh}QTUl{;vrv=DE|%aV4vsbChTsIWFA zy6kdA>0-G$K?h(IQC7ob@YZ&G>&gl(FFjX4MgC};olb1x6|Y~KJ_-I-XCh6}`0exR zrVD6Gs?C5zAJk_P8WedGh$EV6@BEQ%y}SDr^UhGYMW3;7vn=!f@biw(J_o+m%VF@Y zxh*#tGK|$fI@90eIM`DH-MevBuL~&PotfiIOedZNa}ICR9(d>Mf`^3OZK*XIbsq3T z{#K>^_sk8eGj=r?A$&w({%=sPqQtI&(4mP&+FLhaeZNWhW0zvmZZb53EeuP}12F;L z2WpS_9*1>PLT{|-C*|+XBUuBe6wLraED6&lhFXF%0AdyLRFKSd9g5&6avVz5ZSGb# zVtXLHs9c-9St><&cM-|k+u7@yzZ^CHC(B~ZgWMnuoSn{q>wOh%>wNaN33VGq zxp6bxCb>igzgQdUIs=Akkyfwe5^CHQ$^6@E*3i_Ms;tuLT;m3rDC>TUKAGw-B;dh; zwL@;?Z`#~ACFfv3tiighC(8v$@V0SgIG_e$sg7fC)Oih2A%PoV>@8>daKkw*p#*{p zIuambwUW{qAn|PpBXRSgnFS-q#3YqlAnn2U-0Wu7Ur`x#e6rjRQ3zo94s|{ta7HM? z0tYDvj!>MCYQKv&8E(~%Frp9G_$S@9h7}7n4fjrDQPmwVL@&koNuTB(QCCo}3Ty1W zPyeD}Z;)Iu0*$;n|Ar{!p@)B+2gLOR7%j$VvV9`_}yt~#acpAEP1$4?d{ z5#pX;a5EgWx4!7(muN6VzUL%J*j?=5O74+5ZHkMOrNiRfSObz2y#24P5+>mBUOBv`Xc$P%MWZ0ND2*7;wa zAcz|QQ=$^8YeEi>Z`zURfmuk2N86W-%<#c-;;N0=F%5YPs%@CUy40skY9zZg$Vfyw z02BL1diJolA||WU*7gnv8G#Kf!o+5$EU=pYh?W09LBc+QgY@<9%=1CBMTKVUBXn<< zR6|Np7;y9%WbV+EIQYYfHp%5cw8KyzNOHfUh)WqjrTJGxH1R)2BD1%}fc3}pn6`SH z5q?Mrr@kQ9QtD8rtxmZ;kpNAK12R!xYC$(DQA50E^>-ZTqjM7jTz<|0UPFNvMZBcE zb{g@~=QL#fh3Q~4Dm?md@CNL-+PFgMG{)tXwdd2X=XO=Z;y1+`p?H)-F7f`?qIn1h zv|}_XPr(~GZ6zch%sN6G1|Ws2Ab>(X)DpB-4w&@=RGvO@aDLxAGN+t53~s zpe#US|ni72v>XPWA704v;%o60=Hb=bGjbUU-TEh7U8cPolgO&Md^F zGMkz)(kO>9Du&U`FLBH&P9b~D8(bbrdH=A5vp&3PuC`+S9`l1t>h7OU6CVY(U&MW1 zfx#t36<*u^Ey^c%c4WEVTT|y@bLWqT&~)c7KY*b%DFZ5$E*ePS|GV-JzuSbNw*lXU z=a`%z6x$&nsiOIC>;l=MaQF@f*bn7L=j4IOXRz<@fccDm?~7>Icn_0eIve6Z9KQhJ zh)AeT>}}6IweiiECX4`KCb|9J?1r6Ax!iSP=wmM6MlMzD_#SmND@bMXgHt|bu+lzO ze~P1+fm_R;{S{ab$qe?m*}&wVO`YnW@@iMxI+$q^P!z#P7UA?iNaS!oGQ} zqdhUr?XYiWVeQFM58#{f2QtodesiFy@kCAIgTv$bIRTF3fRh=3z|GHI8zYSC5UrQh zrf*c%N(rdP(^r!39kCboXBCx)L5q6EaH}zaaqYeGWt~WwZgp?g4FVXiLPVqy87NNt zZ}gT+yKojE6-p5J@-v|S0E62HG;1B!@e3%BvYk^d6=v>9aC6$luGQ*Hvlw~)c_zO- zEGjktj!uy7*KH1kmocema{?YS(w;l1#03n|7)U4m>>YA4KSnymu1dkV)ei&gH1esE zmWZA{b#^Raf&#Scv6=o~Okg)p4MFRqDc1a%6DZBwAB>FcgXpDhpm3UyPUu-%)Ox&s z=9f-b!@(`VGZI+ubF+z!e^S_-ju9URcn4d|EI?Yyd zp&riwPb*EP=41SeHrrXa>e*=QwkN7}Iyi`l-MQna?UYhjS2LnIW>*c+CDUyo&8{MY zI44Xh1tyHxE~Lv-ssbYz8aWbS78^DuSxAmE$6Vc`xe}W8N4-MpT;ijW6%voxTV}70 zDcep>irLSt&WFr5xKbue-p0IIUkj_#f;~FOByAPk{33{r>UA{BA#bEQH#AfVfu)1wcrhA9O8Hll9bIh9kLht(iW@LME#omfSGrPdZHl+lgK)F zGpW}(g<-pOtvH40U8bmoZ6) zCY|*Kjg4tNpQW`%8#Z!uj5RXGiBd$lcnhC+esHs3{V>|mS4naXDrS!|iPO5-s`HRT u^OsDrzia;BBZ~Y6(X;j zE5z6$?*%1Gk3QV@rp>oLHc#R{qc*6<6`%fZPv>R-}b$gkrGtzF~QE;Ma#IZdmd!Fqh%Bin)_z`L%8sP3#VLk&dIa{ zjeG}8JhczRO>nn`aMhQo`kIIaG!7uRd+di`gyWy#&FNVW@MC~E7Iuqq2nR{c%(rvz z>f%X#8KP!+(sTL-074RQkuuF{oSjH>TbnsyJ1crbAcqQoJ-QN=2t&DgHAESeMbW=w z-z*L|MaZ<_5UR_KX8GFQ@|Nl$pmYU?xqab7XcA#>IB-^7`tuJ|x;9LvGyVoI2V7&_ zdUQv;30Teh!)@(6S$z|m$X;OZEkOIJMIoHu@k{>+GhLsq<~-92&CVPM*#m~tDKD{Y z$CiM2_n>fb$k)ZH{eO@XO}{d#TfB#JF>Owyo)QY6@0V;KF1@hq9iGBW-2|j+T!W8D zk!t%ir;1L4JMh-=7EA3VP%{=*F_!&Tbx`F0b!vm8a+29x{EFuw|HaiBhsZM8wqz1~ z^Enii?vI8X$|nk&?T(M3<11^FqIrN(32UrnHSY%pucYVeg8NcgwkN>>UrH?gOm&z2 zcOJzk#8ZKD3ZzH5SLCr`{yJk0GdFq(gvfL_!y+KhPTdhJfR}t3l;k4CoG+=l&^Z@) zjmjVX$Jy`KEh^Zg@~M7-+Ji4BG^I4i^=KxJ8zK9@M?ege9Lqr1;V3zlcz^)@|6Kq8 z0000Gt3}R{V=tM^#1Bcy8bIUjf@v6 zrC^xvXl)4aq#G#frxF23ld>8{+PB(UPMgtO%&)OjG zq<8xxuP0yZ z%wf!{^=0N#h&4=NKMB<4yQfFmO`3sJwzZf)aX9F5ldA4ljug7fqU+xBsR<)V;cW5LJ(Vq% zLkD$>s(&;Cf|~BiKndV51k^W54)*dy9~l-fZN0=mvGw^HQf-b>M7!Dc!3m5hojU8wJFz!~()*zve$7smm4(eU|v z2uZIXZwHXa^@G{k&=Nn;vCVg0M-~PJ^4kc&tfqZB!1_OIs5obneuZ}_tc{@(^(^YA za_&~1HEo$++$@9iS#1+QU*}*DQ@w1XK0G*Qq@6b&Blt<8I2-Qwmi>mk3MTImR&V#5 z;UC#adRuRbIwsk$7^(J3!U)DhWZfN$m^QxPm$jRf(ST9Tv2ljL$~{G=&yl5*vRehp zMjp=*WuL_&#`+k>tFDw-af}CmPb9QUY)jDRGpWRpw`@xo+!!*y7tp9mrmht>0P8u*};fhn2Zv?94R!jq=?Rtw={k)k;^8}qjAfaXXK3LUL9tTqyqQ43dlES-0v82Cpb|nS`cyoA%EAd*L`iF9*>4s!8&~#|;!e(5l%hxrC zUmc|2?l5sTSEw|k_ZpWxGgbvIvB;;M0bHLDy#GPIelSxYm#yV10blETEvkjfk#6(z z*LU=4e(J>CEer1Y8+x8|`qdmvg!90MTlK`wQgxI9D&%&|f7%fpfn*&5fva)bjmswF zk$uDjdnh}QTUl{;vrv=DE|%aV4vsbChTsIWFA zy6kdA>0-G$K?h(IQC7ob@YZ&G>&gl(FFjX4MgC};olb1x6|Y~KJ_-I-XCh6}`0exR zrVD6Gs?C5zAJk_P8WedGh$EV6@BEQ%y}SDr^UhGYMW3;7vn=!f@biw(J_o+m%VF@Y zxh*#tGK|$fI@90eIM`DH-MevBuL~&PotfiIOedZNa}ICR9(d>Mf`^3OZK*XIbsq3T z{#K>^_sk8eGj=r?A$&w({%=sPqQtI&(4mP&+FLhaeZNWhW0zvmZZb53EeuP}12F;L z2WpS_9*1>PLT{|-C*|+XBUuBe6wLraED6&lhFXF%0AdyLRFKSd9g5&6avVz5ZSGb# zVtXLHs9c-9St><&cM-|k+u7@yzZ^CHC(B~ZgWMnuoSn{q>wOh%>wNaN33VGq zxp6bxCb>igzgQdUIs=Akkyfwe5^CHQ$^6@E*3i_Ms;tuLT;m3rDC>TUKAGw-B;dh; zwL@;?Z`#~ACFfv3tiighC(8v$@V0SgIG_e$sg7fC)Oih2A%PoV>@8>daKkw*p#*{p zIuambwUW{qAn|PpBXRSgnFS-q#3YqlAnn2U-0Wu7Ur`x#e6rjRQ3zo94s|{ta7HM? z0tYDvj!>MCYQKv&8E(~%Frp9G_$S@9h7}7n4fjrDQPmwVL@&koNuTB(QCCo}3Ty1W zPyeD}Z;)Iu0*$;n|Ar{!p@)B+2gLOR7%j$VvV9`_}yt~#acpAEP1$4?d{ z5#pX;a5EgWx4!7(muN6VzUL%J*j?=5O74+5ZHkMOrNiRfSObz2y#24P5+>mBUOBv`Xc$P%MWZ0ND2*7;wa zAcz|QQ=$^8YeEi>Z`zURfmuk2N86W-%<#c-;;N0=F%5YPs%@CUy40skY9zZg$Vfyw z02BL1diJolA||WU*7gnv8G#Kf!o+5$EU=pYh?W09LBc+QgY@<9%=1CBMTKVUBXn<< zR6|Np7;y9%WbV+EIQYYfHp%5cw8KyzNOHfUh)WqjrTJGxH1R)2BD1%}fc3}pn6`SH z5q?Mrr@kQ9QtD8rtxmZ;kpNAK12R!xYC$(DQA50E^>-ZTqjM7jTz<|0UPFNvMZBcE zb{g@~=QL#fh3Q~4Dm?md@CNL-+PFgMG{)tXwdd2X=XO=Z;y1+`p?H)-F7f`?qIn1h zv|}_XPr(~GZ6zch%sN6G1|Ws2Ab>(X)DpB-4w&@=RGvO@aDLxAGN+t53~s zpe#US|ni72v>XPWA704v;%o60=Hb=bGjbUU-TEh7U8cPolgO&Md^F zGMkz)(kO>9Du&U`FLBH&P9b~D8(bbrdH=A5vp&3PuC`+S9`l1t>h7OU6CVY(U&MW1 zfx#t36<*u^Ey^c%c4WEVTT|y@bLWqT&~)c7KY*b%DFZ5$E*ePS|GV-JzuSbNw*lXU z=a`%z6x$&nsiOIC>;l=MaQF@f*bn7L=j4IOXRz<@fccDm?~7>Icn_0eIve6Z9KQhJ zh)AeT>}}6IweiiECX4`KCb|9J?1r6Ax!iSP=wmM6MlMzD_#SmND@bMXgHt|bu+lzO ze~P1+fm_R;{S{ab$qe?m*}&wVO`YnW@@iMxI+$q^P!z#P7UA?iNaS!oGQ} zqdhUr?XYiWVeQFM58#{f2QtodesiFy@kCAIgTv$bIRTF3fRh=3z|GHI8zYSC5UrQh zrf*c%N(rdP(^r!39kCboXBCx)L5q6EaH}zaaqYeGWt~WwZgp?g4FVXiLPVqy87NNt zZ}gT+yKojE6-p5J@-v|S0E62HG;1B!@e3%BvYk^d6=v>9aC6$luGQ*Hvlw~)c_zO- zEGjktj!uy7*KH1kmocema{?YS(w;l1#03n|7)U4m>>YA4KSnymu1dkV)ei&gH1esE zmWZA{b#^Raf&#Scv6=o~Okg)p4MFRqDc1a%6DZBwAB>FcgXpDhpm3UyPUu-%)Ox&s z=9f-b!@(`VGZI+ubF+z!e^S_-ju9URcn4d|EI?Yyd zp&riwPb*EP=41SeHrrXa>e*=QwkN7}Iyi`l-MQna?UYhjS2LnIW>*c+CDUyo&8{MY zI44Xh1tyHxE~Lv-ssbYz8aWbS78^DuSxAmE$6Vc`xe}W8N4-MpT;ijW6%voxTV}70 zDcep>irLSt&WFr5xKbue-p0IIUkj_#f;~FOByAPk{33{r>UA{BA#bEQH#AfVfu)1wcrhA9O8Hll9bIh9kLht(iW@LME#omfSGrPdZHl+lgK)F zGpW}(g<-pOtvH40U8bmoZ6) zCY|*Kjg4tNpQW`%8#Z!uj5RXGiBd$lcnhC+esHs3{V>|mS4naXDrS!|iPO5-s`HRT u^OsDrzia;BBZ~YRefuser Supprimer + href="index.php?ctrl=project&action=delete&id={$objProject->getId()}" + name="toDelete" + onclick="return confirm('Attention ! Êtes-vous sûr de vouloir supprimer ce projet ? Cette action est irréversible.');"> + Supprimer {elseif $objProject->getStatus() == "refusé"} diff --git a/views/inscription.tpl b/views/inscription.tpl new file mode 100644 index 0000000..7b82e77 --- /dev/null +++ b/views/inscription.tpl @@ -0,0 +1,197 @@ +{extends file="views/layout.tpl"} + +{block name="content"} + + + +
+ + +
+
+ + +
+ + +

Inscription

+ + +

+ Créez votre compte utilisateur. +

+ {if (isset($arrError) && count($arrError) > 0) } +
+ {foreach $arrError as $strError} +

{$strError}

+ {/foreach} +
+ {/if} + + +
+ +
+ + +
+ + +
+ + +
+ + +
+ + +
+ +
+ @ + +
+
+ + +
+ + +
+ + +
+ + +
+ +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ +
+ + +
+ + Déjà un compte ? + Se connecter + +
+ + +
+ + +
+ +
+
+
+{/block} \ No newline at end of file