/**
  * 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;
 }
示例#2
0
 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);
     }
 }
示例#3
0
 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;
 }
示例#4
0
 /**
  * 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'));
 }
示例#5
0
 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);
 }
</div>
                </div>
                <?php 
            break;
        case 'priority':
        case 'resolution':
        case 'reproducability':
        case 'severity':
            include_component('search/interactivefilter_choice', compact('filter'));
            break;
        case 'posted':
        case 'last_updated':
            include_component('search/interactivefilter_date', compact('filter'));
            break;
        default:
            if (!in_array($filter->getFilterKey(), \thebuggenie\core\entities\SearchFilter::getValidSearchFilters())) {
                switch ($filter->getFilterType()) {
                    case \thebuggenie\core\entities\CustomDatatype::DATE_PICKER:
                        include_component('search/interactivefilter_date', compact('filter'));
                        break;
                    case \thebuggenie\core\entities\CustomDatatype::RADIO_CHOICE:
                    case \thebuggenie\core\entities\CustomDatatype::DROPDOWN_CHOICE_TEXT:
                        include_component('search/interactivefilter_choice', compact('filter'));
                        break;
                    case \thebuggenie\core\entities\CustomDatatype::COMPONENTS_CHOICE:
                    case \thebuggenie\core\entities\CustomDatatype::EDITIONS_CHOICE:
                    case \thebuggenie\core\entities\CustomDatatype::RELEASES_CHOICE:
                    case \thebuggenie\core\entities\CustomDatatype::MILESTONE_CHOICE:
                        include_component('search/interactivefilter_affected', compact('filter'));
                        break;
                    case \thebuggenie\core\entities\CustomDatatype::USER_CHOICE:
示例#7
0
 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);
     }
 }
示例#8
0
 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>
示例#10
0
<?php

$show_button = false;
?>
<li id="filter_<?php 
echo $key;
?>
">
    <?php 
if (in_array($filter, \thebuggenie\core\entities\SearchFilter::getValidSearchFilters())) {
    ?>
        <?php 
    if ($filter == 'project_id' && !\thebuggenie\core\framework\Context::isProjectContext()) {
        ?>
            <label<?php 
        if (!\thebuggenie\core\framework\Context::isProjectContext()) {
            ?>
 for="filter_project_id_<?php 
            echo $key;
            ?>
"<?php 
        }
        ?>
><?php 
        echo __('Project');
        ?>
</label>
            <?php 
        if (!\thebuggenie\core\framework\Context::isProjectContext()) {
            ?>
                <select name="filters[project_id][<?php 
示例#11
0
 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();
 }