aboutsummaryrefslogtreecommitdiff
path: root/app/Controllers/statsController.php
diff options
context:
space:
mode:
authorGravatar maTh <math-home@web.de> 2021-10-16 12:00:07 +0200
committerGravatar GitHub <noreply@github.com> 2021-10-16 12:00:07 +0200
commit02641de32ecc6e0e4fd9de030399728080b6ed41 (patch)
treec01ce17b89c8225f51a796e0bef589498e56a14f /app/Controllers/statsController.php
parentebf9c70ebd4356d98fa7c2513aaab48fa14c7c9b (diff)
Stats: replace flotr2 with chart.js (#3858)
* include Chart.js * page: main statistics. Flotr.js replaced with Chart.js * main stats + repartition * Delete: repartition.js + stats.js * delete flotr2 * add libs in README * polish * code polish * fixed amount of week days and months * added manget link for LibreJS * added: @license-end * phpcbf + jshint formatting * delete old code * fix stats * fix Comments * finally I found the issue and fixed its best * fix the month stats * Whitespace fixes * Remove flotr2 * Rename to chart.min.js * Remove console.log Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
Diffstat (limited to 'app/Controllers/statsController.php')
-rw-r--r--app/Controllers/statsController.php82
1 files changed, 58 insertions, 24 deletions
diff --git a/app/Controllers/statsController.php b/app/Controllers/statsController.php
index 3eeb0a8f7..c9a8cdc0c 100644
--- a/app/Controllers/statsController.php
+++ b/app/Controllers/statsController.php
@@ -49,22 +49,43 @@ class FreshRSS_stats_Controller extends Minz_ActionController {
*
* 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
+ * - repartition of read/unread/favorite/not favorite (repartition)
+ * - number of article per day (entryCount)
+ * - number of feed by category (feedByCategory)
+ * - number of article by category (entryByCategory)
+ * - list of most prolific feed (topFeed)
*/
public function indexAction() {
$statsDAO = FreshRSS_Factory::createStatsDAO();
- Minz_View::appendScript(Minz_Url::display('/scripts/flotr2.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/flotr2.min.js')));
+ Minz_View::appendScript(Minz_Url::display('/scripts/vendor/chart.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/vendor/chart.min.js')));
+
$this->view->repartition = $statsDAO->calculateEntryRepartition();
+
$entryCount = $statsDAO->calculateEntryCount();
- $this->view->count = $this->convertToSerie($entryCount);
+ $this->view->entryCount = $entryCount;
$this->view->average = round(array_sum(array_values($entryCount)) / count($entryCount), 2);
- $this->view->feedByCategory = $this->convertToPieSerie($statsDAO->calculateFeedByCategory());
- $this->view->entryByCategory = $this->convertToPieSerie($statsDAO->calculateEntryByCategory());
+
+ $feedByCategory_calculated = $statsDAO->calculateFeedByCategory();
+ for ($i = 0; $i < count($feedByCategory_calculated); $i++) {
+ $feedByCategory['label'][$i] = $feedByCategory_calculated[$i]['label'];
+ $feedByCategory['data'][$i] = $feedByCategory_calculated[$i]['data'];
+ }
+ $this->view->feedByCategory = $feedByCategory;
+
+ $entryByCategory_calculated = $statsDAO->calculateEntryByCategory();
+ for ($i = 0; $i < count($entryByCategory_calculated); $i++) {
+ $entryByCategory['label'][$i] = $entryByCategory_calculated[$i]['label'];
+ $entryByCategory['data'][$i] = $entryByCategory_calculated[$i]['data'];
+ }
+ $this->view->entryByCategory = $entryByCategory;
+
$this->view->topFeed = $statsDAO->calculateTopFeed();
+
+ for ($i = 0; $i < 30; $i++) {
+ $last30DaysLabels[$i] = date('d.m.Y', strtotime((-30 + $i) . ' days'));
+ }
+
+ $this->view->last30DaysLabels = $last30DaysLabels;
}
/**
@@ -153,21 +174,34 @@ class FreshRSS_stats_Controller extends Minz_ActionController {
* for the average.
*/
public function repartitionAction() {
- $statsDAO = FreshRSS_Factory::createStatsDAO();
- $categoryDAO = FreshRSS_Factory::createCategoryDao();
- $feedDAO = FreshRSS_Factory::createFeedDao();
- Minz_View::appendScript(Minz_Url::display('/scripts/flotr2.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/flotr2.min.js')));
+ $statsDAO = FreshRSS_Factory::createStatsDAO();
+ $categoryDAO = FreshRSS_Factory::createCategoryDao();
+ $feedDAO = FreshRSS_Factory::createFeedDao();
+
+ Minz_View::appendScript(Minz_Url::display('/scripts/vendor/chart.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/vendor/chart.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 = $this->convertToSerie($statsDAO->calculateEntryRepartitionPerFeedPerHour($id));
- $this->view->averageHour = $statsDAO->calculateEntryAveragePerFeedPerHour($id);
- $this->view->repartitionDayOfWeek = $this->convertToSerie($statsDAO->calculateEntryRepartitionPerFeedPerDayOfWeek($id));
- $this->view->averageDayOfWeek = $statsDAO->calculateEntryAveragePerFeedPerDayOfWeek($id);
- $this->view->repartitionMonth = $this->convertToSerie($statsDAO->calculateEntryRepartitionPerFeedPerMonth($id));
- $this->view->averageMonth = $statsDAO->calculateEntryAveragePerFeedPerMonth($id);
+
+ $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);
+
+ for ($i = 0; $i < 24; $i++) {
+ $hours24Labels[$i] = $i . ':xx';
+ }
+
+ $this->view->hours24Labels = $hours24Labels;
}
}