Преглед изворни кода

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->feed = $feedDAO->searchById($id);
 		$this->view->days = $statsDAO->getDays();
 		$this->view->days = $statsDAO->getDays();
 		$this->view->months = $statsDAO->getMonths();
 		$this->view->months = $statsDAO->getMonths();
+		$this->view->repartition = $statsDAO->calculateEntryRepartitionPerFeed($id);
 		$this->view->repartitionHour = $statsDAO->calculateEntryRepartitionPerFeedPerHour($id);
 		$this->view->repartitionHour = $statsDAO->calculateEntryRepartitionPerFeedPerHour($id);
 		$this->view->averageHour = $statsDAO->calculateEntryAveragePerFeedPerHour($id);
 		$this->view->averageHour = $statsDAO->calculateEntryAveragePerFeedPerHour($id);
 		$this->view->repartitionDayOfWeek = $statsDAO->calculateEntryRepartitionPerFeedPerDayOfWeek($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.
 	 * 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:
 	 * The repartition includes:
 	 *   - total entries
 	 *   - total entries
 	 *   - read entries
 	 *   - read entries
 	 *   - unread entries
 	 *   - unread entries
 	 *   - favorite 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
 		$sql = <<<SQL
 SELECT COUNT(1) AS `total`,
 SELECT COUNT(1) AS `total`,
 COUNT(1) - SUM(e.is_read) AS `unread`,
 COUNT(1) - SUM(e.is_read) AS `unread`,
@@ -26,27 +44,13 @@ SUM(e.is_favorite) AS `favorite`
 FROM {$this->prefix}entry AS e
 FROM {$this->prefix}entry AS e
 , {$this->prefix}feed AS f
 , {$this->prefix}feed AS f
 WHERE e.id_feed = f.id
 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;
 SQL;
 		$stm = $this->bd->prepare($sql);
 		$stm = $this->bd->prepare($sql);
 		$stm->execute();
 		$stm->execute();
 		$res = $stm->fetchAll(PDO::FETCH_ASSOC);
 		$res = $stm->fetchAll(PDO::FETCH_ASSOC);
-		$repartition['all_feeds'] = $res[0];
 
 
-		return $repartition;
+		return $res[0];
 	}
 	}
 
 
 	/**
 	/**
@@ -179,7 +183,7 @@ SQL;
 	 * @return integer
 	 * @return integer
 	 */
 	 */
 	public function calculateEntryAveragePerFeedPerHour($feed = null) {
 	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>
 		</a>
 	<?php }?>
 	<?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">
 	<div class="stat">
 		<h2><?php echo _t('stats_entry_per_hour', $this->averageHour); ?></h2>
 		<h2><?php echo _t('stats_entry_per_hour', $this->averageHour); ?></h2>
 		<div id="statsEntryPerHour" style="height: 300px"></div>
 		<div id="statsEntryPerHour" style="height: 300px"></div>