A free, self-hostable aggregator…
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.
 
 
 
 
 
 

156 lines
3.8 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 'public':
list ($this->entries, $this->next) = $entryDAO->listPublic (
$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;
}
}