[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/herald/query/ -> HeraldRuleSearchEngine.php (source)

   1  <?php
   2  
   3  final class HeraldRuleSearchEngine extends PhabricatorApplicationSearchEngine {
   4  
   5    public function getResultTypeDescription() {
   6      return pht('Herald Rules');
   7    }
   8  
   9    public function getApplicationClassName() {
  10      return 'PhabricatorHeraldApplication';
  11    }
  12  
  13    public function buildSavedQueryFromRequest(AphrontRequest $request) {
  14      $saved = new PhabricatorSavedQuery();
  15  
  16      $saved->setParameter(
  17        'authorPHIDs',
  18        $this->readUsersFromRequest($request, 'authors'));
  19  
  20      $saved->setParameter('contentType', $request->getStr('contentType'));
  21      $saved->setParameter('ruleType', $request->getStr('ruleType'));
  22      $saved->setParameter(
  23        'disabled',
  24        $this->readBoolFromRequest($request, 'disabled'));
  25  
  26      return $saved;
  27    }
  28  
  29    public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
  30      $query = id(new HeraldRuleQuery());
  31  
  32      $author_phids = $saved->getParameter('authorPHIDs');
  33      if ($author_phids) {
  34        $query->withAuthorPHIDs($author_phids);
  35      }
  36  
  37      $content_type = $saved->getParameter('contentType');
  38      $content_type = idx($this->getContentTypeValues(), $content_type);
  39      if ($content_type) {
  40        $query->withContentTypes(array($content_type));
  41      }
  42  
  43      $rule_type = $saved->getParameter('ruleType');
  44      $rule_type = idx($this->getRuleTypeValues(), $rule_type);
  45      if ($rule_type) {
  46        $query->withRuleTypes(array($rule_type));
  47      }
  48  
  49      $disabled = $saved->getParameter('disabled');
  50      if ($disabled !== null) {
  51        $query->withDisabled($disabled);
  52      }
  53  
  54      return $query;
  55    }
  56  
  57    public function buildSearchForm(
  58      AphrontFormView $form,
  59      PhabricatorSavedQuery $saved_query) {
  60  
  61      $phids = $saved_query->getParameter('authorPHIDs', array());
  62      $author_handles = id(new PhabricatorHandleQuery())
  63        ->setViewer($this->requireViewer())
  64        ->withPHIDs($phids)
  65        ->execute();
  66  
  67      $content_type = $saved_query->getParameter('contentType');
  68      $rule_type = $saved_query->getParameter('ruleType');
  69  
  70      $form
  71        ->appendChild(
  72          id(new AphrontFormTokenizerControl())
  73            ->setDatasource(new PhabricatorPeopleDatasource())
  74            ->setName('authors')
  75            ->setLabel(pht('Authors'))
  76            ->setValue($author_handles))
  77        ->appendChild(
  78          id(new AphrontFormSelectControl())
  79            ->setName('contentType')
  80            ->setLabel(pht('Content Type'))
  81            ->setValue($content_type)
  82            ->setOptions($this->getContentTypeOptions()))
  83        ->appendChild(
  84          id(new AphrontFormSelectControl())
  85            ->setName('ruleType')
  86            ->setLabel(pht('Rule Type'))
  87            ->setValue($rule_type)
  88            ->setOptions($this->getRuleTypeOptions()))
  89        ->appendChild(
  90          id(new AphrontFormSelectControl())
  91            ->setName('disabled')
  92            ->setLabel(pht('Rule Status'))
  93            ->setValue($this->getBoolFromQuery($saved_query, 'disabled'))
  94            ->setOptions(
  95              array(
  96                '' => pht('Show Enabled and Disabled Rules'),
  97                'false' => pht('Show Only Enabled Rules'),
  98                'true' => pht('Show Only Disabled Rules'),
  99              )));
 100    }
 101  
 102    protected function getURI($path) {
 103      return '/herald/'.$path;
 104    }
 105  
 106    public function getBuiltinQueryNames() {
 107      $names = array();
 108  
 109      if ($this->requireViewer()->isLoggedIn()) {
 110        $names['authored'] = pht('Authored');
 111      }
 112  
 113      $names['active'] = pht('Active');
 114      $names['all'] = pht('All');
 115  
 116      return $names;
 117    }
 118  
 119    public function buildSavedQueryFromBuiltin($query_key) {
 120      $query = $this->newSavedQuery();
 121      $query->setQueryKey($query_key);
 122  
 123      $viewer_phid = $this->requireViewer()->getPHID();
 124  
 125      switch ($query_key) {
 126        case 'all':
 127          return $query;
 128        case 'active':
 129          return $query->setParameter('disabled', false);
 130        case 'authored':
 131          return $query
 132            ->setParameter('authorPHIDs', array($viewer_phid))
 133            ->setParameter('disabled', false);
 134      }
 135  
 136      return parent::buildSavedQueryFromBuiltin($query_key);
 137    }
 138  
 139    private function getContentTypeOptions() {
 140      return array(
 141        '' => pht('(All Content Types)'),
 142      ) + HeraldAdapter::getEnabledAdapterMap($this->requireViewer());
 143    }
 144  
 145    private function getContentTypeValues() {
 146      return array_fuse(
 147        array_keys(
 148          HeraldAdapter::getEnabledAdapterMap($this->requireViewer())));
 149    }
 150  
 151    private function getRuleTypeOptions() {
 152      return array(
 153        '' => pht('(All Rule Types)'),
 154      ) + HeraldRuleTypeConfig::getRuleTypeMap();
 155    }
 156  
 157    private function getRuleTypeValues() {
 158      return array_fuse(array_keys(HeraldRuleTypeConfig::getRuleTypeMap()));
 159    }
 160  
 161    protected function getRequiredHandlePHIDsForResultList(
 162      array $rules,
 163      PhabricatorSavedQuery $query) {
 164  
 165      return mpull($rules, 'getAuthorPHID');
 166    }
 167  
 168    protected function renderResultList(
 169      array $rules,
 170      PhabricatorSavedQuery $query,
 171      array $handles) {
 172      assert_instances_of($rules, 'HeraldRule');
 173  
 174      $viewer = $this->requireViewer();
 175  
 176      $content_type_map = HeraldAdapter::getEnabledAdapterMap($viewer);
 177  
 178      $list = id(new PHUIObjectItemListView())
 179        ->setUser($viewer);
 180      foreach ($rules as $rule) {
 181        $id = $rule->getID();
 182  
 183        $item = id(new PHUIObjectItemView())
 184          ->setObjectName("H{$id}")
 185          ->setHeader($rule->getName())
 186          ->setHref($this->getApplicationURI("rule/{$id}/"));
 187  
 188        if ($rule->isPersonalRule()) {
 189          $item->addIcon('fa-user', pht('Personal Rule'));
 190          $item->addByline(
 191            pht(
 192              'Authored by %s',
 193              $handles[$rule->getAuthorPHID()]->renderLink()));
 194        } else {
 195          $item->addIcon('fa-globe', pht('Global Rule'));
 196        }
 197  
 198        if ($rule->getIsDisabled()) {
 199          $item->setDisabled(true);
 200          $item->addIcon('fa-lock grey', pht('Disabled'));
 201        }
 202  
 203        $item->addAction(
 204          id(new PHUIListItemView())
 205            ->setHref($this->getApplicationURI("history/{$id}/"))
 206            ->setIcon('fa-file-text-o')
 207            ->setName(pht('Edit Log')));
 208  
 209        $content_type_name = idx($content_type_map, $rule->getContentType());
 210        $item->addAttribute(pht('Affects: %s', $content_type_name));
 211  
 212        $list->addItem($item);
 213      }
 214  
 215      return $list;
 216    }
 217  
 218  }


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