| | <?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; |
| | } |
| | } |
| |
|