Merge branch 'pre-master' into feature/afficheRox

# Conflicts:
#	fluxRSS/src/DAL/ArticleGateway.php
#	fluxRSS/src/controleur/AdminControleur.php
#	fluxRSS/src/metier/Flux.php
#	fluxRSS/src/model/ArticleModel.php
#	fluxRSS/src/test/test.php
#	fluxRSS/templates/listArticleAdmin.html
feature/afficheRox
Roxane ROSSETTO 1 year ago
commit 9d0935ccbd

@ -5,7 +5,6 @@ use Exception;
use metier\Article; use metier\Article;
use metier\Flux; use metier\Flux;
use PDO; use PDO;
use DateTime;
class ArticleGateway class ArticleGateway
{ {
private $con; private $con;
@ -23,24 +22,17 @@ class ArticleGateway
*/ */
public function getAllArticles():array public function getAllArticles():array
{ {
try {
$query = 'SELECT * FROM Article;'; $query = 'SELECT * FROM Article;';
$this->con->executeQuery($query, array()); $this->con->executeQuery($query, array());
return $this->con->getResults(); return $this->con->getResults();
}catch (\PDOException $e){
throw new Exception("PDO error");
}
} }
/** /**
* @throws Exception * @throws Exception
*/ */
public function addArticle(Article $article){ public function addArticle(Article $article){
try { $query = 'INSERT INTO Article VALUES (:id,:title,to_date(:date,"Dy, DD Mon YYYY"),:description,:guid,:link,:mediaContent,:provenance);';
$query = 'INSERT INTO Article VALUES (:id,:title,:datePub,:description,:guid,:link,:mediaContent,:provenance);'; $this->con->executeQuery($query, array(':id' => array($article->getId(), PDO::PARAM_STR),
$this->con->executeQuery($query, array(':id' => array($article->getId(), PDO::PARAM_INT),
':title' => array($article->getTitle(), PDO::PARAM_STR), ':title' => array($article->getTitle(), PDO::PARAM_STR),
':datePub' => array($article->getDate(), PDO::PARAM_STR), ':datePub' => array($article->getDate(), PDO::PARAM_STR),
':description' => array($article->getDescription(), PDO::PARAM_STR), ':description' => array($article->getDescription(), PDO::PARAM_STR),
@ -48,23 +40,22 @@ class ArticleGateway
':link' => array($article->getLink(), PDO::PARAM_STR), ':link' => array($article->getLink(), PDO::PARAM_STR),
':mediaContent' => array($article->getMediaContent(), PDO::PARAM_STR), ':mediaContent' => array($article->getMediaContent(), PDO::PARAM_STR),
':provenance' => array($article->getProvenance(), PDO::PARAM_INT))); ':provenance' => array($article->getProvenance(), PDO::PARAM_INT)));
}catch (\PDOException $e){
throw new Exception("PDO error");
}
} }
public function removeAllArticleForParser(){ public function removeAllArticleForParser(){
try{
$query = 'DELETE FROM Article;'; $query = 'DELETE FROM Article;';
$this->con->executeQuery($query); $this->con->executeQuery($query);
}
public function removeAllArticleFromFlux(int $idFlux){
try {
$query = 'DELETE FROM Article WHERE Provenance = :idFlux;';
$this->con->executeQuery($query, array(':idFlux' => array($idFlux, PDO::PARAM_INT)));
}catch(\PDOException $p){ }catch(\PDOException $p){
throw new Exception("Data is not delete."); throw new Exception("Data of flux is not delete.");
} }
} }
public function findArticleByFlux(int $flux){ public function findArticleByFlux(int $flux){
$query = 'SELECT * FROM Article WHERE provenance = :flux;'; $query = 'SELECT * FROM Article WHERE provenance = :flux;';
$this->con->executeQuery($query, array(':flux' => array($flux, PDO::PARAM_INT))); $this->con->executeQuery($query, array(':flux' => array($flux, PDO::PARAM_INT)));

@ -15,23 +15,30 @@ class FluxGateway
public function addFlux(Flux $flux) public function addFlux(Flux $flux)
{ {
$query = 'INSERT INTO Flux VALUES (:flux);'; $this->addFluxBySrc($flux->getFlux());
$this->con->executeQuery($query, array(':flux' => array($flux->getFlux(), PDO::PARAM_STR)));
} }
public function getId(): int public function addFluxBySrc(string $flux)
{ {
$query = 'INSERT INTO Flux VALUES (null,:flux);';
return $this->id; $this->con->executeQuery($query, array(':flux' => array($flux, PDO::PARAM_STR)));
} }
public function removeFlux(Flux $flux){ public function removeFlux(Flux $flux){
$this->removeFluxBySrc($flux->getFlux());
}
public function removeFluxBySrc(string $flux){
$query = 'DELETE FROM Flux WHERE flux = :flux;'; $query = 'DELETE FROM Flux WHERE flux = :flux;';
$this->con->executeQuery($query, array(':flux' => array($flux->getFlux(), PDO::PARAM_STR))); $this->con->executeQuery($query, array(':flux' => array($flux, PDO::PARAM_STR)));
} }
public function findAllFlux(){ public function removeFluxById(int $id){
$query = 'DELETE FROM Flux WHERE id = :id;';
$this->con->executeQuery($query, array(':id' => array($id, PDO::PARAM_INT)));
}
public function findAllFlux(){
$query = 'SELECT * FROM Flux;'; $query = 'SELECT * FROM Flux;';
$this->con->executeQuery($query); $this->con->executeQuery($query);
return $this->con->getResults(); return $this->con->getResults();

@ -2,13 +2,24 @@
namespace controleur; namespace controleur;
use DAL\ArticleGateway;
use DAL\Connection;
use DAL\FluxGateway;
use http\Exception;
use metier\Flux;
use model\AdminModel; use model\AdminModel;
use model\ArticleModel; use model\ArticleModel;
use model\FluxModel; use model\FluxModel;
use model\Parser;
class AdminControleur class AdminControleur
{ {
public function __construct(){ /*public function __construct()
{
$this->init();
}*/
public function init(){
global $twig; // nécessaire pour utiliser variables globales global $twig; // nécessaire pour utiliser variables globales
//debut //debut
@ -37,6 +48,18 @@ class AdminControleur
$this->ValidationFormulaire($dVueEreur); $this->ValidationFormulaire($dVueEreur);
break; break;
case 'listFlux':
$this->listFlux();
break;
case 'ajoutFlux':
$this->ajoutFlux();
break;
case 'changeNbArticle':
$this->changeNbArticle();
break;
//mauvaise action //mauvaise action
default: default:
$dVueEreur[] = "Erreur d'appel php"; $dVueEreur[] = "Erreur d'appel php";
@ -60,10 +83,12 @@ class AdminControleur
{ {
global $twig; global $twig;
$articleModel = new ArticleModel(); $articleModel = new ArticleModel();
$nbArticle = isset($_SESSION['nbArticle']) ? intval($_SESSION['nbArticle']) : 5;
$allArticles = $articleModel->getArticles();
$articles = array_slice($allArticles, 0, $nbArticle);
if (AdminModel::isAdmin()) { if (AdminModel::isAdmin()) {
$data = $articleModel->getArticles();
$dVue = [ $dVue = [
'data' => $data 'data' => $articles
]; ];
echo $twig->render('listArticleAdmin.html', [ echo $twig->render('listArticleAdmin.html', [
'dVue' => $dVue, 'dVue' => $dVue,
@ -75,11 +100,29 @@ class AdminControleur
} }
} }
public function listFlux(){
global $twig;
$fluxModel = new FluxModel();
if (AdminModel::isAdmin()) {
$dVue = [
'data' => $fluxModel->findAllFlux()
];
echo $twig->render('listFlux.html', [
'dVue' => $dVue,
'isAdmin' => AdminModel::isAdmin()
]);
}
else {
$this->connection();
}
}
public function connection(){ public function connection(){
global $twig; // nécessaire pour utiliser variables globales global $twig; // nécessaire pour utiliser variables globales
$renderTemplate = true; $renderTemplate = true;
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['username'])){ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['username'])){
$_REQUEST['action'] = null;
$this->login(); $this->login();
$renderTemplate = false; $renderTemplate = false;
} }
@ -90,9 +133,35 @@ class AdminControleur
public function deleteFlux(){ public function deleteFlux(){
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['flux'])){ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['flux'])){
$articleModel = new ArticleModel();
$fluxModel = new FluxModel(); $fluxModel = new FluxModel();
$fluxModel->removeFlux($_POST['flux']); $articleModel->removeArticleIdFlux(intval($_POST['flux']));
$this->listArticle(); $fluxModel->removeFluxById(intval($_POST['flux']));
$_REQUEST['action'] = 'listFlux';
$this->init();
}
else{
$_REQUEST['action'] = 'listFlux';
$this->init();
}
}
public function ajoutFlux(){
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['fluxAdd'])){
$con = new Connection('mysql:host=londres.uca.local;dbname=dbrorossetto','rorossetto','tpphp');
$gwArticle = new ArticleGateway($con);
$gwFlux = new FluxGateway($con);
$parser = new Parser($gwFlux,$gwArticle);
$fluxModel = new FluxModel();
$fluxModel->addFluxBySrc($_POST['fluxAdd']);
$parser->addAllArticles();
$_REQUEST['action'] = 'listFlux';
unset($_POST['fluxAdd']);
$this->init();
}
else{
$_REQUEST['action'] = 'listFlux';
$this->init();
} }
} }
@ -103,7 +172,7 @@ class AdminControleur
$adminModel = new AdminModel(); $adminModel = new AdminModel();
$admin = $adminModel->connection($username, $password); $admin = $adminModel->connection($username, $password);
if($admin != null) { if($admin != null) {
$this->listArticle(); $this->init();
} }
else{ else{
unset($_POST['username']); unset($_POST['username']);
@ -111,4 +180,13 @@ class AdminControleur
$this->connection(); $this->connection();
} }
} }
public function changeNbArticle()
{
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['nbArticle'])) {
$_SESSION['nbArticle'] = $_POST['nbArticle'];
unset($_POST['action']);
}
$this->init();
}
} }

