From 71ad04cd66531aa29d8859d7115ec47acf8b89c3 Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Sun, 9 Oct 2016 20:35:30 -0400 Subject: Add filter tag:none --- app/Filter/TaskTagFilter.php | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'app/Filter') diff --git a/app/Filter/TaskTagFilter.php b/app/Filter/TaskTagFilter.php index 01b6f625..98be5554 100644 --- a/app/Filter/TaskTagFilter.php +++ b/app/Filter/TaskTagFilter.php @@ -56,12 +56,11 @@ class TaskTagFilter extends BaseFilter implements FilterInterface */ public function apply() { - $task_ids = $this->db - ->table(TagModel::TABLE) - ->ilike(TagModel::TABLE.'.name', $this->value) - ->asc(TagModel::TABLE.'.project_id') - ->join(TaskTagModel::TABLE, 'tag_id', 'id') - ->findAllByColumn(TaskTagModel::TABLE.'.task_id'); + if ($this->value === 'none') { + $task_ids = $this->getTaskIdsWithoutTags(); + } else { + $task_ids = $this->getTaskIdsWithGivenTag(); + } if (empty($task_ids)) { $task_ids = array(-1); @@ -71,4 +70,24 @@ class TaskTagFilter extends BaseFilter implements FilterInterface return $this; } + + protected function getTaskIdsWithoutTags() + { + return $this->db + ->table(TaskModel::TABLE) + ->asc(TaskModel::TABLE . '.project_id') + ->left(TaskTagModel::TABLE, 'tg', 'task_id', TaskModel::TABLE, 'id') + ->isNull('tg.tag_id') + ->findAllByColumn(TaskModel::TABLE . '.id'); + } + + protected function getTaskIdsWithGivenTag() + { + return $this->db + ->table(TagModel::TABLE) + ->ilike(TagModel::TABLE.'.name', $this->value) + ->asc(TagModel::TABLE.'.project_id') + ->join(TaskTagModel::TABLE, 'tag_id', 'id') + ->findAllByColumn(TaskTagModel::TABLE.'.task_id'); + } } -- cgit v1.2.3