Commit 830763a9 authored by Charles DORMEVAL's avatar Charles DORMEVAL
Browse files

Changement de l'architecture -> MVC

parent 44e030f8
<?php
define("HOME_SITE",__DIR__."/..");
define("PATH_MODELE", HOME_SITE."/Modele");
define("PATH_VUE", HOME_SITE."/Vue");
define("PATH_CONTROLEUR", HOME_SITE."/Controleurs");
define("PATH_DATA", HOME_SITE."/Donnees");
define("HOST", "localhost");
define("BD","projet");
define("LOGIN","root");
define("PASSWORD","");
?>
\ No newline at end of file
<?php
require_once PATH_VUE."/Vue.php";
class ControleurAccueil{
private $vue;
public function __construct(){
$this->vue=new Vue();
}
public function accueil(){
$this->vue->accueil();
}
}
?>
\ No newline at end of file
<?php
require_once PATH_VUE."/Vue.php";
require_once PATH_MODELE."/MoteurDeRecherche.php";
class ControleurRecherche{
private $vue;
private $modele;
public function __construct(){
$this->vue=new Vue();
$this->modele=new MoteurDeRecherche();
}
private function traiterRecherche($type,$element,$date){
if($type=="auteur"){
if($date!=-1){
return $this->modele->rechercheAvecAuteurDate($element,$date);
}else{
return $this->modele->rechercheAvecAuteur($element);
}
}else{
if($date!=-1){
return $this->modele->rechercheAvecMotsClesDate($element,$date);
}else{
return $this->modele->RechercheAvecMotsCles($element);
}
}
}
public function afficherRecherche($type,$element,$date, $citationsParPage, $page=1){
$resultatsRecherche=$this->traiterRecherche($type,$element,$date);
if(is_null($resultatsRecherche)){
$this->vue->aucunResultat();
}else{
if(is_string($resultatsRecherche)){
$this->vue->resultatCorrige($type,$resultatsRecherche,$date,$citationsParPage);
}else{
$this->vue->afficherResultats($resultatsRecherche,$citationsParPage, $type, $element, $date, $page);
}
}
}
}
?>
\ No newline at end of file
<?php
require_once "ControleurAccueil.php";
require_once "ControleurRecherche.php";
class Routeur{
private $controleurAccueil;
private $controleurRecherche;
public function __construct(){
$this->controleurAccueil=new ControleurAccueil();
$this->controleurRecherche=new ControleurRecherche();
}
public function routeurRequete(){
if(isset($_POST['barre_recherche']) || isset($_GET['correction'])){
if(isset($_GET['correction'])){
$this->controleurRecherche->afficherRecherche($_GET['type'], $_GET['correction'], $_GET['date'],$_POST['nbCitations']);
}else{
$this->controleurRecherche->afficherRecherche($_POST['choix_type_recherche'], $_POST['barre_recherche'], $_POST["date"], $_POST['nbCitations']);
}
}else{
if(isset($_GET["pageActuelle"])){
$this->controleurRecherche->afficherRecherche($_GET['type'], $_GET['element'], $_GET['date'], $_GET["citations"], $_GET['pageActuelle']);
}else{
$this->controleurAccueil->accueil();
}
}
}
}
?>
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: aitas
* Date: 21/01/2018
* Time: 10:19
*/
class MoteurDeRecherche
{
......@@ -15,7 +9,7 @@ class MoteurDeRecherche
public function __construct(){
try{
$this->connexion=new PDO("mysql:host=localhost; dbname=projet", "root", "", array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES utf8"));
$this->connexion=new PDO("mysql:host=".HOST."; dbname=".BD, LOGIN, PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES utf8"));
}catch(PDOException $e){
die($e->getMessage());
}
......@@ -23,7 +17,7 @@ class MoteurDeRecherche
$this->requestPattern="select a.nom_auteur, c.contenu, o.nom_oeuvre, o.date_oeuvre from auteurs a, citations c, oeuvres o where a.id_auteur=o.id_auteur and o.id_oeuvre=c.id_oeuvre ";
$file="../../data/french";
$file=PATH_DATA."/french";
$handle=fopen($file,"r");
$content=fread($handle,filesize($file));
$this->french=explode("\n",$content);
......@@ -59,12 +53,35 @@ class MoteurDeRecherche
$paramAuteur="%".$auteur."%";
$fullRequest->bindParam(2, $paramAuteur);
$fullRequest->execute();
$_SESSION['resRecherche']=$fullRequest->fetchAll();
if(empty($_SESSION['resRecherche'])){
$this->leveinsteinCitation($auteur);
return 0;
$resultatRecherche=$fullRequest->fetchAll();
if(empty($resultatRecherche)){
$requestAuthors=$this->connexion->prepare("select nom_auteur from auteurs where 1");
$requestAuthors->execute();
$authors=$requestAuthors->fetchAll(PDO::FETCH_COLUMN);
$min=PHP_INT_MAX;
$result="";
foreach ($authors as $author){
$lev=levenshtein($auteur,$author);
if($lev==$min){
$result=$author;
}
if($lev<$min){
$result=$author;
$min=$lev;
}
}
$result=trim($result);
if($result==$auteur){
return null;
}else{
return $result;
}
}else{
return 1;
return $resultatRecherche;
}
}
......@@ -74,12 +91,35 @@ class MoteurDeRecherche
$paramAuteur="%".$auteur."%";
$fullRequest->bindParam(1, $paramAuteur);
$fullRequest->execute();
$_SESSION['resRecherche']=$fullRequest->fetchAll();
if(empty($_SESSION['resRecherche'])){
$this->leveinsteinCitation($auteur);
return 0;
$resultatRecherche=$fullRequest->fetchAll();
if(empty($resultatRecherche)){
$requestAuthors=$this->connexion->prepare("select nom_auteur from auteurs where 1");
$requestAuthors->execute();
$authors=$requestAuthors->fetchAll(PDO::FETCH_COLUMN);
$min=PHP_INT_MAX;
$result="";
foreach ($authors as $author){
$lev=levenshtein($auteur,$author);
if($lev==$min){
$result=$author;
}
if($lev<$min){
$result=$author;
$min=$lev;
}
}
$result=trim($result);
if($result==$auteur){
return null;
}else{
return $result;
}
}else{
return 1;
return $resultatRecherche;
}
}
......@@ -99,11 +139,33 @@ class MoteurDeRecherche
$fullRequest->bindParam(1, $param);
$fullRequest->execute();
$_SESSION['resRecherche']=$fullRequest->fetchAll();
if(empty($_SESSION['resRecherche'])){
$this->leveinsteinCitation($recherche);
return 0;
if(empty($resultatRecherche)){
$keyWords=explode(" ",$recherche);
$result="";
foreach ($keyWords as $keyWord){
$min=PHP_INT_MAX;
foreach ($this->french as $word){
$lev=levenshtein($keyWord,$word);
if($lev==$min){
$correct=$word;
}
if($lev<$min){
$correct=$word;
$min=$lev;
}
}
$result=$result." ".$correct;
}
$result=trim($result);
if($result==$recherche){
return null;
}else{
return $result;
}
}else{
return 1;
return $resultatRecherche;
}
}
......@@ -117,68 +179,34 @@ class MoteurDeRecherche
}
$fullRequest=$this->connexion->prepare($this->requestPattern.$requestComplement);
$fullRequest->execute();
$_SESSION['resRecherche']=$fullRequest->fetchAll();
if(empty($_SESSION['resRecherche'])){
$this->leveinsteinCitation($recherche);
return 0;
}else{
return 1;
}
}
private function leveinsteinAuteur($auteur){
$requestAuthors=$this->connexion->prepare("select nom_auteur from auteurs where 1");
$requestAuthors->execute();
$authors=$requestAuthors->fetchAll(PDO::FETCH_COLUMN);
$min=PHP_INT_MAX;
$result="";
foreach ($authors as $author){
$lev=levenshtein($auteur,$author);
if($lev==$min){
$result=$author;
}
if($lev<$min){
$result=$author;
$min=$lev;
}
}
$result=trim($result);
if($result==$auteur){
echo "Nous n'avons pas réussi à trouver de résultat pour votre recherche ...";
}else{
echo "Vouliez vous faire référence à cet auteur : ".$result." ?";
}
}
private function leveinsteinCitation($recherche){
$keyWords=explode(" ",$recherche);
$result="";
foreach ($keyWords as $keyWord){
$min=PHP_INT_MAX;
foreach ($this->french as $word){
$lev=levenshtein($keyWord,$word);
if($lev==$min){
$correct=$word;
}
$resultatRecherche=$fullRequest->fetchAll();
if(empty($resultatRecherche)){
$keyWords=explode(" ",$recherche);
$result="";
foreach ($keyWords as $keyWord){
$min=PHP_INT_MAX;
foreach ($this->french as $word){
$lev=levenshtein($keyWord,$word);
if($lev==$min){
$correct=$word;
}
if($lev<$min){
$correct=$word;
$min=$lev;
}
if($lev<$min){
$correct=$word;
$min=$lev;
}
$result=$result." ".$correct;
}
$result=trim($result);
if($result==$recherche){
return null;
}else{
return $result;
}
$result=$result." ".$correct;
}
$result=trim($result);
if($result==$recherche){
echo "Nous n'avons pas réussi à trouver de résultat pour votre recherche ...";
}else{
echo "Nous pouvons vous proposer cette recherche : ".$result;
return $resultatRecherche;
}
}
......
commandes importantes
git clone https://gitlab.univ-nantes.fr/E165148J/Projet_Tutore_ANNEE_2.git
--> cela créé un dossier Projet_Tutore_ANNEE_2 ou on trouve les dossiers (et fichiers) enregistrés sur gitlab
A ne faire qu'une seule fois
A chaque fois qu on commence,
--> git pull
pour mettre à jour notre dossier
Si on créé un nouveau fichier, il faut lajouter dans gitlab grace à :
--> git add leNomDuFichier
Pour mettre le fichier sur gitlab
git commit -m "message qui donne la modification effectuée"
git push -u origin master
\ No newline at end of file
This diff is collapsed.
......@@ -190,3 +190,16 @@ td {
textarea {
right: 0%
}
.texte_resultat_null{
display: inherit;
text-align: center;
color:darkred;
margin-top: 1%;
}
#texte_correction{
display:inherit;
text-align: center;
margin-top: 1%;
}
<?php
require "Configuration/config.php";
require_once PATH_CONTROLEUR."/routeur.php";
$routeur = new Routeur();
$routeur->routeurRequete();
?>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment