Do not show duplicated results when multiple comments match
This commit is contained in:
committed by
fguillot
parent
702379a550
commit
d5f6317608
@@ -5,6 +5,7 @@ namespace Kanboard\Filter;
|
||||
use Kanboard\Core\Filter\FilterInterface;
|
||||
use Kanboard\Model\CommentModel;
|
||||
use Kanboard\Model\TaskModel;
|
||||
use PicoDb\Database;
|
||||
|
||||
/**
|
||||
* Filter tasks by comment
|
||||
@@ -14,6 +15,14 @@ use Kanboard\Model\TaskModel;
|
||||
*/
|
||||
class TaskCommentFilter extends BaseFilter implements FilterInterface
|
||||
{
|
||||
/**
|
||||
* Database object
|
||||
*
|
||||
* @access private
|
||||
* @var Database
|
||||
*/
|
||||
private $db;
|
||||
|
||||
/**
|
||||
* Get search attribute
|
||||
*
|
||||
@@ -25,6 +34,19 @@ class TaskCommentFilter extends BaseFilter implements FilterInterface
|
||||
return array('comment');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set database object
|
||||
*
|
||||
* @access public
|
||||
* @param Database $db
|
||||
* @return $this
|
||||
*/
|
||||
public function setDatabase(Database $db)
|
||||
{
|
||||
$this->db = $db;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply filter
|
||||
*
|
||||
@@ -33,9 +55,28 @@ class TaskCommentFilter extends BaseFilter implements FilterInterface
|
||||
*/
|
||||
public function apply()
|
||||
{
|
||||
$this->query->ilike(CommentModel::TABLE.'.comment', '%'.$this->value.'%');
|
||||
$this->query->join(CommentModel::TABLE, 'task_id', 'id', TaskModel::TABLE);
|
||||
$task_ids = $this->getTaskIdsWithGivenComment();
|
||||
|
||||
if (empty($task_ids)) {
|
||||
$task_ids = array(-1);
|
||||
}
|
||||
|
||||
$this->query->in(TaskModel::TABLE.'.id', $task_ids);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get task ids having this comment
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
protected function getTaskIdsWithGivenComment()
|
||||
{
|
||||
return $this->db
|
||||
->table(CommentModel::TABLE)
|
||||
->ilike(CommentModel::TABLE.'.comment', '%'.$this->value.'%')
|
||||
->findAllByColumn(CommentModel::TABLE.'.task_id');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user