summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2013-03-12 23:24:52 +0100
committerGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2013-03-12 23:24:52 +0100
commitc62ec2a14428b528e20896d4e62fa08891e1399c (patch)
treecdf6cbbd2d1b9182d385db36ec0c86b08bcf442e /app
parent8c562972062fbf3d750bd62893de248022850c23 (diff)
Grosse mise à jour du design, pas mal de trucs cassés au niveau du panneau de configuration
Diffstat (limited to 'app')
-rwxr-xr-xapp/controllers/indexController.php77
-rw-r--r--app/layout/aside.phtml76
-rw-r--r--app/layout/configure_aside.phtml3
-rw-r--r--app/layout/header.phtml28
-rw-r--r--app/layout/layout.phtml6
-rwxr-xr-xapp/models/Category.php42
-rwxr-xr-xapp/models/Entry.php120
-rw-r--r--app/models/Feed.php56
-rw-r--r--app/views/configure/feed.phtml8
-rw-r--r--app/views/index/index.phtml6
10 files changed, 263 insertions, 159 deletions
diff --git a/app/controllers/indexController.php b/app/controllers/indexController.php
index bd5f31b08..916f77c98 100755
--- a/app/controllers/indexController.php
+++ b/app/controllers/indexController.php
@@ -5,15 +5,16 @@ class indexController extends ActionController {
View::appendScript (Url::display ('/scripts/smoothscroll.js'));
View::appendScript (Url::display ('/scripts/shortcut.js'));
View::appendScript (Url::display (array ('c' => 'javascript', 'a' => 'main')));
-
+
$entryDAO = new EntryDAO ();
+ $feedDAO = new FeedDAO ();
$catDAO = new CategoryDAO ();
-
+
// pour optimiser
$page = Request::param ('page', 1);
$entryDAO->_nbItemsPerPage ($this->view->conf->postsPerPage ());
$entryDAO->_currentPage ($page);
-
+
$default_view = $this->view->conf->defaultView ();
$mode = Session::param ('mode');
if ($mode == false) {
@@ -23,67 +24,87 @@ class indexController extends ActionController {
$mode = $default_view;
}
}
-
+
$get = Request::param ('get');
$order = $this->view->conf->sortOrder ();
-
+
+ $error = false;
+
// Récupère les flux par catégorie, favoris ou tous
if ($get == 'favoris') {
$entries = $entryDAO->listFavorites ($mode, $order);
View::prependTitle ('Vos favoris - ');
} elseif ($get != false) {
- $entries = $entryDAO->listByCategory ($get, $mode, $order);
- $cat = $catDAO->searchById ($get);
-
- if ($cat) {
- View::prependTitle ($cat->name () . ' - ');
+ $typeGet = $get[0];
+ $get = substr ($get, 2);
+
+ if ($typeGet == 'c') {
+ $entries = $entryDAO->listByCategory ($get, $mode, $order);
+ $cat = $catDAO->searchById ($get);
+
+ if ($cat) {
+ View::prependTitle ($cat->name () . ' - ');
+ } else {
+ $error = true;
+ }
+ } elseif ($typeGet == 'f') {
+ $entries = $entryDAO->listByFeed ($get, $mode, $order);
+ $feed = $feedDAO->searchById ($get);
+
+ if ($feed) {
+ View::prependTitle ($feed->name () . ' - ');
+ } else {
+ $error = true;
+ }
} else {
- Error::error (
- 404,
- array ('error' => array ('La page que vous cherchez n\'existe pas'))
- );
+ $error = true;
}
} else {
View::prependTitle ('Vos flux RSS - ');
}
+
$this->view->get = $get;
$this->view->mode = $mode;
-
+
// Cas où on ne choisie ni catégorie ni les favoris
// ou si la catégorie ne correspond à aucune
if (!isset ($entries)) {
$entries = $entryDAO->listEntries ($mode, $order);
}
-
+
try {
$this->view->entryPaginator = $entryDAO->getPaginator ($entries);
} catch (CurrentPagePaginationException $e) {
+ $error = true;
+ }
+
+ $this->view->cat_aside = $catDAO->listCategories ();
+ $this->view->nb_favorites = $entryDAO->countFavorites ();
+ $this->view->nb_total = $entryDAO->count ();
+
+ if ($error) {
Error::error (
404,
array ('error' => array ('La page que vous cherchez n\'existe pas'))
);
}
-
- $this->view->cat_aside = $catDAO->listCategories ();
- $this->view->nb_favorites = $entryDAO->countFavorites ();
- $this->view->nb_total = $entryDAO->count ();
}
-
+
public function changeModeAction () {
$mode = Request::param ('mode');
-
+
if ($mode == 'not_read') {
Session::_param ('mode', 'not_read');
} else {
Session::_param ('mode', 'all');
}
-
+
Request::forward (array (), true);
}
-
+
public function loginAction () {
$this->view->_useLayout (false);
-
+
$url = 'https://verifier.login.persona.org/verify';
$assert = Request::param ('assertion');
$params = 'assertion=' . $assert . '&audience=' .
@@ -98,7 +119,7 @@ class indexController extends ActionController {
curl_setopt_array ($ch, $options);
$result = curl_exec ($ch);
curl_close ($ch);
-
+
$res = json_decode ($result, true);
if ($res['status'] == 'okay' && $res['email'] == $this->view->conf->mailLogin ()) {
Session::_param ('mail', $res['email']);
@@ -107,10 +128,10 @@ class indexController extends ActionController {
$res['status'] = 'failure';
$res['reason'] = 'L\'identifiant est invalide';
}
-
+
$this->view->res = json_encode ($res);
}
-
+
public function logoutAction () {
$this->view->_useLayout (false);
Session::_param ('mail');
diff --git a/app/layout/aside.phtml b/app/layout/aside.phtml
index 1432c10ca..f1f14cfc0 100644
--- a/app/layout/aside.phtml
+++ b/app/layout/aside.phtml
@@ -1,50 +1,44 @@
-<div id="main_aside" class="aside">
- <?php if (!login_is_conf ($this->conf) || is_logged ()) { ?>
- <form id="add_rss" method="post" action="<?php echo Url::display (array ('c' => 'feed', 'a' => 'add')); ?>">
- <input type="url" name="url_rss" placeholder="Ajouter un flux RSS" /><!--
- --><input type="submit" value="+" />
- </form>
- <?php } ?>
-
- <ul id="menu">
- <li <?php echo Request::controllerName () == 'index' ? 'class="active"' : ''; ?>>
- <a href="<?php echo Url::display (array ()); ?>">Flux RSS</a>
- </li>
-
- <?php if (!login_is_conf ($this->conf) || is_logged ()) { ?>
- <li <?php echo Request::controllerName () == 'configure' ? 'class="active"' : ''; ?>>
- <a href="<?php echo Url::display (array ('c' => 'configure', 'a' => 'display')); ?>">Configurer</a>
- </li>
- <?php } ?>
-
- <?php if (login_is_conf ($this->conf)) { ?>
- <li>
- <?php if (!is_logged ()) { ?>
- <a id="signin" href="#">Connexion</a>
- <?php } else { ?>
- <a id="signout" href="#">Déconnexion</a>
- <?php } ?>
- </li>
- <?php } ?>
- </ul>
-
+<div class="aside">
<?php if (isset ($this->cat_aside)) { ?>
- <ul id="categories">
- <li class="all<?php echo !$this->get ? ' active' : ''; ?>">
- <a href="<?php echo Url::display (array ()); ?>">
- Tous
- <span><?php echo $this->nb_total; ?> article<?php echo $this->nb_total > 1 ? 's' : ''; ?> (<span class="nb_not_read"><?php echo $this->nb_not_read; ?></span>)</span>
+ <ul class="categories">
+ <li><a class="btn btn-important" href="<?php echo _url ('configure', 'feed'); ?>">Gestion des abonnements</a></li>
+
+ <li class="all">
+ <a class="btn category<?php echo !$this->get ? ' active' : ''; ?>" href="<?php echo _url ('index', 'index'); ?>">
+ <i class="icon all"></i>
+ Tous (<?php echo $this->nb_total; ?>)
+ <span class="notRead"><?php echo $this->nb_not_read; ?> non lu<?php echo $this->nb_not_read > 1 ? 's' : ''; ?></span>
+ </a>
+ </li>
+
+ <li class="favorites">
+ <a class="btn category<?php echo $this->get == 'favoris' ? ' active' : ''; ?>" href="<?php echo _url ('index', 'index', 'get', 'favoris'); ?>">
+ <i class="icon bookmark"></i>
+ Favoris (<?php echo $this->nb_favorites; ?>)
</a>
</li>
-
- <li class="favorites<?php echo $this->get == 'favoris' ? ' active' : ''; ?>"><a href="<?php echo Url::display (array ('params' => array ('get' => 'favoris'))); ?>">Favoris <span><?php echo $this->nb_favorites; ?> article<?php echo $this->nb_favorites > 1 ? 's' : ''; ?></span></a></li>
-
+
<?php foreach ($this->cat_aside as $cat) { ?>
- <li class="category<?php echo $this->get == $cat->id () ? ' active' : ''; ?>">
- <a href="<?php echo Url::display (array ('params' => array ('get' => $cat->id ()))); ?>">
+ <?php $feeds = $cat->feeds (); $catNotRead = $cat->nbNotRead (); ?>
+ <li>
+ <a class="btn category<?php echo $this->get == $cat->id () ? ' active' : ''; ?>" href="<?php echo _url ('index', 'index', 'get', 'c_' . $cat->id ()); ?>">
<?php echo $cat->name (); ?>
- <span><?php echo $cat->nbNotRead (); ?> non lu</span>
+ <span class="notRead"><?php echo $catNotRead ?> non lu<?php echo $catNotRead > 1 ? 's' : ''; ?></span>
</a>
+
+ <?php if (!empty ($feeds)) { ?>
+ <ul class="feeds">
+ <?php foreach ($feeds as $feed) { ?>
+ <li>
+ <img src="http://www.google.com/s2/favicons?domain=<?php echo get_domain ($feed->website ()); ?>" alt="" />
+ <a class="feed" href="<?php echo _url ('index', 'index', 'get', 'f_' . $feed->id ()); ?>">
+ <?php echo $feed->name(); ?>
+ <!--<span>X non lu</span>-->
+ </a>
+ </li>
+ <?php } ?>
+ </ul>
+ <?php } ?>
</li>
<?php } ?>
</ul>
diff --git a/app/layout/configure_aside.phtml b/app/layout/configure_aside.phtml
index b7a8fdeef..26a111045 100644
--- a/app/layout/configure_aside.phtml
+++ b/app/layout/configure_aside.phtml
@@ -4,9 +4,6 @@
<li <?php echo Request::actionName () == 'display' ? 'class="active"' : ''; ?>>
<a href="<?php echo Url::display (array ('c' => 'configure', 'a' => 'display')); ?>">Général et affichage</a>
</li>
- <li <?php echo Request::actionName () == 'feed' ? 'class="active"' : ''; ?>>
- <a href="<?php echo Url::display (array ('c' => 'configure', 'a' => 'feed')); ?>">Flux RSS</a>
- </li>
<li <?php echo Request::actionName () == 'categorize' ? 'class="active"' : ''; ?>>
<a href="<?php echo Url::display (array ('c' => 'configure', 'a' => 'categorize')); ?>">Catégories</a>
</li>
diff --git a/app/layout/header.phtml b/app/layout/header.phtml
new file mode 100644
index 000000000..d158e6353
--- /dev/null
+++ b/app/layout/header.phtml
@@ -0,0 +1,28 @@
+<div class="header">
+ <div class="item title">
+ <h1><a href="<?php echo _url ('index', 'index'); ?>">FreshRSS</a></h1>
+ </div>
+
+ <div class="item search">
+ <form action="<?php echo _url ('index', 'index'); ?>" method="get">
+ <input type="text" name="search" id="search" placeholder="Rechercher (non fonctionnel)" />
+ <button class="btn"><i class="icon search"></i></button>
+ </form>
+ </div>
+
+ <?php if (!login_is_conf ($this->conf) || is_logged ()) { ?>
+ <div class="item configure">
+ <a class="btn" href="<?php echo _url ('configure', 'display'); ?>"><i class="icon configure"></i></a>
+ </div>
+ <?php } ?>
+
+ <!--<?php if (login_is_conf ($this->conf)) { ?>
+ <li>
+ <?php if (!is_logged ()) { ?>
+ <a id="signin" href="#">Connexion</a>
+ <?php } else { ?>
+ <a id="signout" href="#">Déconnexion</a>
+ <?php } ?>
+ </li>
+ <?php } ?>-->
+</div>
diff --git a/app/layout/layout.phtml b/app/layout/layout.phtml
index 5b2adae1e..4adcbef45 100644
--- a/app/layout/layout.phtml
+++ b/app/layout/layout.phtml
@@ -8,8 +8,12 @@
<?php echo self::headScript (); ?>
</head>
<body>
+<?php $this->partial ('header'); ?>
+
<div id="global">
+ <?php if (Request::controllerName () != 'configure') { ?>
<?php $this->partial ('aside'); ?>
+ <?php } ?>
<div id="main">
<?php $this->render (); ?>
@@ -21,7 +25,7 @@
<?php if (isset ($this->notification)) { ?>
<div class="notification <?php echo $this->notification['type']; ?>">
<?php echo $this->notification['content']; ?>
- <a class="close" href="">X</a>
+ <a class="close" href=""><i class="icon close"></i></a>
</div>
<?php } ?>
</body>
diff --git a/app/models/Category.php b/app/models/Category.php
index ceecea453..ef214137e 100755
--- a/app/models/Category.php
+++ b/app/models/Category.php
@@ -4,12 +4,13 @@ class Category extends Model {
private $id = false;
private $name;
private $color;
-
+ private $feeds = null;
+
public function __construct ($name = '', $color = '#0062BE') {
$this->_name ($name);
$this->_color ($color);
}
-
+
public function id () {
if (!$this->id) {
return small_hash ($this->name . Configuration::selApplication ());
@@ -31,7 +32,15 @@ class Category extends Model {
$catDAO = new CategoryDAO ();
return $catDAO->countNotRead ($this->id ());
}
-
+ public function feeds () {
+ if (is_null ($this->feeds)) {
+ $feedDAO = new FeedDAO ();
+ return $feedDAO->listByCategory ($this->id ());
+ } else {
+ return $this->feeds;
+ }
+ }
+
public function _id ($value) {
$this->id = $value;
}
@@ -45,6 +54,13 @@ class Category extends Model {
$this->color = '#0062BE';
}
}
+ public function _feeds ($values) {
+ if (!is_array ($values)) {
+ $values = array ($values);
+ }
+
+ $this->feeds = $values;
+ }
}
class CategoryDAO extends Model_pdo {
@@ -64,7 +80,7 @@ class CategoryDAO extends Model_pdo {
return false;
}
}
-
+
public function updateCategory ($id, $valuesTmp) {
$sql = 'UPDATE category SET name=?, color=? WHERE id=?';
$stm = $this->bd->prepare ($sql);
@@ -81,7 +97,7 @@ class CategoryDAO extends Model_pdo {
return false;
}
}
-
+
public function deleteCategory ($id) {
$sql = 'DELETE FROM category WHERE id=?';
$stm = $this->bd->prepare ($sql);
@@ -94,24 +110,24 @@ class CategoryDAO extends Model_pdo {
return false;
}
}
-
+
public function searchById ($id) {
$sql = 'SELECT * FROM category WHERE id=?';
$stm = $this->bd->prepare ($sql);
-
+
$values = array ($id);
-
+
$stm->execute ($values);
$res = $stm->fetchAll (PDO::FETCH_ASSOC);
$cat = HelperCategory::daoToCategory ($res);
-
+
if (isset ($cat[0])) {
return $cat[0];
} else {
return false;
}
}
-
+
public function listCategories () {
$sql = 'SELECT * FROM category ORDER BY name';
$stm = $this->bd->prepare ($sql);
@@ -119,7 +135,7 @@ class CategoryDAO extends Model_pdo {
return HelperCategory::daoToCategory ($stm->fetchAll (PDO::FETCH_ASSOC));
}
-
+
public function count () {
$sql = 'SELECT COUNT(*) AS count FROM category';
$stm = $this->bd->prepare ($sql);
@@ -128,7 +144,7 @@ class CategoryDAO extends Model_pdo {
return $res[0]['count'];
}
-
+
public function countFeed ($id) {
$sql = 'SELECT COUNT(*) AS count FROM feed WHERE category=?';
$stm = $this->bd->prepare ($sql);
@@ -138,7 +154,7 @@ class CategoryDAO extends Model_pdo {
return $res[0]['count'];
}
-
+
public function countNotRead ($id) {
$sql = 'SELECT COUNT(*) AS count FROM entry e INNER JOIN feed f ON e.id_feed = f.id WHERE category=? AND e.is_read=0';
$stm = $this->bd->prepare ($sql);
diff --git a/app/models/Entry.php b/app/models/Entry.php
index 4790a1681..f2aebbd24 100755
--- a/app/models/Entry.php
+++ b/app/models/Entry.php
@@ -11,7 +11,7 @@ class Entry extends Model {
private $is_read;
private $is_favorite;
private $feed;
-
+
public function __construct ($feed = '', $guid = '', $title = '', $author = '', $content = '',
$link = '', $pubdate = 0, $is_read = false, $is_favorite = false) {
$this->_guid ($guid);
@@ -24,7 +24,7 @@ class Entry extends Model {
$this->_isFavorite ($is_favorite);
$this->_feed ($feed);
}
-
+
public function id () {
if(is_null($this->id)) {
return small_hash ($this->guid . Configuration::selApplication ());
@@ -125,21 +125,21 @@ class EntryDAO extends Model_pdo {
return false;
}
}
-
+
public function updateEntry ($id, $valuesTmp) {
if (isset ($valuesTmp['content'])) {
$valuesTmp['content'] = base64_encode (gzdeflate (serialize ($valuesTmp['content'])));
}
-
+
$set = '';
foreach ($valuesTmp as $key => $v) {
$set .= $key . '=?, ';
}
$set = substr ($set, 0, -2);
-
+
$sql = 'UPDATE entry SET ' . $set . ' WHERE id=?';
$stm = $this->bd->prepare ($sql);
-
+
foreach ($valuesTmp as $v) {
$values[] = $v;
}
@@ -151,21 +151,21 @@ class EntryDAO extends Model_pdo {
return false;
}
}
-
+
public function updateEntries ($valuesTmp) {
if (isset ($valuesTmp['content'])) {
$valuesTmp['content'] = base64_encode (gzdeflate (serialize ($valuesTmp['content'])));
}
-
+
$set = '';
foreach ($valuesTmp as $key => $v) {
$set .= $key . '=?, ';
}
$set = substr ($set, 0, -2);
-
+
$sql = 'UPDATE entry SET ' . $set;
$stm = $this->bd->prepare ($sql);
-
+
foreach ($valuesTmp as $v) {
$values[] = $v;
}
@@ -176,7 +176,7 @@ class EntryDAO extends Model_pdo {
return false;
}
}
-
+
public function cleanOldEntries ($nb_month) {
$date = 60 * 60 * 24 * 30 * $nb_month;
$sql = 'DELETE FROM entry WHERE date <= ? AND is_favorite = 0';
@@ -185,52 +185,52 @@ class EntryDAO extends Model_pdo {
$values = array (
time () - $date
);
-
+
if ($stm && $stm->execute ($values)) {
return true;
} else {
return false;
}
}
-
+
public function searchById ($id) {
$sql = 'SELECT * FROM entry WHERE id=?';
$stm = $this->bd->prepare ($sql);
-
+
$values = array ($id);
-
+
$stm->execute ($values);
$res = $stm->fetchAll (PDO::FETCH_ASSOC);
$entry = HelperEntry::daoToEntry ($res);
-
+
if (isset ($entry[0])) {
return $entry[0];
} else {
return false;
}
}
-
+
public function listEntries ($mode, $order = 'high_to_low') {
$where = '';
if ($mode == 'not_read') {
$where = ' WHERE is_read=0';
}
-
+
if ($order == 'low_to_high') {
$order = ' DESC';
} else {
$order = '';
}
-
+
$sql = 'SELECT COUNT(*) AS count FROM entry' . $where;
$stm = $this->bd->prepare ($sql);
$stm->execute ();
$res = $stm->fetchAll (PDO::FETCH_ASSOC);
$this->nbItems = $res[0]['count'];
-
+
$deb = ($this->currentPage - 1) * $this->nbItemsPerPage;
$fin = $this->nbItemsPerPage;
-
+
$sql = 'SELECT * FROM entry' . $where
. ' ORDER BY date' . $order
. ' LIMIT ' . $deb . ', ' . $fin;
@@ -239,77 +239,111 @@ class EntryDAO extends Model_pdo {
return HelperEntry::daoToEntry ($stm->fetchAll (PDO::FETCH_ASSOC));
}
-
+
public function listFavorites ($mode, $order = 'high_to_low') {
$where = ' WHERE is_favorite=1';
if ($mode == 'not_read') {
$where .= ' AND is_read=0';
}
-
+
if ($order == 'low_to_high') {
$order = ' DESC';
} else {
$order = '';
}
-
+
$sql = 'SELECT COUNT(*) AS count FROM entry' . $where;
$stm = $this->bd->prepare ($sql);
$stm->execute ();
$res = $stm->fetchAll (PDO::FETCH_ASSOC);
$this->nbItems = $res[0]['count'];
-
+
if($this->nbItemsPerPage < 0) {
$sql = 'SELECT * FROM entry' . $where
. ' ORDER BY date' . $order;
} else {
$deb = ($this->currentPage - 1) * $this->nbItemsPerPage;
$fin = $this->nbItemsPerPage;
-
+
$sql = 'SELECT * FROM entry' . $where
. ' ORDER BY date' . $order
. ' LIMIT ' . $deb . ', ' . $fin;
}
$stm = $this->bd->prepare ($sql);
-
+
$stm->execute ();
return HelperEntry::daoToEntry ($stm->fetchAll (PDO::FETCH_ASSOC));
}
-
+
public function listByCategory ($cat, $mode, $order = 'high_to_low') {
$where = ' WHERE category=?';
if ($mode == 'not_read') {
$where .= ' AND is_read=0';
}
-
+
if ($order == 'low_to_high') {
$order = ' DESC';
} else {
$order = '';
}
-
+
$sql = 'SELECT COUNT(*) AS count FROM entry e INNER JOIN feed f ON e.id_feed = f.id' . $where;
$stm = $this->bd->prepare ($sql);
$values = array ($cat);
$stm->execute ($values);
$res = $stm->fetchAll (PDO::FETCH_ASSOC);
$this->nbItems = $res[0]['count'];
-
+
$deb = ($this->currentPage - 1) * $this->nbItemsPerPage;
$fin = $this->nbItemsPerPage;
$sql = 'SELECT * FROM entry e INNER JOIN feed f ON e.id_feed = f.id' . $where
. ' ORDER BY date' . $order
. ' LIMIT ' . $deb . ', ' . $fin;
-
+
$stm = $this->bd->prepare ($sql);
-
+
$values = array ($cat);
-
+
+ $stm->execute ($values);
+
+ return HelperEntry::daoToEntry ($stm->fetchAll (PDO::FETCH_ASSOC));
+ }
+
+ public function listByFeed ($feed, $mode, $order = 'high_to_low') {
+ $where = ' WHERE id_feed=?';
+ if ($mode == 'not_read') {
+ $where .= ' AND is_read=0';
+ }
+
+ if ($order == 'low_to_high') {
+ $order = ' DESC';
+ } else {
+ $order = '';
+ }
+
+ $sql = 'SELECT COUNT(*) AS count FROM entry' . $where;
+ $stm = $this->bd->prepare ($sql);
+ $values = array ($feed);
+ $stm->execute ($values);
+ $res = $stm->fetchAll (PDO::FETCH_ASSOC);
+ $this->nbItems = $res[0]['count'];
+
+ $deb = ($this->currentPage - 1) * $this->nbItemsPerPage;
+ $fin = $this->nbItemsPerPage;
+ $sql = 'SELECT * FROM entry e' . $where
+ . ' ORDER BY date' . $order
+ . ' LIMIT ' . $deb . ', ' . $fin;
+
+ $stm = $this->bd->prepare ($sql);
+
+ $values = array ($feed);
+
$stm->execute ($values);
return HelperEntry::daoToEntry ($stm->fetchAll (PDO::FETCH_ASSOC));
}
-
+
public function count () {
$sql = 'SELECT COUNT(*) AS count FROM entry';
$stm = $this->bd->prepare ($sql);
@@ -318,25 +352,25 @@ class EntryDAO extends Model_pdo {
return $res[0]['count'];
}
-
+
public function countNotRead () {
$sql = 'SELECT COUNT(*) AS count FROM entry WHERE is_read=0';
$stm = $this->bd->prepare ($sql);
$stm->execute ();
$res = $stm->fetchAll (PDO::FETCH_ASSOC);
-
+
return $res[0]['count'];
}
-
+
public function countFavorites () {
$sql = 'SELECT COUNT(*) AS count FROM entry WHERE is_favorite=1';
$stm = $this->bd->prepare ($sql);
$stm->execute ();
$res = $stm->fetchAll (PDO::FETCH_ASSOC);
-
+
return $res[0]['count'];
}
-
+
// gestion de la pagination directement via le DAO
private $nbItemsPerPage = 1;
private $currentPage = 1;
@@ -347,13 +381,13 @@ class EntryDAO extends Model_pdo {
public function _currentPage ($value) {
$this->currentPage = $value;
}
-
+
public function getPaginator ($entries) {
$paginator = new Paginator ($entries);
$paginator->_nbItems ($this->nbItems);
$paginator->_nbItemsPerPage ($this->nbItemsPerPage);
$paginator->_currentPage ($this->currentPage);
-
+
return $paginator;
}
}
@@ -361,7 +395,7 @@ class EntryDAO extends Model_pdo {
class HelperEntry {
public static function daoToEntry ($listDAO, $mode = 'all', $favorite = false) {
$list = array ();
-
+
if (!is_array ($listDAO)) {
$listDAO = array ($listDAO);
}
diff --git a/app/models/Feed.php b/app/models/Feed.php
index db051c948..046e5af92 100644
--- a/app/models/Feed.php
+++ b/app/models/Feed.php
@@ -9,11 +9,11 @@ class Feed extends Model {
private $website = '';
private $description = '';
private $lastUpdate = 0;
-
+
public function __construct ($url) {
$this->_url ($url);
}
-
+
public function id () {
if(is_null($this->id)) {
return small_hash ($this->url . Configuration::selApplication ());
@@ -58,7 +58,7 @@ class Feed extends Model {
if (!is_null ($value) && !preg_match ('#^https?://#', $value)) {
$value = 'http://' . $value;
}
-
+
if (!is_null ($value) && filter_var ($value, FILTER_VALIDATE_URL)) {
$this->url = $value;
} else {
@@ -89,7 +89,7 @@ class Feed extends Model {
public function _lastUpdate ($value) {
$this->lastUpdate = $value;
}
-
+
public function load () {
if (!is_null ($this->url)) {
if (CACHE_PATH === false) {
@@ -113,13 +113,13 @@ class Feed extends Model {
}
private function loadEntries ($feed) {
$entries = array ();
-
+
foreach ($feed->get_items () as $item) {
$title = $item->get_title ();
$author = $item->get_author ();
$link = $item->get_permalink ();
$date = strtotime ($item->get_date ());
-
+
// Gestion du contenu
// On cherche à récupérer les articles en entier... même si le flux ne le propose pas
$path = get_path ($this->website ());
@@ -132,7 +132,7 @@ class Feed extends Model {
} else {
$content = $item->get_content ();
}
-
+
$entry = new Entry (
$this->id (),
$item->get_id (),
@@ -142,10 +142,10 @@ class Feed extends Model {
!is_null ($link) ? $link : '',
$date ? $date : time ()
);
-
+
$entries[$entry->id ()] = $entry;
}
-
+
$this->entries = $entries;
}
}
@@ -171,14 +171,14 @@ class FeedDAO extends Model_pdo {
return false;
}
}
-
+
public function updateFeed ($id, $valuesTmp) {
$set = '';
foreach ($valuesTmp as $key => $v) {
$set .= $key . '=?, ';
}
$set = substr ($set, 0, -2);
-
+
$sql = 'UPDATE feed SET ' . $set . ' WHERE id=?';
$stm = $this->bd->prepare ($sql);
@@ -193,7 +193,7 @@ class FeedDAO extends Model_pdo {
return false;
}
}
-
+
public function updateLastUpdate ($id) {
$sql = 'UPDATE feed SET lastUpdate=? WHERE id=?';
$stm = $this->bd->prepare ($sql);
@@ -209,7 +209,7 @@ class FeedDAO extends Model_pdo {
return false;
}
}
-
+
public function deleteFeed ($id) {
$sql = 'DELETE FROM feed WHERE id=?';
$stm = $this->bd->prepare ($sql);
@@ -222,24 +222,24 @@ class FeedDAO extends Model_pdo {
return false;
}
}
-
+
public function searchById ($id) {
$sql = 'SELECT * FROM feed WHERE id=?';
$stm = $this->bd->prepare ($sql);
-
+
$values = array ($id);
-
+
$stm->execute ($values);
$res = $stm->fetchAll (PDO::FETCH_ASSOC);
$feed = HelperFeed::daoToFeed ($res);
-
- if (isset ($feed[0])) {
- return $feed[0];
+
+ if (isset ($feed[$id])) {
+ return $feed[$id];
} else {
return false;
}
}
-
+
public function listFeeds () {
$sql = 'SELECT * FROM feed ORDER BY name';
$stm = $this->bd->prepare ($sql);
@@ -247,7 +247,7 @@ class FeedDAO extends Model_pdo {
return HelperFeed::daoToFeed ($stm->fetchAll (PDO::FETCH_ASSOC));
}
-
+
public function listFeedsOrderUpdate () {
$sql = 'SELECT * FROM feed ORDER BY lastUpdate';
$stm = $this->bd->prepare ($sql);
@@ -255,18 +255,18 @@ class FeedDAO extends Model_pdo {
return HelperFeed::daoToFeed ($stm->fetchAll (PDO::FETCH_ASSOC));
}
-
+
public function listByCategory ($cat) {
$sql = 'SELECT * FROM feed WHERE category=? ORDER BY name';
$stm = $this->bd->prepare ($sql);
-
+
$values = array ($cat);
-
+
$stm->execute ($values);
return HelperFeed::daoToFeed ($stm->fetchAll (PDO::FETCH_ASSOC));
}
-
+
public function count () {
$sql = 'SELECT COUNT(*) AS count FROM feed';
$stm = $this->bd->prepare ($sql);
@@ -275,7 +275,7 @@ class FeedDAO extends Model_pdo {
return $res[0]['count'];
}
-
+
public function countEntries ($id) {
$sql = 'SELECT COUNT(*) AS count FROM entry WHERE id_feed=?';
$stm = $this->bd->prepare ($sql);
@@ -296,6 +296,10 @@ class HelperFeed {
}
foreach ($listDAO as $key => $dao) {
+ if (isset ($dao['id'])) {
+ $key = $dao['id'];
+ }
+
$list[$key] = new Feed ($dao['url']);
$list[$key]->_category ($dao['category']);
$list[$key]->_name ($dao['name']);
diff --git a/app/views/configure/feed.phtml b/app/views/configure/feed.phtml
index 0acec1872..1b8d77595 100644
--- a/app/views/configure/feed.phtml
+++ b/app/views/configure/feed.phtml
@@ -1,9 +1,15 @@
<div class="table">
- <?php $this->partial ('configure_aside'); ?>
+ <?php /* $this->partial ('configure_aside'); */ ?>
<div class="aside">
<ul>
<li><h2>Vox flux RSS</h2></li>
+ <?php if (!login_is_conf ($this->conf) || is_logged ()) { ?>
+ <li><form id="add_rss" method="post" action="<?php echo Url::display (array ('c' => 'feed', 'a' => 'add')); ?>">
+ <input type="url" name="url_rss" placeholder="Ajouter un flux RSS" />
+ <input type="submit" value="+" />
+ </form></li>
+ <?php } ?>
<?php if (!empty ($this->feeds)) { ?>
<?php foreach ($this->feeds as $feed) { ?>
<li <?php echo ($this->flux && $this->flux->id () == $feed->id ()) ? 'class="active"' : ''; ?>>
diff --git a/app/views/index/index.phtml b/app/views/index/index.phtml
index 429792b71..127a09ddd 100644
--- a/app/views/index/index.phtml
+++ b/app/views/index/index.phtml
@@ -1,8 +1,6 @@
<?php $items = $this->entryPaginator->items (true); ?>
-
-<?php if (!empty ($items)) { ?>
<div id="top">
- <a class="btn" href="<?php echo Url::display (array ('c' => 'feed', 'a' => 'actualize')); ?>"><i class="refresh"></i></a>
+ <a class="btn" href="<?php echo Url::display (array ('c' => 'feed', 'a' => 'actualize')); ?>"><i class="icon refresh"></i></a>
<?php if (!login_is_conf ($this->conf) || is_logged ()) { ?>
<a class="read_all btn" href="<?php echo Url::display (array ('c' => 'entry', 'a' => 'read', 'params' => array ('is_read' => 1))); ?>">Tout marquer comme lu</a><?php } ?><!--
@@ -13,6 +11,8 @@
<?php } ?>
</div>
+<?php if (!empty ($items)) { ?>
+
<div id="stream">
<?php foreach ($items as $item) { ?>
<div class="post flux<?php echo !$item->isRead () ? ' not_read' : ''; ?><?php echo $item->isFavorite () ? ' favorite' : ''; ?>" id="flux_<?php echo $item->id (); ?>">