category_dao = $category_dao; $this->feed_dao = $feed_dao; if (isset($query['get'])) { $this->parseGet($query['get']); } if (isset($query['name'])) { $this->name = $query['name']; } if (isset($query['order'])) { $this->order = $query['order']; } if (!isset($query['search'])) { $query['search'] = ''; } // linked to deeply with the search object, need to use dependency injection $this->search = new FreshRSS_BooleanSearch($query['search']); if (isset($query['state'])) { $this->state = $query['state']; } if (isset($query['url'])) { $this->url = $query['url']; } } /** * Convert the current object to an array. * * @return array */ public function toArray() { return array_filter(array( 'get' => $this->get, 'name' => $this->name, 'order' => $this->order, 'search' => $this->search->__toString(), 'state' => $this->state, 'url' => $this->url, )); } /** * Parse the get parameter in the query string to extract its name and * type * * @param string $get */ private function parseGet($get) { $this->get = $get; if (preg_match('/(?P[acfs])(_(?P\d+))?/', $get, $matches)) { switch ($matches['type']) { case 'a': $this->parseAll(); break; case 'c': $this->parseCategory($matches['id']); break; case 'f': $this->parseFeed($matches['id']); break; case 's': $this->parseFavorite(); break; } } } /** * Parse the query string when it is an "all" query */ private function parseAll() { $this->get_name = 'all'; $this->get_type = 'all'; } /** * Parse the query string when it is a "category" query * * @param integer $id * @throws FreshRSS_DAO_Exception */ private function parseCategory($id) { if (is_null($this->category_dao)) { throw new FreshRSS_DAO_Exception('Category DAO is not loaded in UserQuery'); } $category = $this->category_dao->searchById($id); if ($category) { $this->get_name = $category->name(); } else { $this->deprecated = true; } $this->get_type = 'category'; } /** * Parse the query string when it is a "feed" query * * @param integer $id * @throws FreshRSS_DAO_Exception */ private function parseFeed($id) { if (is_null($this->feed_dao)) { throw new FreshRSS_DAO_Exception('Feed DAO is not loaded in UserQuery'); } $feed = $this->feed_dao->searchById($id); if ($feed) { $this->get_name = $feed->name(); } else { $this->deprecated = true; } $this->get_type = 'feed'; } /** * Parse the query string when it is a "favorite" query */ private function parseFavorite() { $this->get_name = 'favorite'; $this->get_type = 'favorite'; } /** * Check if the current user query is deprecated. * It is deprecated if the category or the feed used in the query are * not existing. * * @return boolean */ public function isDeprecated() { return $this->deprecated; } /** * Check if the user query has parameters. * If the type is 'all', it is considered equal to no parameters * * @return boolean */ public function hasParameters() { if ($this->get_type === 'all') { return false; } if ($this->hasSearch()) { return true; } if ($this->state) { return true; } if ($this->order) { return true; } if ($this->get) { return true; } return false; } /** * Check if there is a search in the search object * * @return boolean */ public function hasSearch() { return $this->search->getRawInput() != ""; } public function getGet() { return $this->get; } public function getGetName() { return $this->get_name; } public function getGetType() { return $this->get_type; } public function getName() { return $this->name; } public function getOrder() { return $this->order; } public function getSearch() { return $this->search; } public function getState() { return $this->state; } public function getUrl() { return $this->url; } }