mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-03 04:02:43 +01:00
f82e4b0c70
Summary: Ref T603. Ref T2625. Long chain of "doing the right thing" here: I want to clean this up, so I can clean up the Conduit logs, so I can add a setup issue for deprecated method calls, so I can remove deprecated methods, so I can get rid of `DifferentialRevisionListData`, so I can make Differntial policy-aware. Adds modern infrastructure and UI to all of the Conduit interfaces (except only partially for the logs, that will be the next diff). Test Plan: {F48201} {F48202} {F48203} {F48204} {F48206} This will get further updates in the next diff: {F48205} Reviewers: btrahan, chad Reviewed By: chad CC: aran Maniphest Tasks: T603, T2625 Differential Revision: https://secure.phabricator.com/D6331
124 lines
3 KiB
PHP
124 lines
3 KiB
PHP
<?php
|
|
|
|
final class PhabricatorConduitMethodQuery
|
|
extends PhabricatorCursorPagedPolicyAwareQuery {
|
|
|
|
private $isDeprecated;
|
|
private $isStable;
|
|
private $isUnstable;
|
|
private $applicationNames;
|
|
private $nameContains;
|
|
private $methods;
|
|
|
|
public function withMethods(array $methods) {
|
|
$this->methods = $methods;
|
|
return $this;
|
|
}
|
|
|
|
public function withNameContains($name_contains) {
|
|
$this->nameContains = $name_contains;
|
|
return $this;
|
|
}
|
|
|
|
public function withApplicationNames(array $application_names) {
|
|
$this->applicationNames = $application_names;
|
|
return $this;
|
|
}
|
|
|
|
public function withIsStable($is_stable) {
|
|
$this->isStable = $is_stable;
|
|
return $this;
|
|
}
|
|
|
|
public function withIsUnstable($is_unstable) {
|
|
$this->isUnstable = $is_unstable;
|
|
return $this;
|
|
}
|
|
|
|
public function withIsDeprecated($is_deprecated) {
|
|
$this->isDeprecated = $is_deprecated;
|
|
return $this;
|
|
}
|
|
|
|
public function loadPage() {
|
|
$methods = $this->getAllMethods();
|
|
|
|
$methods = $this->filterMethods($methods);
|
|
|
|
return $methods;
|
|
}
|
|
|
|
private function getAllMethods() {
|
|
static $methods;
|
|
if ($methods === null) {
|
|
$methods = id(new PhutilSymbolLoader())
|
|
->setAncestorClass('ConduitAPIMethod')
|
|
->loadObjects();
|
|
$methods = msort($methods, 'getSortOrder');
|
|
}
|
|
return $methods;
|
|
}
|
|
|
|
private function filterMethods(array $methods) {
|
|
foreach ($methods as $key => $method) {
|
|
$application = $method->getApplication();
|
|
if (!$application) {
|
|
continue;
|
|
}
|
|
if (!$application->isInstalled()) {
|
|
unset($methods[$key]);
|
|
}
|
|
}
|
|
|
|
$status = array(
|
|
ConduitAPIMethod::METHOD_STATUS_STABLE => $this->isStable,
|
|
ConduitAPIMethod::METHOD_STATUS_DEPRECATED => $this->isDeprecated,
|
|
ConduitAPIMethod::METHOD_STATUS_UNSTABLE => $this->isUnstable,
|
|
);
|
|
|
|
// Only apply status filters if any of them are set.
|
|
if (array_filter($status)) {
|
|
foreach ($methods as $key => $method) {
|
|
$keep = idx($status, $method->getMethodStatus());
|
|
if (!$keep) {
|
|
unset($methods[$key]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($this->applicationNames) {
|
|
$map = array_fuse($this->applicationNames);
|
|
foreach ($methods as $key => $method) {
|
|
$needle = $method->getApplicationName();
|
|
$needle = phutil_utf8_strtolower($needle);
|
|
if (empty($map[$needle])) {
|
|
unset($methods[$key]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($this->nameContains) {
|
|
$needle = phutil_utf8_strtolower($this->nameContains);
|
|
foreach ($methods as $key => $method) {
|
|
$haystack = $method->getAPIMethodName();
|
|
$haystack = phutil_utf8_strtolower($haystack);
|
|
if (strpos($haystack, $needle) === false) {
|
|
unset($methods[$key]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($this->methods) {
|
|
$map = array_fuse($this->methods);
|
|
foreach ($methods as $key => $method) {
|
|
$needle = $method->getAPIMethodName();
|
|
if (empty($map[$needle])) {
|
|
unset($methods[$key]);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $methods;
|
|
}
|
|
|
|
}
|