You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
3.6 KiB
148 lines
3.6 KiB
<?php |
|
|
|
class EntriesGetter { |
|
private $type = array ( |
|
'type' => 'all', |
|
'id' => 'all' |
|
); |
|
private $state = 'all'; |
|
private $filter = array ( |
|
'words' => array (), |
|
'tags' => array (), |
|
); |
|
private $order = 'high_to_low'; |
|
private $entries = array (); |
|
|
|
private $nb = 1; |
|
private $first = ''; |
|
private $next = ''; |
|
|
|
public function __construct ($type, $state, $filter, $order, $nb, $first = '') { |
|
$this->_type ($type); |
|
$this->_state ($state); |
|
$this->_filter ($filter); |
|
$this->_order ($order); |
|
$this->nb = $nb; |
|
$this->first = $first; |
|
} |
|
|
|
public function type () { |
|
return $this->type; |
|
} |
|
public function state () { |
|
return $this->state; |
|
} |
|
public function filter () { |
|
return $this->filter; |
|
} |
|
public function order () { |
|
return $this->order; |
|
} |
|
public function entries () { |
|
return $this->entries; |
|
} |
|
|
|
public function _type ($value) { |
|
if (!is_array ($value) || |
|
!isset ($value['type']) || |
|
!isset ($value['id'])) { |
|
throw new EntriesGetterException ('Bad type line ' . __LINE__ . ' in file ' . __FILE__); |
|
} |
|
|
|
$type = $value['type']; |
|
$id = $value['id']; |
|
|
|
if ($type != 'all' && $type != 'favoris' && $type != 'public' && $type != 'c' && $type != 'f') { |
|
throw new EntriesGetterException ('Bad type line ' . __LINE__ . ' in file ' . __FILE__); |
|
} |
|
|
|
if (($type == 'all' || $type == 'favoris' || $type == 'public') && |
|
($type != $id)) { |
|
throw new EntriesGetterException ('Bad type line ' . __LINE__ . ' in file ' . __FILE__); |
|
} |
|
|
|
$this->type = $value; |
|
} |
|
public function _state ($value) { |
|
if ($value != 'all' && $value != 'not_read' && $value != 'read') { |
|
throw new EntriesGetterException ('Bad state line ' . __LINE__ . ' in file ' . __FILE__); |
|
} |
|
|
|
$this->state = $value; |
|
} |
|
public function _filter ($value) { |
|
$value = trim ($value); |
|
$terms = explode (' ', $value); |
|
|
|
foreach ($terms as $word) { |
|
if (!empty ($word) && $word[0] == '#' && isset ($word[1])) { |
|
$tag = substr ($word, 1); |
|
$this->filter['tags'][$tag] = $tag; |
|
} elseif (!empty ($word)) { |
|
$this->filter['words'][$word] = $word; |
|
} |
|
} |
|
} |
|
public function _order ($value) { |
|
if ($value != 'high_to_low' && $value != 'low_to_high') { |
|
throw new EntriesGetterException ('Bad order line ' . __LINE__ . ' in file ' . __FILE__); |
|
} |
|
|
|
$this->order = $value; |
|
} |
|
|
|
public function execute () { |
|
$entryDAO = new EntryDAO (); |
|
|
|
HelperEntry::$nb = $this->nb; //TODO: Update: Now done in SQL |
|
HelperEntry::$first = $this->first; //TODO: Update: Now done in SQL |
|
HelperEntry::$filter = $this->filter; |
|
|
|
$sqlLimit = (empty ($this->filter['words']) && empty ($this->filter['tags'])) ? $this->nb : ''; //Disable SQL LIMIT optimisation during search //TODO: Do better! |
|
|
|
switch ($this->type['type']) { |
|
case 'all': |
|
list ($this->entries, $this->next) = $entryDAO->listEntries ( |
|
$this->state, |
|
$this->order, |
|
$this->first, |
|
$sqlLimit |
|
); |
|
break; |
|
case 'favoris': |
|
list ($this->entries, $this->next) = $entryDAO->listFavorites ( |
|
$this->state, |
|
$this->order, |
|
$this->first, |
|
$sqlLimit |
|
); |
|
break; |
|
case 'c': |
|
list ($this->entries, $this->next) = $entryDAO->listByCategory ( |
|
$this->type['id'], |
|
$this->state, |
|
$this->order, |
|
$this->first, |
|
$sqlLimit |
|
); |
|
break; |
|
case 'f': |
|
list ($this->entries, $this->next) = $entryDAO->listByFeed ( |
|
$this->type['id'], |
|
$this->state, |
|
$this->order, |
|
$this->first, |
|
$sqlLimit |
|
); |
|
break; |
|
default: |
|
throw new EntriesGetterException ('Bad type line ' . __LINE__ . ' in file ' . __FILE__); |
|
} |
|
} |
|
|
|
public function getPaginator () { |
|
$paginator = new RSSPaginator ($this->entries, $this->next); |
|
|
|
return $paginator; |
|
} |
|
}
|
|
|