Compare commits

..

1 commit

Author SHA1 Message Date
Yasder5
cc5a57f8b2 doxygen
Some checks failed
Deploy production (servyass) / deploy (push) Has been cancelled
2026-03-02 20:05:50 +01:00
98 changed files with 552 additions and 1905 deletions

10
.env Normal file
View file

@ -0,0 +1,10 @@
# config BDD
DB_CONNECTION=mysql
DB_HOSTNAME=boulayoune.com
DB_DATABASE=projet_folliow
DB_USERNAME=
DB_PASSWORD=
IMG_PROJECT_PATH = uploads/projects/
IMG_USER_PATH = uploads/profiles/

1
.gitignore vendored
View file

@ -1,4 +1,3 @@
/templates_c/ /templates_c/
/templates_c/** /templates_c/**
.env .env
.htaccess

View file

@ -10,11 +10,6 @@ body {
background-color: #ffffff; background-color: #ffffff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
padding: 0.8rem 2rem; padding: 0.8rem 2rem;
min-height: 64px;
max-height: 64px;
}
.navbar .navbar-collapse {
align-items: center;
} }
.navbar-brand { .navbar-brand {
@ -34,13 +29,7 @@ body {
margin: 0 0.2rem; margin: 0 0.2rem;
transition: color 0.3s; transition: color 0.3s;
} }
.nav-avatar {
width: 36px;
height: 36px;
object-fit: cover;
border-radius: 50%;
display: block;
}
.navbar-nav .nav-link:hover { .navbar-nav .nav-link:hover {
color: #0d6efd; color: #0d6efd;
} }
@ -128,51 +117,3 @@ body {
.txt_title { .txt_title {
color: rgb(51, 152, 217); color: rgb(51, 152, 217);
} }
/* On cible la card sans casser ses propriétés Bootstrap */
.tiger-theme {
background-color: #ff8c00 !important; /* Orange tigre */
background-image: repeating-linear-gradient(
45deg,
transparent,
transparent 30px,
rgba(0, 0, 0, 0.15) 30px,
rgba(0, 0, 0, 0.15) 60px
) !important;
border: 2px solid #000 !important;
color: #000 !important;
position: relative;
z-index: 1;
}
/* Style du texte pour qu'il ressorte sur l'orange */
.tiger-text {
font-weight: 800 !important;
text-transform: uppercase;
color: #000 !important;
}
.tiger-date {
font-size: 0.8rem;
font-weight: bold;
color: rgba(0, 0, 0, 0.7);
}
/* Bordure de l'image (n'affecte pas la taille de la card) */
.tiger-border {
box-shadow: 0 0 0 4px #000;
}
/* Bouton style tigre */
.btn-tiger {
background-color: #000 !important;
color: #ff8c00 !important;
border: none !important;
font-weight: bold !important;
transition: transform 0.2s;
}
.btn-tiger:hover {
transform: scale(1.05);
background-color: #222 !important;
}

View file

@ -21,8 +21,8 @@
public function admin(){ public function admin(){
if (!isset($_SESSION['user']) && ($_SESSION['user']['user_status'] != 1 )){ if (!isset($_SESSION['user']) && ($_SESSION['user']['user_status'] != 1 )){
$error = new \Controllers\ErrorCtrl(); header("Location:index.php?ctrl=error&action=error_403");
return $error->error_403(); exit;
} }
$objCategoryModel = new CategoryModel; $objCategoryModel = new CategoryModel;
@ -32,7 +32,7 @@
$newCat->setName($_POST['new_category']); $newCat->setName($_POST['new_category']);
$objCategoryModel->insertCategory($newCat); $objCategoryModel->insertCategory($newCat);
$_SESSION['success'] = "La catégorie a bien été ajoutée"; $_SESSION['success'] = "La catégorie a bien été ajoutée";
header('Location: '.$_ENV['BASE_URL'].'/admin/admin'); header('Location: index.php?ctrl=admin&action=admin');
exit; exit;
} }
@ -42,7 +42,7 @@
$editCat->setName($_POST['new_name']); $editCat->setName($_POST['new_name']);
$objCategoryModel->editCategory($editCat); $objCategoryModel->editCategory($editCat);
$_SESSION['success'] = "La catégorie a bien été modifiée"; $_SESSION['success'] = "La catégorie a bien été modifiée";
header('Location: '.$_ENV['BASE_URL'].'/admin/admin'); header('Location: index.php?ctrl=admin&action=admin');
exit; exit;
} }
@ -73,7 +73,7 @@
$objUserModel->delete_soft($intUserId); $objUserModel->delete_soft($intUserId);
$_SESSION['success'] = "L'utilisateur a été supprimé."; $_SESSION['success'] = "L'utilisateur a été supprimé.";
} }
header('Location: '.$_ENV['BASE_URL'].'/admin/admin'); header("Location: index.php?ctrl=admin&action=admin");
exit; exit;
} }
} }

View file

@ -11,18 +11,14 @@
* Page erreur 404 * Page erreur 404
*/ */
public function error_404(){ public function error_404(){
http_response_code(404);
$this->_display("error_404"); $this->_display("error_404");
exit;
} }
/** /**
* Page erreur 403 * Page erreur 403
*/ */
public function error_403(){ public function error_403(){
http_response_code(403);
$this->_display("error_403"); $this->_display("error_403");
exit;
} }
} }

View file

@ -23,7 +23,6 @@
$objSmarty = new Smarty(); $objSmarty = new Smarty();
$objSmarty->registerPlugin('modifier', 'vardump', 'var_dump'); $objSmarty->registerPlugin('modifier', 'vardump', 'var_dump');
$objSmarty->registerPlugin('modifier', 'file_exists', 'file_exists'); $objSmarty->registerPlugin('modifier', 'file_exists', 'file_exists');
$objSmarty->registerPlugin('modifier', 'stripos', 'stripos');
$objSmarty->caching = false; $objSmarty->caching = false;
$objSmarty->force_compile = true; $objSmarty->force_compile = true;

View file

@ -79,7 +79,7 @@
*/ */
public function search(){ public function search(){
$strKeywords = $_POST['keywords']??""; $strKeywords = $_POST['keywords']??'';
$intAuthor = $_POST['author']??0; $intAuthor = $_POST['author']??0;
$intPeriod = $_POST['period']??0; $intPeriod = $_POST['period']??0;
$strDate = $_POST['date']??''; $strDate = $_POST['date']??'';
@ -124,8 +124,8 @@
*/ */
public function addedit_project() { public function addedit_project() {
if (!isset($_SESSION['user'])){ if (!isset($_SESSION['user'])){
$error = new \Controllers\ErrorCtrl(); header("Location:index.php?ctrl=error&action=error_403");
return $error->error_403(); exit;
} }
$objProject = new Project; $objProject = new Project;
@ -135,8 +135,8 @@
if (isset($_GET['id'])){ if (isset($_GET['id'])){
$arrProject = $objProjectModel->findOne($_GET['id']); $arrProject = $objProjectModel->findOne($_GET['id']);
if($_SESSION['user']['user_id'] != $arrProject['project_user_id']){ if($_SESSION['user']['user_id'] != $arrProject['project_user_id']){
$error = new \Controllers\ErrorCtrl(); header("Location:index.php?ctrl=error&action=error_403");
return $error->error_403(); exit;
} }
$objProject->hydrate($arrProject); $objProject->hydrate($arrProject);
$this->_arrData['arrImages'] = $objProjectModel->getImagesByProjectId($objProject->getId()); $this->_arrData['arrImages'] = $objProjectModel->getImagesByProjectId($objProject->getId());
@ -200,7 +200,7 @@
$strSource = $_FILES['thumbnail']['tmp_name']; $strSource = $_FILES['thumbnail']['tmp_name'];
list($intWidth, $intHeight) = getimagesize($strSource); list($intWidth, $intHeight) = getimagesize($strSource);
$intDestWidth = 1280; $intDestHeight = 720; $intDestWidth = 200; $intDestHeight = 250;
$fltDestRatio = $intDestWidth / $intDestHeight; $fltDestRatio = $intDestWidth / $intDestHeight;
$fltSourceRatio = $intWidth / $intHeight; $fltSourceRatio = $intWidth / $intHeight;
@ -325,7 +325,7 @@
} }
$_SESSION['success'] = (!isset($_GET['id'])) ? "Le projet a bien été créé" : "Le projet a bien été modifié"; $_SESSION['success'] = (!isset($_GET['id'])) ? "Le projet a bien été créé" : "Le projet a bien été modifié";
header('Location:'.$_ENV['BASE_URL']); header("Location:index.php");
exit; exit;
} else { } else {
$arrError[] = "Erreur lors de l'enregistrement en base de données"; $arrError[] = "Erreur lors de l'enregistrement en base de données";
@ -360,9 +360,9 @@
$objProjectModel = new ProjectModel(); $objProjectModel = new ProjectModel();
$arrProject = $objProjectModel->findOne((int)$intId); $arrProject = $objProjectModel->findOne((int)$intId);
$arrImages = $objProjectModel->getImagesByProjectId((int)$intId);
if ($arrProject) { if ($arrProject) {
$arrImages = $objProjectModel->getImagesByProjectId((int)$intId);
$objProject = new Project(); $objProject = new Project();
$objProject->hydrate($arrProject); $objProject->hydrate($arrProject);
@ -373,11 +373,11 @@
$this->_display("project_display"); $this->_display("project_display");
} else { } else {
header('Location: '.$_ENV['BASE_URL'].'/project/home'); header("Location: index.php?ctrl=project&action=home");
exit; exit;
} }
} else { } else {
header('Location: '.$_ENV['BASE_URL'].'/project/home'); header("Location: index.php?ctrl=project&action=home");
exit; exit;
} }
} }
@ -395,7 +395,7 @@
$arrProject = $objProjectModel->findOne($projectId); $arrProject = $objProjectModel->findOne($projectId);
if (!$arrProject) { if (!$arrProject) {
header('Location: '.$_ENV['BASE_URL'].'/project/home'); header("Location: index.php?ctrl=project&action=home");
exit; exit;
} }
@ -429,7 +429,7 @@
$objMail->Subject = "Projet : " . $objProject->getTitle(); $objMail->Subject = "Projet : " . $objProject->getTitle();
$url = $_ENV['BASE_URL'].'/project/display/'.$projectId; $url = "https://php.boulayoune.com/index.php?ctrl=project&action=display&id=" . $projectId;
$this->_arrData['projectTitle'] = $objProject->getTitle(); $this->_arrData['projectTitle'] = $objProject->getTitle();
$this->_arrData['projectDescription'] = $objProject->getDescription(); $this->_arrData['projectDescription'] = $objProject->getDescription();
@ -438,14 +438,14 @@
$objMail->Body = $this->_display("mail_message", false); $objMail->Body = $this->_display("mail_message", false);
if ($objMail->Send()) { if ($objMail->Send()) {
header('Location: '.$_ENV['BASE_URL'].'/project/display/'.$projectId.'?mail=ok'); header("Location: index.php?ctrl=project&action=display&id=".$projectId."&mail=ok");
} else { } else {
header('Location: '.$_ENV['BASE_URL'].'/project/display/'.$projectId.'?mail=fail'); header("Location: index.php?ctrl=project&action=display&id=".$projectId."&mail=fail");
} }
exit; exit;
} }
header('Location: '.$_ENV['BASE_URL'].'/project/home'); header("Location: index.php?ctrl=project&action=home");
exit; exit;
} }
@ -459,7 +459,7 @@
$objProjectModel = new ProjectModel; $objProjectModel = new ProjectModel;
$objProjectModel->accept($intId); $objProjectModel->accept($intId);
header('Location: '.$_ENV['BASE_URL']); header("Location: index.php");
exit; exit;
} }
@ -473,7 +473,7 @@
$objProjectModel = new ProjectModel; $objProjectModel = new ProjectModel;
$objProjectModel->refuse($intId); $objProjectModel->refuse($intId);
header('Location: '.$_ENV['BASE_URL']); header("Location: index.php");
exit; exit;
} }
@ -483,7 +483,7 @@
public function delete(){ public function delete(){
if (!isset($_SESSION['user']) || $_SESSION['user']['user_status'] != 2) { if (!isset($_SESSION['user']) || $_SESSION['user']['user_status'] != 2) {
header('Location: '.$_ENV['BASE_URL']); header("Location: index.php");
exit; exit;
} }
@ -498,7 +498,7 @@
} }
} }
header('Location: '.$_ENV['BASE_URL']); header("Location: index.php");
exit; exit;
} }
@ -518,7 +518,7 @@
} }
$urlRedirect = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : "index.php"; $urlRedirect = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : "index.php";
header('Location: ' . $urlRedirect); header("Location: " . $urlRedirect);
exit; exit;
} }
@ -541,7 +541,7 @@
} }
$url = (isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : "index.php"; $url = (isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : "index.php";
header('Location: ' . $url); header("Location: " . $url);
exit; exit;
} }

View file

