| <?php |
|
|
| namespace Kanboard\Filter; |
|
|
| use Kanboard\Core\Filter\FilterInterface; |
| use Kanboard\Model\SubtaskModel; |
| use Kanboard\Model\TaskModel; |
| use Kanboard\Model\UserModel; |
| use PicoDb\Database; |
| use PicoDb\Table; |
|
|
| |
| |
| |
| |
| |
| |
| class TaskSubtaskAssigneeFilter extends BaseFilter implements FilterInterface |
| { |
| |
| |
| |
| |
| |
| |
| private $db; |
|
|
| |
| |
| |
| |
| |
| |
| private $currentUserId = 0; |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function setCurrentUserId($userId) |
| { |
| $this->currentUserId = $userId; |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function setDatabase(Database $db) |
| { |
| $this->db = $db; |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function getAttributes() |
| { |
| return array('subtask:assignee'); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function apply() |
| { |
| $this->query->inSubquery(TaskModel::TABLE.'.id', $this->getSubQuery()); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| protected function getSubQuery() |
| { |
| $subquery = $this->db->table(SubtaskModel::TABLE) |
| ->columns(SubtaskModel::TABLE.'.task_id') |
| ->join(UserModel::TABLE, 'id', 'user_id', SubtaskModel::TABLE) |
| ->neq(SubtaskModel::TABLE.'.status', SubtaskModel::STATUS_DONE); |
|
|
| return $this->applySubQueryFilter($subquery); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| protected function applySubQueryFilter(Table $subquery) |
| { |
| if (is_int($this->value) || ctype_digit((string) $this->value)) { |
| $subquery->eq(SubtaskModel::TABLE.'.user_id', $this->value); |
| } else { |
| switch ($this->value) { |
| case 'me': |
| $subquery->eq(SubtaskModel::TABLE.'.user_id', $this->currentUserId); |
| break; |
| case 'nobody': |
| $subquery->eq(SubtaskModel::TABLE.'.user_id', 0); |
| break; |
| case 'anybody': |
| $subquery->gt(SubtaskModel::TABLE.'.user_id', 0); |
| break; |
| default: |
| $subquery->beginOr(); |
| $subquery->ilike(UserModel::TABLE.'.username', $this->value.'%'); |
| $subquery->ilike(UserModel::TABLE.'.name', '%'.$this->value.'%'); |
| $subquery->closeOr(); |
| } |
| } |
|
|
| return $subquery; |
| } |
| } |
|
|