mirror of
https://github.com/FreshRSS/FreshRSS.git
synced 2026-01-01 18:07:50 -05:00
I added the same information than on the main stat page (total, read, unread and favorite) on the repartition page. Some refactoring was needed.
129 lines
4.3 KiB
PHP
129 lines
4.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Controller to handle application statistics.
|
|
*/
|
|
class FreshRSS_stats_Controller extends Minz_ActionController {
|
|
|
|
/**
|
|
* This action is called before every other action in that class. It is
|
|
* the common boiler plate for every action. It is triggered by the
|
|
* underlying framework.
|
|
*/
|
|
public function firstAction() {
|
|
if (!FreshRSS_Auth::hasAccess()) {
|
|
Minz_Error::error(403);
|
|
}
|
|
|
|
Minz_View::prependTitle(_t('stats') . ' · ');
|
|
}
|
|
|
|
/**
|
|
* This action handles the statistic main page.
|
|
*
|
|
* It displays the statistic main page.
|
|
* The values computed to display the page are:
|
|
* - repartition of read/unread/favorite/not favorite
|
|
* - number of article per day
|
|
* - number of feed by category
|
|
* - number of article by category
|
|
* - list of most prolific feed
|
|
*/
|
|
public function indexAction() {
|
|
$statsDAO = FreshRSS_Factory::createStatsDAO();
|
|
Minz_View::appendScript(Minz_Url::display('/scripts/flotr2.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/flotr2.min.js')));
|
|
$this->view->repartition = $statsDAO->calculateEntryRepartition();
|
|
$this->view->count = $statsDAO->calculateEntryCount();
|
|
$this->view->average = $statsDAO->calculateEntryAverage();
|
|
$this->view->feedByCategory = $statsDAO->calculateFeedByCategory();
|
|
$this->view->entryByCategory = $statsDAO->calculateEntryByCategory();
|
|
$this->view->topFeed = $statsDAO->calculateTopFeed();
|
|
}
|
|
|
|
/**
|
|
* This action handles the idle feed statistic page.
|
|
*
|
|
* It displays the list of idle feed for different period. The supported
|
|
* periods are:
|
|
* - last year
|
|
* - last 6 months
|
|
* - last 3 months
|
|
* - last month
|
|
* - last week
|
|
*/
|
|
public function idleAction() {
|
|
$statsDAO = FreshRSS_Factory::createStatsDAO();
|
|
$feeds = $statsDAO->calculateFeedLastDate();
|
|
$idleFeeds = array(
|
|
'last_year' => array(),
|
|
'last_6_month' => array(),
|
|
'last_3_month' => array(),
|
|
'last_month' => array(),
|
|
'last_week' => array(),
|
|
);
|
|
$now = new \DateTime();
|
|
$feedDate = clone $now;
|
|
$lastWeek = clone $now;
|
|
$lastWeek->modify('-1 week');
|
|
$lastMonth = clone $now;
|
|
$lastMonth->modify('-1 month');
|
|
$last3Month = clone $now;
|
|
$last3Month->modify('-3 month');
|
|
$last6Month = clone $now;
|
|
$last6Month->modify('-6 month');
|
|
$lastYear = clone $now;
|
|
$lastYear->modify('-1 year');
|
|
|
|
foreach ($feeds as $feed) {
|
|
$feedDate->setTimestamp($feed['last_date']);
|
|
if ($feedDate >= $lastWeek) {
|
|
continue;
|
|
}
|
|
if ($feedDate < $lastYear) {
|
|
$idleFeeds['last_year'][] = $feed;
|
|
} elseif ($feedDate < $last6Month) {
|
|
$idleFeeds['last_6_month'][] = $feed;
|
|
} elseif ($feedDate < $last3Month) {
|
|
$idleFeeds['last_3_month'][] = $feed;
|
|
} elseif ($feedDate < $lastMonth) {
|
|
$idleFeeds['last_month'][] = $feed;
|
|
} elseif ($feedDate < $lastWeek) {
|
|
$idleFeeds['last_week'][] = $feed;
|
|
}
|
|
}
|
|
|
|
$this->view->idleFeeds = $idleFeeds;
|
|
}
|
|
|
|
/**
|
|
* This action handles the article repartition statistic page.
|
|
*
|
|
* It displays the number of article and the average of article for the
|
|
* following periods:
|
|
* - hour of the day
|
|
* - day of the week
|
|
* - month
|
|
*
|
|
* @todo verify that the metrics used here make some sense. Especially
|
|
* for the average.
|
|
*/
|
|
public function repartitionAction() {
|
|
$statsDAO = FreshRSS_Factory::createStatsDAO();
|
|
$categoryDAO = new FreshRSS_CategoryDAO();
|
|
$feedDAO = FreshRSS_Factory::createFeedDao();
|
|
Minz_View::appendScript(Minz_Url::display('/scripts/flotr2.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/flotr2.min.js')));
|
|
$id = Minz_Request::param('id', null);
|
|
$this->view->categories = $categoryDAO->listCategories();
|
|
$this->view->feed = $feedDAO->searchById($id);
|
|
$this->view->days = $statsDAO->getDays();
|
|
$this->view->months = $statsDAO->getMonths();
|
|
$this->view->repartition = $statsDAO->calculateEntryRepartitionPerFeed($id);
|
|
$this->view->repartitionHour = $statsDAO->calculateEntryRepartitionPerFeedPerHour($id);
|
|
$this->view->averageHour = $statsDAO->calculateEntryAveragePerFeedPerHour($id);
|
|
$this->view->repartitionDayOfWeek = $statsDAO->calculateEntryRepartitionPerFeedPerDayOfWeek($id);
|
|
$this->view->averageDayOfWeek = $statsDAO->calculateEntryAveragePerFeedPerDayOfWeek($id);
|
|
$this->view->repartitionMonth = $statsDAO->calculateEntryRepartitionPerFeedPerMonth($id);
|
|
$this->view->averageMonth = $statsDAO->calculateEntryAveragePerFeedPerMonth($id);
|
|
}
|
|
}
|