aboutsummaryrefslogtreecommitdiff
path: root/app/models/Category.php
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2013-11-12 18:41:31 +0100
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2013-11-12 18:41:31 +0100
commit14342603a05b64294762c45798debe3a66db26eb (patch)
tree39b317aa8e472e0cfa41bb4f96bb66111dcf9d46 /app/models/Category.php
parent58cb842966f437a44f58644439f513b94f9dccac (diff)
Suppression de requêtes de catégorie et de flux
* Suppression de requêtes inutiles en utilisant mieux les données déjà reçues. * Change la signature de `CategoryDAO->listCategories ($prePopulateFeeds = true, $details = false)` pour ne pas charger de détails inutiles pour la vue principale (comme feed.description, feed.url...). * C'est la requête la plus importante. Suite de https://github.com/marienfressinaud/FreshRSS/pull/180
Diffstat (limited to 'app/models/Category.php')
-rwxr-xr-xapp/models/Category.php31
1 files changed, 22 insertions, 9 deletions
diff --git a/app/models/Category.php b/app/models/Category.php
index 419284130..9b36b3bcc 100755
--- a/app/models/Category.php
+++ b/app/models/Category.php
@@ -175,12 +175,13 @@ class CategoryDAO extends Model_pdo {
}
}
- public function listCategories ($prePopulateFeeds = true) {
+ public function listCategories ($prePopulateFeeds = true, $details = false) {
if ($prePopulateFeeds) {
- $sql = 'SELECT c.id AS c_id, c.name AS c_name, c.color AS c_color, '
+ $sql = 'SELECT c.id AS c_id, c.name AS c_name, '
+ . ($details ? 'c.color AS c_color, ' : '')
. 'COUNT(CASE WHEN e.is_read = 0 THEN 1 END) AS nbNotRead, '
. 'COUNT(e.id) AS nbEntries, '
- . 'f.* '
+ . ($details ? 'f.* ' : 'f.id, f.name, f.website, f.priority, f.error ')
. 'FROM ' . $this->prefix . 'category c '
. 'LEFT OUTER JOIN ' . $this->prefix . 'feed f ON f.category = c.id '
. 'LEFT OUTER JOIN ' . $this->prefix . 'entry e ON e.id_feed = f.id '
@@ -270,6 +271,18 @@ class HelperCategory {
return null;
}
+ public static function CountUnreads($categories, $minPriority = 0) {
+ $n = 0;
+ foreach ($categories as $category) {
+ foreach ($category->feeds () as $feed) {
+ if ($feed->priority () >= $minPriority) {
+ $n += $feed->nbNotRead();
+ }
+ }
+ }
+ return $n;
+ }
+
public static function daoToCategoryPrepopulated ($listDAO) {
$list = array ();
@@ -284,11 +297,11 @@ class HelperCategory {
// End of the current category, we add it to the $list
$cat = new Category (
$previousLine['c_name'],
- $previousLine['c_color'],
- HelperFeed::daoToFeed ($feedsDao)
+ isset($previousLine['c_color']) ? $previousLine['c_color'] : '',
+ HelperFeed::daoToFeed ($feedsDao, $previousLine['c_id'])
);
$cat->_id ($previousLine['c_id']);
- $list[] = $cat;
+ $list[$previousLine['c_id']] = $cat;
$feedsDao = array(); //Prepare for next category
}
@@ -301,11 +314,11 @@ class HelperCategory {
if ($previousLine != null) {
$cat = new Category (
$previousLine['c_name'],
- $previousLine['c_color'],
- HelperFeed::daoToFeed ($feedsDao)
+ isset($previousLine['c_color']) ? $previousLine['c_color'] : '',
+ HelperFeed::daoToFeed ($feedsDao, $previousLine['c_id'])
);
$cat->_id ($previousLine['c_id']);
- $list[] = $cat;
+ $list[$previousLine['c_id']] = $cat;
}
return $list;