annotate includes/class.skeleton.php @ 23:20159d39b8f8

Correction de l'url pour l'obtention des gravatars.
author Franck Deroche <webmaster@defr.org>
date Fri, 26 Oct 2007 18:09:36 +0200
parents 86a6793f1408
children 710fe2fd2ff7
rev   line source
webmaster@11 1 <?php
webmaster@11 2 class Skeleton extends Template {
webmaster@11 3
webmaster@11 4 private $styleSheets;
webmaster@11 5 private $blogPosts;
webmaster@11 6 private $showCalendar = false;
webmaster@11 7 private $calendarMonth;
webmaster@11 8 private $calendarYear;
webmaster@21 9 private $useXML;
webmaster@11 10
webmaster@11 11 public function __construct() {
webmaster@11 12 parent::__construct('main.xml');
webmaster@11 13 $this->styleSheets = array();
webmaster@11 14 $this->addDefaultSheets();
webmaster@11 15 $this->blogPosts = array();
webmaster@21 16 $this->useXML = empty($_SERVER['HTTP_ACCEPT']) ||
webmaster@21 17 stristr($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml');
webmaster@11 18 }
webmaster@11 19
webmaster@11 20 public function setTitle($titre) {
webmaster@11 21 $this->setParams(array('title' => $titre));
webmaster@11 22 }
webmaster@11 23
webmaster@11 24 private function buildSidebar() {
webmaster@11 25 $sidebar = new Template('sidebar.xml');
webmaster@11 26 // 1. Récupération des archives
webmaster@11 27 $db = Factory::getDB();
webmaster@11 28 $db->Query("
webmaster@11 29 SELECT
webmaster@11 30 MONTH(DatePost) As Month,
webmaster@11 31 YEAR(DatePost) As Year,
webmaster@11 32 COUNT(num_mess) As Nb
webmaster@11 33 FROM Mess
webmaster@11 34 GROUP BY
webmaster@11 35 MONTH(DatePost),
webmaster@11 36 YEAR(DatePost)
webmaster@11 37 ORDER BY
webmaster@11 38 YEAR(DatePost) DESC,
webmaster@11 39 Month(DatePost) DESC
webmaster@11 40 ");
webmaster@11 41 $archives = array();
webmaster@11 42 while($row = $db->GetRow()) {
webmaster@11 43 $curArchiveTpl = new Template('archive.xml');
webmaster@11 44 $monthName = TextUtils::getMonthName($row['Month']);
webmaster@11 45 $curArchiveTpl->setParams(array(
webmaster@11 46 'a' => $monthName . ' ' . $row['Year'],
webmaster@11 47 'a@href' => "http://defr.org/blog/posts/{$row['Year']}/{$row['Month']}",
webmaster@11 48 'postCount' => '(' . $row['Nb'] . ')'
webmaster@11 49 ));
webmaster@11 50 $archives[] = array('li' => $curArchiveTpl);
webmaster@11 51 }
webmaster@11 52 // 2. Récupération des derniers commentaires
webmaster@11 53 $db->Query("
webmaster@11 54 SELECT C.*, M.Titre
webmaster@11 55 FROM Commentaires C, Mess M
webmaster@11 56 WHERE C.MessId = M.num_mess AND C.Visible=1
webmaster@11 57 ORDER BY num_comm DESC LIMIT 20");
webmaster@11 58 $i = 0;
webmaster@11 59 $comments = array();
webmaster@11 60 while($row = $db->GetRow()) {
webmaster@11 61 $curCommentTpl = new Template('commentIndex.xml');
webmaster@11 62 // On récupère une version filtrée du titre du post ...
webmaster@11 63 $tf = TextUtils::StripTitle($row['Titre']);
webmaster@11 64 // ... Qui nous permet d'obtenir l'adresse du commentaire sur le post
webmaster@11 65 $c_url = "/blog/post/{$row['MessId']}-$tf#c{$row['num_comm']}";
webmaster@11 66 // Si jamais on a une adresse mail, on rajoute un mailto:
webmaster@11 67 if(strpos($row['Adresse'], '@') !== false)
webmaster@11 68 $row['Adresse'] = 'mailto:' . $row['Adresse'];
webmaster@11 69 // On commence par définir les paramètres généraux
webmaster@11 70 $params = array(
webmaster@11 71 '#CommentAuthor' => $row['Auteur'],
webmaster@11 72 '#CommentAuthor@href' => $row['Adresse'],
webmaster@11 73 '#Post' => $row['Titre'],
webmaster@11 74 '#Post@href' => $c_url
webmaster@11 75 );
webmaster@11 76 // On affiche les 5 commentaires les plus récents en version complète
webmaster@11 77 // puis les 15 autres en versions résumées
webmaster@11 78 if($i < 5) {
webmaster@11 79 $Comment = nl2br($row['Comment']);
webmaster@11 80 }
webmaster@11 81 else {
webmaster@11 82 $Comment = str_replace("\n", " ", strip_tags($row['Comment']));
webmaster@11 83 if(strlen($Comment > 100))
webmaster@11 84 $Comment = utf8_encode(substr(utf8_decode($Comment), 0, 97)) . "...";
webmaster@11 85 $params['li@class'] = 'fold';
webmaster@11 86 }
webmaster@11 87
webmaster@11 88 $frag = $curCommentTpl->getDocumentFragment();
webmaster@11 89 $frag->appendXML($Comment);
webmaster@11 90 $params['comment'] = $frag;
webmaster@11 91 $curCommentTpl->setParams($params);
webmaster@11 92 $comments[] = array('blogComment' => $curCommentTpl);
webmaster@11 93 $i++;
webmaster@11 94 }
webmaster@11 95 // 3. Application des paramètres
webmaster@11 96 $sidebar->setParams(array(
webmaster@11 97 '#archives' => $archives,
webmaster@11 98 '#BlogCommentIndex' => $comments
webmaster@11 99 ));
webmaster@11 100 return $sidebar;
webmaster@11 101 }
webmaster@11 102
webmaster@11 103 private function buildLinks() {
webmaster@11 104 $links = new Template('links.xml');
webmaster@11 105 return $links;
webmaster@11 106 }
webmaster@11 107
webmaster@11 108 private function buildCalendar() {
webmaster@11 109 $retVal = null;
webmaster@11 110 if($this->showCalendar) {
webmaster@11 111 $cMonth = $this->calendarMonth;
webmaster@11 112 $cYear = $this->calendarYear;
webmaster@11 113 $nextMonth = ($cMonth % 12) + 1;
webmaster@11 114 $nextYear = ($nextMonth == 1) ? $cYear + 1 : $cYear;
webmaster@14 115 $prevMonth = $cMonth - 1;
webmaster@14 116 if($prevMonth == 0)
webmaster@14 117 $prevMonth = 12;
webmaster@11 118 $prevYear = ($prevMonth == 12) ? $cYear - 1 : $cYear;
webmaster@11 119 $retVal = new Template('calendar.xml');
webmaster@11 120 $retVal->setParams(array(
webmaster@11 121 '#calPrev' => TextUtils::getMonthName($prevMonth) . ' ' . $prevYear,
webmaster@11 122 '#calPrev@href' => '/blog/posts/' . $prevYear . '/' . $prevMonth,
webmaster@11 123 '#calNext' => TextUtils::getMonthName($nextMonth) . ' ' . $nextYear,
webmaster@11 124 '#calNext@href' => '/blog/posts/' . $nextYear . '/' . $nextMonth,
webmaster@11 125 'currentMonth' => TextUtils::getMonthName($cMonth) . ' ' . $cYear
webmaster@11 126 ));
webmaster@11 127 } else {
webmaster@11 128 $retVal = '';
webmaster@11 129 }
webmaster@11 130 return $retVal;
webmaster@11 131 }
webmaster@11 132
webmaster@11 133 public function addStyleSheet($SheetName, $CSSFile, $enabled = false) {
webmaster@11 134 $this->styleSheets[] = (object)array(
webmaster@11 135 'name' => $SheetName,
webmaster@11 136 'CSSFile' => $CSSFile,
webmaster@11 137 'enabled' => $enabled
webmaster@11 138 );
webmaster@11 139 }
webmaster@11 140
webmaster@11 141 public function enableStyleSheet($styleSheetName) {
webmaster@11 142 foreach($this->styleSheets as $styleSheet) {
webmaster@11 143 $styleSheet->enabled = ($styleSheet->name == $styleSheetName);
webmaster@11 144 }
webmaster@11 145 }
webmaster@11 146
webmaster@11 147 public function addDefaultSheets() {
webmaster@11 148 $StyleSheets = array(
webmaster@11 149 "Somatic" => "Somatic.css",
webmaster@11 150 "OliveVerde" => "OliveVerde.css",
webmaster@11 151 "Lite:Reloaded" => "Lite_nv.css",
webmaster@11 152 "Brushed" => "Brushed.css",
webmaster@11 153 ":Hover" => "HoverExp.css");
webmaster@11 154 $CkStyle = (array_key_exists("style", $_COOKIE) &&
webmaster@11 155 array_key_exists($_COOKIE['style'], $StyleSheets))
webmaster@11 156 ? $_COOKIE['style']
webmaster@11 157 :"Somatic";
webmaster@11 158 foreach($StyleSheets as $SheetName => $CSSFile)
webmaster@11 159 $this->addStyleSheet($SheetName, $CSSFile, ($SheetName == $CkStyle));
webmaster@11 160 }
webmaster@11 161
webmaster@11 162 public function addBlogPost(Template $blogPost) {
webmaster@11 163 $this->blogPosts[] = $blogPost;
webmaster@11 164 }
webmaster@11 165
webmaster@11 166 public function showCalendar($newValue = false) {
webmaster@11 167 $this->showCalendar = $newValue;
webmaster@11 168 }
webmaster@11 169
webmaster@11 170 public function setCalendarMonth($month, $year) {
webmaster@11 171 $this->calendarMonth = $month;
webmaster@11 172 $this->calendarYear = $year;
webmaster@11 173 }
webmaster@11 174
webmaster@11 175 private function prepareOutput() {
webmaster@11 176 $params = array();
webmaster@11 177
webmaster@11 178 // Ajout de la sidebar
webmaster@11 179 $params['sidebar'] = $this->buildSideBar();
webmaster@11 180
webmaster@11 181 // Ajout de la liste des liens
webmaster@11 182 $params['links'] = $this->buildLinks();
webmaster@11 183
webmaster@11 184 // Ajout des feuilles de style
webmaster@11 185 $params['possibleStyleSheets'] = array();
webmaster@11 186 foreach($this->styleSheets as $styleSheet) {
webmaster@11 187 $type = ($styleSheet->enabled) ? "" : "Alternate ";
webmaster@11 188 $type .= "StyleSheet";
webmaster@11 189 $params['possibleStyleSheets'][] = array(
webmaster@11 190 'link@href' => '/blog/css/' . $styleSheet->CSSFile,
webmaster@11 191 'link@rel' => $type,
webmaster@11 192 'link@title' => $styleSheet->name
webmaster@11 193 );
webmaster@11 194 }
webmaster@11 195
webmaster@11 196 // Affichage éventuel des liens vers les mois précédents et suivants
webmaster@11 197 $params['calendarPrevNext'] = $this->buildCalendar();
webmaster@11 198
webmaster@11 199 // Ajout des posts de blog
webmaster@11 200 $params['#Posts'] = array();
webmaster@11 201 foreach($this->blogPosts as $blogPost) {
webmaster@11 202 $params['#Posts'][] = array('post' => $blogPost);
webmaster@11 203 }
webmaster@11 204
webmaster@11 205 // Application des l'ensemble de ces paramètres
webmaster@11 206 $this->setParams($params);
webmaster@11 207 }
webmaster@11 208
webmaster@11 209 public function __toString() {
webmaster@11 210 $this->prepareOutput();
webmaster@21 211 $returnValue = parent::__toString();
webmaster@21 212 if($this->useXML)
webmaster@21 213 header('Content-Type: application/xhtml+xml; charset=utf-8');
webmaster@21 214 else
webmaster@21 215 $returnValue = ereg_replace('<\?xml[^\?]*\?>', '', $returnValue);
webmaster@21 216 return $returnValue;
webmaster@11 217 }
webmaster@11 218 }
webmaster@11 219 ?>