annotate includes/class.skeleton.php @ 15:3b7c1400f89a

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