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 = <<prefix}entry AS e SQL; $stm = $this->bd->prepare($sql); $stm->execute(); $res = $stm->fetchAll(PDO::FETCH_ASSOC); $repartition['all_feeds'] = $res[0]; return $repartition; } /** * Calculates entry count per day on a 30 days period. * Returns the result as a JSON string. * * @return string */ public function calculateEntryCount() { $count = array(); // Generates a list of 30 last day to be sure we always have 30 days. // If we do not do that kind of thing, we'll end up with holes in the // days if the user do not have a lot of feeds. $sql = <<bd->prepare($sql); $stm->execute(); $res = $stm->fetchAll(PDO::FETCH_ASSOC); foreach ($res as $value) { $count[$value['day']] = 0; } // Get stats per day for the last 30 days and applies the result on // the array created with the last query. $sql = <<prefix}entry AS e WHERE FROM_UNIXTIME(e.date, '%Y%m%d') BETWEEN DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -30 DAY), '%Y%m%d') AND DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 DAY), '%Y%m%d') 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[$value['day']] = (int) $value['count']; } return $this->convertToSerie($count); } /** * Calculates feed count per category. * Returns the result as a JSON string. * * @return string */ public function calculateFeedByCategory() { $sql = <<prefix}category AS c, {$this->prefix}feed AS f WHERE c.id = f.category GROUP BY label ORDER BY data DESC SQL; $stm = $this->bd->prepare($sql); $stm->execute(); $res = $stm->fetchAll(PDO::FETCH_ASSOC); return $this->convertToPieSerie($res); } /** * Calculates entry count per category. * Returns the result as a JSON string. * * @return string */ public function calculateEntryByCategory() { $sql = <<prefix}category AS c, {$this->prefix}feed AS f, {$this->prefix}entry AS e WHERE c.id = f.category AND f.id = e.id_feed GROUP BY label ORDER BY data DESC SQL; $stm = $this->bd->prepare($sql); $stm->execute(); $res = $stm->fetchAll(PDO::FETCH_ASSOC); return $this->convertToPieSerie($res); } /** * Calculates the 10 top feeds based on their number of entries * * @return array */ public function calculateTopFeed() { $sql = <<prefix}category AS c, {$this->prefix}feed AS f, {$this->prefix}entry AS e WHERE c.id = f.category AND f.id = e.id_feed GROUP BY id ORDER BY count DESC LIMIT 10 SQL; $stm = $this->bd->prepare($sql); $stm->execute(); return $stm->fetchAll(PDO::FETCH_ASSOC); } /** * Calculates the last publication date for each feed * * @return array */ public function calculateFeedLastDate() { $sql = <<prefix}feed AS f, {$this->prefix}entry AS e WHERE f.id = e.id_feed GROUP BY f.id ORDER BY name SQL; $stm = $this->bd->prepare($sql); $stm->execute(); return $stm->fetchAll(PDO::FETCH_ASSOC); } private function convertToSerie($data) { $serie = array(); foreach ($data as $key => $value) { $serie[] = array($key, $value); } return json_encode($serie); } private function convertToPieSerie($data) { $serie = array(); foreach ($data as $value) { $value['data'] = array(array(0, (int) $value['data'])); $serie[] = $value; } return json_encode($serie); } }