Differential D20308 Diff 48505 src/applications/project/query/PhabricatorProjectTriggerSearchEngine.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/project/query/PhabricatorProjectTriggerSearchEngine.php
| <?php | <?php | ||||
| final class PhabricatorProjectTriggerSearchEngine | final class PhabricatorProjectTriggerSearchEngine | ||||
| extends PhabricatorApplicationSearchEngine { | extends PhabricatorApplicationSearchEngine { | ||||
| public function getResultTypeDescription() { | public function getResultTypeDescription() { | ||||
| return pht('Triggers'); | return pht('Triggers'); | ||||
| } | } | ||||
| public function getApplicationClassName() { | public function getApplicationClassName() { | ||||
| return 'PhabricatorProjectApplication'; | return 'PhabricatorProjectApplication'; | ||||
| } | } | ||||
| public function newQuery() { | public function newQuery() { | ||||
| return new PhabricatorProjectTriggerQuery(); | return id(new PhabricatorProjectTriggerQuery()) | ||||
| ->needUsage(true); | |||||
| } | } | ||||
| protected function buildCustomSearchFields() { | protected function buildCustomSearchFields() { | ||||
| return array(); | return array( | ||||
| id(new PhabricatorSearchThreeStateField()) | |||||
| ->setLabel(pht('Active')) | |||||
| ->setKey('isActive') | |||||
| ->setOptions( | |||||
| pht('(Show All)'), | |||||
| pht('Show Only Active Triggers'), | |||||
| pht('Show Only Inactive Triggers')), | |||||
| ); | |||||
| } | } | ||||
| protected function buildQueryFromParameters(array $map) { | protected function buildQueryFromParameters(array $map) { | ||||
| $query = $this->newQuery(); | $query = $this->newQuery(); | ||||
| if ($map['isActive'] !== null) { | |||||
| if ($map['isActive']) { | |||||
| $query->withActiveColumnCountBetween(1, null); | |||||
| } else { | |||||
| $query->withActiveColumnCountBetween(null, 0); | |||||
| } | |||||
| } | |||||
| return $query; | return $query; | ||||
| } | } | ||||
| protected function getURI($path) { | protected function getURI($path) { | ||||
| return '/project/trigger/'.$path; | return '/project/trigger/'.$path; | ||||
| } | } | ||||
| protected function getBuiltinQueryNames() { | protected function getBuiltinQueryNames() { | ||||
| $names = array(); | $names = array(); | ||||
| $names['all'] = pht('All'); | $names['active'] = pht('Active Triggers'); | ||||
| $names['all'] = pht('All Triggers'); | |||||
| return $names; | return $names; | ||||
| } | } | ||||
| public function buildSavedQueryFromBuiltin($query_key) { | public function buildSavedQueryFromBuiltin($query_key) { | ||||
| $query = $this->newSavedQuery(); | $query = $this->newSavedQuery(); | ||||
| $query->setQueryKey($query_key); | $query->setQueryKey($query_key); | ||||
| switch ($query_key) { | switch ($query_key) { | ||||
| case 'active': | |||||
| return $query->setParameter('isActive', true); | |||||
| case 'all': | case 'all': | ||||
| return $query; | return $query; | ||||
| } | } | ||||
| return parent::buildSavedQueryFromBuiltin($query_key); | return parent::buildSavedQueryFromBuiltin($query_key); | ||||
| } | } | ||||
| protected function renderResultList( | protected function renderResultList( | ||||
| array $triggers, | array $triggers, | ||||
| PhabricatorSavedQuery $query, | PhabricatorSavedQuery $query, | ||||
| array $handles) { | array $handles) { | ||||
| assert_instances_of($triggers, 'PhabricatorProjectTrigger'); | assert_instances_of($triggers, 'PhabricatorProjectTrigger'); | ||||
| $viewer = $this->requireViewer(); | $viewer = $this->requireViewer(); | ||||
| $example_phids = array(); | |||||
| foreach ($triggers as $trigger) { | |||||
| $example_phid = $trigger->getUsage()->getExamplePHID(); | |||||
| if ($example_phid) { | |||||
| $example_phids[] = $example_phid; | |||||
| } | |||||
| } | |||||
| $handles = $viewer->loadHandles($example_phids); | |||||
| $list = id(new PHUIObjectItemListView()) | $list = id(new PHUIObjectItemListView()) | ||||
| ->setViewer($viewer); | ->setViewer($viewer); | ||||
| foreach ($triggers as $trigger) { | foreach ($triggers as $trigger) { | ||||
| $usage = $trigger->getUsage(); | |||||
| $column_handle = null; | |||||
| $have_column = false; | |||||
| $example_phid = $usage->getExamplePHID(); | |||||
| if ($example_phid) { | |||||
| $column_handle = $handles[$example_phid]; | |||||
| if ($column_handle->isComplete()) { | |||||
| if (!$column_handle->getPolicyFiltered()) { | |||||
| $have_column = true; | |||||
| } | |||||
| } | |||||
| } | |||||
| $column_count = $usage->getColumnCount(); | |||||
| $active_count = $usage->getActiveColumnCount(); | |||||
| if ($have_column) { | |||||
| if ($active_count > 1) { | |||||
| $usage_description = pht( | |||||
| 'Used on %s and %s other active column(s).', | |||||
| $column_handle->renderLink(), | |||||
| new PhutilNumber($active_count - 1)); | |||||
| } else if ($column_count > 1) { | |||||
| $usage_description = pht( | |||||
| 'Used on %s and %s other column(s).', | |||||
| $column_handle->renderLink(), | |||||
| new PhutilNumber($column_count - 1)); | |||||
| } else { | |||||
| $usage_description = pht( | |||||
| 'Used on %s.', | |||||
| $column_handle->renderLink()); | |||||
| } | |||||
| } else { | |||||
| if ($active_count) { | |||||
| $usage_description = pht( | |||||
| 'Used on %s active column(s).', | |||||
| new PhutilNumber($active_count)); | |||||
| } else if ($column_count) { | |||||
| $usage_description = pht( | |||||
| 'Used on %s column(s).', | |||||
| new PhutilNumber($column_count)); | |||||
| } else { | |||||
| $usage_description = pht( | |||||
| 'Unused trigger.'); | |||||
| } | |||||
| } | |||||
| $item = id(new PHUIObjectItemView()) | $item = id(new PHUIObjectItemView()) | ||||
| ->setObjectName($trigger->getObjectName()) | ->setObjectName($trigger->getObjectName()) | ||||
| ->setHeader($trigger->getDisplayName()) | ->setHeader($trigger->getDisplayName()) | ||||
| ->setHref($trigger->getURI()); | ->setHref($trigger->getURI()) | ||||
| ->addAttribute($usage_description) | |||||
| ->setDisabled(!$active_count); | |||||
| $list->addItem($item); | $list->addItem($item); | ||||
| } | } | ||||
| return id(new PhabricatorApplicationSearchResultView()) | return id(new PhabricatorApplicationSearchResultView()) | ||||
| ->setObjectList($list) | ->setObjectList($list) | ||||
| ->setNoDataString(pht('No triggers found.')); | ->setNoDataString(pht('No triggers found.')); | ||||
| } | } | ||||
| } | } | ||||