summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2013-03-20 22:56:17 +0100
committerGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2013-03-20 22:56:17 +0100
commitbf24aa601f96d184f9635fa72377d7521b324b4f (patch)
tree647e17c2a22c0e861c5dbe8f4efef1ea86bf8084
parent80d4f5cf3d2d48fb095d0a2c7013dc3d99ae0065 (diff)
Ajout controller Rss pour export au format RSS (très très basique) #34 + ajout lib text pour gérer le bbcode
-rw-r--r--app/App_FrontController.php1
-rwxr-xr-xapp/controllers/rssController.php35
-rwxr-xr-xapp/views/rss/public.phtml31
-rw-r--r--lib/lib_text.php88
4 files changed, 155 insertions, 0 deletions
diff --git a/app/App_FrontController.php b/app/App_FrontController.php
index 55bcfc167..0ff7bf182 100644
--- a/app/App_FrontController.php
+++ b/app/App_FrontController.php
@@ -20,6 +20,7 @@ class App_FrontController extends FrontController {
require (LIB_PATH . '/lib_phpQuery.php');
require (LIB_PATH . '/lib_rss.php');
require (LIB_PATH . '/lib_simplepie.php');
+ require (LIB_PATH . '/lib_text.php');
}
private function loadModels () {
diff --git a/app/controllers/rssController.php b/app/controllers/rssController.php
new file mode 100755
index 000000000..1f66f4517
--- /dev/null
+++ b/app/controllers/rssController.php
@@ -0,0 +1,35 @@
+<?php
+
+class rssController extends ActionController {
+ public function firstAction() {
+ header('Content-Type: text/xml');
+ header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
+ header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+ header('Pragma: public');
+
+ $this->view->_useLayout (false);
+ }
+
+ public function publicAction () {
+ $entryDAO = new EntryDAO ();
+ $entryDAO->_nbItemsPerPage (-1);
+
+ $items = $entryDAO->listPublic ('low_to_high');
+
+ try {
+ $page = Request::param('page', 1);
+ $nb = Request::param('nb', 15);
+ $this->view->itemPaginator = new Paginator($items);
+ $this->view->itemPaginator->_nbItemsPerPage($nb);
+ $this->view->itemPaginator->_currentPage($page);
+ } catch(CurrentPagePaginationException $e) {
+ Error::error(
+ 404,
+ array('error' => array('La page que vous cherchez n\'existe pas'))
+ );
+ }
+ }
+
+ public function getNbNotReadAction() {
+ }
+}
diff --git a/app/views/rss/public.phtml b/app/views/rss/public.phtml
new file mode 100755
index 000000000..04a035699
--- /dev/null
+++ b/app/views/rss/public.phtml
@@ -0,0 +1,31 @@
+<?php echo '<?xml version="1.0" encoding="UTF-8" ?>'; ?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <channel>
+ <title><?php echo View::title(); ?></title>
+ <link><?php echo Url::display(); ?></link>
+ <description>Flux public de <?php echo View::title(); ?></description>
+ <language>fr</language>
+ <pubDate><?php echo date('D, d M Y H:i:s O'); ?></pubDate>
+ <lastBuildDate><?php echo gmdate('D, d M Y H:i:s'); ?> GMT</lastBuildDate>
+ <atom:link href="<?php echo Url::display(array('a' => 'rss')); ?>" rel="self" type="application/rss+xml" />
+<?php
+$items = $this->itemPaginator->items ();
+foreach ($items as $item) {
+?>
+ <item>
+ <title><?php echo htmlspecialchars(html_entity_decode($item->title ())); ?></title>
+ <link><?php echo $item->link (); ?></link>
+ <?php $author = $item->author (); ?>
+ <?php if ($author != '') { ?>
+ <dc:creator><?php echo $author; ?></dc:creator>
+ <?php } ?>
+ <description><![CDATA[<?php
+ echo html_entity_decode($item->notes (false, false));
+?>]]></description>
+ <pubDate><?php echo date('D, d M Y H:i:s O', $item->date (true)); ?></pubDate>
+ <guid><?php echo $item->guid (); ?></guid>
+ </item>
+<?php } ?>
+
+ </channel>
+</rss>
diff --git a/lib/lib_text.php b/lib/lib_text.php
new file mode 100644
index 000000000..6e8f7b2bf
--- /dev/null
+++ b/lib/lib_text.php
@@ -0,0 +1,88 @@
+<?php
+
+function bbDecode($string) {
+
+ $find = array(
+ "'\[b\](.*?)\[/b\]'is",
+ "'\[u\](.*?)\[/u\]'is",
+ "'\[i\](.*?)\[/i\]'is",
+ "'\[s\](.*?)\[/s\]'is",
+ "'\[code\](.*?)\[/code\]'is",
+ "'\[quote\](.*?)\[/quote\]'is",
+ "'\[quote=(.*?)\](.*?)\[/quote\]'is",
+ "'\[span=(.*?)\](.*?)\[/span\]'i",
+ "'\[div=(.*?)\](.*?)\[/div\]'is",
+ "'\[h\](.*?)\[/h\]'i",
+ "'\[url\](.*?)\[/url\]'i",
+ "'\[url=(.*?)\](.*?)\[/url\]'i",
+ "'\[video\](.*?)\[/video\]'i",
+ "'\[video width=(.*?) height=(.*?)\](.*?)\[/video\]'i",
+ "'\[img\](.*?)\[/img\]'i",
+ "'\[img title=(.*?) rel=(.*?)\](.*?)\[/img\]'i",
+ "'\[img title=(.*?)\](.*?)\[/img\]'i",
+ );
+
+ $replace = array(
+ "<strong>\\1</strong>",
+ "<u>\\1</u>",
+ "<i>\\1</i>",
+ "<del>\\1</del>",
+ "<pre>\\1</pre>",
+ "<q>\\1</q>",
+ "<q><span class=\"cite\">\\1 a écrit</span><br />\\2</q>",
+ "<span class=\"\\1\">\\2</span>",
+ "<div class=\"\\1\">\\2</div>",
+ "<b>\\1</b><br />",
+ "<a href=\"\\1\">\\1</a>",
+ "<a href=\"\\1\">\\2</a>",
+ "<object width=\"480\" height=\"387\" class=\"center\"><param name=\"movie\" value=\"\\1\"></param><embed src=\"\\1\" type=\"application/x-shockwave-flash\" width=\"480\" height=\"387\"></embed></object>",
+ "<object width=\"\\1\" height=\"\\2\" class=\"center\"><param name=\"movie\" value=\"\\3\"></param><embed src=\"\\3\" type=\"application/x-shockwave-flash\" width=\"\\1\" height=\"\\2\"></embed></object>",
+ "<a href=\"\\1\" rel=\"prettyPhoto\"><img src=\"\\1\" alt=\"\" /></a>",
+ "<img class=\"illustration\" src=\"\\3\" alt=\"\\1\" />",
+ "<img src=\"\\2\" alt=\"\\1\" />",
+ );
+
+ $string = makeLinks(preg_replace ($find, $replace, $string));
+ $string = nl2brPlus ($string);
+
+ return $string;
+}
+
+// do nl2br except when in a <pre> tag
+function nl2brPlus($string) {
+ $string = str_replace("\n", "<br />", $string);
+ if(preg_match_all('/\<pre\>(.*?)\<\/pre\>/', $string, $match)){
+ foreach($match as $a){
+ foreach($a as $b){
+ $string = str_replace('<pre>'.$b.'</pre>', "<pre>".str_replace("<br />", "", $b)."</pre>", $string);
+ }
+ }
+ }
+ return $string;
+}
+
+# Transform URL and e-mails into links
+function makeLinks($string) {
+ $string = preg_replace_callback('/\s(http|https|ftp):(\/\/){0,1}([^\"\s]*)/i','splitUri',$string);
+ return $string;
+}
+
+# Split links, require for makeLinks
+function splitUri($matches) {
+ $uri = $matches[1].':'.$matches[2].$matches[3];
+ $t = parse_url($uri);
+ $link = $matches[3];
+
+ if (!empty($t['scheme'])) {
+ return ' <a href="'.$uri.'">'.$link.'</a>';
+ } else {
+ return $uri;
+ }
+}
+
+// parse la description pour ajouter les liens sur les tags
+function parse_tags ($desc) {
+ $desc_parse = preg_replace ('/#([\w\dÀÇÈÉÊËÎÏÔÙÚÛÜàáâçèéêëîïóùúûü]+)/i', '<a class="linktag" href="?addtag=\\1">\\1</a>', $desc);
+
+ return $desc_parse;
+}