diff options
Diffstat (limited to 'app/Model')
-rw-r--r-- | app/Model/TaskFilter.php | 80 | ||||
-rw-r--r-- | app/Model/TaskFinder.php | 3 | ||||
-rw-r--r-- | app/Model/User.php | 8 |
3 files changed, 89 insertions, 2 deletions
diff --git a/app/Model/TaskFilter.php b/app/Model/TaskFilter.php index 377ec3c6..0dbadbf8 100644 --- a/app/Model/TaskFilter.php +++ b/app/Model/TaskFilter.php @@ -71,6 +71,9 @@ class TaskFilter extends Base case 'T_REFERENCE': $this->filterByReference($value); break; + case 'T_SWIMLANE': + $this->filterBySwimlaneName($value); + break; } } @@ -101,6 +104,25 @@ class TaskFilter extends Base } /** + * Create a new subtask query + * + * @access public + * @return \PicoDb\Table + */ + public function createSubtaskQuery() + { + return $this->db->table(Subtask::TABLE) + ->columns( + Subtask::TABLE.'.user_id', + Subtask::TABLE.'.task_id', + User::TABLE.'.name', + User::TABLE.'.username' + ) + ->join(User::TABLE, 'id', 'user_id', Subtask::TABLE) + ->neq(Subtask::TABLE.'.status', Subtask::STATUS_DONE); + } + + /** * Clone the filter * * @access public @@ -247,6 +269,30 @@ class TaskFilter extends Base } /** + * Filter by swimlane name + * + * @access public + * @param array $values List of swimlane name + * @return TaskFilter + */ + public function filterBySwimlaneName(array $values) + { + $this->query->beginOr(); + + foreach ($values as $swimlane) { + if ($swimlane === 'default') { + $this->query->eq(Task::TABLE.'.swimlane_id', 0); + } + else { + $this->query->ilike(Swimlane::TABLE.'.name', $swimlane); + $this->query->addCondition(Task::TABLE.'.swimlane_id=0 AND '.Project::TABLE.'.default_swimlane '.$this->db->getDriver()->getOperator('ILIKE')." '$swimlane'"); + } + } + + $this->query->closeOr(); + } + + /** * Filter by category id * * @access public @@ -313,7 +359,6 @@ class TaskFilter extends Base $this->query->beginOr(); foreach ($values as $assignee) { - switch ($assignee) { case 'me': $this->query->eq(Task::TABLE.'.owner_id', $this->userSession->getId()); @@ -327,7 +372,40 @@ class TaskFilter extends Base } } + $this->filterBySubtaskAssignee($values); + $this->query->closeOr(); + + return $this; + } + + /** + * Filter by subtask assignee names + * + * @access public + * @param array $values List of assignees + * @return TaskFilter + */ + public function filterBySubtaskAssignee(array $values) + { + $subtaskQuery = $this->createSubtaskQuery(); + $subtaskQuery->beginOr(); + + foreach ($values as $assignee) { + if ($assignee === 'me') { + $subtaskQuery->eq(Subtask::TABLE.'.user_id', $this->userSession->getId()); + } + else { + $subtaskQuery->ilike(User::TABLE.'.username', '%'.$assignee.'%'); + $subtaskQuery->ilike(User::TABLE.'.name', '%'.$assignee.'%'); + } + } + + $subtaskQuery->closeOr(); + + $this->query->in(Task::TABLE.'.id', $subtaskQuery->findAllByColumn('task_id')); + + return $this; } /** diff --git a/app/Model/TaskFinder.php b/app/Model/TaskFinder.php index 2b0453a5..47a67a35 100644 --- a/app/Model/TaskFinder.php +++ b/app/Model/TaskFinder.php @@ -88,11 +88,14 @@ class TaskFinder extends Base Category::TABLE.'.name AS category_name', Category::TABLE.'.description AS category_description', Board::TABLE.'.title AS column_name', + Swimlane::TABLE.'.name AS swimlane_name', + Project::TABLE.'.default_swimlane', Project::TABLE.'.name AS project_name' ) ->join(User::TABLE, 'id', 'owner_id', Task::TABLE) ->join(Category::TABLE, 'id', 'category_id', Task::TABLE) ->join(Board::TABLE, 'id', 'column_id', Task::TABLE) + ->join(Swimlane::TABLE, 'id', 'swimlane_id', Task::TABLE) ->join(Project::TABLE, 'id', 'project_id', Task::TABLE); } diff --git a/app/Model/User.php b/app/Model/User.php index 36b7194c..b6804abc 100644 --- a/app/Model/User.php +++ b/app/Model/User.php @@ -377,6 +377,7 @@ class User extends Base new Validators\Unique('username', t('The username must be unique'), $this->db->getConnection(), self::TABLE, 'id'), new Validators\Email('email', t('Email address invalid')), new Validators\Integer('is_admin', t('This value must be an integer')), + new Validators\Integer('is_ldap_user', t('This value must be an integer')), ); } @@ -409,7 +410,12 @@ class User extends Base new Validators\Required('username', t('The username is required')), ); - $v = new Validator($values, array_merge($rules, $this->commonValidationRules(), $this->commonPasswordValidationRules())); + if (isset($values['is_ldap_user']) && $values['is_ldap_user'] == 1) { + $v = new Validator($values, array_merge($rules, $this->commonValidationRules())); + } + else { + $v = new Validator($values, array_merge($rules, $this->commonValidationRules(), $this->commonPasswordValidationRules())); + } return array( $v->execute(), |