. * */ namespace OCA\News\Db; use \OCA\AppFramework\Core\API; use \OCA\AppFramework\Db\Mapper; class FeedMapper extends Mapper implements IMapper { public function __construct(API $api) { parent::__construct($api, 'news_feeds'); } public function find($id, $userId){ $sql = 'SELECT * FROM `*dbprefix*news_feeds` ' . 'WHERE `id` = ? ' . 'AND `user_id` = ?'; $row = $this->findQuery($sql, array($id, $userId)); $feed = new Feed(); $feed->fromRow($row); return $feed; } private function findAllRows($sql, $params=array()){ $result = $this->execute($sql, $params); $feeds = array(); while($row = $result->fetchRow()){ $feed = new Feed(); $feed->fromRow($row); array_push($feeds, $feed); } return $feeds; } public function findAllFromUser($userId){ $sql = 'SELECT `feeds`.*, COUNT(`items`.`id`) AS `unread_count` ' . 'FROM `*dbprefix*news_feeds` `feeds` ' . 'LEFT OUTER JOIN `*dbprefix*news_items` `items` ' . 'ON `feeds`.`id` = `items`.`feed_id` ' . 'WHERE (`items`.`status` & ?) > 0 ' . 'AND `feeds`.`user_id` = ? ' . 'GROUP BY `items`.`feed_id`'; $params = array($userId); return $this->findAllRows($sql, $params); } public function findAll(){ $sql = 'SELECT * FROM `*dbprefix*news_feeds`'; return $this->findAllRows($sql); } public function getStarredCount($userId){ $sql = 'SELECT COUNT(*) AS size FROM `*dbprefix*news_feeds` ' . 'AND `user_id` = ? ' . 'AND ((`status` & ?) > 0)'; $params = array($userId, StatusFlag::STARRED); $result = $this->execute($sql, $params)->fetchRow(); return $result['size']; } }