* Filter links according to parameters.
*
* @param string $type Type of filter (eg. tags, permalink, etc.).
- * @param string $request Filter content.
+ * @param mixed $request Filter content.
* @param bool $casesensitive Optional: Perform case sensitive filter if true.
* @param bool $privateonly Optional: Only returns private links if true.
*
switch($type) {
case self::$FILTER_HASH:
return $this->filterSmallHash($request);
- break;
+ case self::$FILTER_TAG | self::$FILTER_TEXT:
+ if (!empty($request)) {
+ $filtered = $this->links;
+ if (isset($request[0])) {
+ $filtered = $this->filterTags($request[0], $casesensitive, $privateonly);
+ }
+ if (isset($request[1])) {
+ $lf = new LinkFilter($filtered);
+ $filtered = $lf->filterFulltext($request[1], $privateonly);
+ }
+ return $filtered;
+ }
+ return $this->noFilter($privateonly);
case self::$FILTER_TEXT:
return $this->filterFulltext($request, $privateonly);
- break;
case self::$FILTER_TAG:
return $this->filterTags($request, $casesensitive, $privateonly);
- break;
case self::$FILTER_DAY:
return $this->filterDay($request);
- break;
default:
return $this->noFilter($privateonly);
}
* @param string $smallHash permalink hash.
*
* @return array $filtered array containing permalink data.
+ *
+ * @throws LinkNotFoundException if the smallhash doesn't match any link.
*/
private function filterSmallHash($smallHash)
{
return $filtered;
}
}
+
+ if (empty($filtered)) {
+ throw new LinkNotFoundException();
+ }
+
return $filtered;
}
*/
private function filterFulltext($searchterms, $privateonly = false)
{
+ if (empty($searchterms)) {
+ return $this->links;
+ }
+
$filtered = array();
$search = mb_convert_case(html_entity_decode($searchterms), MB_CASE_LOWER, 'UTF-8');
$exactRegex = '/"([^"]+)"/';
*/
public function filterTags($tags, $casesensitive = false, $privateonly = false)
{
+ // Implode if array for clean up.
+ $tags = is_array($tags) ? trim(implode(' ', $tags)) : $tags;
+ if (empty($tags)) {
+ return $this->links;
+ }
+
$searchtags = self::tagsStrToArray($tags, $casesensitive);
$filtered = array();
if (empty($searchtags)) {
$tagsOut = $casesensitive ? $tags : mb_convert_case($tags, MB_CASE_LOWER, 'UTF-8');
$tagsOut = str_replace(',', ' ', $tagsOut);
- return array_filter(explode(' ', trim($tagsOut)), 'strlen');
+ return array_values(array_filter(explode(' ', trim($tagsOut)), 'strlen'));
}
}
+
+class LinkNotFoundException extends Exception
+{
+ protected $message = 'The link you are trying to reach does not exist or has been deleted.';
+}