|
|
|
@ -6,18 +6,36 @@ class FreshRSS_StatsDAO extends Minz_ModelPdo { |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Calculates entry repartition for all feeds and for main stream. |
|
|
|
|
* |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
public function calculateEntryRepartition() { |
|
|
|
|
return array( |
|
|
|
|
'main_stream' => $this->calculateEntryRepartitionPerFeed(null, true), |
|
|
|
|
'all_feeds' => $this->calculateEntryRepartitionPerFeed(null, false), |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Calculates entry repartition for the selection. |
|
|
|
|
* The repartition includes: |
|
|
|
|
* - total entries |
|
|
|
|
* - read entries |
|
|
|
|
* - unread entries |
|
|
|
|
* - favorite entries |
|
|
|
|
* |
|
|
|
|
* @return type |
|
|
|
|
* @param null|integer $feed feed id |
|
|
|
|
* @param boolean $only_main |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
public function calculateEntryRepartition() { |
|
|
|
|
$repartition = array(); |
|
|
|
|
|
|
|
|
|
// Generates the repartition for the main stream of entry |
|
|
|
|
public function calculateEntryRepartitionPerFeed($feed = null, $only_main = false) { |
|
|
|
|
$filter = ''; |
|
|
|
|
if ($only_main) { |
|
|
|
|
$filter .= 'AND f.priority = 10'; |
|
|
|
|
} |
|
|
|
|
if (!is_null($feed)) { |
|
|
|
|
$filter .= "AND e.id_feed = {$feed}"; |
|
|
|
|
} |
|
|
|
|
$sql = <<<SQL |
|
|
|
|
SELECT COUNT(1) AS `total`, |
|
|
|
|
COUNT(1) - SUM(e.is_read) AS `unread`, |
|
|
|
@ -26,27 +44,13 @@ SUM(e.is_favorite) AS `favorite` |
|
|
|
|
FROM {$this->prefix}entry AS e |
|
|
|
|
, {$this->prefix}feed AS f |
|
|
|
|
WHERE e.id_feed = f.id |
|
|
|
|
AND f.priority = 10 |
|
|
|
|
SQL; |
|
|
|
|
$stm = $this->bd->prepare($sql); |
|
|
|
|
$stm->execute(); |
|
|
|
|
$res = $stm->fetchAll(PDO::FETCH_ASSOC); |
|
|
|
|
$repartition['main_stream'] = $res[0]; |
|
|
|
|
|
|
|
|
|
// Generates the repartition for all entries |
|
|
|
|
$sql = <<<SQL |
|
|
|
|
SELECT COUNT(1) AS `total`, |
|
|
|
|
COUNT(1) - SUM(e.is_read) AS `unread`, |
|
|
|
|
SUM(e.is_read) AS `read`, |
|
|
|
|
SUM(e.is_favorite) AS `favorite` |
|
|
|
|
FROM {$this->prefix}entry AS e |
|
|
|
|
{$filter} |
|
|
|
|
SQL; |
|
|
|
|
$stm = $this->bd->prepare($sql); |
|
|
|
|
$stm->execute(); |
|
|
|
|
$res = $stm->fetchAll(PDO::FETCH_ASSOC); |
|
|
|
|
$repartition['all_feeds'] = $res[0]; |
|
|
|
|
|
|
|
|
|
return $repartition; |
|
|
|
|
return $res[0]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -179,7 +183,7 @@ SQL; |
|
|
|
|
* @return integer |
|
|
|
|
*/ |
|
|
|
|
public function calculateEntryAveragePerFeedPerHour($feed = null) { |
|
|
|
|
return $this->calculateEntryAveragePerFeedPerPeriod(1/24, $feed); |
|
|
|
|
return $this->calculateEntryAveragePerFeedPerPeriod(1 / 24, $feed); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|