context = DatabaseConnection::i()->getContext(); $this->posts = $this->context->table("posts"); } private function toPost(?ActiveRow $ar): ?Post { return is_null($ar) ? NULL : new Post($ar); } function get(int $id): ?Post { return $this->toPost($this->posts->get($id)); } function getPostsFromUsersWall(int $user, int $page = 1, ?int $perPage = NULL): \Traversable { $sel = $this->posts->where(["wall" => $user, "deleted" => 0])->order("created DESC")->page($page, $perPage ?? OPENVK_DEFAULT_PER_PAGE); foreach($sel as $post) yield new Post($post); } function getPostsByHashtag(string $hashtag, int $page = 1, ?int $perPage = NULL): \Traversable { $hashtag = "#$hashtag"; $sel = $this->posts ->where("content LIKE ?", "%$hashtag%") ->where("deleted", 0) ->order("created DESC") ->page($page, $perPage ?? OPENVK_DEFAULT_PER_PAGE); foreach($sel as $post) yield new Post($post); } function getPostCountByHashtag(string $hashtag): int { $hashtag = "#$hashtag"; $sel = $this->posts ->where("content LIKE ?", "%$hashtag%") ->where("deleted", 0); return sizeof($sel); } function getPostById(int $wall, int $post): ?Post { $post = $this->posts->where(['wall' => $wall, 'virtual_id' => $post])->fetch(); if(!is_null($post)) return new Post($post); else return null; } function getPostCountOnUserWall(int $user): int { return sizeof($this->posts->where(["wall" => $user, "deleted" => 0])); } }