فهرست منبع

Add more info in article repartition page

I added the same information than on the main stat page (total, read, unread and favorite) on the repartition page. Some refactoring was needed.
Alexis Degrugillier 11 سال پیش
والد
کامیت
38cf7a109e
3فایلهای تغییر یافته به همراه44 افزوده شده و 22 حذف شده
  1. 1 0
      app/Controllers/statsController.php
  2. 26 22
      app/Models/StatsDAO.php
  3. 17 0
      app/views/stats/repartition.phtml

+ 1 - 0
app/Controllers/statsController.php

@@ -117,6 +117,7 @@ class FreshRSS_stats_Controller extends Minz_ActionController {
 		$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);

+ 26 - 22
app/Models/StatsDAO.php

@@ -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);
 	}
 
 	/**

+ 17 - 0
app/views/stats/repartition.phtml

@@ -29,6 +29,23 @@
 		</a>
 	<?php }?>
 
+	<div class="stat">
+	    <table>
+		<tr>
+		    <th><?php echo _t('status_total'); ?></th>
+		    <th><?php echo _t('status_read'); ?></th>
+		    <th><?php echo _t('status_unread'); ?></th>
+		    <th><?php echo _t('status_favorites'); ?></th>
+		</tr>
+		<tr>
+		    <td><?php echo $this->repartition['total']; ?></td>
+		    <td><?php echo $this->repartition['read']; ?></td>
+		    <td><?php echo $this->repartition['unread']; ?></td>
+		    <td><?php echo $this->repartition['favorite']; ?></td>
+		</tr>
+	    </table>
+	</div>
+
 	<div class="stat">
 		<h2><?php echo _t('stats_entry_per_hour', $this->averageHour); ?></h2>
 		<div id="statsEntryPerHour" style="height: 300px"></div>