[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/flag/query/ -> PhabricatorFlagSearchEngine.php (source)

   1  <?php
   2  
   3  final class PhabricatorFlagSearchEngine
   4    extends PhabricatorApplicationSearchEngine {
   5  
   6    public function getResultTypeDescription() {
   7      return pht('Flags');
   8    }
   9  
  10    public function getApplicationClassName() {
  11      return 'PhabricatorFlagsApplication';
  12    }
  13  
  14    public function buildSavedQueryFromRequest(AphrontRequest $request) {
  15      $saved = new PhabricatorSavedQuery();
  16      $saved->setParameter('colors', $request->getArr('colors'));
  17      $saved->setParameter('group', $request->getStr('group'));
  18      $saved->setParameter('objectFilter', $request->getStr('objectFilter'));
  19      return $saved;
  20    }
  21  
  22    public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
  23      $query = id(new PhabricatorFlagQuery())
  24        ->needHandles(true)
  25        ->withOwnerPHIDs(array($this->requireViewer()->getPHID()));
  26  
  27      $colors = $saved->getParameter('colors');
  28      if ($colors) {
  29        $query->withColors($colors);
  30      }
  31      $group = $saved->getParameter('group');
  32      $options = $this->getGroupOptions();
  33      if ($group && isset($options[$group])) {
  34        $query->setGroupBy($group);
  35      }
  36  
  37      $object_filter = $saved->getParameter('objectFilter');
  38      $objects = $this->getObjectFilterOptions();
  39      if ($object_filter && isset($objects[$object_filter])) {
  40        $query->withTypes(array($object_filter));
  41      }
  42  
  43      return $query;
  44    }
  45  
  46    public function buildSearchForm(
  47      AphrontFormView $form,
  48      PhabricatorSavedQuery $saved_query) {
  49  
  50      $form
  51        ->appendChild(
  52          id(new PhabricatorFlagSelectControl())
  53          ->setName('colors')
  54          ->setLabel(pht('Colors'))
  55          ->setValue($saved_query->getParameter('colors', array())))
  56        ->appendChild(
  57          id(new AphrontFormSelectControl())
  58          ->setName('group')
  59          ->setLabel(pht('Group By'))
  60          ->setValue($saved_query->getParameter('group'))
  61          ->setOptions($this->getGroupOptions()))
  62        ->appendChild(
  63          id(new AphrontFormSelectControl())
  64          ->setName('objectFilter')
  65          ->setLabel(pht('Object Type'))
  66          ->setValue($saved_query->getParameter('objectFilter'))
  67          ->setOptions($this->getObjectFilterOptions()));
  68    }
  69  
  70    protected function getURI($path) {
  71      return '/flag/'.$path;
  72    }
  73  
  74    public function getBuiltinQueryNames() {
  75      $names = array(
  76        'all' => pht('Flagged'),
  77      );
  78  
  79      return $names;
  80    }
  81  
  82    public function buildSavedQueryFromBuiltin($query_key) {
  83  
  84      $query = $this->newSavedQuery();
  85      $query->setQueryKey($query_key);
  86  
  87      switch ($query_key) {
  88        case 'all':
  89          return $query;
  90      }
  91  
  92      return parent::buildSavedQueryFromBuiltin($query_key);
  93    }
  94  
  95    private function getGroupOptions() {
  96      return array(
  97        PhabricatorFlagQuery::GROUP_NONE => pht('None'),
  98        PhabricatorFlagQuery::GROUP_COLOR => pht('Color'),
  99      );
 100    }
 101  
 102    private function getObjectFilterOptions() {
 103      $objects = id(new PhutilSymbolLoader())
 104        ->setAncestorClass('PhabricatorFlaggableInterface')
 105        ->loadObjects();
 106      $all_types = PhabricatorPHIDType::getAllTypes();
 107      $options = array();
 108      foreach ($objects as $object) {
 109        $phid = $object->generatePHID();
 110        $phid_type = phid_get_type($phid);
 111        $type_object = idx($all_types, $phid_type);
 112        if ($type_object) {
 113          $options[$phid_type] = $type_object->getTypeName();
 114        }
 115      }
 116      // sort it alphabetically...
 117      asort($options);
 118      $default_option = array(
 119        0 => pht('All Object Types'),
 120      );
 121      // ...and stick the default option on front
 122      $options = array_merge($default_option, $options);
 123  
 124      return $options;
 125    }
 126  
 127    protected function renderResultList(
 128      array $flags,
 129      PhabricatorSavedQuery $query,
 130      array $handles) {
 131      assert_instances_of($flags, 'PhabricatorFlag');
 132  
 133      $viewer = $this->requireViewer();
 134  
 135      $list = id(new PHUIObjectItemListView())
 136        ->setUser($viewer);
 137      foreach ($flags as $flag) {
 138        $id = $flag->getID();
 139        $phid = $flag->getObjectPHID();
 140  
 141        $class = PhabricatorFlagColor::getCSSClass($flag->getColor());
 142  
 143        $flag_icon = phutil_tag(
 144          'div',
 145          array(
 146            'class' => 'phabricator-flag-icon '.$class,
 147          ),
 148          '');
 149  
 150        $item = id(new PHUIObjectItemView())
 151          ->addHeadIcon($flag_icon)
 152          ->setHeader($flag->getHandle()->renderLink());
 153  
 154        $item->addAction(
 155          id(new PHUIListItemView())
 156            ->setIcon('fa-pencil')
 157            ->setHref($this->getApplicationURI("edit/{$phid}/"))
 158            ->setWorkflow(true));
 159  
 160        $item->addAction(
 161          id(new PHUIListItemView())
 162            ->setIcon('fa-times')
 163            ->setHref($this->getApplicationURI("delete/{$id}/"))
 164            ->setWorkflow(true));
 165  
 166        if ($flag->getNote()) {
 167          $item->addAttribute($flag->getNote());
 168        }
 169  
 170        $item->addIcon(
 171          'none',
 172          phabricator_datetime($flag->getDateCreated(), $viewer));
 173  
 174        $list->addItem($item);
 175      }
 176  
 177      return $list;
 178    }
 179  
 180  
 181  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1