currentUserId = $userId; return $this; } /** * Set database object * * @access public * @param Database $db * @return TaskSubtaskAssigneeFilter */ public function setDatabase(Database $db) { $this->db = $db; return $this; } /** * Get search attribute * * @access public * @return string[] */ public function getAttributes() { return array('subtask:assignee'); } /** * Apply filter * * @access public * @return string */ public function apply() { $this->query->inSubquery(TaskModel::TABLE.'.id', $this->getSubQuery()); } /** * Get subquery * * @access protected * @return Table */ 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); } /** * Apply subquery filter * * @access protected * @param Table $subquery * @return Table */ protected function applySubQueryFilter(Table $subquery) { if (is_int($this->value) || ctype_digit($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; } }