diff options
author | Olivier Maridat <olivier.maridat@trialog.com> | 2015-11-26 15:33:44 +0100 |
---|---|---|
committer | Olivier Maridat <olivier.maridat@trialog.com> | 2015-11-26 15:33:44 +0100 |
commit | f837e70a2d74eb37c4c5de7e4f54c8bf8ec78db7 (patch) | |
tree | c146511e70537f7224835931ef1d3b0b2f516d3e /app | |
parent | e582d4047b061f0c17e6366fed2bf1cabd624c10 (diff) |
Add filter by task link
Diffstat (limited to 'app')
-rw-r--r-- | app/Core/Lexer.php | 2 | ||||
-rw-r--r-- | app/Model/TaskFilter.php | 41 |
2 files changed, 43 insertions, 0 deletions
diff --git a/app/Core/Lexer.php b/app/Core/Lexer.php index ca2ef895..df2d90ae 100644 --- a/app/Core/Lexer.php +++ b/app/Core/Lexer.php @@ -39,6 +39,7 @@ class Lexer "/^(swimlane:)/" => 'T_SWIMLANE', "/^(ref:)/" => 'T_REFERENCE', "/^(reference:)/" => 'T_REFERENCE', + "/^(link:)/" => 'T_LINK', "/^(\s+)/" => 'T_WHITESPACE', '/^([<=>]{0,2}[0-9]{4}-[0-9]{2}-[0-9]{2})/' => 'T_DATE', '/^(yesterday|tomorrow|today)/' => 'T_DATE', @@ -118,6 +119,7 @@ class Lexer case 'T_COLUMN': case 'T_PROJECT': case 'T_SWIMLANE': + case 'T_LINK': $next = next($tokens); if ($next !== false && $next['token'] === 'T_STRING') { diff --git a/app/Model/TaskFilter.php b/app/Model/TaskFilter.php index 137a7a8e..7ceb4a97 100644 --- a/app/Model/TaskFilter.php +++ b/app/Model/TaskFilter.php @@ -30,6 +30,7 @@ class TaskFilter extends Base 'T_COLUMN' => 'filterByColumnName', 'T_REFERENCE' => 'filterByReference', 'T_SWIMLANE' => 'filterBySwimlaneName', + 'T_LINK' => 'filterByLinkName', ); /** @@ -108,6 +109,22 @@ class TaskFilter extends Base } /** + * 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 * * @access public @@ -507,6 +524,30 @@ class TaskFilter extends Base } /** + * 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 * * @access public |