/** * Returns the associated search object * * @return \thebuggenie\core\entities\SavedSearch */ public function getBacklogSearchObject() { if ($this->_search_object === null) { if ($this->usesSavedSearchBacklog()) { $this->_search_object = $this->getBacklogSearch(); } elseif (!$this->_search_object instanceof \thebuggenie\core\entities\SavedSearch) { $this->_search_object = \thebuggenie\core\entities\SavedSearch::getPredefinedSearchObject($this->_autogenerated_search); $this->_search_object->setFilter('issuetype', \thebuggenie\core\entities\SearchFilter::createFilter('issuetype', array('o' => '!=', 'v' => $this->getEpicIssuetypeID()))); $this->_search_object->setFilter('milestone', \thebuggenie\core\entities\SearchFilter::createFilter('milestone', array('o' => '!=', 'v' => null))); } $this->_search_object->setIssuesPerPage(0); $this->_search_object->setOffset(0); $this->_search_object->setSortFields(array('issues.milestone_order' => 'desc')); } return $this->_search_object; }
protected function _setupGenericFilters() { if (!isset($this->_filters['issuetype'])) { $this->_filters['issuetype'] = SearchFilter::createFilter('issuetype', array(), $this); } if (!isset($this->_filters['status'])) { $this->_filters['status'] = SearchFilter::createFilter('status', array(), $this); } if (!isset($this->_filters['category'])) { $this->_filters['category'] = SearchFilter::createFilter('category', array(), $this); } if (!framework\Context::isProjectContext() && !isset($this->_filters['project_id'])) { $this->_filters['project_id'] = SearchFilter::createFilter('project_id', array(), $this); } }
public function getOpenIssuesSearchForFrontpageSummary() { $search_object = new SavedSearch(); $search_object->setAppliesToProject($this); $issue_type_filter = SearchFilter::createFilter('issuetype', array('value' => array_keys($this->getVisibleIssuetypes())), $search_object); $search_object->setFilter('issuetype', $issue_type_filter); $search_object->setGroupby('issuetype'); return $search_object; // $res = tables\Issues::getTable()->getOpenIssuesByProjectIDAndIssueTypes($this->getID(), array_keys($this->getVisibleIssuetypes()), tables\Issues::ISSUE_TYPE); // // $retval = array(); // if (!$merged) // { // foreach ($this->getVisibleIssuetypes() as $issuetype_id => $issuetype) // { // $retval[$issuetype_id] = array('issuetype' => $issuetype, 'issues' => array()); // } // } // if ($res) // { // while ($row = $res->getNextRow()) // { // $issue = new \thebuggenie\core\entities\Issue($row->get(tables\Issues::ID)); // if (!$issue->hasAccess()) continue; // if (!$merged) // { // $retval[$row->get(tables\Issues::ISSUE_TYPE)]['issues'][] = $issue; // } // else // { // $retval[] = $issue; // } // } // } // // return $retval; }
/** * Poller for the planning page * * @Route(url="/boards/:board_id/poll/:mode") * * @param framework\Request $request */ public function runPoll(framework\Request $request) { $this->forward403unless($this->_checkProjectPageAccess('project_planning')); $last_refreshed = $request['last_refreshed']; $board = entities\tables\AgileBoards::getTable()->selectById($request['board_id']); $search_object = $board->getBacklogSearchObject(); if ($search_object instanceof \thebuggenie\core\entities\SavedSearch) { $search_object->setFilter('last_updated', \thebuggenie\core\entities\SearchFilter::createFilter('last_updated', array('o' => \b2db\Criteria::DB_GREATER_THAN_EQUAL, 'v' => $last_refreshed - 2))); } if ($request['mode'] == 'whiteboard') { $milestone_id = $request['milestone_id']; $ids = \thebuggenie\core\entities\tables\Issues::getTable()->getUpdatedIssueIDsByTimestampAndProjectIDAndMilestoneID($last_refreshed - 2, $this->selected_project->getID(), $milestone_id); } else { $ids = \thebuggenie\core\entities\tables\Issues::getTable()->getUpdatedIssueIDsByTimestampAndProjectIDAndIssuetypeID($last_refreshed - 2, $this->selected_project->getID()); $epic_ids = $board->getEpicIssuetypeID() ? \thebuggenie\core\entities\tables\Issues::getTable()->getUpdatedIssueIDsByTimestampAndProjectIDAndIssuetypeID($last_refreshed - 2, $this->selected_project->getID(), $board->getEpicIssuetypeID()) : array(); } $backlog_ids = array(); if ($search_object instanceof \thebuggenie\core\entities\SavedSearch) { foreach ($search_object->getIssues(true) as $backlog_issue) { foreach ($ids as $id_issue) { if ($id_issue['issue_id'] == $backlog_issue->getID()) { continue 2; } } $backlog_ids[] = array('issue_id' => $backlog_issue->getID(), 'last_updated' => $backlog_issue->getLastUpdatedTime()); } } return $this->renderJSON(compact('ids', 'backlog_ids', 'epic_ids', 'milestone_id')); }
public static function findIssuesByText($text, $project = null) { $issue = self::getIssueFromLink($text); if ($issue instanceof \thebuggenie\core\entities\Issue) { return array(array($issue), 1); } $filters = array('text' => SearchFilter::createFilter('text', array('v' => $text, 'o' => '='))); if ($project instanceof \thebuggenie\core\entities\Project) { $filters['project_id'] = SearchFilter::createFilter('project_id', array('v' => $project->getID(), 'o' => '=')); } return self::findIssues($filters); }
protected function _setupSearchObject() { if ($this->_search_object === null) { $this->_search_object = new \thebuggenie\core\entities\SavedSearch(); $this->_search_object->setFilter('project_id', \thebuggenie\core\entities\SearchFilter::createFilter('project_id', array('o' => '=', 'v' => $this->getBoard()->getProject()->getID()))); $this->_search_object->setFilter('milestone', \thebuggenie\core\entities\SearchFilter::createFilter('milestone', array('o' => '=', 'v' => $this->getMilestone()->getID()))); $this->_search_object->setFilter('state', \thebuggenie\core\entities\SearchFilter::createFilter('state', array('o' => '=', 'v' => array(\thebuggenie\core\entities\Issue::STATE_CLOSED, \thebuggenie\core\entities\Issue::STATE_OPEN)))); $this->_search_object->setFilter('issuetype', \thebuggenie\core\entities\SearchFilter::createFilter('issuetype', array('o' => '!=', 'v' => $this->getBoard()->getEpicIssuetypeID()))); if ($this->getBoard()->usesSwimlanes() && $this->getBoard()->getSwimlaneType() == AgileBoard::SWIMLANES_ISSUES) { $values = array(); foreach ($this->getBoard()->getMilestoneSwimlanes($this->getMilestone()) as $swimlane) { if ($swimlane->getIdentifier() == $this->getIdentifier()) { continue; } $values[] = $swimlane->getIdentifierIssue()->getID(); foreach ($swimlane->getIssues() as $issue) { $values[] = $issue->getID(); } } $this->_search_object->setFilter('id', \thebuggenie\core\entities\SearchFilter::createFilter('id', array('o' => '!=', 'v' => $values))); } else { if ($this->getBoard()->usesSwimlanes()) { $values = array(); foreach ($this->_identifiables as $identifiable) { $values[] = $identifiable instanceof \thebuggenie\core\entities\common\Identifiable ? $identifiable->getID() : $identifiable; } $this->_search_object->setFilter($this->getBoard()->getSwimlaneIdentifier(), \thebuggenie\core\entities\SearchFilter::createFilter($this->getBoard()->getSwimlaneIdentifier(), array('o' => '=', 'v' => $values))); } } $this->_search_object->setSortFields(array('issues.milestone_order' => \b2db\Criteria::SORT_ASC)); $this->_search_object->setGroupby(null); } }
public function runFilterGetDynamicChoices(framework\Request $request) { $subproject_ids = explode(',', $request['subprojects']); $existing_ids = $request['existing_ids']; $results = array(); $projects = $request['project_id'] != '' ? entities\Project::getAllByIDs(explode(',', $request['project_id'])) : entities\Project::getAll(); $items = array('build' => array(), 'edition' => array(), 'component' => array(), 'milestone' => array()); foreach ($projects as $project) { foreach ($project->getBuilds() as $build) { $items['build'][$build->getID()] = $build; } foreach ($project->getEditions() as $edition) { $items['edition'][$edition->getID()] = $edition; } foreach ($project->getComponents() as $component) { $items['component'][$component->getID()] = $component; } foreach ($project->getMilestones() as $milestone) { $items['milestone'][$milestone->getID()] = $milestone; } } $filters = array(); $filters['build'] = entities\SearchFilter::createFilter('build'); $filters['edition'] = entities\SearchFilter::createFilter('edition'); $filters['component'] = entities\SearchFilter::createFilter('component'); $filters['milestone'] = entities\SearchFilter::createFilter('milestone'); if (isset($existing_ids['build'])) { foreach (tables\Builds::getTable()->getByIDs($existing_ids['build']) as $build) { $items['build'][$build->getID()] = $build; } $filters['build']->setValue(join(',', $existing_ids['build'])); } if (isset($existing_ids['edition'])) { foreach (tables\Editions::getTable()->getByIDs($existing_ids['edition']) as $edition) { $items['edition'][$edition->getID()] = $edition; } $filters['edition']->setValue(join(',', $existing_ids['edition'])); } if (isset($existing_ids['component'])) { foreach (tables\Components::getTable()->getByIDs($existing_ids['component']) as $component) { $items['component'][$component->getID()] = $component; } $filters['component']->setValue(join(',', $existing_ids['component'])); } if (isset($existing_ids['milestone'])) { foreach (tables\Milestones::getTable()->getByIDs($existing_ids['milestone']) as $milestone) { $items['milestone'][$milestone->getID()] = $milestone; } $filters['milestone']->setValue(join(',', $existing_ids['milestone'])); } foreach (array('build', 'edition', 'component', 'milestone') as $k) { $results[$k] = $this->getComponentHTML('search/interactivefilterdynamicchoicelist', array('filter' => $filters[$k], 'items' => $items[$k])); } return $this->renderJSON(compact('results')); }
} ?> <?php if (!$search_object->hasFilter($customtype->getKey())) { include_component('search/interactivefilter', array('filter' => \thebuggenie\core\entities\SearchFilter::createFilter($customtype->getKey()))); } ?> <?php } ?> <?php foreach ($datecustomfields as $customtype) { ?> <?php if (!$search_object->hasFilter($customtype->getKey())) { include_component('search/interactivefilter', array('filter' => \thebuggenie\core\entities\SearchFilter::createFilter($customtype->getKey(), array('operator' => '<=', 'value' => time())))); } ?> <?php } ?> </div> <?php if (!$tbg_user->isGuest()) { ?> <div class="fullpage_backdrop" style="display: none;" id="saved_search_details"> <div class="backdrop_box large"> <div class="backdrop_detail_header"><?php echo __('Save this search'); ?> </div>
public function runListIssues(framework\Request $request) { $filters = array('project_id' => \thebuggenie\core\entities\SearchFilter::createFilter('project_id', array('v' => $this->selected_project->getID(), 'o' => '='))); $filter_state = $request->getParameter('state', 'open'); $filter_issuetype = $request->getParameter('issuetype', 'all'); $filter_assigned_to = $request->getParameter('assigned_to', 'all'); if (mb_strtolower($filter_state) != 'all') { $filters['state'] = array('o' => '=', 'v' => ''); if (mb_strtolower($filter_state) == 'open') { $filters['state']['v'] = entities\Issue::STATE_OPEN; } elseif (mb_strtolower($filter_state) == 'closed') { $filters['state']['v'] = entities\Issue::STATE_CLOSED; } } if (mb_strtolower($filter_issuetype) != 'all') { $issuetype = entities\Issuetype::getByKeyish($filter_issuetype); if ($issuetype instanceof entities\Issuetype) { $filters['issuetype'] = array('o' => '=', 'v' => $issuetype->getID()); } } if (mb_strtolower($filter_assigned_to) != 'all') { $user_id = 0; switch (mb_strtolower($filter_assigned_to)) { case 'me': $user_id = framework\Context::getUser()->getID(); break; case 'none': $user_id = 0; break; default: try { $user = entities\User::findUser(mb_strtolower($filter_assigned_to)); if ($user instanceof entities\User) { $user_id = $user->getID(); } } catch (\Exception $e) { } break; } $filters['assignee_user'] = array('o' => '=', 'v' => $user_id); } list($this->issues, $this->count) = entities\Issue::findIssues($filters, 50); $this->return_issues = array(); }