1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
<?php
/**
* Classe servant de Manager à la classe Article
*/
class ArticleManager
{
// Attribut nécessaire à la connexion avec la base de données.
private $db;
/**
* Permet de se connecter à la base de données dès l'instanciation de l'objet.
* @param PDO Object $db La base de données
*/
public function __construct($db)
{
$this->db = $db;
}
/**
* Compte le nombre d'articles dans la base de données.
* @return int Le nombre d'articles
*/
public function count()
{
$result = $this->db->query('SELECT COUNT(*) FROM articles')->fetchColumn();
return $result;
}
/**
* Ajoute un article dans la base de données.
* @param Article $article L'article (object)
*/
public function add(Article $article)
{
$req = $this->db->prepare('INSERT INTO articles(title, content, author, datePost) VALUES(:title, :content, :author, NOW())');
$req->bindValue(':title', $article->getTitle());
$req->bindValue(':content', $article->getContent());
$req->bindValue(':author', $article->getAuthor());
$req->execute();
}
/**
* Met à jour les valeurs d'un article.
* @param string $title Le titre
* @param string $author L'auteur
* @param string $content Le contenu
* @param int $id L'id
*/
public function update($title, $author, $content, $id)
{
$request = $this->db->prepare('UPDATE articles SET title = :title, author = :author, content = :content, dateEdit = NOW() WHERE id = :id');
$request->bindValue(':title', $title);
$request->bindValue(':author', $author);
$request->bindValue(':content', $content);
$request->bindValue(':id', (int)$id);
$request->execute();
}
/**
* Obtient la liste des articles.
* @param int $firstArticle Le premier article
* @param int $articlesPerPage Le nombre d'articles par page
* @return Article objects La liste
*/
public function getList($firstArticle = -1, $articlesPerPage = -1)
{
$sql = 'SELECT * FROM articles ORDER BY datePost DESC';
// Vérification de la validité des données reçues.
if ($firstArticle != -1 OR $articlesPerPage != -1) {
$sql .= ' LIMIT ' . (int)$articlesPerPage . ' OFFSET ' . (int)$firstArticle;
}
$request = $this->db->query($sql);
$request->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'Article');
$listOfArticles = $request->fetchAll();
// On boucle sur la liste d'articles afin d'instancier des objets DateTime pour datePost et dateEdit.
foreach ($listOfArticles as $article) {
$article->setDatePost(new DateTime($article->getDatePost()));
$article->setDateEdit(new DateTime($article->getDateEdit()));
}
$request->closeCursor();
return $listOfArticles;
}
/**
* Obtient la liste des 3 derniers articles.
* @return Article Objects Les 3 derniers articles
*/
public function getLastArticles()
{
$result = $this->db->query('SELECT * FROM articles ORDER BY datePost DESC LIMIT 0, 3');
$lastArticles = $result->fetchAll(PDO::FETCH_CLASS, 'Article');
foreach ($lastArticles as $article) {
$article->setDatePost(new DateTime($article->getDatePost()));
$article->setDateEdit(new DateTime($article->getDateEdit()));
}
$result->closeCursor();
return $lastArticles;
}
/**
* Obtient un article unique (pour la vue Single)
* @param int $id L'id de l'article
* @return Article Object L'article.
*/
public function getUnique($id)
{
$request = $this->db->prepare('SELECT * FROM articles WHERE id = :id');
$request->bindValue(':id', (int)$id);
$request->execute();
$request->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'Article');
$article = $request->fetch();
$article->setDatePost(new DateTime($article->getDatePost()));
$article->setDateEdit(new DateTime($article->getDateEdit()));
return $article;
}
public function doesArticleExist($id)
{
$request = $this->db->prepare('SELECT * AS id_exist FROM articles WHERE id = ' . $_POST['id']);
$request->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'Article');
$doesArticleExist = $request->fetch();
return $doesArticleExist;
}
/**
* Supprimer un article de la base de données.
*/
public function deleteArticle()
{
$commentManager = new CommentManager($this->db);
$commentManager->deleteAllWithArticle($_POST['id']);
$this->db->exec('DELETE FROM articles WHERE id = ' . $_POST['id']);
}
/**
* Supprime tous les articles de la base de données. Remet l'id de base à 0.
*/
public function deleteAll()
{
$result = $this->db->exec('TRUNCATE TABLE articles');
return $result;
}
} |
Partager