Add filter by task link

This commit is contained in:
Olivier Maridat
2015-11-26 15:33:44 +01:00
parent e582d4047b
commit f837e70a2d
5 changed files with 136 additions and 0 deletions

View File

@@ -30,6 +30,7 @@ class TaskFilter extends Base
'T_COLUMN' => 'filterByColumnName',
'T_REFERENCE' => 'filterByReference',
'T_SWIMLANE' => 'filterBySwimlaneName',
'T_LINK' => 'filterByLinkName',
);
/**
@@ -107,6 +108,22 @@ class TaskFilter extends Base
->neq(Subtask::TABLE.'.status', Subtask::STATUS_DONE);
}
/**
* Create a new link query
*
* @access public
* @return \PicoDb\Table
*/
public function createLinkQuery()
{
return $this->db->table(TaskLink::TABLE)
->columns(
TaskLink::TABLE.'.task_id',
Link::TABLE.'.label'
)
->join(Link::TABLE, 'id', 'link_id', TaskLink::TABLE);
}
/**
* Clone the filter
*
@@ -506,6 +523,30 @@ class TaskFilter extends Base
return $this;
}
/**
* Filter by link
*
* @access public
* @param array $values List of links
* @return TaskFilter
*/
public function filterByLinkName(array $values)
{
$this->query->beginOr();
$link_query = $this->createLinkQuery()->in(Link::TABLE.'.label', $values);
$matching_task_ids = $link_query->findAllByColumn('task_id');
if (empty($matching_task_ids)) {
$this->query->eq(Task::TABLE.'.id', 0);
} else {
$this->query->in(Task::TABLE.'.id', $matching_task_ids);
}
$this->query->closeOr();
return $this;
}
/**
* Filter by due date
*