[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/harbormaster/query/ -> HarbormasterBuildableSearchEngine.php (source)

   1  <?php
   2  
   3  final class HarbormasterBuildableSearchEngine
   4    extends PhabricatorApplicationSearchEngine {
   5  
   6    public function getResultTypeDescription() {
   7      return pht('Harbormaster Buildables');
   8    }
   9  
  10    public function getApplicationClassName() {
  11      return 'PhabricatorHarbormasterApplication';
  12    }
  13  
  14    public function buildSavedQueryFromRequest(AphrontRequest $request) {
  15      $saved = new PhabricatorSavedQuery();
  16  
  17      $revisions = $this->readPHIDsFromRequest(
  18        $request,
  19        'revisions',
  20        array(
  21          DifferentialRevisionPHIDType::TYPECONST,
  22        ));
  23  
  24      $repositories = $this->readPHIDsFromRequest(
  25        $request,
  26        'repositories',
  27        array(
  28          PhabricatorRepositoryRepositoryPHIDType::TYPECONST,
  29        ));
  30  
  31      $container_phids = array_merge($revisions, $repositories);
  32      $saved->setParameter('containerPHIDs', $container_phids);
  33  
  34      $commits = $this->readPHIDsFromRequest(
  35        $request,
  36        'commits',
  37        array(
  38          PhabricatorRepositoryCommitPHIDType::TYPECONST,
  39        ));
  40  
  41      $diffs = $this->readListFromRequest($request, 'diffs');
  42      if ($diffs) {
  43        $diffs = id(new DifferentialDiffQuery())
  44          ->setViewer($this->requireViewer())
  45          ->withIDs($diffs)
  46          ->execute();
  47        $diffs = mpull($diffs, 'getPHID', 'getPHID');
  48      }
  49  
  50      $buildable_phids = array_merge($commits, $diffs);
  51      $saved->setParameter('buildablePHIDs', $buildable_phids);
  52  
  53      $saved->setParameter(
  54        'manual',
  55        $this->readBoolFromRequest($request, 'manual'));
  56  
  57      return $saved;
  58    }
  59  
  60    public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
  61      $query = id(new HarbormasterBuildableQuery())
  62        ->needContainerHandles(true)
  63        ->needBuildableHandles(true);
  64  
  65      $container_phids = $saved->getParameter('containerPHIDs', array());
  66      if ($container_phids) {
  67        $query->withContainerPHIDs($container_phids);
  68      }
  69  
  70      $buildable_phids = $saved->getParameter('buildablePHIDs', array());
  71  
  72      if ($buildable_phids) {
  73        $query->withBuildablePHIDs($buildable_phids);
  74      }
  75  
  76      $manual = $saved->getParameter('manual');
  77      if ($manual !== null) {
  78        $query->withManualBuildables($manual);
  79      }
  80  
  81      return $query;
  82    }
  83  
  84    public function buildSearchForm(
  85      AphrontFormView $form,
  86      PhabricatorSavedQuery $saved_query) {
  87  
  88      $container_phids = $saved_query->getParameter('containerPHIDs', array());
  89      $buildable_phids = $saved_query->getParameter('buildablePHIDs', array());
  90  
  91      $all_phids = array_merge($container_phids, $buildable_phids);
  92  
  93      $revision_names = array();
  94      $diff_names = array();
  95      $repository_names = array();
  96      $commit_names = array();
  97  
  98      if ($all_phids) {
  99        $objects = id(new PhabricatorObjectQuery())
 100          ->setViewer($this->requireViewer())
 101          ->withPHIDs($all_phids)
 102          ->execute();
 103  
 104        foreach ($all_phids as $phid) {
 105          $object = idx($objects, $phid);
 106          if (!$object) {
 107            continue;
 108          }
 109  
 110          if ($object instanceof DifferentialRevision) {
 111            $revision_names[] = 'D'.$object->getID();
 112          } else if ($object instanceof DifferentialDiff) {
 113            $diff_names[] = $object->getID();
 114          } else if ($object instanceof PhabricatorRepository) {
 115            $repository_names[] = 'r'.$object->getCallsign();
 116          } else if ($object instanceof PhabricatorRepositoryCommit) {
 117            $repository = $object->getRepository();
 118            $commit_names[] = $repository->formatCommitName(
 119              $object->getCommitIdentifier());
 120          }
 121        }
 122      }
 123  
 124      $form
 125        ->appendChild(
 126          id(new AphrontFormTextControl())
 127            ->setLabel(pht('Differential Revisions'))
 128            ->setName('revisions')
 129            ->setValue(implode(', ', $revision_names)))
 130        ->appendChild(
 131          id(new AphrontFormTextControl())
 132            ->setLabel(pht('Differential Diffs'))
 133            ->setName('diffs')
 134            ->setValue(implode(', ', $diff_names)))
 135        ->appendChild(
 136          id(new AphrontFormTextControl())
 137            ->setLabel(pht('Repositories'))
 138            ->setName('repositories')
 139            ->setValue(implode(', ', $repository_names)))
 140        ->appendChild(
 141          id(new AphrontFormTextControl())
 142            ->setLabel(pht('Commits'))
 143            ->setName('commits')
 144            ->setValue(implode(', ', $commit_names)))
 145        ->appendChild(
 146          id(new AphrontFormSelectControl())
 147            ->setLabel(pht('Origin'))
 148            ->setName('manual')
 149            ->setValue($this->getBoolFromQuery($saved_query, 'manual'))
 150            ->setOptions(
 151              array(
 152                '' => pht('(All Origins)'),
 153                'true' => pht('Manual Buildables'),
 154                'false' => pht('Automatic Buildables'),
 155              )));
 156    }
 157  
 158    protected function getURI($path) {
 159      return '/harbormaster/'.$path;
 160    }
 161  
 162    public function getBuiltinQueryNames() {
 163      return array(
 164        'all' => pht('All Buildables'),
 165      );
 166    }
 167  
 168    public function buildSavedQueryFromBuiltin($query_key) {
 169      $query = $this->newSavedQuery();
 170      $query->setQueryKey($query_key);
 171  
 172      switch ($query_key) {
 173        case 'all':
 174          return $query;
 175      }
 176  
 177      return parent::buildSavedQueryFromBuiltin($query_key);
 178    }
 179  
 180    protected function renderResultList(
 181      array $buildables,
 182      PhabricatorSavedQuery $query,
 183      array $handles) {
 184      assert_instances_of($buildables, 'HarbormasterBuildable');
 185  
 186      $viewer = $this->requireViewer();
 187  
 188      $list = new PHUIObjectItemListView();
 189      foreach ($buildables as $buildable) {
 190        $id = $buildable->getID();
 191  
 192        $item = id(new PHUIObjectItemView())
 193          ->setHeader(pht('Buildable %d', $buildable->getID()));
 194        if ($buildable->getContainerHandle() !== null) {
 195          $item->addAttribute($buildable->getContainerHandle()->getName());
 196        }
 197        if ($buildable->getBuildableHandle() !== null) {
 198          $item->addAttribute($buildable->getBuildableHandle()->getFullName());
 199        }
 200  
 201        if ($id) {
 202          $item->setHref("/B{$id}");
 203        }
 204  
 205        if ($buildable->getIsManualBuildable()) {
 206          $item->addIcon('fa-wrench grey', pht('Manual'));
 207        }
 208  
 209        $item->setBarColor(HarbormasterBuildable::getBuildableStatusColor(
 210          $buildable->getBuildableStatus()));
 211        $item->addByline(HarbormasterBuildable::getBuildableStatusName(
 212          $buildable->getBuildableStatus()));
 213  
 214        $list->addItem($item);
 215  
 216      }
 217  
 218      return $list;
 219    }
 220  
 221  }


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