* @version 1.2 * * @var PDO $db contient la connexion à la bdd * */ class NewsManager { private $_db;//Variable contenant la connexion à la bdd /** * Constructeur de la classe * */ public function __construct() { $this->setDb(); } public function NewsManager() { self::__construct(); } /** * créer ou met à jour le cache de la page d'index * * @param int $page indique le numéro de la page à mettre en cache * @return string $contents contenu de l'index au format html * */ public function cacheIndex($page) { //echo '
Passage dans le début de la fonction de mise en cache.
'; //DEBUT DE LA MISE EN CACHE $cache = 'cache/index'.$page.'.html';//On met le chemin d'acces au fichier cache dans une variable //echo '
Passage après la déclaration de la variabel cache.
'; //Cette variable va nous servir à sélectionner les bonnes news à afficher sur chaque page $nbNewsPage = 5; $limit = ($page - 1)*$nbNewsPage; //echo '
Passage après le calcul de la limite : '.$limit. '
'; //Ouverture du tampon ob_start(); //echo '
Passage après le ob_start() juste avant la requête.
'; //Récupération des infos dans la bdd try { $news = $this->_db->prepare('SELECT * FROM news WHERE validation=1 ORDER BY id DESC LIMIT :limit, 5'); $news->bindParam(':limit', $limit, PDO::PARAM_INT); $news->execute(); } catch(Exception $e) { exit('Erreur : ' . $e->getMessage()); } //echo '
Passage après la requête sql avant affichage des news.
'; while( $affiche = $news->fetch(PDO::FETCH_ASSOC)) { //echo '
Passage dans le while du refresh.
'; //On récupère le nombre total de commentaire pour cette news try { $ask = $this->_db->prepare('SELECT COUNT(*) as nbCom FROM commentaire_news WHERE id_news= :idn'); $ask->bindParam(':idn', $affiche['id'], PDO::PARAM_INT); $ask->execute(); } catch(Exception $e) { exit('Erreur : ' . $e->getMessage()); } $comm = $ask->fetch(); $datelim = strtotime('09-05-2014'); $contenu = $affiche['contenu']; $avatar = $affiche['avatar']; //On compare la date de la news avec la date limite du 9 mai 2014 if($affiche['timestamp'] < $datelim) { //On remplace les liens images de la V2 par les bons METTRE UNE CONDITION SUR LA DATE ICI APRES LA MISE EN PROD $contenu = str_replace('images/news/', 'images/news/V2/', $affiche['contenu']); $contenu = str_replace('

', '', $contenu); $contenu = str_replace('

', '', $contenu); $contenu = str_replace(''; } echo '

'. $affiche['titre'].'

'.$avatar.'
Commentaires ('.$comm['nbCom'].')
Dire merci ('.$affiche['merci'].')

' .nl2br($contenu). '

'; //On remplace les espaces du titre par des tirets pour le bot de référencement $paramTitre = str_replace(' ', '-', $affiche['titre']); //TECHNIQUE DU CASTOR D'ALBIREW POUR ENELVER LES ACCENTS, cherche pas, tu peux pas test. En fait il convertit la string en iso américain... $paramTitre = iconv('UTF-8', 'US-ASCII//TRANSLIT', $paramTitre); //echo '
Permalien
//
'; echo '
Permalien
Deployer la news ↓
'; $ask->closeCursor(); } $news->closeCursor(); //on récupère le contenu du tampon dans la variable $contents $contents = ob_get_contents(); //Fermeture du tampon ob_end_clean(); //on écrit le contenu de notre page au format html dans un fichier //file_put_contents($cache, $contents); //FIN DE LA MISE EN CACHE return $contents; } /** * Affiche la news demandée. * * @param int $idLire identifiant de la news dans la bdd * */ public function lireNews($idLire) { //On sélectionne la news voulue dans la bdd $lire = $this->_db->prepare('SELECT * FROM news WHERE id = :idRead'); $lire->bindParam('idRead', $idLire, PDO::PARAM_INT); $lire->execute(); //On affiche la news while( $maNews = $lire->fetch(PDO::FETCH_ASSOC)) { //On récupère le nombre total de commentaire pour cette news try { $ask = $this->_db->prepare('SELECT COUNT(*) as nbCom FROM commentaire_news WHERE id_news= :idn'); $ask->bindParam(':idn', $maNews['id'], PDO::PARAM_INT); $ask->execute(); } catch(Exception $e) { exit('Erreur : ' . $e->getMessage()); } $comm = $ask->fetch(); //On remplace les liens images de la V2 par les bons METTRE UNE CONDITION SUR LA DATE ICI APRES LA MISE EN PROD $datelim = strtotime('09-05-2014'); $contenu = $maNews['contenu']; $avatar = $maNews['avatar']; //On compare la date de la news avec la date limite du 9 mai 2014 if($maNews['timestamp'] < $datelim) { //On ne remplace les balises images qu'à l'intérieur des news antérieures à cette date $contenu = str_replace('images/news/', 'images/news/V2/', $maNews['contenu']); $contenu = str_replace('

', '', $contenu); $contenu = str_replace('

', '', $contenu); $contenu = str_replace(''; } echo '
'; echo ''; echo '
'; $ask->closeCursor(); } $lire->closeCursor(); } /** * Enregistre une nouvelle news dans la bdd. Met la validation à 0 de façon à ce que * la news ne soit pas visible sur le site public. * * @param string $auteur auteur de la news * @param string $titre titre de la news * @param string $avatar chemin vers l'image de l'avatar de l'auteur * @param string $texte contenu de la news * */ public function createNews($auteur, $titre, $avatar, $texte) { $billet = $this->_db->prepare('INSERT INTO news SET pseudo = :pseu, titre = :title, avatar = :ava, contenu = :content, timestamp = :time'); $billet->bindValue(':pseu', $auteur); $billet->bindValue(':title', $titre); $billet->bindValue(':ava', $avatar); $billet->bindValue(':content', $texte); $billet->bindValue(':time', time(), PDO::PARAM_INT); $billet->execute(); $billet->closeCursor(); //echo 'Votre news a bien été ajoutée. Elle ne sera visible sur la partie publique du site qu\'une fois validée.'; } /** * Modifie une news existante. * * @param int $id id de la news * @param string $auteur auteur de la news * @param string $titre titre de la news * @param string $avatar chemin vers l'image de l'avatar de l'auteur * @param string $texte contenu de la news * @param string $best indique si la news fait partie du best of * */ public function updateNews($id, $auteur, $titre, $avatar, $texte, $best) { $modif = $this->_db->prepare('UPDATE news SET pseudo = :pseu, titre = :title, avatar = :ava, contenu = :content, best = :best WHERE id = :idMod'); $modif->bindValue(':pseu', $auteur); $modif->bindValue(':title', $titre); $modif->bindValue(':ava', $avatar); $modif->bindValue(':content', $texte); $modif->bindValue(':best', $best); //$modif->bindValue(':timeMod', time(), PDO::PARAM_INT); $modif->bindValue(':idMod', $id, PDO::PARAM_INT); $modif->execute(); $modif->closeCursor(); echo 'Votre news a bien été modifiée.'; } /** * Supprime une news. * * @param int $idSuppr id de la news à supprimer * */ public function deleteNews($idSuppr) { $del = $this->_db->prepare('DELETE FROM news WHERE id = :idSu'); $del->bindValue(':idSu', $idSuppr, PDO::PARAM_INT); $del->execute(); $del->closeCursor(); //echo 'La news a bien été supprimée.'; } /** * Valide une news afin qu'elle soit visible sur le site public. * * @param int $idVal id de la news à valider * */ public function validateNews($idVal) { $ok = $this->_db->prepare('UPDATE news SET validation = 1 WHERE id = :idOk'); $ok->bindValue(':idOk', $idVal, PDO::PARAM_INT); $ok->execute(); $ok->closeCursor(); //echo 'Votre news a bien été validée. Elle est maintenant visible dans la partie publique du site.'; } /** *Liste toutes les News existantes * *@return array $tablNews tableau contenant la liste des news **/ public function listNews() { $news = $this->_db->query('SELECT * FROM news ORDER BY id DESC'); $tablNews = array(); while($liste = $news->fetch(PDO::FETCH_ASSOC)) { $tabl['id'] = $liste['id']; $tabl['pseudo'] = $liste['pseudo']; $tabl['titre'] = $liste['titre']; $tabl['contenu'] = $liste['contenu']; $tabl['timestamp'] = $liste['timestamp']; //$tabl['timestamp_modification'] = $liste['timestamp_modification']; $tabl['validation'] = $liste['validation']; $tabl['merci'] = $liste['merci']; array_push($tablNews, $tabl); } $news->closeCursor(); return $tablNews; } /** *Liste toutes les News publiées existantes * *@return array $tablNews tableau contenant la liste des news **/ public function listArchive() { $news = $this->_db->query('SELECT * FROM news WHERE validation=1 ORDER BY id DESC'); $tablNews = array(); while($liste = $news->fetch(PDO::FETCH_ASSOC)) { $tabl['id'] = $liste['id']; $tabl['pseudo'] = $liste['pseudo']; $tabl['titre'] = $liste['titre']; $tabl['contenu'] = $liste['contenu']; $tabl['timestamp'] = $liste['timestamp']; $tabl['validation'] = $liste['validation']; $tabl['merci'] = $liste['merci']; array_push($tablNews, $tabl); } $news->closeCursor(); return $tablNews; } /** *Liste toutes les News bestof pour l'admin * *@return array $tablNews tableau contenant la liste des news **/ public function bestofNews() { $news = $this->_db->query("SELECT * FROM news WHERE best='oui' ORDER BY id DESC"); $tablNews = array(); while($liste = $news->fetch(PDO::FETCH_ASSOC)) { $tabl['id'] = $liste['id']; $tabl['pseudo'] = $liste['pseudo']; $tabl['titre'] = $liste['titre']; $tabl['contenu'] = $liste['contenu']; $tabl['timestamp'] = $liste['timestamp']; $tabl['validation'] = $liste['validation']; array_push($tablNews, $tabl); } $news->closeCursor(); return $tablNews; } /** *Liste toutes les News bestof pour le site * *@return array $tablNews tableau contenant la liste des news **/ public function bestofNewsOnsite() { $news = $this->_db->query("SELECT * FROM news WHERE best='oui' ORDER BY id DESC"); $tablNews = array(); while($liste = $news->fetch(PDO::FETCH_ASSOC)) { $tabl['id'] = $liste['id']; $tabl['pseudo'] = $liste['pseudo']; $tabl['titre'] = $liste['titre']; $tabl['contenu'] = substr($liste['contenu'],0,500); $tabl['contextbest'] = $liste['contextbest']; $tabl['timestamp'] = $liste['timestamp']; $tabl['validation'] = $liste['validation']; array_push($tablNews, $tabl); } $news->closeCursor(); return $tablNews; } /** Modifie un best of (ou plutot ajoute le contexte puisque qu'il n'existe pas à la création). */ public function updateBestof($id,$contexte) { $modif = $this->_db->prepare('UPDATE news SET contextbest = :contexte WHERE id = :idMod'); $modif->bindValue(':contexte', $contexte); $modif->bindValue(':idMod', $id, PDO::PARAM_INT); $modif->execute(); $modif->closeCursor(); echo 'Votre contexte de best of a bien été modifiée.'; } public function newsTwitter($idLire) { //On sélectionne la news voulue dans la bdd $lire = $this->_db->prepare('SELECT * FROM news WHERE id = :idRead'); $lire->bindParam('idRead', $idLire, PDO::PARAM_INT); $lire->execute(); //On affiche la news while( $maNews = $lire->fetch(PDO::FETCH_ASSOC)) { $contenu = $maNews['contenu']; $titre = $maNews['titre']; $monidbordel = $maNews['id']; $imageurl = stristr($contenu,'src='); $imageurl = stristr($imageurl, '>', true); $imageurl = str_replace('src="','',$imageurl); //double quote $imageurl = str_replace("src='","",$imageurl); //single quote $imageurl = stristr($imageurl, '"', true); //double quote $imageurl = stristr($imageurl, "'", true); //single quote if (strpos($imageurl,'://') === FALSE){$imageurl = 'http://hhh-world.com'.$imageurl;} $texte = substr($titre,0,85); // limite twitter 140 caractères - 22 pour l'URL - 23 pour l'image -4 pour les espaces et la flèche entre texte et lien -6 pour [news] $url = 'http://hhh-world.com/lireNews.php?idnews='.$monidbordel; // require codebird require_once(dirname(__FILE__).'/../twitter-api/codebird.php'); include dirname(__FILE__).'/../include/connexionTwitter.php'; /* $reply = $cb->statuses_updateWithMedia(array( 'status' => $texte.'... '.$url, 'media[]' => $imageurl )); https://github.com/jublonet/codebird-php/issues/76 */ // 'status' => $texte.'... '.$url, $reply = $cb->statuses_update(array( 'status' => '[news]'.$texte.' -> '.$url, )); // print_r($reply); // pour debug seulement } $lire->closeCursor(); } /** * Initialise la connexion à la bdd * */ public function setDb() { include dirname(__FILE__).'/../include/connexionBdd.php'; $this->_db = $bdd; //echo '
Passage dans la fonction de connexion à la bdd.
'; } } ?>