@ -48,7 +48,7 @@ class UserCtrl extends MotherCtrl {
setcookie('remember_me', $token, time() + (15*24*60*60), "/", "", true, true); setcookie('remember_me', $token, time() + (15*24*60*60), "/", "", true, true);
} }
header("Location:".$_ENV['BASE_URL']); header("Location:index.php");
exit; exit;
} }
} }
@ -75,7 +75,7 @@ class UserCtrl extends MotherCtrl {
$_SESSION['success'] = "Vous êtes bien déconnecté"; $_SESSION['success'] = "Vous êtes bien déconnecté";
header("Location:".$_ENV['BASE_URL']); header("Location:index.php");
exit; exit;
} }
@ -143,7 +143,7 @@ class UserCtrl extends MotherCtrl {
if ($boolInsert === true) { if ($boolInsert === true) {
$_SESSION['success'] = "Compte créé avec succès"; $_SESSION['success'] = "Compte créé avec succès";
header("Location:".$_ENV['BASE_URL']."/user/login"); header("Location:index.php?ctrl=user&action=login");
exit; exit;
} else { } else {
$arrError['global'] = "Erreur lors de l'ajout"; $arrError['global'] = "Erreur lors de l'ajout";
@ -169,7 +169,7 @@ class UserCtrl extends MotherCtrl {
$arrUserData = $objUserModel->findUserByPseudo($strPseudo); $arrUserData = $objUserModel->findUserByPseudo($strPseudo);
if ($arrUserData === false) { if ($arrUserData === false) {
header("Location: ".$_ENV['BASE_URL']); header("Location: index.php");
exit; exit;
} }
@ -195,7 +195,7 @@ class UserCtrl extends MotherCtrl {
*/ */
public function edit(){ public function edit(){
if(!isset($_SESSION['user'])){ if(!isset($_SESSION['user'])){
header("Location: ".$_ENV['BASE_URL']); header("Location: index.php");
exit; exit;
} }
$objUserModel = new UserModel; $objUserModel = new UserModel;
@ -244,7 +244,6 @@ class UserCtrl extends MotherCtrl {
} }
} }
if (count($arrError) == 0 && isset($strImageName)) { if (count($arrError) == 0 && isset($strImageName)) {
$strDest = $_ENV['IMG_USER_PATH'] . $strImageName; $strDest = $_ENV['IMG_USER_PATH'] . $strImageName;
$strSource = $_FILES['image']['tmp_name']; $strSource = $_FILES['image']['tmp_name'];
@ -280,25 +279,17 @@ class UserCtrl extends MotherCtrl {
} }
if ($_POST['delete_image'] === '1') {
$strOldImg = $objUser->getImage();
if (!empty($strOldImg) && $strOldImg !== 'images.jpg') {
$strOldFile = $_ENV['IMG_USER_PATH'] . $strOldImg;
if (file_exists($strOldFile)) unlink($strOldFile);
}
$objUser->setImage('images.jpg');
}
$boolInsert = $objUserModel->update($objUser); $boolInsert = $objUserModel->update($objUser);
if ($boolInsert === true) { if ($boolInsert === true) {
if (isset($strOldImg) && !empty($strOldImg) && $strOldImg !== 'images.jpg' && isset($strImageName)) { if (isset($strOldImg) && !empty($strOldImg) && isset($strImageName)) {
$strOldFile = $_ENV['IMG_USER_PATH'] . $strOldImg; $strOldFile = $_ENV['IMG_USER_PATH'] . $strOldImg;
if (file_exists($strOldFile)) unlink($strOldFile); if (file_exists($strOldFile)) unlink($strOldFile);
} }
$arrNewInfo = $objUserModel->findUserByPseudo($objUser->getPseudo()); $arrNewInfo = $objUserModel->findUserByPseudo($objUser->getPseudo());
$_SESSION['user'] = $arrNewInfo; $_SESSION['user'] = $arrNewInfo;
$_SESSION['success'] = "Compte modifier avec succès"; $_SESSION['success'] = "Compte modifier avec succès";
header('Location:'.$_ENV['BASE_URL'].'/user/user/'.$objUser->getPseudo()); header("Location:?ctrl=user&action=user&pseudo=".$objUser->getPseudo());
exit; exit;
} else { } else {
$arrError['global'] = "Erreur lors de l'update"; $arrError['global'] = "Erreur lors de l'update";

View file

@ -226,7 +226,7 @@ class Project extends Mother{
* Récupération de la date du projet supprimer * Récupération de la date du projet supprimer
* @return string date du projet * @return string date du projet
*/ */
public function getDeleted_at(){ public function getProject_deleted_at(){
return $this->_project_deleted_at; return $this->_project_deleted_at;
} }
@ -234,7 +234,7 @@ class Project extends Mother{
* Mise à jour de la date de suppression de projet * Mise à jour de la date de suppression de projet
* @param string date du projet * @param string date du projet
*/ */
public function setDeleted_at($project_deleted_at){ public function setProject_deleted_at($project_deleted_at){
$this->_project_deleted_at = $project_deleted_at; $this->_project_deleted_at = $project_deleted_at;
} }
} }

View file

@ -90,7 +90,7 @@
* @return string le nouveau pseudo de l'utilisateur * @return string le nouveau pseudo de l'utilisateur
*/ */
public function setPseudo(string $pseudo){ public function setPseudo(string $pseudo){
$this->_pseudo = str_replace(" ","_",$pseudo); $this->_pseudo = $pseudo;
} }
/** /**

2
env
View file

@ -1,7 +1,7 @@
# config BDD # config BDD
DB_CONNECTION=mysql DB_CONNECTION=mysql
DB_HOSTNAME=localhost DB_HOSTNAME=boulayoune.com
DB_DATABASE=projet_folliow DB_DATABASE=projet_folliow
DB_USERNAME= DB_USERNAME=
DB_PASSWORD= DB_PASSWORD=

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -136,7 +135,7 @@ array&#160;</td><td class="memItemRight"><b>$_arrData</b> = array()</td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/controllers/<b>AdminCtrl.php</b></li> <li>controllers/<b>AdminCtrl.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -155,7 +154,7 @@ array&#160;</td><td class="memItemRight"><b>$_arrData</b> = array()</td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/controllers/<b>ErrorCtrl.php</b></li> <li>controllers/<b>ErrorCtrl.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -156,7 +155,7 @@ array&#160;</td><td class="memItemRight"><b>$_arrData</b> = array()</td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/controllers/<b>MotherCtrl.php</b></li> <li>controllers/<b>MotherCtrl.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -174,7 +173,7 @@ array&#160;</td><td class="memItemRight"><b>$_arrData</b> = array()</td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/controllers/<b>PageCtrl.php</b></li> <li>controllers/<b>PageCtrl.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -307,7 +306,7 @@ array&#160;</td><td class="memItemRight"><b>$_arrData</b> = array()</td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/controllers/<b>ProjectCtrl.php</b></li> <li>controllers/<b>ProjectCtrl.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -212,7 +211,7 @@ array&#160;</td><td class="memItemRight"><b>$_arrData</b> = array()</td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/controllers/<b>UserCtrl.php</b></li> <li>controllers/<b>UserCtrl.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -222,7 +221,7 @@ string&#160;</td><td class="memItemRight"><b>$_prefix</b> = ''</td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/entities/<b>Authorisation.php</b></li> <li>entities/<b>Authorisation.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -277,7 +276,7 @@ Additional Inherited Members</h2></td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/entities/<b>Category.php</b></li> <li>entities/<b>Category.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -313,7 +312,7 @@ string&#160;</td><td class="memItemRight"><b>$_prefix</b> = ''</td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/entities/<b>Image.php</b></li> <li>entities/<b>Image.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -124,7 +123,7 @@ string&#160;</td><td class="memItemRight"><b>$_prefix</b> = ''</td></tr>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2> <a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Classe d'un Mere de tout objet </p><dl class="section author"><dt>Author</dt><dd>Yass &amp; Laura </dd></dl> <div class="textblock"><p>Classe d'un Mere de tout objet </p><dl class="section author"><dt>Author</dt><dd>Yass &amp; Laura </dd></dl>
</div><hr/>The documentation for this class was generated from the following file:<ul> </div><hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/entities/<b>Mother.php</b></li> <li>entities/<b>Mother.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -663,7 +662,7 @@ string&#160;</td><td class="memItemRight"><b>$_prefix</b> = ''</td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/entities/<b>Project.php</b></li> <li>entities/<b>Project.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -697,7 +696,7 @@ string&#160;</td><td class="memItemRight"><b>$_prefix</b> = ''</td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/entities/<b>User.php</b></li> <li>entities/<b>User.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -154,7 +153,7 @@ Additional Inherited Members</h2></td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/models/<b>AuthorisationModel.php</b></li> <li>models/<b>AuthorisationModel.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -215,7 +214,7 @@ Additional Inherited Members</h2></td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/models/<b>CategoryModel.php</b></li> <li>models/<b>CategoryModel.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -140,7 +139,7 @@ Additional Inherited Members</h2></td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/models/<b>ImageModel.php</b></li> <li>models/<b>ImageModel.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -112,7 +111,7 @@ Protected Attributes</h2></td></tr>
&#160;</td><td class="memItemRight"><b>$_db</b></td></tr> &#160;</td><td class="memItemRight"><b>$_db</b></td></tr>
</table> </table>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/models/<b>MotherModel.php</b></li> <li>models/<b>MotherModel.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -340,7 +339,7 @@ Additional Inherited Members</h2></td></tr>
</table> </table>
</dd> </dd>
</dl> </dl>
<dl class="section return"><dt>Returns</dt><dd>array|bool </dd></dl> <dl class="section return"><dt>Returns</dt><dd>array </dd></dl>
</div> </div>
</div> </div>
@ -469,7 +468,7 @@ Additional Inherited Members</h2></td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/models/<b>ProjectModel.php</b></li> <li>models/<b>ProjectModel.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -377,7 +376,7 @@ Additional Inherited Members</h2></td></tr>
</table> </table>
</dd> </dd>
</dl> </dl>
<dl class="section return"><dt>Returns</dt><dd>bool Le pseudo existe ou pas </dd></dl> <dl class="section return"><dt>Returns</dt><dd>array Tableau associatif (ou false si pas trouvé) </dd></dl>
</div> </div>
</div> </div>
@ -465,7 +464,7 @@ Additional Inherited Members</h2></td></tr>
</div> </div>
</div> </div>
<hr/>The documentation for this class was generated from the following file:<ul> <hr/>The documentation for this class was generated from the following file:<ul>
<li>C:/Users/Guill/projet_php/models/<b>UserModel.php</b></li> <li>models/<b>UserModel.php</b></li>
</ul> </ul>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>

View file

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/> <meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Folliow: C:/Users Directory Reference</title> <title>Folliow: models Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script> <script type="text/javascript" src="dynsections.js"></script>
@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -63,7 +62,7 @@ $(function() {
</div> </div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
$(function(){initNavTree('dir_d522931ffa1371640980b621734a4381.html','',''); }); $(function(){initNavTree('dir_1ae4179d5e953611aae20c997279e02c.html','',''); });
</script> </script>
<div id="container"> <div id="container">
<div id="doc-content"> <div id="doc-content">
@ -89,7 +88,7 @@ $(function(){initNavTree('dir_d522931ffa1371640980b621734a4381.html','',''); });
</div> </div>
<div class="header"> <div class="header">
<div class="headertitle"><div class="title">Users Directory Reference</div></div> <div class="headertitle"><div class="title">models Directory Reference</div></div>
</div><!--header--> </div><!--header-->
<div class="contents"> <div class="contents">
</div><!-- contents --> </div><!-- contents -->
@ -105,7 +104,7 @@ $(function(){initNavTree('dir_d522931ffa1371640980b621734a4381.html','',''); });
<!-- start footer part --> <!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul> <ul>
<li class="navelem"><b>Users</b></li> <li class="navelem"><b>models</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li> <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul> </ul>
</div> </div>

View file

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/> <meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Folliow: C:/Users/Guill/projet_php/controllers/templates_c Directory Reference</title> <title>Folliow: templates_c Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script> <script type="text/javascript" src="dynsections.js"></script>
@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -63,7 +62,7 @@ $(function() {
</div> </div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
$(function(){initNavTree('dir_a64c5c967bbc6a18c5d8eb713e8e97ff.html','',''); }); $(function(){initNavTree('dir_2262efd7ced881ba2289deea4945d6ba.html','',''); });
</script> </script>
<div id="container"> <div id="container">
<div id="doc-content"> <div id="doc-content">
@ -105,7 +104,7 @@ $(function(){initNavTree('dir_a64c5c967bbc6a18c5d8eb713e8e97ff.html','',''); });
<!-- start footer part --> <!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul> <ul>
<li class="navelem"><a href="dir_3a74e34fc6fa82edd10e4beee4ded801.html">projet_php</a></li><li class="navelem"><b>controllers</b></li><li class="navelem"><b>templates_c</b></li> <li class="navelem"><b>templates_c</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li> <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul> </ul>
</div> </div>

View file

@ -1,201 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Folliow: C:/Users/Guill/projet_php Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">Folliow
</div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('dir_2c23dcab3ba0e8633898b60485787967.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">projet_php Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-subdirs" class="groupheader"><a id="subdirs" name="subdirs"></a>
Directories</h2></td></tr>
<tr class="memitem:controllers" id="r_controllers"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_bfcb6842af0098861ea59b43701e0022.html">controllers</a></td></tr>
<tr class="memitem:entities" id="r_entities"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_6a59aaef8e4f4bee39467ed807742262.html">entities</a></td></tr>
<tr class="memitem:models" id="r_models"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_f880fbcdfabe64616040b95a4e03089d.html">models</a></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><h1 class="doxsection"><a class="anchor" id="autotoc_md0"></a>
Folliow Projet PHP</h1>
<p>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.</p>
<p>This project was developed as part of the <b>DWWM (Développeur Web et Web Mobile)</b> training.</p>
<hr />
<h1 class="doxsection"><a class="anchor" id="autotoc_md2"></a>
Features</h1>
<ul>
<li>User authentication and profile management</li>
<li>Portfolio and project creation</li>
<li>Project showcase with descriptions and technologies</li>
<li>User connections / follow system</li>
<li>Project feed and discovery</li>
<li>Profile and project search</li>
</ul>
<hr />
<h1 class="doxsection"><a class="anchor" id="autotoc_md4"></a>
Tech Stack</h1>
<p><b>Client:</b> HTML, CSS, JavaScript <br />
<b>Server:</b> PHP (MVC architecture) <br />
<b>Database:</b> MySQL <br />
<b>Web Server:</b> Apache</p>
<hr />
<h1 class="doxsection"><a class="anchor" id="autotoc_md6"></a>
Project Structure</h1>
<div class="fragment"><div class="line">folliow/</div>
<div class="line">├── app/</div>
<div class="line">│ ├── controllers/</div>
<div class="line">│ ├── models/</div>
<div class="line">│ └── views/</div>
<div class="line">├── public/</div>
<div class="line">│ ├── assets/</div>
<div class="line">│ └── index.php</div>
<div class="line">├── config/</div>
<div class="line">│ └── database.php</div>
<div class="line">├── sql/</div>
<div class="line">│ └── folliow.sql</div>
<div class="line">└── README.md</div>
</div><!-- fragment --><hr />
<h1 class="doxsection"><a class="anchor" id="autotoc_md8"></a>
Installation</h1>
<p>Clone the project</p>
<div class="fragment"><div class="line">git clone https://github.com/Yasder5/projet_php.git</div>
</div><!-- fragment --><p>Go to the project directory</p>
<div class="fragment"><div class="line">cd projet_php</div>
</div><!-- fragment --><p>Import the database</p>
<ul>
<li>Use the SQL file located in the <span class="tt">sql/</span> directory</li>
</ul>
<p>Configure database access</p>
<ul>
<li>Update credentials in <span class="tt">config/database.php</span></li>
</ul>
<p>Run the project</p>
<ul>
<li>Use a local server (XAMPP, WAMP, or Apache on Linux)</li>
</ul>
<hr />
<h1 class="doxsection"><a class="anchor" id="autotoc_md10"></a>
Learning Objectives</h1>
<ul>
<li>Build a complete PHP web application</li>
<li>Apply MVC architecture</li>
<li>Manage a relational database</li>
<li>Design a user-oriented portfolio platform</li>
</ul>
<hr />
<h1 class="doxsection"><a class="anchor" id="autotoc_md12"></a>
Future Improvements</h1>
<ul>
<li>Private messaging</li>
<li>Likes and comments on projects</li>
<li>Tags and categories</li>
<li>Improved responsive design</li>
<li>Advanced authentication and roles</li>
</ul>
<hr />
<h1 class="doxsection"><a class="anchor" id="autotoc_md14"></a>
License</h1>
<p>This project is for educational purposes. </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>Users</b></li><li class="navelem"><b>Guill</b></li><li class="navelem"><a href="dir_2c23dcab3ba0e8633898b60485787967.html">projet_php</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>

View file

@ -1,201 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Folliow: C:/Users/Guill/projet_php Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">Folliow
</div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('dir_3a74e34fc6fa82edd10e4beee4ded801.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">projet_php Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-subdirs" class="groupheader"><a id="subdirs" name="subdirs"></a>
Directories</h2></td></tr>
<tr class="memitem:controllers" id="r_controllers"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_2756e6070b02be5d362619ded783829c.html">controllers</a></td></tr>
<tr class="memitem:entities" id="r_entities"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_91977dd5ba3542af9d4aecff9e888690.html">entities</a></td></tr>
<tr class="memitem:models" id="r_models"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_1c617d677ef58765205e8a044aafa06e.html">models</a></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><h1 class="doxsection"><a class="anchor" id="autotoc_md0"></a>
Folliow Projet PHP</h1>
<p>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.</p>
<p>This project was developed as part of the <b>DWWM (Développeur Web et Web Mobile)</b> training.</p>
<hr />
<h1 class="doxsection"><a class="anchor" id="autotoc_md2"></a>
Features</h1>
<ul>
<li>User authentication and profile management</li>
<li>Portfolio and project creation</li>
<li>Project showcase with descriptions and technologies</li>
<li>User connections / follow system</li>
<li>Project feed and discovery</li>
<li>Profile and project search</li>
</ul>
<hr />
<h1 class="doxsection"><a class="anchor" id="autotoc_md4"></a>
Tech Stack</h1>
<p><b>Client:</b> HTML, CSS, JavaScript <br />
<b>Server:</b> PHP (MVC architecture) <br />
<b>Database:</b> MySQL <br />
<b>Web Server:</b> Apache</p>
<hr />
<h1 class="doxsection"><a class="anchor" id="autotoc_md6"></a>
Project Structure</h1>
<div class="fragment"><div class="line">folliow/</div>
<div class="line">├── app/</div>
<div class="line">│ ├── controllers/</div>
<div class="line">│ ├── models/</div>
<div class="line">│ └── views/</div>
<div class="line">├── public/</div>
<div class="line">│ ├── assets/</div>
<div class="line">│ └── index.php</div>
<div class="line">├── config/</div>
<div class="line">│ └── database.php</div>
<div class="line">├── sql/</div>
<div class="line">│ └── folliow.sql</div>
<div class="line">└── README.md</div>
</div><!-- fragment --><hr />
<h1 class="doxsection"><a class="anchor" id="autotoc_md8"></a>
Installation</h1>
<p>Clone the project</p>
<div class="fragment"><div class="line">git clone https://github.com/Yasder5/projet_php.git</div>
</div><!-- fragment --><p>Go to the project directory</p>
<div class="fragment"><div class="line">cd projet_php</div>
</div><!-- fragment --><p>Import the database</p>
<ul>
<li>Use the SQL file located in the <span class="tt">sql/</span> directory</li>
</ul>
<p>Configure database access</p>
<ul>
<li>Update credentials in <span class="tt">config/database.php</span></li>
</ul>
<p>Run the project</p>
<ul>
<li>Use a local server (XAMPP, WAMP, or Apache on Linux)</li>
</ul>
<hr />
<h1 class="doxsection"><a class="anchor" id="autotoc_md10"></a>
Learning Objectives</h1>
<ul>
<li>Build a complete PHP web application</li>
<li>Apply MVC architecture</li>
<li>Manage a relational database</li>
<li>Design a user-oriented portfolio platform</li>
</ul>
<hr />
<h1 class="doxsection"><a class="anchor" id="autotoc_md12"></a>
Future Improvements</h1>
<ul>
<li>Private messaging</li>
<li>Likes and comments on projects</li>
<li>Tags and categories</li>
<li>Improved responsive design</li>
<li>Advanced authentication and roles</li>
</ul>
<hr />
<h1 class="doxsection"><a class="anchor" id="autotoc_md14"></a>
License</h1>
<p>This project is for educational purposes. </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_3a74e34fc6fa82edd10e4beee4ded801.html">projet_php</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>

View file

@ -1,113 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Folliow: C:/Users/Guill/projet_php/controllers/templates_c Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">Folliow
</div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('dir_5498806e52ccd7d2d905ac8baf67301b.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">templates_c Directory Reference</div></div>
</div><!--header-->
<div class="contents">
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>Users</b></li><li class="navelem"><b>Guill</b></li><li class="navelem"><a href="dir_2c23dcab3ba0e8633898b60485787967.html">projet_php</a></li><li class="navelem"><b>controllers</b></li><li class="navelem"><b>templates_c</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>

View file

@ -1,113 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Folliow: C:/Users/Guill/projet_php/entities Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">Folliow
</div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('dir_6a59aaef8e4f4bee39467ed807742262.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">entities Directory Reference</div></div>
</div><!--header-->
<div class="contents">
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>Users</b></li><li class="navelem"><b>Guill</b></li><li class="navelem"><a href="dir_2c23dcab3ba0e8633898b60485787967.html">projet_php</a></li><li class="navelem"><b>entities</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>

View file

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/> <meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Folliow: C:/Users/Guill/projet_php/models Directory Reference</title> <title>Folliow: controllers/templates_c Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script> <script type="text/javascript" src="dynsections.js"></script>
@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -63,7 +62,7 @@ $(function() {
</div> </div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
$(function(){initNavTree('dir_1c617d677ef58765205e8a044aafa06e.html','',''); }); $(function(){initNavTree('dir_78f8c0daf938bfa31437d013d3fc896d.html','',''); });
</script> </script>
<div id="container"> <div id="container">
<div id="doc-content"> <div id="doc-content">
@ -89,7 +88,7 @@ $(function(){initNavTree('dir_1c617d677ef58765205e8a044aafa06e.html','',''); });
</div> </div>
<div class="header"> <div class="header">
<div class="headertitle"><div class="title">models Directory Reference</div></div> <div class="headertitle"><div class="title">templates_c Directory Reference</div></div>
</div><!--header--> </div><!--header-->
<div class="contents"> <div class="contents">
</div><!-- contents --> </div><!-- contents -->
@ -105,7 +104,7 @@ $(function(){initNavTree('dir_1c617d677ef58765205e8a044aafa06e.html','',''); });
<!-- start footer part --> <!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul> <ul>
<li class="navelem"><a href="dir_3a74e34fc6fa82edd10e4beee4ded801.html">projet_php</a></li><li class="navelem"><b>models</b></li> <li class="navelem"><b>controllers</b></li><li class="navelem"><b>templates_c</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li> <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul> </ul>
</div> </div>

View file

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/> <meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Folliow: C:/Users/Guill/projet_php/controllers Directory Reference</title> <title>Folliow: controllers Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script> <script type="text/javascript" src="dynsections.js"></script>
@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -63,7 +62,7 @@ $(function() {
</div> </div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
$(function(){initNavTree('dir_2756e6070b02be5d362619ded783829c.html','',''); }); $(function(){initNavTree('dir_87b6ed4386158a4d6cd0ecd5fb5bd5c2.html','',''); });
</script> </script>
<div id="container"> <div id="container">
<div id="doc-content"> <div id="doc-content">
@ -95,7 +94,7 @@ $(function(){initNavTree('dir_2756e6070b02be5d362619ded783829c.html','',''); });
<table class="memberdecls"> <table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-subdirs" class="groupheader"><a id="subdirs" name="subdirs"></a> <tr class="heading"><td colspan="2"><h2 id="header-subdirs" class="groupheader"><a id="subdirs" name="subdirs"></a>
Directories</h2></td></tr> Directories</h2></td></tr>
<tr class="memitem:templates_5Fc" id="r_templates_5Fc"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_a64c5c967bbc6a18c5d8eb713e8e97ff.html">templates_c</a></td></tr> <tr class="memitem:templates_5Fc" id="r_templates_5Fc"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_78f8c0daf938bfa31437d013d3fc896d.html">templates_c</a></td></tr>
</table> </table>
</div><!-- contents --> </div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->
@ -110,7 +109,7 @@ Directories</h2></td></tr>
<!-- start footer part --> <!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul> <ul>
<li class="navelem"><a href="dir_3a74e34fc6fa82edd10e4beee4ded801.html">projet_php</a></li><li class="navelem"><b>controllers</b></li> <li class="navelem"><b>controllers</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li> <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul> </ul>
</div> </div>

View file

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/> <meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/> <meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Folliow: C:/Users/Guill/projet_php/entities Directory Reference</title> <title>Folliow: entities Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script> <script type="text/javascript" src="dynsections.js"></script>
@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -63,7 +62,7 @@ $(function() {
</div> </div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
$(function(){initNavTree('dir_91977dd5ba3542af9d4aecff9e888690.html','',''); }); $(function(){initNavTree('dir_9404ca00d5cf333c309ae0ebf80749c4.html','',''); });
</script> </script>
<div id="container"> <div id="container">
<div id="doc-content"> <div id="doc-content">
@ -105,7 +104,7 @@ $(function(){initNavTree('dir_91977dd5ba3542af9d4aecff9e888690.html','',''); });
<!-- start footer part --> <!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul> <ul>
<li class="navelem"><a href="dir_3a74e34fc6fa82edd10e4beee4ded801.html">projet_php</a></li><li class="navelem"><b>entities</b></li> <li class="navelem"><b>entities</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li> <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul> </ul>
</div> </div>

View file

@ -1,118 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Folliow: C:/Users/Guill/projet_php/controllers Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">Folliow
</div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('dir_bfcb6842af0098861ea59b43701e0022.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">controllers Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-subdirs" class="groupheader"><a id="subdirs" name="subdirs"></a>
Directories</h2></td></tr>
<tr class="memitem:templates_5Fc" id="r_templates_5Fc"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_5498806e52ccd7d2d905ac8baf67301b.html">templates_c</a></td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>Users</b></li><li class="navelem"><b>Guill</b></li><li class="navelem"><a href="dir_2c23dcab3ba0e8633898b60485787967.html">projet_php</a></li><li class="navelem"><b>controllers</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>

View file

@ -1,118 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Folliow: C:/Users/Guill Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">Folliow
</div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('dir_d6b6a3db1c3a00708b1a36123c6a63cc.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">Guill Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-subdirs" class="groupheader"><a id="subdirs" name="subdirs"></a>
Directories</h2></td></tr>
<tr class="memitem:projet_5Fphp" id="r_projet_5Fphp"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_2c23dcab3ba0e8633898b60485787967.html">projet_php</a></td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>Users</b></li><li class="navelem"><b>Guill</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>

View file

@ -1,113 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Folliow: C:/Users/Guill/projet_php/models Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">Folliow
</div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('dir_f880fbcdfabe64616040b95a4e03089d.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">models Directory Reference</div></div>
</div><!--header-->
<div class="contents">
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>Users</b></li><li class="navelem"><b>Guill</b></li><li class="navelem"><a href="dir_2c23dcab3ba0e8633898b60485787967.html">projet_php</a></li><li class="navelem"><b>models</b></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>

View file

@ -157,11 +157,11 @@
<a href="class_models_1_1_user_model.html#ad83e4adc529c6c0a4925e4d74c7c7ae7"/> <a href="class_models_1_1_user_model.html#ad83e4adc529c6c0a4925e4d74c7c7ae7"/>
<a href="class_models_1_1_user_model.html#add0b4b63ca02cb8b73ad136b93ccf52f"/> <a href="class_models_1_1_user_model.html#add0b4b63ca02cb8b73ad136b93ccf52f"/>
<a href="classes.html"/> <a href="classes.html"/>
<a href="dir_1c617d677ef58765205e8a044aafa06e.html"/> <a href="dir_1ae4179d5e953611aae20c997279e02c.html"/>
<a href="dir_2756e6070b02be5d362619ded783829c.html"/> <a href="dir_2262efd7ced881ba2289deea4945d6ba.html"/>
<a href="dir_3a74e34fc6fa82edd10e4beee4ded801.html"/> <a href="dir_78f8c0daf938bfa31437d013d3fc896d.html"/>
<a href="dir_91977dd5ba3542af9d4aecff9e888690.html"/> <a href="dir_87b6ed4386158a4d6cd0ecd5fb5bd5c2.html"/>
<a href="dir_a64c5c967bbc6a18c5d8eb713e8e97ff.html"/> <a href="dir_9404ca00d5cf333c309ae0ebf80749c4.html"/>
<a href="doxygen_crawl.html"/> <a href="doxygen_crawl.html"/>
<a href="functions.html"/> <a href="functions.html"/>
<a href="functions_func.html"/> <a href="functions_func.html"/>

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>

View file

@ -28,7 +28,6 @@
<td id="projectalign"> <td id="projectalign">
<div id="projectname">Folliow <div id="projectname">Folliow
</div> </div>
<div id="projectbrief">Un projet de site web réaliser en PHP</div>
</td> </td>
</tr> </tr>
</tbody> </tbody>

View file

@ -1,10 +0,0 @@
var searchData=
[
['update_0',['update',['../class_models_1_1_user_model.html#a4f2888d0004092a367fa2d1b2620818f',1,'Models::UserModel']]],
['updateimagestatus_1',['updateImageStatus',['../class_models_1_1_project_model.html#aeb942ee7cfbea8509e49a5114228f53b',1,'Models::ProjectModel']]],
['updateproject_2',['updateProject',['../class_models_1_1_project_model.html#a1736ff58fc8fadf358ddb510b4c8d3f7',1,'Models::ProjectModel']]],
['user_3',['User',['../class_entities_1_1_user.html',1,'Entities']]],
['user_4',['user',['../class_controllers_1_1_user_ctrl.html#ae8a275690ff1b618e1947378b0ed73ae',1,'Controllers::UserCtrl']]],
['userctrl_5',['UserCtrl',['../class_controllers_1_1_user_ctrl.html',1,'Controllers']]],
['usermodel_6',['UserModel',['../class_models_1_1_user_model.html',1,'Models']]]
];

View file

@ -1,4 +0,0 @@
var searchData=
[
['verifuser_0',['verifUser',['../class_models_1_1_user_model.html#a04e007855c8aa842068779d8a871bb42',1,'Models::UserModel']]]
];

View file

@ -1,4 +0,0 @@
var searchData=
[
['_20projet_20php_0',['Folliow Projet PHP',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md0',1,'']]]
];

View file

@ -1,15 +1,12 @@
var searchData= var searchData=
[ [
['features_0',['Features',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md2',1,'']]], ['findall_0',['findAll',['../class_models_1_1_project_model.html#acbfa7e289b7712cf5200f398cff05c43',1,'Models::ProjectModel']]],
['findall_1',['findAll',['../class_models_1_1_project_model.html#acbfa7e289b7712cf5200f398cff05c43',1,'Models::ProjectModel']]], ['findallauthorisation_1',['findAllAuthorisation',['../class_models_1_1_authorisation_model.html#af7bd93cc2fd6ac548707d3a66a8380df',1,'Models::AuthorisationModel']]],
['findallauthorisation_2',['findAllAuthorisation',['../class_models_1_1_authorisation_model.html#af7bd93cc2fd6ac548707d3a66a8380df',1,'Models::AuthorisationModel']]], ['findallcategory_2',['findAllCategory',['../class_models_1_1_category_model.html#a4e6d48b9130d9cb4cc08a88cef84e8f9',1,'Models::CategoryModel']]],
['findallcategory_3',['findAllCategory',['../class_models_1_1_category_model.html#a4e6d48b9130d9cb4cc08a88cef84e8f9',1,'Models::CategoryModel']]], ['findallimage_3',['findAllImage',['../class_models_1_1_image_model.html#aaf9e88eb8d1aff57a085e1d38de15060',1,'Models::ImageModel']]],
['findallimage_4',['findAllImage',['../class_models_1_1_image_model.html#aaf9e88eb8d1aff57a085e1d38de15060',1,'Models::ImageModel']]], ['findallusers_4',['findAllUsers',['../class_models_1_1_user_model.html#a404b6b890d58bfa7220da4a08a60f445',1,'Models::UserModel']]],
['findallusers_5',['findAllUsers',['../class_models_1_1_user_model.html#a404b6b890d58bfa7220da4a08a60f445',1,'Models::UserModel']]], ['findimage_5',['findImage',['../class_models_1_1_project_model.html#a0a8e47e6d6b839638ab85addfda45e3b',1,'Models::ProjectModel']]],
['findimage_6',['findImage',['../class_models_1_1_project_model.html#a0a8e47e6d6b839638ab85addfda45e3b',1,'Models::ProjectModel']]], ['findone_6',['findOne',['../class_models_1_1_project_model.html#ae0fabc6b177cda25efeee083f904c207',1,'Models::ProjectModel']]],
['findone_7',['findOne',['../class_models_1_1_project_model.html#ae0fabc6b177cda25efeee083f904c207',1,'Models::ProjectModel']]], ['finduserbyid_7',['findUserById',['../class_models_1_1_user_model.html#a6620c458b01ecbb1ed76083a4ac2345e',1,'Models::UserModel']]],
['finduserbyid_8',['findUserById',['../class_models_1_1_user_model.html#a6620c458b01ecbb1ed76083a4ac2345e',1,'Models::UserModel']]], ['finduserbypseudo_8',['findUserByPseudo',['../class_models_1_1_user_model.html#a9f95476e8b07dbc01f711f36672684ad',1,'Models::UserModel']]]
['finduserbypseudo_9',['findUserByPseudo',['../class_models_1_1_user_model.html#a9f95476e8b07dbc01f711f36672684ad',1,'Models::UserModel']]],
['folliow_20_20projet_20php_10',['Folliow Projet PHP',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md0',1,'']]],
['future_20improvements_11',['Future Improvements',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md12',1,'']]]
]; ];

View file

@ -2,8 +2,6 @@ var searchData=
[ [
['image_0',['Image',['../class_entities_1_1_image.html',1,'Entities']]], ['image_0',['Image',['../class_entities_1_1_image.html',1,'Entities']]],
['imagemodel_1',['ImageModel',['../class_models_1_1_image_model.html',1,'Models']]], ['imagemodel_1',['ImageModel',['../class_models_1_1_image_model.html',1,'Models']]],
['improvements_2',['Future Improvements',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md12',1,'']]], ['insert_2',['insert',['../class_models_1_1_project_model.html#ad2a2f3e436d06db0fc4af3c44c867805',1,'Models\\ProjectModel\\insert()'],['../class_models_1_1_user_model.html#ab0eb29a478a1230d479aee1046b0f1dc',1,'Models\\UserModel\\insert()']]],
['insert_3',['insert',['../class_models_1_1_project_model.html#ad2a2f3e436d06db0fc4af3c44c867805',1,'Models\\ProjectModel\\insert()'],['../class_models_1_1_user_model.html#ab0eb29a478a1230d479aee1046b0f1dc',1,'Models\\UserModel\\insert()']]], ['insertcategory_3',['insertCategory',['../class_models_1_1_category_model.html#a1102f9228de8f7938a1f35a3abbc2dc7',1,'Models::CategoryModel']]]
['insertcategory_4',['insertCategory',['../class_models_1_1_category_model.html#a1102f9228de8f7938a1f35a3abbc2dc7',1,'Models::CategoryModel']]],
['installation_5',['Installation',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md8',1,'']]]
]; ];

View file

@ -1,7 +1,5 @@
var searchData= var searchData=
[ [
['learning_20objectives_0',['Learning Objectives',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md10',1,'']]], ['login_0',['login',['../class_controllers_1_1_user_ctrl.html#aa311da27ba5706f5710cea7706c8eae1',1,'Controllers::UserCtrl']]],
['license_1',['License',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md14',1,'']]], ['logout_1',['logout',['../class_controllers_1_1_user_ctrl.html#a082405d89acd6835c3a7c7a08a7adbab',1,'Controllers::UserCtrl']]]
['login_2',['login',['../class_controllers_1_1_user_ctrl.html#aa311da27ba5706f5710cea7706c8eae1',1,'Controllers::UserCtrl']]],
['logout_3',['logout',['../class_controllers_1_1_user_ctrl.html#a082405d89acd6835c3a7c7a08a7adbab',1,'Controllers::UserCtrl']]]
]; ];

View file

@ -1,4 +1,8 @@
var searchData= var searchData=
[ [
['objectives_0',['Learning Objectives',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md10',1,'']]] ['pagectrl_0',['PageCtrl',['../class_controllers_1_1_page_ctrl.html',1,'Controllers']]],
['project_1',['Project',['../class_entities_1_1_project.html',1,'Entities']]],
['projectctrl_2',['ProjectCtrl',['../class_controllers_1_1_project_ctrl.html',1,'Controllers']]],
['projectmodel_3',['ProjectModel',['../class_models_1_1_project_model.html',1,'Models']]],
['pseudoexists_4',['pseudoExists',['../class_models_1_1_user_model.html#aaf42cd7de4bddf6d3a075aa9bc252b8f',1,'Models::UserModel']]]
]; ];

View file

@ -1,11 +1,5 @@
var searchData= var searchData=
[ [
['pagectrl_0',['PageCtrl',['../class_controllers_1_1_page_ctrl.html',1,'Controllers']]], ['refuse_0',['refuse',['../class_controllers_1_1_project_ctrl.html#a68a43ec4877b5210ef8ad989fbc14d82',1,'Controllers\\ProjectCtrl\\refuse()'],['../class_models_1_1_project_model.html#a64714f38f74ab942d027f04e86e40d25',1,'Models\\ProjectModel\\refuse()']]],
['php_1',['Folliow Projet PHP',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md0',1,'']]], ['remember_1',['remember',['../class_models_1_1_user_model.html#a30563e7cabc0c9aa2bf4157b241ad55a',1,'Models::UserModel']]]
['project_2',['Project',['../class_entities_1_1_project.html',1,'Entities']]],
['project_20structure_3',['Project Structure',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md6',1,'']]],
['projectctrl_4',['ProjectCtrl',['../class_controllers_1_1_project_ctrl.html',1,'Controllers']]],
['projectmodel_5',['ProjectModel',['../class_models_1_1_project_model.html',1,'Models']]],
['projet_20php_6',['Folliow Projet PHP',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md0',1,'']]],
['pseudoexists_7',['pseudoExists',['../class_models_1_1_user_model.html#aaf42cd7de4bddf6d3a075aa9bc252b8f',1,'Models::UserModel']]]
]; ];

View file

@ -1,5 +1,31 @@
var searchData= var searchData=
[ [
['refuse_0',['refuse',['../class_controllers_1_1_project_ctrl.html#a68a43ec4877b5210ef8ad989fbc14d82',1,'Controllers\\ProjectCtrl\\refuse()'],['../class_models_1_1_project_model.html#a64714f38f74ab942d027f04e86e40d25',1,'Models\\ProjectModel\\refuse()']]], ['search_0',['search',['../class_controllers_1_1_project_ctrl.html#a796bf438724e047aeef18579732a3780',1,'Controllers::ProjectCtrl']]],
['remember_1',['remember',['../class_models_1_1_user_model.html#a30563e7cabc0c9aa2bf4157b241ad55a',1,'Models::UserModel']]] ['sendemail_1',['sendEmail',['../class_controllers_1_1_project_ctrl.html#a6665aeb6e312ea89283ce785f0dfad60',1,'Controllers::ProjectCtrl']]],
['setaccountcreation_2',['setAccountCreation',['../class_entities_1_1_user.html#aa8eb1e10f1ab32dcfa4df144fe02ba16',1,'Entities::User']]],
['setalt_3',['setAlt',['../class_entities_1_1_image.html#a23d9d1d65334db3a72b3c19e146cfe28',1,'Entities::Image']]],
['setbirth_4',['setBirth',['../class_entities_1_1_user.html#a4a6578fae7673e253c0ddb1f95cf227c',1,'Entities::User']]],
['setcategory_5',['setCategory',['../class_entities_1_1_project.html#a309475f82c8fca1a84f96f802f05a5fb',1,'Entities::Project']]],
['setcontent_6',['setContent',['../class_entities_1_1_project.html#a04a5eddb7c3abc7bf31fa25b58f046bf',1,'Entities::Project']]],
['setcreation_5fdate_7',['setCreation_date',['../class_entities_1_1_project.html#a547ac5297a9b9efc8a4b6bef00eb6c2e',1,'Entities::Project']]],
['setcreatorname_8',['setCreatorName',['../class_entities_1_1_project.html#aa37594941aea25a0f0d3a33d6a8757b7',1,'Entities::Project']]],
['setdescription_9',['setDescription',['../class_entities_1_1_project.html#a31fad3e39336ea079ea758e051866627',1,'Entities\\Project\\setDescription()'],['../class_entities_1_1_user.html#a3eda7afea80371b606cd289c66ab3e7c',1,'Entities\\User\\setDescription(string $description)']]],
['setfirstname_10',['setFirstname',['../class_entities_1_1_user.html#a102793bdeeaa7eaa2bca4e31eb3782e5',1,'Entities::User']]],
['setid_11',['setId',['../class_entities_1_1_authorisation.html#af8e956b8b0343ff7d1b955c26cb0c780',1,'Entities\\Authorisation\\setId()'],['../class_entities_1_1_category.html#a87313ad678fb2a2a8efb435cf0bdb9a0',1,'Entities\\Category\\setId()'],['../class_entities_1_1_image.html#a87313ad678fb2a2a8efb435cf0bdb9a0',1,'Entities\\Image\\setId()'],['../class_entities_1_1_project.html#af8e956b8b0343ff7d1b955c26cb0c780',1,'Entities\\Project\\setId()'],['../class_entities_1_1_user.html#af8e956b8b0343ff7d1b955c26cb0c780',1,'Entities\\User\\setId(int $id)']]],
['setimage_12',['setImage',['../class_entities_1_1_user.html#a6c7550f5363e74b3ee9225bf85e11b8d',1,'Entities::User']]],
['setlocation_13',['setLocation',['../class_entities_1_1_user.html#a4c5c6e78f1e8c0ae4bf416d0f0d73ef1',1,'Entities::User']]],
['setmail_14',['setMail',['../class_entities_1_1_user.html#ad5ba083b208ed11aa16938a8ba87a78c',1,'Entities::User']]],
['setname_15',['setName',['../class_entities_1_1_authorisation.html#a392752b62c4f6aacea5c269690921ef3',1,'Entities\\Authorisation\\setName()'],['../class_entities_1_1_category.html#a2fe666694997d047711d7653eca2f132',1,'Entities\\Category\\setName()'],['../class_entities_1_1_image.html#a2fe666694997d047711d7653eca2f132',1,'Entities\\Image\\setName()'],['../class_entities_1_1_user.html#a392752b62c4f6aacea5c269690921ef3',1,'Entities\\User\\setName()']]],
['setparent_16',['setParent',['../class_entities_1_1_category.html#a3b949fc022c82eb25e8650e0e01404fa',1,'Entities::Category']]],
['setphone_17',['setPhone',['../class_entities_1_1_user.html#a652bfdb5ce275246ece54449fe5ca59e',1,'Entities::User']]],
['setproject_5fdeleted_5fat_18',['setProject_deleted_at',['../class_entities_1_1_project.html#a621433ce4917a196047b78e58e38d7fe',1,'Entities::Project']]],
['setpseudo_19',['setPseudo',['../class_entities_1_1_user.html#a02d546b854db37406ec591d3e16809eb',1,'Entities::User']]],
['setpwd_20',['setPwd',['../class_entities_1_1_user.html#a9cc7dc33859895f98da4e22f5ae1a9bf',1,'Entities::User']]],
['setstatus_21',['setStatus',['../class_entities_1_1_image.html#a7d02c100d684fe1dffc6cb3486a48511',1,'Entities\\Image\\setStatus()'],['../class_entities_1_1_project.html#a7d02c100d684fe1dffc6cb3486a48511',1,'Entities\\Project\\setStatus()'],['../class_entities_1_1_user.html#a2f8308ff566858664b95361214f29eac',1,'Entities\\User\\setStatus()']]],
['setthumbnail_22',['setThumbnail',['../class_entities_1_1_project.html#a89bdfd911301f4ac284a937e93f4de50',1,'Entities::Project']]],
['settitle_23',['setTitle',['../class_entities_1_1_project.html#a884ba9bb0d54bde7839e798db7964476',1,'Entities::Project']]],
['setuser_5fid_24',['setUser_id',['../class_entities_1_1_project.html#a74bdd06d4bca0de42e55bdf7763ebfc4',1,'Entities::Project']]],
['setuser_5fimage_25',['setUser_image',['../class_entities_1_1_project.html#a17164d0ccbccaceb60280836d060e21f',1,'Entities::Project']]],
['setwork_26',['setWork',['../class_entities_1_1_user.html#ae6c2c46108019bd83091add6417eb894',1,'Entities::User']]],
['signup_27',['signup',['../class_controllers_1_1_user_ctrl.html#a852ed40b79f143c1478699d908f46957',1,'Controllers::UserCtrl']]]
]; ];

View file

@ -1,33 +1,10 @@
var searchData= var searchData=
[ [
['search_0',['search',['../class_controllers_1_1_project_ctrl.html#a796bf438724e047aeef18579732a3780',1,'Controllers::ProjectCtrl']]], ['update_0',['update',['../class_models_1_1_user_model.html#a4f2888d0004092a367fa2d1b2620818f',1,'Models::UserModel']]],
['sendemail_1',['sendEmail',['../class_controllers_1_1_project_ctrl.html#a6665aeb6e312ea89283ce785f0dfad60',1,'Controllers::ProjectCtrl']]], ['updateimagestatus_1',['updateImageStatus',['../class_models_1_1_project_model.html#aeb942ee7cfbea8509e49a5114228f53b',1,'Models::ProjectModel']]],
['setaccountcreation_2',['setAccountCreation',['../class_entities_1_1_user.html#aa8eb1e10f1ab32dcfa4df144fe02ba16',1,'Entities::User']]], ['updateproject_2',['updateProject',['../class_models_1_1_project_model.html#a1736ff58fc8fadf358ddb510b4c8d3f7',1,'Models::ProjectModel']]],
['setalt_3',['setAlt',['../class_entities_1_1_image.html#a23d9d1d65334db3a72b3c19e146cfe28',1,'Entities::Image']]], ['user_3',['User',['../class_entities_1_1_user.html',1,'Entities']]],
['setbirth_4',['setBirth',['../class_entities_1_1_user.html#a4a6578fae7673e253c0ddb1f95cf227c',1,'Entities::User']]], ['user_4',['user',['../class_controllers_1_1_user_ctrl.html#ae8a275690ff1b618e1947378b0ed73ae',1,'Controllers::UserCtrl']]],
['setcategory_5',['setCategory',['../class_entities_1_1_project.html#a309475f82c8fca1a84f96f802f05a5fb',1,'Entities::Project']]], ['userctrl_5',['UserCtrl',['../class_controllers_1_1_user_ctrl.html',1,'Controllers']]],
['setcontent_6',['setContent',['../class_entities_1_1_project.html#a04a5eddb7c3abc7bf31fa25b58f046bf',1,'Entities::Project']]], ['usermodel_6',['UserModel',['../class_models_1_1_user_model.html',1,'Models']]]
['setcreation_5fdate_7',['setCreation_date',['../class_entities_1_1_project.html#a547ac5297a9b9efc8a4b6bef00eb6c2e',1,'Entities::Project']]],
['setcreatorname_8',['setCreatorName',['../class_entities_1_1_project.html#aa37594941aea25a0f0d3a33d6a8757b7',1,'Entities::Project']]],
['setdescription_9',['setDescription',['../class_entities_1_1_project.html#a31fad3e39336ea079ea758e051866627',1,'Entities\\Project\\setDescription()'],['../class_entities_1_1_user.html#a3eda7afea80371b606cd289c66ab3e7c',1,'Entities\\User\\setDescription(string $description)']]],
['setfirstname_10',['setFirstname',['../class_entities_1_1_user.html#a102793bdeeaa7eaa2bca4e31eb3782e5',1,'Entities::User']]],
['setid_11',['setId',['../class_entities_1_1_authorisation.html#af8e956b8b0343ff7d1b955c26cb0c780',1,'Entities\\Authorisation\\setId()'],['../class_entities_1_1_category.html#a87313ad678fb2a2a8efb435cf0bdb9a0',1,'Entities\\Category\\setId()'],['../class_entities_1_1_image.html#a87313ad678fb2a2a8efb435cf0bdb9a0',1,'Entities\\Image\\setId()'],['../class_entities_1_1_project.html#af8e956b8b0343ff7d1b955c26cb0c780',1,'Entities\\Project\\setId()'],['../class_entities_1_1_user.html#af8e956b8b0343ff7d1b955c26cb0c780',1,'Entities\\User\\setId(int $id)']]],
['setimage_12',['setImage',['../class_entities_1_1_user.html#a6c7550f5363e74b3ee9225bf85e11b8d',1,'Entities::User']]],
['setlocation_13',['setLocation',['../class_entities_1_1_user.html#a4c5c6e78f1e8c0ae4bf416d0f0d73ef1',1,'Entities::User']]],
['setmail_14',['setMail',['../class_entities_1_1_user.html#ad5ba083b208ed11aa16938a8ba87a78c',1,'Entities::User']]],
['setname_15',['setName',['../class_entities_1_1_authorisation.html#a392752b62c4f6aacea5c269690921ef3',1,'Entities\\Authorisation\\setName()'],['../class_entities_1_1_category.html#a2fe666694997d047711d7653eca2f132',1,'Entities\\Category\\setName()'],['../class_entities_1_1_image.html#a2fe666694997d047711d7653eca2f132',1,'Entities\\Image\\setName()'],['../class_entities_1_1_user.html#a392752b62c4f6aacea5c269690921ef3',1,'Entities\\User\\setName()']]],
['setparent_16',['setParent',['../class_entities_1_1_category.html#a3b949fc022c82eb25e8650e0e01404fa',1,'Entities::Category']]],
['setphone_17',['setPhone',['../class_entities_1_1_user.html#a652bfdb5ce275246ece54449fe5ca59e',1,'Entities::User']]],
['setproject_5fdeleted_5fat_18',['setProject_deleted_at',['../class_entities_1_1_project.html#a621433ce4917a196047b78e58e38d7fe',1,'Entities::Project']]],
['setpseudo_19',['setPseudo',['../class_entities_1_1_user.html#a02d546b854db37406ec591d3e16809eb',1,'Entities::User']]],
['setpwd_20',['setPwd',['../class_entities_1_1_user.html#a9cc7dc33859895f98da4e22f5ae1a9bf',1,'Entities::User']]],
['setstatus_21',['setStatus',['../class_entities_1_1_image.html#a7d02c100d684fe1dffc6cb3486a48511',1,'Entities\\Image\\setStatus()'],['../class_entities_1_1_project.html#a7d02c100d684fe1dffc6cb3486a48511',1,'Entities\\Project\\setStatus()'],['../class_entities_1_1_user.html#a2f8308ff566858664b95361214f29eac',1,'Entities\\User\\setStatus()']]],
['setthumbnail_22',['setThumbnail',['../class_entities_1_1_project.html#a89bdfd911301f4ac284a937e93f4de50',1,'Entities::Project']]],
['settitle_23',['setTitle',['../class_entities_1_1_project.html#a884ba9bb0d54bde7839e798db7964476',1,'Entities::Project']]],
['setuser_5fid_24',['setUser_id',['../class_entities_1_1_project.html#a74bdd06d4bca0de42e55bdf7763ebfc4',1,'Entities::Project']]],
['setuser_5fimage_25',['setUser_image',['../class_entities_1_1_project.html#a17164d0ccbccaceb60280836d060e21f',1,'Entities::Project']]],
['setwork_26',['setWork',['../class_entities_1_1_user.html#ae6c2c46108019bd83091add6417eb894',1,'Entities::User']]],
['signup_27',['signup',['../class_controllers_1_1_user_ctrl.html#a852ed40b79f143c1478699d908f46957',1,'Controllers::UserCtrl']]],
['stack_28',['Tech Stack',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md4',1,'']]],
['structure_29',['Project Structure',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md6',1,'']]]
]; ];

View file

@ -1,4 +1,4 @@
var searchData= var searchData=
[ [
['tech_20stack_0',['Tech Stack',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md4',1,'']]] ['verifuser_0',['verifUser',['../class_models_1_1_user_model.html#a04e007855c8aa842068779d8a871bb42',1,'Models::UserModel']]]
]; ];

View file

@ -1,6 +0,0 @@
var searchData=
[
['features_0',['Features',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md2',1,'']]],
['folliow_20_20projet_20php_1',['Folliow Projet PHP',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md0',1,'']]],
['future_20improvements_2',['Future Improvements',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md12',1,'']]]
];

View file

@ -1,5 +0,0 @@
var searchData=
[
['improvements_0',['Future Improvements',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md12',1,'']]],
['installation_1',['Installation',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md8',1,'']]]
];

View file

@ -1,5 +0,0 @@
var searchData=
[
['learning_20objectives_0',['Learning Objectives',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md10',1,'']]],
['license_1',['License',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md14',1,'']]]
];

View file

@ -1,4 +0,0 @@
var searchData=
[
['objectives_0',['Learning Objectives',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md10',1,'']]]
];

View file

@ -1,6 +0,0 @@
var searchData=
[
['php_0',['Folliow Projet PHP',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md0',1,'']]],
['project_20structure_1',['Project Structure',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md6',1,'']]],
['projet_20php_2',['Folliow Projet PHP',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md0',1,'']]]
];

View file

@ -1,5 +0,0 @@
var searchData=
[
['stack_0',['Tech Stack',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md4',1,'']]],
['structure_1',['Project Structure',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md6',1,'']]]
];

View file

@ -1,4 +0,0 @@
var searchData=
[
['tech_20stack_0',['Tech Stack',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md4',1,'']]]
];

View file

@ -1,4 +0,0 @@
var searchData=
[
['_20projet_20php_0',['Folliow Projet PHP',['../dir_3a74e34fc6fa82edd10e4beee4ded801.html#autotoc_md0',1,'']]]
];

View file

@ -1,24 +1,21 @@
var indexSectionsWithContent = var indexSectionsWithContent =
{ {
0: "_acdefghilmoprstuv", 0: "_acdefghilmprsuv",
1: "aceimpu", 1: "aceimpu",
2: "_acdefghilmprsuv", 2: "_acdefghilmprsuv"
3: "filopst"
}; };
var indexSectionNames = var indexSectionNames =
{ {
0: "all", 0: "all",
1: "classes", 1: "classes",
2: "functions", 2: "functions"
3: "pages"
}; };
var indexSectionLabels = var indexSectionLabels =
{ {
0: "All", 0: "All",
1: "Data Structures", 1: "Data Structures",
2: "Functions", 2: "Functions"
3: "Pages"
}; };

View file

@ -2,11 +2,12 @@
session_start(); session_start();
require(__DIR__ . "/vendor/autoload.php"); require(__DIR__ . "/vendor/autoload.php");
// Environnement
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->safeLoad(); $dotenv->safeLoad();
$strCtrl = preg_replace('/[^a-zA-Z]/', '', $_GET['ctrl'] ?? 'project'); $strCtrl = $_GET['ctrl'] ?? 'project';
$strMethod = preg_replace('/[^a-zA-Z_]/', '', $_GET['action'] ?? 'home'); $strMethod = $_GET['action'] ?? 'home';
$strClassName = "Controllers\\" . ucfirst($strCtrl) . "Ctrl"; $strClassName = "Controllers\\" . ucfirst($strCtrl) . "Ctrl";
@ -25,8 +26,6 @@
} }
if ($boolError) { if ($boolError) {
http_response_code(404); // ← important pour le SEO et les navigateurs header("Location: index.php?ctrl=error&action=error_404");
$error = new \Controllers\ErrorCtrl(); exit;
$error->error_404(); // ← pas de "return", juste l'appel
exit; // ← stoppe l'exécution après l'affichage
} }

View file

@ -22,18 +22,10 @@
FROM category"; FROM category";
if ($intLimit > 0){ if ($intLimit > 0){
$strRq .= " LIMIT :limit"; $strRq .= " LIMIT ".$intLimit;
} }
$rqPrep = $this->_db->prepare($strRq); return $this->_db->query($strRq)->fetchAll();
if ($intLimit > 0){
$rqPrep->bindValue(":limit", $intLimit, PDO::PARAM_INT);
}
$rqPrep->execute();
return $rqPrep->fetchAll();
} }
/** /**

View file

@ -22,18 +22,11 @@
$strRq = "SELECT image.* $strRq = "SELECT image.*
FROM image"; FROM image";
if ($intLimit > 0){
$strRq .= " LIMIT :limit";
}
$rqPrep = $this->_db->prepare($strRq);
if ($intLimit > 0){ if ($intLimit > 0){
$rqPrep->bindValue(":limit", $intLimit, PDO::PARAM_INT); $strRq .= " LIMIT ".$intLimit;
} }
$rqPrep->execute(); return $this->_db->query($strRq)->fetchAll();
return $rqPrep->fetchAll();
} }
} }

View file

@ -10,9 +10,9 @@
public function __construct(){ public function __construct(){
try{ try{
$this->_db = new PDO( $this->_db = new PDO(
"mysql:host=".$_ENV['DB_HOSTNAME'].";dbname=".$_ENV['DB_DATABASE'], "mysql:host=localhost;dbname=projet_folliow",
$_ENV['DB_USERNAME'], "projet_user",
$_ENV['DB_PASSWORD'], "F0lliowRules!",
array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC) array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC)
); );
$this->_db->exec("SET CHARACTER SET utf8"); $this->_db->exec("SET CHARACTER SET utf8");

View file

@ -27,37 +27,43 @@
user_pseudo AS 'project_creatorname', user_pseudo AS 'project_creatorname',
user_image user_image
FROM project FROM project
INNER JOIN users ON user_id = project_user_id INNER JOIN users ON user_id = project_user_id";
WHERE 1=1";
$strRq .= " WHERE project_deleted_at IS NULL";
$strAnd = " AND ";
if ($strKeywords != '') { 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.") ";
} }
if ($intAuthor > 0){ if ($intAuthor > 0){
$strRq .= " AND project_user_id = :author"; $strRq .= $strAnd." user_id = ".$intAuthor;
}
}
if ($intCategory > 0){ if ($intCategory > 0){
$strRq .= " AND project_category = :category"; $strRq .= $strAnd." project_category = ".$intCategory;
} }
if ($boolOlderThan6Months === true) { 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) ";
} }
if ($intPeriod == 0){ if ($intPeriod == 0){
if ($strDate != ''){ if ($strDate != ''){
$strRq .= " AND project_creation_date = :date_exacte"; $strRq .= $strAnd." project_creation_date = '".$strDate."'";
} }
}else{ }else{
if ($strStartDate != '' && $strEndDate != ''){ if ($strStartDate != '' && $strEndDate != ''){
$strRq .= " AND project_creation_date BETWEEN :date_debut AND :date_fin"; $strRq .= $strAnd." project_creation_date BETWEEN '".$strStartDate."' AND '".$strEndDate."'";
}else{ }else{
if ($strStartDate != ''){ if ($strStartDate != ''){
$strRq .= " AND project_creation_date >= :date_debut"; $strRq .= $strAnd." project_creation_date >= '".$strStartDate."'";
}else if ($strEndDate != ''){ }else if ($strEndDate != ''){
$strRq .= " AND project_creation_date <= :date_fin"; $strRq .= $strAnd." project_creation_date <= '".$strEndDate."'";
} }
} }
} }
@ -65,42 +71,10 @@
$strRq .= " ORDER BY project_creation_date DESC"; $strRq .= " ORDER BY project_creation_date DESC";
if ($intLimit > 0){ if ($intLimit > 0){
$strRq .= " LIMIT :limit"; $strRq .= " LIMIT ".$intLimit;
} }
$rqPrep = $this->_db->prepare($strRq); return $this->_db->query($strRq)->fetchAll();
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();
} }
@ -136,9 +110,9 @@
/** /**
* Fonction de recherche d'un seul projet * Fonction de recherche d'un seul projet
* @param int $intId * @param int $intId
* @return array|bool * @return array
*/ */
public function findOne(int $intId) :array|bool{ public function findOne(int $intId) :array{
$strRq = "SELECT project.*, $strRq = "SELECT project.*,
users.user_pseudo AS 'project_creatorname', users.user_pseudo AS 'project_creatorname',
users.user_image, users.user_image,
@ -194,8 +168,7 @@
public function delete_soft_project(int $intId): bool { public function delete_soft_project(int $intId): bool {
$strRq = "UPDATE project $strRq = "UPDATE project
SET project_deleted_at = NOW(), SET project_deleted_at = NOW(),
project_edit_date = NOW(), project_edit_date = NOW()
project_status = 'supprimé'
WHERE project_id = :id"; WHERE project_id = :id";
$rqPrep = $this->_db->prepare($strRq); $rqPrep = $this->_db->prepare($strRq);

View file

@ -37,15 +37,9 @@
$strRq = "SELECT user_id, user_name, user_firstname, user_password, user_image, user_status, authorisation_name, user_pseudo $strRq = "SELECT user_id, user_name, user_firstname, user_password, user_image, user_status, authorisation_name, user_pseudo
FROM users INNER JOIN authorisation ON authorisation.authorisation_id = users.user_status FROM users INNER JOIN authorisation ON authorisation.authorisation_id = users.user_status
WHERE user_mail = :mail"; WHERE user_mail = '".$strMail."'";
$rqPrep = $this->_db->prepare($strRq); $arrUser = $this->_db->query($strRq)->fetch();
$rqPrep->bindValue(":mail", $strMail, PDO::PARAM_STR);
$rqPrep->execute();
$arrUser = $rqPrep->fetch();
if (password_verify($strPwd, $arrUser['user_password'])){ if (password_verify($strPwd, $arrUser['user_password'])){
unset($arrUser['user_password']); unset($arrUser['user_password']);
return $arrUser; return $arrUser;
@ -242,7 +236,7 @@
/** /**
* Verifie sur le pseudo entré n'est pas déjà utilisé * Verifie sur le pseudo entré n'est pas déjà utilisé
* @param string $pseudo Pseudo a verifié * @param string $pseudo Pseudo a verifié
* @return bool Le pseudo existe ou pas * @return array Tableau associatif (ou false si pas trouvé)
*/ */
public function pseudoExists(string $pseudo): bool{ public function pseudoExists(string $pseudo): bool{
@ -250,6 +244,6 @@
$rq->bindValue(":pseudo", $pseudo, PDO::PARAM_STR); $rq->bindValue(":pseudo", $pseudo, PDO::PARAM_STR);
$rq->execute(); $rq->execute();
return (bool)$rq->fetchColumn(); return $rq->fetchColumn();
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -1,112 +0,0 @@
<!-- Script d'autocomplétion ville/département — API Géo (gouvernement français) -->
<script>
(function () {
const input = document.getElementById('user_location');
const suggestions = document.getElementById('location-suggestions');
let debounceTimer = null;
// Ferme la liste si on clique ailleurs
document.addEventListener('click', function (e) {
if (!input.contains(e.target) && !suggestions.contains(e.target)) {
hideSuggestions();
}
});
input.addEventListener('input', function () {
const query = this.value.trim();
clearTimeout(debounceTimer);
if (query.length < 2) {
hideSuggestions();
return;
}
// Délai de 300 ms pour éviter trop d'appels API
debounceTimer = setTimeout(function () {
fetchCities(query);
}, 300);
});
// Navigation clavier dans la liste
input.addEventListener('keydown', function (e) {
const items = suggestions.querySelectorAll('.list-group-item');
const active = suggestions.querySelector('.list-group-item.active');
let index = Array.from(items).indexOf(active);
if (e.key === 'ArrowDown') {
e.preventDefault();
if (index < items.length - 1) setActive(items, index + 1);
} else if (e.key === 'ArrowUp') {
e.preventDefault();
if (index > 0) setActive(items, index - 1);
} else if (e.key === 'Enter' && active) {
e.preventDefault();
selectItem(active.dataset.value);
} else if (e.key === 'Escape') {
hideSuggestions();
}
});
function fetchCities(query) {
// On cherche par nom de commune, on récupère aussi le département
const url = 'https://geo.api.gouv.fr/communes?nom=' + encodeURIComponent(query)
+ '&fields=nom,departement&boost=population&limit=8';
fetch(url)
.then(function (res) { return res.json(); })
.then(function (data) { renderSuggestions(data); })
.catch(function () { hideSuggestions(); });
}
function renderSuggestions(cities) {
suggestions.innerHTML = '';
if (!cities || cities.length === 0) {
hideSuggestions();
return;
}
cities.forEach(function (city) {
const dept = city.departement
? city.departement.nom + ' (' + city.departement.code + ')'
: '';
const label = city.nom + (dept ? ' — ' + dept : '');
// Valeur stockée : "Ville (Département)"
const value = city.nom + (city.departement ? ' (' + city.departement.nom + ')' : '');
const li = document.createElement('li');
li.className = 'list-group-item list-group-item-action py-2 px-3';
li.style.cursor = 'pointer';
li.dataset.value = value;
li.textContent = label;
li.addEventListener('mousedown', function (e) {
// mousedown avant blur pour éviter que la liste disparaisse avant le clic
e.preventDefault();
selectItem(value);
});
suggestions.appendChild(li);
});
suggestions.style.display = 'block';
}
function selectItem(value) {
input.value = value;
hideSuggestions();
}
function hideSuggestions() {
suggestions.style.display = 'none';
suggestions.innerHTML = '';
}
function setActive(items, index) {
items.forEach(function (item) { item.classList.remove('active'); });
items[index].classList.add('active');
input.value = items[index].dataset.value;
}
})();
</script>

View file

@ -1,31 +0,0 @@
<script>
const defaultAvatar = "{$smarty.env.IMG_USER_PATH}images.jpg";
// Suppression du listener précédent avant d'en ajouter un nouveau
const inputImage = document.getElementById('image');
const btnDelete = document.getElementById('btn-delete-image');
const previewAvatar = document.getElementById('preview-avatar');
const deleteInput = document.getElementById('delete_image');
inputImage?.addEventListener('change', function () {
const file = this.files[0];
if (!file) return;
const reader = new FileReader();
reader.onload = e => {
previewAvatar.src = e.target.result;
previewAvatar.style.opacity = '1';
};
reader.readAsDataURL(file);
deleteInput.value = '0';
if (btnDelete) {
btnDelete.disabled = false;
}
});
btnDelete?.addEventListener('click', function () {
deleteInput.value = '1';
previewAvatar.src = defaultAvatar;
previewAvatar.style.opacity = '0.5';
this.disabled = true;
});
</script>

View file

@ -4,24 +4,20 @@
<nav aria-label="Navigation pied de page"> <nav aria-label="Navigation pied de page">
<ul class="list-inline"> <ul class="list-inline">
<li class="list-inline-item"> <li class="list-inline-item">
<a href="{$smarty.env.BASE_URL}/page/about">A propos</a> <a href="?ctrl=page&action=about">A propos</a>
</li> </li>
<li class="list-inline-item" aria-hidden="true">|</li> <li class="list-inline-item" aria-hidden="true">|</li>
<li class="list-inline-item"> <li class="list-inline-item">
<a href="{$smarty.env.BASE_URL}/page/help">Aide et support</a> <a href="index.php?ctrl=page&action=help">Aide et support</a>
</li> </li>
<li class="list-inline-item" aria-hidden="true">|</li> <li class="list-inline-item" aria-hidden="true">|</li>
<li class="list-inline-item"> <li class="list-inline-item">
<a href="{$smarty.env.BASE_URL}/page/mentions">Mentions légales</a> <a href="?ctrl=page&action=mentions">Mentions légales</a>
</li>
<li class="list-inline-item" aria-hidden="true">|</li>
<li class="list-inline-item">
<a href="/html">Documentation Doxygen</a>
</li> </li>
</ul> </ul>
</nav> </nav>
</footer> </footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="{$smarty.env.BASE_URL}/assests/js/scripts.js"></script> <script src="assests/js/scripts.js"></script>

View file

@ -3,96 +3,88 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="{$smarty.env.BASE_URL}/assests/css/style.css"> <link rel="stylesheet" href="assests/css/style.css">
<link rel="shortcut icon" href="{$smarty.env.BASE_URL}/assests/img/Group-49.ico" type="image/x-icon"> <link rel="shortcut icon" href="assests/img/Group-49.ico" type="image/x-icon">
<!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous">
<script src="https://use.fontawesome.com/releases/v6.3.0/js/all.js" crossorigin="anonymous"></script> <script src="https://use.fontawesome.com/releases/v6.3.0/js/all.js" crossorigin="anonymous"></script>
<title>Folliow{block name="title"}{/block}</title> <title>Folliow{block name="title"}{/block}</title>
</head> </head>
<body class="d-flex flex-column min-vh-100"> <body class="d-flex flex-column min-vh-100">
<nav class="navbar navbar-expand-lg navbar-light"> <nav class="navbar navbar-expand-lg navbar-light">
<div class="container-fluid"> <div class="container-fluid">
<a class="navbar-brand d-flex align-items-center" href="index.php">
<!-- Logo --> <img src="assests/img/logo.png" alt="Logo" class="logo-image">
<a class="navbar-brand d-flex align-items-center" href="{$smarty.env.BASE_URL}">
<img src="{$smarty.env.BASE_URL}/assests/img/logo.png" alt="Logo" class="logo-image">
</a> </a>
<!-- Bouton hamburger mobile --> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button>
<!-- Liens de navigation -->
<div class="collapse navbar-collapse" id="navbarNav"> <div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto">
<!-- Liens gauche -->
<ul class="navbar-nav me-auto mb-0">
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="{$smarty.env.BASE_URL}/page/about">À propos</a> <a class="nav-link" href="?ctrl=page&action=about">À propos</a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="{$smarty.env.BASE_URL}/project/search">Rechercher</a> <a class="nav-link" href="?ctrl=project&action=search">Rechercher</a>
</li> </li>
{if isset($smarty.session.user)} {if isset($smarty.session.user)}
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="{$smarty.env.BASE_URL}/project/addedit_project">Ajouter un projet</a> <a class="nav-link" href="?ctrl=project&action=addedit_project">Ajouter un projet</a>
</li> </li>
{if $smarty.session.user.authorisation_name == "Administrateur"} {if $smarty.session.user.authorisation_name == "Administrateur"}
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="{$smarty.env.BASE_URL}/admin/admin">Admin</a> <a class="nav-link" href="?ctrl=admin&action=admin">Admin</a>
</li> </li>
{/if} {/if}
{/if} {/if}
</ul> </ul>
<!-- Liens droite (connexion / profil) --> <nav class="col-4 d-flex justify-content-end align-items-center" aria-label="Connexion utilisateur">
<nav aria-label="Connexion utilisateur">
{if !isset($smarty.session.user)} {if !isset($smarty.session.user)}
<ul class="navbar-nav d-flex flex-row align-items-center gap-1 mb-0"> <ul class="navbar-nav">
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="{$smarty.env.BASE_URL}/user/signup" <a class="nav-link" href="index.php?ctrl=user&action=signup" title="Créer un compte" aria-label="Créer un compte">
title="Créer un compte" aria-label="Créer un compte">
S'inscrire S'inscrire
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="{$smarty.env.BASE_URL}/user/login" <a class="nav-link" href="index.php?ctrl=user&action=login" title="Se connecter" aria-label="Se connecter">
title="Se connecter" aria-label="Se connecter">
Se connecter Se connecter
</a> </a>
</li> </li>
</ul> </ul>
{else} {else}
<ul class="navbar-nav d-flex flex-row align-items-center gap-2 mb-0"> <ul class="navbar-nav">
<li class="nav-item d-flex align-items-center"> <li class="nav-item">
<a class="nav-link p-0" href="{$smarty.env.BASE_URL}/user/user/{$smarty.session.user.user_pseudo}" <a class="nav-link" href="index.php?ctrl=user&action=user&pseudo={$smarty.session.user.user_pseudo}" title="Modifier mon compte" aria-label="Modifier mon compte">
title="Modifier mon compte" aria-label="Modifier mon compte"> <img src={$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($smarty.session.user.user_image))|file_exists}{$smarty.session.user.user_image}{else}images.jpg{/if}
<img class="rounded-circle flex-shrink-0 mt-2 ml-5"
src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($smarty.session.user.user_image))|file_exists}{$smarty.session.user.user_image}{else}images.jpg{/if}" style="width: 36px; height: 36px; object-fit: cover;"
class="nav-avatar" alt="Photo de profil">
alt="Photo de profil"
>
</a> </a>
</li> </li>
<li class="nav-item d-flex align-items-center">
<a class="nav-link" href="{$smarty.env.BASE_URL}/user/logout" <li>
title="Se déconnecter" aria-label="Se déconnecter"> <a class="nav-link" href="index.php?ctrl=user&action=logout" title="Se déconnecter" aria-label="Se déconnecter">
Se déconnecter Se déconnecter
</a> </a>
</li> </li>
</ul> </ul>
{/if} {/if}
</nav> </nav>
</div> </div>
</div> </div>
</nav> </nav>
<main id="main-content" class="container my-4" {block name="display"}{/block}> <main id="main-content" class="container my-4">
<section class="p-4 mb-4 text-center txt_title" aria-labelledby="page-title"> <section
class="p-4 mb-4 text-center txt_title "
aria-labelledby="page-title"
>
<div class="col-lg-8 mx-auto"> <div class="col-lg-8 mx-auto">
<h2 id="page-title" class="display-5 fw-semibold mb-3"> <h2 id="page-title" class="display-5 fw-semibold mb-3">
{block name="h2"}{/block} {block name="h2"}{/block}
@ -107,4 +99,5 @@
</section> </section>
</main> </main>
</body>
{include file="views/_partial/messages.tpl"} {include file="views/_partial/messages.tpl"}

View file

@ -3,46 +3,30 @@
<div class="ratio ratio-4x3"> <div class="ratio ratio-4x3">
<a href="{$smarty.env.BASE_URL}/project/display/{$objProject->getId()}"> <a href="index.php?ctrl=project&action=display&id={$objProject->getId()}"></a>
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_PROJECT_PATH}{if ($smarty.env.IMG_PROJECT_PATH|cat:$objProject->getThumbnail())|file_exists}{$objProject->getThumbnail()}{else}{math equation="rand(1,4)"}.jpg{/if}" <img src="{$smarty.env.IMG_PROJECT_PATH}{if ($smarty.env.IMG_PROJECT_PATH|cat:$objProject->getThumbnail())|file_exists}{$objProject->getThumbnail()}{else}{math equation="rand(1,4)"}.jpg{/if}"
class="w-100 h-100 object-fit-cover" class="w-100 h-100 object-fit-cover"
{if $objProject->getCreatorName()|stripos:'minou' !== false}
style =" box-shadow: 0 0 0 4px #000; "{/if}
alt="" alt=""
loading="lazy"> loading="lazy">
</a> </a>
</div> </div>
<div class="card-body p-3 bg-light" {if $objProject->getCreatorName()|stripos:'minou' !== false}style=" background-color: #ff8c00 !important; /* Orange tigre */ <div class="card-body p-3 bg-light">
background-image: repeating-linear-gradient(
45deg,
transparent,
transparent 30px,
rgba(0, 0, 0, 0.15) 30px,
rgba(0, 0, 0, 0.15) 60px
) !important;
color: #000 !important;
position: relative;
z-index: 1;"{/if}>
<div class="d-flex align-items-start gap-3"> <div class="d-flex align-items-start gap-3">
<a href="{$smarty.env.BASE_URL}/user/user/{$objProject->getCreatorname()}"> <a href="index.php?ctrl=user&action=user&id={$objProject->getUser_id()}">
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($objProject->getUser_image()))|file_exists}{$objProject->getUser_image()}{else}images.jpg{/if}" <img src="{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($objProject->getUser_image()))|file_exists}{$objProject->getUser_image()}{else}images.jpg{/if}"
class="rounded-circle flex-shrink-0 border border-2 border-white" class="rounded-circle flex-shrink-0 border border-2 border-white"
style="width: 64px; height: 64px; object-fit: cover; margin-top: 8px;{if $objProject->getCreatorName()|stripos:'minou' !== false} style="width: 64px; height: 64px; object-fit: cover; margin-top: 8px;"
box-shadow: 0 0 0 4px #000; {/if}"
alt="Photo de profil"> alt="Photo de profil">
</a> </a>
<div class="flex-grow-1"> <div class="flex-grow-1">
<h3 class="h6 fw-bold mb-2 mt-1">{$objProject->getTitle()}</h3> <h3 class="h6 fw-bold mb-2 mt-1">{$objProject->getTitle()}</h3>
<p class="small text-muted mb-1"> <p class="small text-muted mb-1">
<i class="bi bi-person"></i> <i class="bi bi-person"></i>
<a href="{$smarty.env.BASE_URL}/user/user/{$objProject->getCreatorname()}" <a href="index.php?ctrl=user&action=user&pseudo={$objProject->getCreatorname()}"
class="text-decoration-none text-muted" class="text-decoration-none text-muted"
style="position: relative; z-index: 2; style="position: relative; z-index: 2;">
{if $objProject->getCreatorName()|stripos:'minou' !== false}font-weight: 800 !important;
text-transform: uppercase;
color: #000 !important;{/if}">
{$objProject->getCreatorname()} {$objProject->getCreatorname()}
</a> </a>
</p> </p>
@ -57,13 +41,8 @@
<i class="bi bi-clock"><time>{$objProject->getCreation_date()}</time></i> <i class="bi bi-clock"><time>{$objProject->getCreation_date()}</time></i>
</small> </small>
{if $objProject->getStatus() != "refusé"} {if $objProject->getStatus() != "refusé"}
<a href="{$smarty.env.BASE_URL}/project/display/{$objProject->getId()}" <a href="index.php?ctrl=project&action=display&id={$objProject->getId()}"
class="btn btn-sm btn-primary" {if $objProject->getCreatorName()|stripos:'minou' !== false}style=" class="btn btn-sm btn-primary">
background-color: #000 !important;
color: #ff8c00 !important;
border: none !important;
font-weight: bold !important;
transition: transform 0.2s;"{/if}>
Voir → Voir →
</a> </a>
{/if} {/if}
@ -71,7 +50,7 @@
{if isset($smarty.session.user)} {if isset($smarty.session.user)}
{if $smarty.session.user.user_id == $objProject->getUser_id()} {if $smarty.session.user.user_id == $objProject->getUser_id()}
<a href="{$smarty.env.BASE_URL}/project/addedit_project/{$objProject->getId()}" <a href="index.php?ctrl=project&action=addedit_project&id={$objProject->getId()}"
class="btn btn-sm btn-outline-secondary mt-2 w-100" class="btn btn-sm btn-outline-secondary mt-2 w-100"
style="position: relative; z-index: 2;"> style="position: relative; z-index: 2;">
Editer Editer
@ -86,13 +65,13 @@
<div class="card-footer bg-white border-top-0 p-2"> <div class="card-footer bg-white border-top-0 p-2">
<div class="d-flex gap-2"> <div class="d-flex gap-2">
<a class="btn btn-sm btn-success flex-fill" <a class="btn btn-sm btn-success flex-fill"
href="{$smarty.env.BASE_URL}/project/accept/{$objProject->getId()}" href="?ctrl=project&action=accept&id={$objProject->getId()}"
name="toPublished">Accepter</a> name="toPublished">Accepter</a>
<a class="btn btn-sm btn-warning flex-fill" <a class="btn btn-sm btn-warning flex-fill"
href="{$smarty.env.BASE_URL}/project/refuse/{$objProject->getId()}" href="?ctrl=project&action=refuse&id={$objProject->getId()}"
name="toRefused">Refuser</a> name="toRefused">Refuser</a>
<a class="btn btn-sm btn-danger flex-fill" <a class="btn btn-sm btn-danger flex-fill"
href="{$smarty.env.BASE_URL}/project/delete/{$objProject->getId()}" href="index.php?ctrl=project&action=delete&id={$objProject->getId()}"
name="toDelete" name="toDelete"
onclick="return confirm('Attention ! Êtes-vous sûr de vouloir supprimer ce projet ? Cette action est irréversible.');"> onclick="return confirm('Attention ! Êtes-vous sûr de vouloir supprimer ce projet ? Cette action est irréversible.');">
Supprimer</a> Supprimer</a>

View file

@ -44,7 +44,7 @@
<input name="thumbnail" class="form-control" type="file"> <input name="thumbnail" class="form-control" type="file">
{if $objProject && $objProject->getId()} {if $objProject && $objProject->getId()}
<label class="h5">Miniature actuelle :</label> <label class="h5">Miniature actuelle :</label>
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_PROJECT_PATH}{$objProject->getThumbnail()}" alt="Miniature"> <img src="{$smarty.env.IMG_PROJECT_PATH}{$objProject->getThumbnail()}" alt="Miniature">
{/if} {/if}
</div> </div>
@ -69,7 +69,7 @@
{foreach $arrImages as $image} {foreach $arrImages as $image}
<div class="col-md-3 mb-3 text-center"> <div class="col-md-3 mb-3 text-center">
<div class="card shadow-sm h-100 border-{if $image.image_status == 'approuvé'}success{elseif $image.image_status == 'refusé'}danger{else}warning{/if}"> <div class="card shadow-sm h-100 border-{if $image.image_status == 'approuvé'}success{elseif $image.image_status == 'refusé'}danger{else}warning{/if}">
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_PROJECT_PATH}{$image.image_name}" <img src="{$smarty.env.IMG_PROJECT_PATH}{$image.image_name}"
class="card-img-top img-thumbnail" class="card-img-top img-thumbnail"
alt="{$image.image_alt}" alt="{$image.image_alt}"
style="height: 150px; object-fit: cover;"> style="height: 150px; object-fit: cover;">
@ -80,7 +80,7 @@
</span> </span>
<div class="mt-2 d-flex flex-column gap-1"> <div class="mt-2 d-flex flex-column gap-1">
<a href="{$smarty.env.BASE_URL}/project/delete_image/{$image.image_id}" <a href="index.php?ctrl=project&action=delete_image&id_img={$image.image_id}"
class="btn btn-sm btn-danger" class="btn btn-sm btn-danger"
onclick="return confirm('Supprimer définitivement cette image ?')">Supprimer</a> onclick="return confirm('Supprimer définitivement cette image ?')">Supprimer</a>
</div> </div>

View file

@ -4,6 +4,6 @@
<div class="text-center"> <div class="text-center">
<h1 class="display-1">Erreur 403</h1> <h1 class="display-1">Erreur 403</h1>
<h2 class="display-3">Vous n'êtes pas autorisé à accéder à cette page !</h2> <h2 class="display-3">Vous n'êtes pas autorisé à accéder à cette page !</h2>
<img class="img-fluid" src="{$smarty.env.BASE_URL}/assests/img/error403.jpg"> <img class="img-fluid" src="assests/img/error403.jpg">
</div> </div>
{/block} {/block}

View file

@ -4,6 +4,6 @@
<div class="text-center"> <div class="text-center">
<h1 class="display-1">Erreur 404</h1> <h1 class="display-1">Erreur 404</h1>
<h2 class="display-3">Cette page n'existe pas !</h2> <h2 class="display-3">Cette page n'existe pas !</h2>
<img class="img-fluid" src="{$smarty.env.BASE_URL}/assests/img/error404.webp"> <img class="img-fluid" src="assests/img/error404.webp">
</div> </div>
{/block} {/block}

View file

@ -133,7 +133,7 @@
</h2> </h2>
<div id="collapseOne" class="accordion-collapse collapse show" data-bs-parent="#accordionExample"> <div id="collapseOne" class="accordion-collapse collapse show" data-bs-parent="#accordionExample">
<div class="accordion-body"> <div class="accordion-body">
<p>Rien de plus simple ! Si vous êtes connecté à votre compte, un lien <a href="{$smarty.env.BASE_URL}/admin/admin">"admin"</a> sera visible dans votre barre de navigation. <p>Rien de plus simple ! Si vous êtes connecté à votre compte, un lien <a href="index.php?ctrl=admin&action=admin">"admin"</a> sera visible dans votre barre de navigation.
Cliquez dessus et vous voici dans l'antre réservée à nos fabuleux administrateurs !</p> Cliquez dessus et vous voici dans l'antre réservée à nos fabuleux administrateurs !</p>
</div> </div>
</div> </div>
@ -206,7 +206,7 @@
</h2> </h2>
<div id="collapseTwo" class="accordion-collapse collapse" data-bs-parent="#accordionExample"> <div id="collapseTwo" class="accordion-collapse collapse" data-bs-parent="#accordionExample">
<div class="accordion-body"> <div class="accordion-body">
<p>En haut à droite de votre écran, vous avez le lien <a href="{$smarty.env.BASE_URL}/user/signin">"s'inscrire"</a>. Nous demandons certaines informations obligatoires pour l'identification, <p>En haut à droite de votre écran, vous avez le lien <a href="index.php?ctrl=user&action=signin">"s'inscrire"</a>. Nous demandons certaines informations obligatoires pour l'identification,
ensuite à vous de remplir les informations complémentaires pour alimenter votre profil et permettre aux autres utilisateurs de mieux vous connaitre et vous contacter.</p> ensuite à vous de remplir les informations complémentaires pour alimenter votre profil et permettre aux autres utilisateurs de mieux vous connaitre et vous contacter.</p>
</div> </div>
</div> </div>

View file

@ -1,5 +1,5 @@
{extends file="views/layout.tpl"} {extends file="views/layout.tpl"}
{block name="display" }style="display:none;"{/block}
{block name="content"} {block name="content"}
<section class="container mt-5 p-5 d-flex flex-column align-items-center text-center"> <section class="container mt-5 p-5 d-flex flex-column align-items-center text-center">
<h1 class="logo">Folliow</h1> <h1 class="logo">Folliow</h1>
@ -11,11 +11,13 @@
<section class="container mt-5 p-5 d-flex flex-column align-items-center text-center"> <section class="container mt-5 p-5 d-flex flex-column align-items-center text-center">
<div class="mb-4"> <div class="mb-4">
<form method="GET" action="{$smarty.env.BASE_URL}"> <form method="GET" action="index.php">
<input type="hidden" name="ctrl" value="project">
<input type="hidden" name="action" value="home">
<button type="submit" name="filter_cat" value="1" class="btn btn-primary">Design</button> <button type="submit" name="filter_cat" value="1" class="btn btn-primary">Design</button>
<button type="submit" name="filter_cat" value="2" class="btn btn-primary">Développement Web</button> <button type="submit" name="filter_cat" value="2" class="btn btn-primary">Développement Web</button>
<button type="submit" name="filter_old" value="true" class="btn btn-primary">Plus de 6 mois</button> <button type="submit" name="filter_old" value="true" class="btn btn-primary">Plus de 6 mois</button>
<a href="{$smarty.env.BASE_URL}/project/home" class="btn btn-primary">Tout</a> <a href="index.php?ctrl=project&action=home" class="btn btn-primary">Tout</a>
</form> </form>
</div> </div>
</section> </section>
@ -28,7 +30,7 @@
{assign var="isAuthor" value=(isset($smarty.session.user) && $smarty.session.user.user_id == $objProject->getUser_id())} {assign var="isAuthor" value=(isset($smarty.session.user) && $smarty.session.user.user_id == $objProject->getUser_id())}
{assign var="isModerator" value=(isset($smarty.session.user) && $smarty.session.user.user_status == 2)} {assign var="isModerator" value=(isset($smarty.session.user) && $smarty.session.user.user_status == 2)}
{assign var="isDeleted" value=($objProject->getDeleted_at() !== null)} {assign var="isDeleted" value=($objProject->getProject_deleted_at() !== null)}
{assign var="isRefused" value=($objProject->getStatus() == "refusé")} {assign var="isRefused" value=($objProject->getStatus() == "refusé")}
{if $isModerator {if $isModerator

175
views/inscription.tpl Normal file
View file

@ -0,0 +1,175 @@
{extends file="views/layout.tpl"}
{block name="content"}
<main class="container py-5">
<div class="row justify-content-center position-relative">
<div class="col-12 col-md-10 col-lg-6">
<div class="card shadow-sm border-0 rounded-4 p-4 p-lg-5">
<h1 class="h3 fw-bold mb-1">Inscription</h1>
<p class="text-secondary mb-4">Créez votre compte utilisateur.</p>
{if (isset($arrError) && count($arrError) > 0) }
<div class="alert alert-danger">
{foreach $arrError as $strError}
<p>{$strError}</p>
{/foreach}
</div>
{/if}
<form method="POST">
<div class="row g-3">
<div class="col-md-6">
<label class="form-label" for="user_firstname">
Prénom *
</label>
<input
class="form-control"
type="text"
id="user_firstname"
name="user_firstname"
required >
</div>
<div class="col-md-6">
<label class="form-label" for="user_name">
Nom *
</label>
<input
class="form-control"
type="text"
id="user_name"
name="user_name"
required>
</div>
<div class="col-12">
<label class="form-label" for="user_pseudo">
Pseudo *
</label>
<div class="input-group">
<span class="input-group-text">@</span>
<input
class="form-control"
type="text"
id="user_pseudo"
name="user_pseudo"
required
>
</div>
</div>
<!-- Champ : adresse e-mail -->
<div class="col-12">
<label class="form-label" for="user_mail">
Adresse e-mail *
</label>
<input
class="form-control"
type="email"
id="user_mail"
name="user_mail"
required
>
</div>
<!-- Champ : mot de passe -->
<div class="col-12">
<label class="form-label" for="user_password">
Mot de passe *
</label>
<input
class="form-control"
type="password"
id="user_password"
name="user_password"
required
>
</div>
<!-- Champ : confirmer le mot de passe -->
<div class="col-12">
<label class="form-label" for="pwd_confirm">
Confirmer le Mot de passe *
</label>
<input
class="form-control"
type="password"
id="pwd_confirm"
name="pwd_confirm"
required
>
</div>
<!-- Champ optionnel : numéro de téléphone -->
<div class="col-12">
<label class="form-label" for="user_phone">
Téléphone
</label>
<input
class="form-control"
type="text"
id="user_phone"
name="user_phone"
>
</div>
<!-- Champ optionnel : profession de l'utilisateur -->
<div class="col-12">
<label class="form-label" for="user_work">
Profession
</label>
<input
class="form-control"
type="text"
id="user_work"
name="user_work"
>
</div>
<!-- Champ optionnel : localisation de l'utilisateur -->
<div class="col-12">
<label class="form-label" for="user_location">
Localisation
</label>
<input
class="form-control"
type="text"
id="user_location"
name="user_location"
>
</div>
<!-- Champ optionnel : phrase d'accroche -->
<div class="col-12">
<label class="form-label" for="user_description">
Phrase d'accroche
</label>
<textarea
class="form-control"
id="user_description"
name="user_description"
rows="3"
></textarea>
</div>
<!-- Bouton de soumission du formulaire -->
<div class="col-12 d-grid mt-2">
<button type="submit" class="btn btn-primary btn-lg rounded-3">
Créer mon compte
</button>
</div>
<!-- Lien vers la page de connexion -->
<div class="col-12 text-center">
<small class="text-secondary">
Déjà un compte ?
<a href="index.php?ctrl=user&action=login">Se connecter</a>
</small>
</div>
</form>
</div>
</div>
</div>
</div>
</main>
{/block}

View file

@ -1,6 +1,6 @@
{include file="views/_partial/header.tpl"} {include file="views/_partial/header.tpl"}
<main class="container mb-4 mt-1 flex-grow-1 d-flex flex-column align-items-center justify-content-center"> <main class="container mb-4 mt-1">
{block name="content"} {block name="content"}
{/block} {/block}
</main> </main>

View file

@ -1,7 +1,6 @@
{extends file="views/layout.tpl"} {extends file="views/layout.tpl"}
{block name="title" append} - Connexion{/block} {block name="title" append} - Connexion{/block}
{block name="display" }style="display:none;"{/block}
{block name="content"} {block name="content"}
<section aria-label="Se connecter"> <section aria-label="Se connecter">
@ -70,7 +69,7 @@
<div class="col-12 text-center"> <div class="col-12 text-center">
<small class="text-secondary"> <small class="text-secondary">
Pas encore de compte ? Pas encore de compte ?
<a href="{$smarty.env.BASE_URL}/user/signup" class="link-primary"> <a href="index.php?ctrl=user&action=signup" class="link-primary">
Créer un compte Créer un compte
</a> </a>
</small> </small>

View file

@ -24,4 +24,3 @@
Cordialement,<br> Cordialement,<br>
Léquipe Folliow Léquipe Folliow
</p> </p>
<img src="{$smarty.env.BASE_URL}/assests/img/logo.png" style="height : 30px;">

View file

@ -114,16 +114,16 @@
<dl class="row"> <dl class="row">
<dt class="col-sm-3">Hébergeur</dt> <dt class="col-sm-3">Hébergeur</dt>
<dd class="col-sm-9">Yass Le Goat en faite (et o2switch)<dd> <dd class="col-sm-9">OVH<dd>
<dt class="col-sm-3">Domaine / accès</dt> <dt class="col-sm-3">Domaine / accès</dt>
<dd class="col-sm-9">php.boulayoune.com</dd> <dd class="col-sm-9">php.boulayoune.com</dd>
<dt class="col-sm-3">Adresse</dt> <dt class="col-sm-3">Adresse</dt>
<dd class="col-sm-9">REDACTED FOR PRIVACY</dd> <dd class="col-sm-9">4 Rue du Rhin, 68000 Colmar</dd>
<dt class="col-sm-3">Téléphone</dt> <dt class="col-sm-3">Téléphone</dt>
<dd class="col-sm-9">REDACTED FOR PRIVACY</dd> <dd class="col-sm-9">03 68 67 20 00</dd>
</dl> </dl>
</section> </section>

View file

@ -22,7 +22,7 @@
</p> </p>
<div class="mb-4 shadow-sm {if !($smarty.env.IMG_PROJECT_PATH|cat:$objProject->getThumbnail())|file_exists}d-none{/if}" > <div class="mb-4 shadow-sm {if !($smarty.env.IMG_PROJECT_PATH|cat:$objProject->getThumbnail())|file_exists}d-none{/if}" >
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_PROJECT_PATH}{$objProject->getThumbnail()}" <img src="{$smarty.env.IMG_PROJECT_PATH}{$objProject->getThumbnail()}"
class="img-fluid rounded w-100"> class="img-fluid rounded w-100">
</div> </div>
@ -30,7 +30,7 @@
<h4 class="border-bottom pb-2">Description</h4> <h4 class="border-bottom pb-2">Description</h4>
<p class="lead">{$objProject->getDescription()}</p> <p class="lead">{$objProject->getDescription()}</p>
<div class="mt-4" style="white-space: pre-wrap; overflow-wrap: break-word;"> <div class="mt-4" style="white-space: pre-wrap;">
{$objProject->getContent()} {$objProject->getContent()}
</div> </div>
</div> </div>
@ -50,16 +50,16 @@
<div class="col-md-4 mb-4"> <div class="col-md-4 mb-4">
<div class="card {if $image.image_status != 'approuvé'}border-warning shadow-none opacity-75{/if}"> <div class="card {if $image.image_status != 'approuvé'}border-warning shadow-none opacity-75{/if}">
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_PROJECT_PATH}{$image.image_name}" class="card-img-top" alt="{$image.image_alt}"> <img src="{$smarty.env.IMG_PROJECT_PATH}{$image.image_name}" class="card-img-top" alt="{$image.image_alt}">
{* Visible uniquement par le modérateur *} {* Visible uniquement par le modérateur *}
{if isset($smarty.session.user.user_status) && $smarty.session.user.user_status == 2} {if isset($smarty.session.user.user_status) && $smarty.session.user.user_status == 2}
<div class="moderator-tools border-top pt-2 mt-2"> <div class="moderator-tools border-top pt-2 mt-2">
<div class="d-flex gap-2"> <div class="d-flex gap-2">
<a href="{$smarty.env.BASE_URL}/project/change_image_status/{$image.image_id}&status=approuvé" <a href="index.php?ctrl=project&action=change_image_status&id_img={$image.image_id}&status=approuvé"
class="btn btn-sm btn-success">Valider</a> class="btn btn-sm btn-success">Valider</a>
<a href="{$smarty.env.BASE_URL}/project/delete_image/{$image.image_id}" <a href="index.php?ctrl=project&action=delete_image&id_img={$image.image_id}"
class="btn btn-sm btn-outline-danger" class="btn btn-sm btn-outline-danger"
onclick="return confirm('Supprimer définitivement ?')">Supprimer</a> onclick="return confirm('Supprimer définitivement ?')">Supprimer</a>
</div> </div>
@ -75,9 +75,9 @@
</section> </section>
<!-- Formulaire qui envoie la demande au contrôleur (sendEmail) --> <!-- Formulaire qui envoie la demande au contrôleur (shareProject) -->
<div class="card shadow-sm p-4 mb-5"> <div class="card shadow-sm p-4 mb-5">
<form method="post" action="{$smarty.env.BASE_URL}/project/sendEmail"> <form method="post" action="index.php?ctrl=project&action=shareProject">
<input type="hidden" name="project_id" <input type="hidden" name="project_id"
value="{$objProject->getId()}"> value="{$objProject->getId()}">
@ -97,66 +97,37 @@
<!-- Sidebar : informations du créateur --> <!-- Sidebar : informations du créateur -->
<div class="col-lg-4"> <div class="col-lg-4">
<div class="card text-center shadow-sm p-4" {if $objProject->getCreatorName()|stripos:'minou' !== false}style=" background-color: #ff8c00 !important; /* Orange tigre */ <div class="card text-center shadow-sm p-4">
background-image: repeating-linear-gradient( <a href="index.php?ctrl=user&action=user&id={$objProject->getUser_id()}" class="text-decoration-none text-dark">
45deg, <img src="{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($objProject->getUser_image()))|file_exists}{$objProject->getUser_image()}{else}images.jpg{/if}"
transparent,
transparent 30px,
rgba(0, 0, 0, 0.15) 30px,
rgba(0, 0, 0, 0.15) 60px
) !important;
border: 2px solid #000 !important;
color: #000 !important;
position: relative;
z-index: 1;"{/if}>
<a href="{$smarty.env.BASE_URL}/user/user/{$objProject->getCreatorName()}" class="text-decoration-none text-dark">
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($objProject->getUser_image()))|file_exists}{$objProject->getUser_image()}{else}images.jpg{/if}"
class="rounded-circle mb-3 mx-auto" class="rounded-circle mb-3 mx-auto"
style="width:100px;height:100px;object-fit:cover;{if $objProject->getCreatorName()|stripos:'minou' !== false} style="width:100px;height:100px;object-fit:cover;">
box-shadow: 0 0 0 4px #000; {/if}">
</a> </a>
<h5>{$objProject->getCreatorName()}</h5>
<h5 {if $objProject->getCreatorName()|stripos:'minou' !== false}style="font-weight: 800 !important;
text-transform: uppercase;
color: #000 !important;"{/if}>
{$objProject->getCreatorName()}
</h5>
<p class="text-muted small"> <p class="text-muted small">
Publié le {$objProject->getCreation_date()} Publié le {$objProject->getCreation_date()}
</p> </p>
<button class="btn btn-primary" {if $objProject->getCreatorName()|stripos:'minou' !== false}style=" <button class="btn btn-primary">Contacter le talent</button>
background-color: #000 !important;
color: #ff8c00 !important;
border: none !important;
font-weight: bold !important;
transition: transform 0.2s;"{/if}>
Contacter le talent
</button>
{if $objProject->getCreatorName()|stripos:"minou" !== false}
<div class="small mt-2">MINOU NE MEURT JAMAIS ! 🐯</div>
{/if}
</div>
</div> </div>
{*Controle de l'utilisateur ainsi que du status du projet + Suppression disponible pour l'utilisateur possédant le projet*} {*Controle de l'utilisateur ainsi que du status du projet + Suppression disponible pour l'utilisateur possédant le projet*}
{if isset($smarty.session.user)} {if isset($smarty.session.user)}
{if ($smarty.session.user.user_status == 2 || $smarty.session.user.user_id == $objProject->getUser_id())} {if ($smarty.session.user.user_status == 2 || $smarty.session.user.user_id == $objProject->getUser_id())}
<div class="border rounded text-center"> <div class="border rounded text-center">
<a class="btn btn-sm m-1 btn-danger" href="{$smarty.env.BASE_URL}/project/delete/{$objProject->getId()}" name="toDelete">Supprimer le projet</a> <a class="btn btn-sm m-1 btn-danger" href="?ctrl=project&action=delete&id={$objProject->getId()}" name="toDelete">Supprimer le projet</a>
{/if} {/if}
{if $smarty.session.user.user_id == $objProject->getUser_id()} {if $smarty.session.user.user_id == $objProject->getUser_id()}
<a class="btn btn-sm m-1 btn-warning" href="{$smarty.env.BASE_URL}/project/addedit_project/{$objProject->getId()}" name="addedit">Modifier le projet</a> <a class="btn btn-sm m-1 btn-warning" href="?ctrl=project&action=addedit_project&id={$objProject->getId()}" name="addedit">Modifier le projet</a>
{/if} {/if}
{*Conditions permettant au Modérateur de modifier le status d'un projet*} {*Conditions permettant au Modérateur de modifier le status d'un projet*}
{if $smarty.session.user.user_status == 2 && $objProject->getStatus() == "en_attente"} {if $smarty.session.user.user_status == 2 && $objProject->getStatus() == "en_attente"}
<a class="btn btn-sm m-1 btn-success" href="{$smarty.env.BASE_URL}/project/accept/{$objProject->getId()}" name="toPublished">Accepter</a> <a class="btn btn-sm m-1 btn-success" href="?ctrl=project&action=accept&id={$objProject->getId()}" name="toPublished">Accepter</a>
<a class="btn btn-sm m-1 btn-warning" href="{$smarty.env.BASE_URL}/project/refuse/{$objProject->getId()}" name="toRefused">Refuser</a> <a class="btn btn-sm m-1 btn-warning" href="?ctrl=project&action=refuse&id={$objProject->getId()}" name="toRefused">Refuser</a>
</div> </div>
{elseif $projectStatus == "refusé"} {elseif $projectStatus == "refusé"}
<p class="text-danger fw-bold">Portfolio refusé</p> <p class="text-danger fw-bold">Portfolio refusé</p>

View file

@ -10,7 +10,7 @@
<h2 class="visually-hidden">Rechercher parmi les projets</h2> <h2 class="visually-hidden">Rechercher parmi les projets</h2>
<div class="row mb-2"> <div class="row mb-2">
<section class="mb-5" aria-labelledby="search-heading"> <section class="mb-5" aria-labelledby="search-heading">
<form name="formSearch" method="post" action="" class="border rounded p-4 bg-light"> <form name="formSearch" method="post" action="?ctrl=project&action=search" class="border rounded p-4 bg-light">
<h3 id="search-heading" class="h4 mb-4"> <h3 id="search-heading" class="h4 mb-4">
<i class="fas fa-search me-2" aria-hidden="true"></i> <i class="fas fa-search me-2" aria-hidden="true"></i>
Rechercher des projets Rechercher des projets
@ -134,7 +134,7 @@
<i class="fas fa-search me-2" aria-hidden="true"></i> <i class="fas fa-search me-2" aria-hidden="true"></i>
Rechercher Rechercher
</button> </button>
<a href="{$smarty.env.BASE_URL}/project/search" class="btn btn-secondary ms-2"> <a href="index.php?ctrl=project&action=search" class="btn btn-secondary ms-2">
<i class="fas fa-redo me-2" aria-hidden="true"></i> <i class="fas fa-redo me-2" aria-hidden="true"></i>
Réinitialiser Réinitialiser
</a> </a>
@ -155,7 +155,7 @@
{assign var="isAuthor" value=(isset($smarty.session.user) && $smarty.session.user.user_id == $objProject->getUser_id())} {assign var="isAuthor" value=(isset($smarty.session.user) && $smarty.session.user.user_id == $objProject->getUser_id())}
{assign var="isModerator" value=(isset($smarty.session.user) && $smarty.session.user.user_status == 2)} {assign var="isModerator" value=(isset($smarty.session.user) && $smarty.session.user.user_status == 2)}
{assign var="isDeleted" value=($objProject->getDeleted_at() !== null)} {assign var="isDeleted" value=($objProject->getProject_deleted_at() !== null)}
{assign var="isRefused" value=($objProject->getStatus() == "refusé")} {assign var="isRefused" value=($objProject->getStatus() == "refusé")}
{if $isModerator {if $isModerator

View file

@ -1,9 +1,9 @@
{extends file="views/layout.tpl"} {extends file="views/layout.tpl"}
{block name="title" append} - Inscription{/block} {block name="title" append} - Inscription{/block}
{block name="display" }style="display:none;"{/block}
{block name="content"} {block name="content"}
<!-- Page : Inscription --> <!-- Page : Inscription -->
<div class="py-5"> <div class="py-5">
<!-- Centrage horizontal du formulaire --> <!-- Centrage horizontal du formulaire -->
@ -94,33 +94,13 @@
<label class="form-label" for="user_password"> <label class="form-label" for="user_password">
Mot de passe * Mot de passe *
</label> </label>
<div class="position-relative">
<input <input
class="form-control pe-5" class="form-control"
type="password" type="password"
id="user_password" id="user_password"
name="user_password" name="user_password"
required required
> >
<button
class="btn position-absolute top-50 end-0 translate-middle-y me-2 p-0 border-0 bg-transparent text-muted"
type="button"
onclick="togglePassword('user_password', this)"
style="z-index: 10;"
>
<i class="fa-solid fa-eye"></i>
</button>
</div>
<div class="mt-2 small text-muted">
<p class="mb-1">Le mot de passe doit contenir :</p>
<ul class="mb-0 ps-3">
<li>Au moins <strong>15 caractères</strong></li>
<li>Au moins <strong>une lettre majuscule</strong></li>
<li>Au moins <strong>une lettre minuscule</strong></li>
<li>Au moins <strong>un chiffre</strong></li>
<li>Au moins <strong>un caractère spécial</strong> (# ? ! @ $ % ^ & * -)</li>
</ul>
</div>
</div> </div>
<!-- Champ : confirmer le mot de passe --> <!-- Champ : confirmer le mot de passe -->
@ -128,22 +108,13 @@
<label class="form-label" for="pwd_confirm"> <label class="form-label" for="pwd_confirm">
Confirmer le mot de passe * Confirmer le mot de passe *
</label> </label>
<div class="position-relative">
<input <input
class="form-control" class="form-control"
type="password" type="password"
id="pwd_confirm" id="pwd_confirm"
name="pwd_confirm" name="pwd_confirm"
required required
><button
class="btn position-absolute top-50 end-0 translate-middle-y me-2 p-0 border-0 bg-transparent text-muted"
type="button"
onclick="togglePassword('pwd_confirm', this)"
style="z-index: 10;"
> >
<i class="fa-solid fa-eye"></i>
</button>
</div>
</div> </div>
<!-- Champ optionnel : numéro de téléphone --> <!-- Champ optionnel : numéro de téléphone -->
@ -179,23 +150,13 @@
<label class="form-label" for="user_location"> <label class="form-label" for="user_location">
Localisation Localisation
</label> </label>
<div class="position-relative">
<input <input
class="form-control" class="form-control"
type="text" type="text"
id="user_location" id="user_location"
name="user_location" name="user_location"
value="{$objUser->getLocation()|default:''}" value="{$objUser->getLocation()|default:''}"
autocomplete="off"
placeholder="Ex : Paris, Lyon..."
> >
<!-- Liste déroulante des suggestions -->
<ul
id="location-suggestions"
class="list-group position-absolute w-100 shadow-sm"
style="z-index: 1000; display: none; max-height: 220px; overflow-y: auto; top: 100%; left: 0;"
></ul>
</div>
</div> </div>
<!-- Champ optionnel : phrase d'accroche --> <!-- Champ optionnel : phrase d'accroche -->
@ -207,8 +168,9 @@
class="form-control" class="form-control"
id="user_description" id="user_description"
name="user_description" name="user_description"
value="{$objUser->getDescription()|default:''}"
rows="3" rows="3"
>{$objUser->getDescription()|default:''}</textarea> ></textarea>
</div> </div>
<!-- Bouton de soumission du formulaire --> <!-- Bouton de soumission du formulaire -->
@ -222,7 +184,7 @@
<div class="col-12 text-center"> <div class="col-12 text-center">
<small class="text-secondary"> <small class="text-secondary">
Déjà un compte ? Déjà un compte ?
<a class="link-primary" href="{$smarty.env.BASE_URL}/user/login"> <a class="link-primary" href="index.php?ctrl=user&action=login">
Se connecter Se connecter
</a> </a>
</small> </small>
@ -237,42 +199,4 @@
</div> </div>
</div> </div>
<script>
const pwd = document.getElementById('user_password');
const rules = {
length: { el: null, test: v => v.length >= 15 },
upper: { el: null, test: v => /[A-Z]/.test(v) },
lower: { el: null, test: v => /[a-z]/.test(v) },
digit: { el: null, test: v => /[0-9]/.test(v) },
special: { el: null, test: v => /[#?!@$%^&*\-]/.test(v) }
};
// Associe chaque règle à son <li> dans l'ordre du DOM
const items = pwd.closest('.col-12').querySelectorAll('ul li');
const keys = Object.keys(rules);
items.forEach((li, i) => rules[keys[i]].el = li);
pwd.addEventListener('input', () => {
const v = pwd.value;
keys.forEach(key => {
const { el, test } = rules[key];
el.classList.toggle('text-success', test(v));
el.classList.toggle('text-danger', !test(v));
});
});
function togglePassword(fieldId, btn) {
const input = document.getElementById(fieldId);
const icon = btn.querySelector('svg');
if (input.type === 'password') {
input.type = 'text';
icon.classList.replace('fa-eye', 'fa-eye-slash');
} else {
input.type = 'password';
icon.classList.replace('fa-eye-slash', 'fa-eye');
}
}
</script>
{include file="views/_partial/apigeo.tpl"}
{/block} {/block}

View file

@ -2,61 +2,30 @@
{block name="content"} {block name="content"}
<section class="user-profile mb-5 /*vh /* p-5" {if $user->getPseudo()|stripos:'minou' !== false}style=" background-color: #ff8c00 !important; /* Orange tigre */ <section class="user-profile mb-5 mt-5/*vh /*">
background-image: repeating-linear-gradient(
45deg,
transparent,
transparent 30px,
rgba(0, 0, 0, 0.15) 30px,
rgba(0, 0, 0, 0.15) 60px
) !important;
border: 2px solid #000 !important;
color: #000 !important;
position: relative;
z-index: 1;"{/if}>
<div class="row"> <div class="row">
<div class="col-md-4 text-center"> <div class="col-md-4 text-center">
<img src="{$smarty.env.BASE_URL}/{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($user->getImage()))|file_exists}{$user->getImage()}{else}images.jpg{/if}" alt="Avatar de {$user->getPseudo()}" class="rounded-circle flex-shrink-0 border border-2 border-white" <img src="{$smarty.env.IMG_USER_PATH}{if ($smarty.env.IMG_USER_PATH|cat:($user->getImage()))|file_exists}{$user->getImage()}{else}images.jpg{/if}" alt="Avatar de {$user->getPseudo()}" class="rounded-circle flex-shrink-0 border border-2 border-white"
style="width: 256px; height: 256px; object-fit: cover; margin-top: 8px;{if $user->getPseudo()|stripos:'minou' !== false} style="width: 256px; height: 256px; object-fit: cover; margin-top: 8px;"
box-shadow: 0 0 0 4px #000; {/if}"
> >
</div> </div>
<div class="col-md-8 align-items-center p-0"> <div class="col-md-8 align-items-center p-0">
<div> <div>
<h1 {if $user->getPseudo()|stripos:'minou' !== false}style="font-weight: 800 !important; <h1>{$user->getPseudo()}</h1>
text-transform: uppercase;
color: #000 !important;"{/if}>{$user->getPseudo()}</h1>
<p class="text-muted">{$user->getMail()}</p> <p class="text-muted">{$user->getMail()}</p>
{if $user->getWork()} {if $user->getWork()}
<div class="d-flex align-items-center gap-2 mt-3"> <p>{$user->getWork()}</p>
<i class="fa-solid fa-briefcase"></i>
<p class="mb-0">{$user->getWork()}</p>
</div>
{/if} {/if}
{if $user->getLocation()} {if $user->getLocation()}
<p>{$user->getLocation()}</p>
<div class="d-flex align-items-center gap-2 mt-3">
<i class="fa-solid fa-location-dot"></i>
<p class="mb-0">{$user->getLocation()}</p>
</div>
{/if}
{if $user->getLocation()}
<div class="d-flex align-items-center gap-2 mt-3">
<i class="fa-regular fa-note-sticky"></i> <p class="mb-0">{$user->getDescription()}</p>
</div>
{/if} {/if}
{if isset($smarty.session.user) && $smarty.session.user.user_id == $user->getId()} <p class="mt-3">{$user->getDescription()}</p>
<a class="btn btn-sm btn-primary flex-fill" {if $user->getPseudo()|stripos:'minou' !== false}style=" {if $smarty.session.user.user_id == $user->getId()}
background-color: #000 !important; <a class="btn btn-sm btn-primary flex-fill"
color: #ff8c00 !important; href="?ctrl=user&action=edit">Edit account</a>
border: none !important;
font-weight: bold !important;
transition: transform 0.2s;"{/if}
href="{$smarty.env.BASE_URL}/user/edit">Edit account</a>
{/if} {/if}
</div> </div>

View file

@ -14,7 +14,7 @@
<div class="card shadow-sm border-0 rounded-4 p-4 p-lg-5"> <div class="card shadow-sm border-0 rounded-4 p-4 p-lg-5">
<!-- Titre principal de la page --> <!-- Titre principal de la page -->
<h1 class="h3 fw-bold mb-1">Modification du profil</h1> <h1 class="h3 fw-bold mb-1">Edit du profile</h1>
{if (isset($arrError) && count($arrError) > 0) } {if (isset($arrError) && count($arrError) > 0) }
<div class="alert alert-danger"> <div class="alert alert-danger">
@ -72,41 +72,22 @@
</div> </div>
</div> </div>
<div class="col-12"> <div class="col-12">
<label class="form-label" for="image">Photo de profil</label> <label class="form-label" for="image">
Photo de profil
<div class="d-flex align-items-center gap-4 mb-3">
<!-- Avatar preview -->
<img
id="preview-avatar"
src="{$smarty.env.BASE_URL}/{if $objUser->getImage()}{$smarty.env.IMG_USER_PATH}{$objUser->getImage()}{else}assests/img/images.jpg{/if}"
alt="Photo de profil"
class="rounded-circle border"
style="width:80px; height:80px; object-fit:cover;"
>
<!-- Actions à droite de l'avatar -->
<div class="d-flex flex-column gap-2">
<label for="image" class="btn btn-outline-secondary btn-sm mb-0">
<i class="fa-solid fa-upload me-1"></i> Changer la photo
</label> </label>
{if $objUser->getImage() != "images.jpg"} {if $objUser->getImage()}
<button type="button" class="btn btn-outline-danger btn-sm" id="btn-delete-image"> <div class="mb-2">
<i class="fa-solid fa-trash me-1"></i> Supprimer la photo <img src="{$smarty.env.IMG_USER_PATH}{$objUser->getImage()}" alt="image actuel" class="rounded-circle" width="80" height="80">
</button> </div>
{/if} {/if}
</div>
</div>
<!-- Input file caché, déclenché par le label -->
<input <input
class="d-none" class="form-control"
type="file" type="file"
id="image" id="image"
name="image" name="image"
accept="image/jpeg, image/png, image/webp" accept="image/jpeg, image/png, image/webp"
> >
<input type="hidden" name="delete_image" id="delete_image" value="0"> <div class="form-text">Formats acceptés : JPG, PNG, WEBP. Laisser vide pour ne pas changer.</div>
<div class="form-text">Formats acceptés : JPEG, PNG, WEBP. Laisser vide pour ne pas changer.</div>
</div> </div>
<div class="col-12"> <div class="col-12">
<label class="form-label" for="user_mail"> <label class="form-label" for="user_mail">
@ -151,28 +132,17 @@
</div> </div>
<!-- Champ optionnel : localisation de l'utilisateur -->
<div class="col-12"> <div class="col-12">
<label class="form-label" for="user_location"> <label class="form-label" for="user_location">
Localisation Localisation
</label> </label>
<div class="position-relative">
<input <input
class="form-control" class="form-control"
type="text" type="text"
id="user_location" id="user_location"
name="user_location" name="user_location"
value="{$objUser->getLocation()}" value="{$objUser->getLocation()}"
autocomplete="off"
placeholder="Ex : Paris, Lyon..."
> >
<!-- Liste déroulante des suggestions -->
<ul
id="location-suggestions"
class="list-group position-absolute w-100 shadow-sm"
style="z-index: 1000; display: none; max-height: 220px; overflow-y: auto; top: 100%; left: 0;"
></ul>
</div>
</div> </div>
@ -191,7 +161,7 @@
</div> </div>
<div class="col-12 d-grid mt-2"> <div class="col-12 d-grid mt-2">
<button type="submit" class="btn btn-primary btn-lg rounded-3"> <button type="submit" class="btn btn-primary btn-lg rounded-3">
Confirmer Edit profile
</button> </button>
</div> </div>
@ -206,6 +176,4 @@
</div> </div>
</div> </div>
</main> </main>
{include file="views/_partial/delphoto.tpl"}
{include file="views/_partial/apigeo.tpl"}
{/block} {/block}