You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.5 KiB
64 lines
1.5 KiB
<?php |
|
|
|
class FreshRSS_StatsDAOSQLite extends FreshRSS_StatsDAO { |
|
|
|
/** |
|
* Calculates entry count per day on a 30 days period. |
|
* Returns the result as a JSON string. |
|
* |
|
* @return string |
|
*/ |
|
public function calculateEntryCount() { |
|
$count = $this->initEntryCountArray(); |
|
$period = parent::ENTRY_COUNT_PERIOD; |
|
|
|
// Get stats per day for the last 30 days |
|
$sql = <<<SQL |
|
SELECT round(julianday(e.date, 'unixepoch') - julianday('now')) AS day, |
|
COUNT(1) AS count |
|
FROM {$this->prefix}entry AS e |
|
WHERE strftime('%Y%m%d', e.date, 'unixepoch') |
|
BETWEEN strftime('%Y%m%d', 'now', '-{$period} days') |
|
AND strftime('%Y%m%d', 'now', '-1 day') |
|
GROUP BY day |
|
ORDER BY day ASC |
|
SQL; |
|
$stm = $this->bd->prepare($sql); |
|
$stm->execute(); |
|
$res = $stm->fetchAll(PDO::FETCH_ASSOC); |
|
|
|
foreach ($res as $value) { |
|
$count[(int) $value['day']] = (int) $value['count']; |
|
} |
|
|
|
return $this->convertToSerie($count); |
|
} |
|
|
|
protected function calculateEntryRepartitionPerFeedPerPeriod($period, $feed = null) { |
|
if ($feed) { |
|
$restrict = "WHERE e.id_feed = {$feed}"; |
|
} else { |
|
$restrict = ''; |
|
} |
|
$sql = <<<SQL |
|
SELECT strftime('{$period}', e.date, 'unixepoch') AS period |
|
, COUNT(1) AS count |
|
FROM {$this->prefix}entry AS e |
|
{$restrict} |
|
GROUP BY period |
|
ORDER BY period ASC |
|
SQL; |
|
|
|
$stm = $this->bd->prepare($sql); |
|
$stm->execute(); |
|
$res = $stm->fetchAll(PDO::FETCH_NAMED); |
|
|
|
$repartition = array(); |
|
foreach ($res as $value) { |
|
$repartition[(int) $value['period']] = (int) $value['count']; |
|
} |
|
|
|
return $this->convertToSerie($repartition); |
|
} |
|
|
|
}
|
|
|