@ -30,7 +30,7 @@ class FrontControleur
else { else {
session_start(); session_start();
$controller=$match['target'] ?? null; $controller=$match['target'] ?? null;
$action=$match['params']['action'] ?? null; $action=$match['params']['action'] ?? "init";
try { try {
if($controller == "AdminControleur"){ if($controller == "AdminControleur"){
if (!AdminModel::isAdmin()){ if (!AdminModel::isAdmin()){

@ -3,11 +3,10 @@ namespace controleur;
use model\AdminModel; use model\AdminModel;
use model\ArticleModel; use model\ArticleModel;
use model\Parser;
class UserControleur class UserControleur
{ {
public function __construct() public function init()
{ {
global $twig; // nécessaire pour utiliser variables globales global $twig; // nécessaire pour utiliser variables globales
//debut //debut
@ -59,8 +58,11 @@ class UserControleur
{ {
global $twig; global $twig;
$articleModel = new ArticleModel(); $articleModel = new ArticleModel();
$nbArticle = isset($_SESSION['nbArticle']) ? intval($_SESSION['nbArticle']) : 5;
$allArticles = $articleModel->getArticles();
$articles = array_slice($allArticles, 0, $nbArticle);
$dVue = [ $dVue = [
'data' => $articleModel->findAllArticleByAllFlux() 'data' => $articles
]; ];
echo $twig->render('listArticle.html', [ echo $twig->render('listArticle.html', [
'dVue' => $dVue, 'dVue' => $dVue,

@ -2,6 +2,8 @@
namespace metier; namespace metier;
use DateTime;
class Article class Article
{ {
private int $id; private int $id;
@ -128,4 +130,8 @@ class Article
return $this->title . $this->date . $this->description; return $this->title . $this->date . $this->description;
} }
public function dateStr(): string{
$dateTime = new DateTime($this->date);
return $dateTime->format('d/m/y à H:i') . '';
}
} }

@ -4,20 +4,13 @@ namespace metier;
class Flux class Flux
{ {
private int $id; private ?int $id;
private string $flux; private string $flux;
/** public function __construct(string $flux, int $id=null){
* @param int $id $this->id =$id;
* @param string $flux
*/
public function __construct(int $id, string $flux)
{
$this->id = $id;
$this->flux = $flux; $this->flux = $flux;
} }
/** /**
* @return string * @return string
*/ */

@ -36,7 +36,7 @@ class ArticleModel
foreach ($res as $row){ foreach ($res as $row){
$tabArticle[] = new Article($row['id'], $row['title'],$row['datePub'],$row['description'],$row['guid'],$row['link'],$row['mediaContent'],$row['provenance'] ); $tabArticle[] = new Article($row['id'], $row['title'],$row['datePub'],$row['description'],$row['guid'],$row['link'],$row['mediaContent'],$row['provenance'] );
} }
$dicoFluxArticle = [$flux,$tabArticle]; $dicoFluxArticle[] = [$flux,$tabArticle];
return $dicoFluxArticle; return $dicoFluxArticle;
} }
@ -47,8 +47,8 @@ class ArticleModel
$res = $gwFlux->findAllFlux(); $res = $gwFlux->findAllFlux();
foreach ($res as $row) { foreach ($res as $row) {
$flux = new Flux((int)($row['id']), $row['flux']); $flux = new Flux((int)($row['id']),$row['flux']);
$tabFluxArticle[] = $this->findArticleByFlux($flux); $tabFluxArticle[] = $this->findArticleByFluxAsStr($flux);
} }
return $tabFluxArticle; return $tabFluxArticle;
} }
@ -66,4 +66,10 @@ class ArticleModel
$dicoFluxArticle = [$flux,$tabArticle]; $dicoFluxArticle = [$flux,$tabArticle];
return $dicoFluxArticle; return $dicoFluxArticle;
} }
public static function removeArticleIdFlux(int $idFlux)
{
$gwArticle = new ArticleGateway(new Connection('mysql:host=londres.uca.local;dbname=dbrorossetto','rorossetto','tpphp'));
$gwArticle->removeAllArticleFromFlux($idFlux);
}
} }

@ -8,13 +8,13 @@ use metier\Flux;
class FluxModel class FluxModel
{ {
public function FindAllFlux(){ public function findAllFlux(){
$gateway = new FluxGateway(new Connection('mysql:host=londres.uca.local;dbname=dbrorossetto','rorossetto','tpphp')); $gateway = new FluxGateway(new Connection('mysql:host=londres.uca.local;dbname=dbrorossetto','rorossetto','tpphp'));
$data = array(); $data = array();
$result = $gateway->findAllFlux(); $result = $gateway->findAllFlux();
foreach ($result as $row){ foreach ($result as $row){
$data[] = new Flux((int)$row['id'],$row['$flux']); $data[] = new Flux((int)$row['id'],$row['flux']);
} }
return $data; return $data;
} }
@ -29,7 +29,7 @@ class FluxModel
public function addFluxBySrc(string $flux): Flux { public function addFluxBySrc(string $flux): Flux {
$gateway = new FluxGateway(new Connection('mysql:host=londres.uca.local;dbname=dbrorossetto','rorossetto','tpphp')); $gateway = new FluxGateway(new Connection('mysql:host=londres.uca.local;dbname=dbrorossetto','rorossetto','tpphp'));
$newFlux = new Flux($flux); $newFlux = new Flux(null,$flux);
$gateway->addFlux($newFlux); $gateway->addFlux($newFlux);
return $newFlux; return $newFlux;
} }
@ -39,9 +39,14 @@ class FluxModel
$gateway->removeFlux($flux); $gateway->removeFlux($flux);
} }
public function removeFluxById(int $id){
$gateway = new FluxGateway(new Connection('mysql:host=londres.uca.local;dbname=dbrorossetto','rorossetto','tpphp'));
$gateway->removeFluxById($id);
}
public function removeFluxBySrc(string $flux) { public function removeFluxBySrc(string $flux) {
$gateway = new FluxGateway(new Connection('mysql:host=londres.uca.local;dbname=dbrorossetto','rorossetto','tpphp')); $gateway = new FluxGateway(new Connection('mysql:host=londres.uca.local;dbname=dbrorossetto','rorossetto','tpphp'));
$gateway->removeFlux($flux); $gateway->removeFluxBySrc($flux);
} }
public function findFlux(Flux $flux){ public function findFlux(Flux $flux){
@ -50,7 +55,7 @@ class FluxModel
$result = $gateway->findFlux($flux); $result = $gateway->findFlux($flux);
foreach ($result as $row){ foreach ($result as $row){
$data[] = new Flux($row['$flux'],(int)$row['id']); $data[] = new Flux((int)$row['id'],$row['$flux']);
} }
return $data; return $data;
} }
@ -61,7 +66,7 @@ class FluxModel
$result = $gateway->findFluxBySrc($flux); $result = $gateway->findFluxBySrc($flux);
foreach ($result as $row){ foreach ($result as $row){
$data[] = new Flux($row['$flux'],(int)$row['id']); $data[] = new Flux((int)$row['id'],$row['$flux']);
} }
return $data; return $data;
} }

@ -10,5 +10,4 @@ require '../../vendor/autoload.php';
$gwArt = new ArticleGateway(new Connection('mysql:host=londres.uca.local;dbname=dbrorossetto', 'rorossetto', 'tpphp')); $gwArt = new ArticleGateway(new Connection('mysql:host=londres.uca.local;dbname=dbrorossetto', 'rorossetto', 'tpphp'));
$gwFl = new FluxGateway(new Connection('mysql:host=londres.uca.local;dbname=dbrorossetto', 'rorossetto', 'tpphp')); $gwFl = new FluxGateway(new Connection('mysql:host=londres.uca.local;dbname=dbrorossetto', 'rorossetto', 'tpphp'));
$pars = new Parser( $gwFl,$gwArt); $pars = new Parser( $gwFl,$gwArt);
var_dump($pars);
$pars->addAllArticles();

@ -5,22 +5,16 @@
<title>All Articles</title> <title>All Articles</title>
</head> </head>
<body> <body>
{% for value in dVue.data %} {% for article in dVue.data %}
<p> <p>
{{ value.0.getFlux() }} {{article.dateStr()}}
{% for article in value.1 %} <a href="{{ article.getLink() }}" target="_blank">{{ article.getTitle() }}</a>
<p> {{ article.getDescription() }}
{{article}} </p>
</p>
{% endfor %}
</br>
</br>
</p>
{% endfor %} {% endfor %}
{% if not isAdmin %} {% if not isAdmin %}
<a href="/~mapoint2/SAE/Php_RSS/fluxRSS/admin/connection">Connect</a> <a href="/~mapoint2/SAE/Php_RSS/fluxRSS/admin/connection">Connect</a>
{% else %} {% else %}
<a href="/~mapoint2/SAE/Php_RSS/fluxRSS/admin/">Vue admin</a>
<a href="/~mapoint2/SAE/Php_RSS/fluxRSS/user/deconnection">Déconnection</a> <a href="/~mapoint2/SAE/Php_RSS/fluxRSS/user/deconnection">Déconnection</a>
{% endif %} {% endif %}
</body> </body>

@ -5,25 +5,16 @@
<title>All Articles</title> <title>All Articles</title>
</head> </head>
<body> <body>
admin <form method="POST" action="changeNbArticle">
{% for value in dVue.data %} <input name="nbArticle" type="number" min="0">
<p> <button type="submit">Change number of articles</button>
{{value}} </form>
</p> {% for article in dVue.data %}
<!--
<div>
{{ value.0.getFlux() }}
<form method="post" action="deleteFlux">
<input type="hidden" name="flux" value="{{ value.0 }}">
<button type="submit">Delete Flux</button>
</form>
{% for article in value.1 %}
<p> <p>
{{article}} {{article.dateStr()}}
<a href="{{ article.getLink() }}" target="_blank">{{ article.getTitle() }}</a>
{{ article.getDescription() }}
</p> </p>
{% endfor %}
</div>
-->
{% endfor %} {% endfor %}
<a href="/~mapoint2/SAE/Php_RSS/fluxRSS/">Vue user</a> <a href="/~mapoint2/SAE/Php_RSS/fluxRSS/">Vue user</a>
<a href="/~mapoint2/SAE/Php_RSS/fluxRSS/admin/deconnection">Déconnection</a> <a href="/~mapoint2/SAE/Php_RSS/fluxRSS/admin/deconnection">Déconnection</a>

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>All Flux</title>
</head>
<body>
{% for value in dVue.data %}
<div>
{{ value.getFlux() }}
<form method="post" action="deleteFlux">
<input type="hidden" name="flux" value="{{ value.getId() }}">
<button type="submit">Delete Flux</button>
</form>
</div>
{% endfor %}
<form method="POST" action="ajoutFlux">
<input name="fluxAdd" type="text">
<button type="submit">Ajouter Flux</button>
</form>
<a href="/~mapoint2/SAE/Php_RSS/fluxRSS/admin/">Vue article</a>
</body>
</html>
Loading…
Cancel
Save