| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?php
- class FreshRSS_StatsDAOSQLite extends FreshRSS_StatsDAO {
- /**
- * Calculates entry count per day on a 30 days period.
- * Returns the result as a JSON object.
- *
- * @return JSON object
- */
- 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);
- }
- /**
- * Calculates entry average per day on a 30 days period.
- *
- * @return integer
- */
- public function calculateEntryAverage() {
- $period = self::ENTRY_COUNT_PERIOD;
- // Get stats per day for the last 30 days
- $sql = <<<SQL
- SELECT COUNT(1) / {$period} AS average
- 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')
- SQL;
- $stm = $this->bd->prepare($sql);
- $stm->execute();
- $res = $stm->fetch(PDO::FETCH_NAMED);
- return round($res['average'], 2);
- }
- 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);
- }
- }
|