|
|
|
@ -441,54 +441,46 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo { |
|
|
|
|
$where .= 'AND e1.id >= ' . $date_min . '000000 '; |
|
|
|
|
} |
|
|
|
|
$search = ''; |
|
|
|
|
if ($filter !== '') { |
|
|
|
|
require_once(LIB_PATH . '/lib_date.php'); |
|
|
|
|
$filter = trim($filter); |
|
|
|
|
$filter = addcslashes($filter, '\\%_'); |
|
|
|
|
$terms = array_unique(explode(' ', $filter)); |
|
|
|
|
//sort($terms); //Put #tags first //TODO: Put the cheapest filters first |
|
|
|
|
foreach ($terms as $word) { |
|
|
|
|
$word = trim($word); |
|
|
|
|
if (stripos($word, 'intitle:') === 0) { |
|
|
|
|
$word = substr($word, strlen('intitle:')); |
|
|
|
|
$search .= 'AND e1.title LIKE ? '; |
|
|
|
|
$values[] = '%' . $word .'%'; |
|
|
|
|
} elseif (stripos($word, 'inurl:') === 0) { |
|
|
|
|
$word = substr($word, strlen('inurl:')); |
|
|
|
|
$search .= 'AND CONCAT(e1.link, e1.guid) LIKE ? '; |
|
|
|
|
$values[] = '%' . $word .'%'; |
|
|
|
|
} elseif (stripos($word, 'author:') === 0) { |
|
|
|
|
$word = substr($word, strlen('author:')); |
|
|
|
|
$search .= 'AND e1.author LIKE ? '; |
|
|
|
|
$values[] = '%' . $word .'%'; |
|
|
|
|
} elseif (stripos($word, 'date:') === 0) { |
|
|
|
|
$word = substr($word, strlen('date:')); |
|
|
|
|
list($minDate, $maxDate) = parseDateInterval($word); |
|
|
|
|
if ($minDate) { |
|
|
|
|
$search .= 'AND e1.id >= ' . $minDate . '000000 '; |
|
|
|
|
} |
|
|
|
|
if ($maxDate) { |
|
|
|
|
$search .= 'AND e1.id <= ' . $maxDate . '000000 '; |
|
|
|
|
} |
|
|
|
|
} elseif (stripos($word, 'pubdate:') === 0) { |
|
|
|
|
$word = substr($word, strlen('pubdate:')); |
|
|
|
|
list($minDate, $maxDate) = parseDateInterval($word); |
|
|
|
|
if ($minDate) { |
|
|
|
|
$search .= 'AND e1.date >= ' . $minDate . ' '; |
|
|
|
|
} |
|
|
|
|
if ($maxDate) { |
|
|
|
|
$search .= 'AND e1.date <= ' . $maxDate . ' '; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if ($word[0] === '#' && isset($word[1])) { |
|
|
|
|
$search .= 'AND e1.tags LIKE ? '; |
|
|
|
|
$values[] = '%' . $word .'%'; |
|
|
|
|
} else { |
|
|
|
|
$search .= 'AND ' . $this->sqlconcat('e1.title', $this->isCompressed() ? 'UNCOMPRESS(content_bin)' : 'content') . ' LIKE ? '; |
|
|
|
|
$values[] = '%' . $word .'%'; |
|
|
|
|
} |
|
|
|
|
if ($filter !== null) { |
|
|
|
|
if ($filter->getIntitle()) { |
|
|
|
|
$search .= 'AND e1.title LIKE ? '; |
|
|
|
|
$values[] = "%{$filter->getIntitle()}%"; |
|
|
|
|
} |
|
|
|
|
if ($filter->getInurl()) { |
|
|
|
|
$search .= 'AND CONCAT(e1.link, e1.guid) LIKE ? '; |
|
|
|
|
$values[] = "%{$filter->getInurl()}%"; |
|
|
|
|
} |
|
|
|
|
if ($filter->getAuthor()) { |
|
|
|
|
$search .= 'AND e1.author LIKE ? '; |
|
|
|
|
$values[] = "%{$filter->getAuthor()}%"; |
|
|
|
|
} |
|
|
|
|
if ($filter->getMinDate()) { |
|
|
|
|
$search .= 'AND e1.id >= ? '; |
|
|
|
|
$values[] = "{$filter->getMinDate()}000000"; |
|
|
|
|
} |
|
|
|
|
if ($filter->getMaxDate()) { |
|
|
|
|
$search .= 'AND e1.id <= ?'; |
|
|
|
|
$values[] = "{$filter->getMaxDate()}000000"; |
|
|
|
|
} |
|
|
|
|
if ($filter->getMinPubdate()) { |
|
|
|
|
$search .= 'AND e1.date >= ? '; |
|
|
|
|
$values[] = $filter->getMinPubdate(); |
|
|
|
|
} |
|
|
|
|
if ($filter->getMaxPubdate()) { |
|
|
|
|
$search .= 'AND e1.date <= ? '; |
|
|
|
|
$values[] = $filter->getMaxPubdate(); |
|
|
|
|
} |
|
|
|
|
if ($filter->getTags()) { |
|
|
|
|
$tags = $filter->getTags(); |
|
|
|
|
foreach ($tags as $tag) { |
|
|
|
|
$search .= 'AND e1.tags LIKE ? '; |
|
|
|
|
$values[] = "%{$tag}%"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if ($filter->getSearch()) { |
|
|
|
|
$search .= 'AND ' . $this->sqlconcat('e1.title', $this->isCompressed() ? 'UNCOMPRESS(content_bin)' : 'content') . ' LIKE ? '; |
|
|
|
|
$values[] = "%{$filter->getSearch()}%"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return array($values, |
|
|
|
|