diff --git a/src/applications/almanac/phid/AlmanacBindingPHIDType.php b/src/applications/almanac/phid/AlmanacBindingPHIDType.php index d8fcb510fb..db469690cd 100644 --- a/src/applications/almanac/phid/AlmanacBindingPHIDType.php +++ b/src/applications/almanac/phid/AlmanacBindingPHIDType.php @@ -1,38 +1,42 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $binding = $objects[$phid]; $id = $binding->getID(); $handle->setObjectName(pht('Binding %d', $id)); $handle->setName(pht('Binding %d', $id)); } } } diff --git a/src/applications/almanac/phid/AlmanacDevicePHIDType.php b/src/applications/almanac/phid/AlmanacDevicePHIDType.php index 8a1bb36a90..26c88a7a86 100644 --- a/src/applications/almanac/phid/AlmanacDevicePHIDType.php +++ b/src/applications/almanac/phid/AlmanacDevicePHIDType.php @@ -1,40 +1,44 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $device = $objects[$phid]; $id = $device->getID(); $name = $device->getName(); $handle->setObjectName(pht('Device %d', $id)); $handle->setName($name); $handle->setURI($device->getURI()); } } } diff --git a/src/applications/almanac/phid/AlmanacInterfacePHIDType.php b/src/applications/almanac/phid/AlmanacInterfacePHIDType.php index 67f9b1664a..581e86e3be 100644 --- a/src/applications/almanac/phid/AlmanacInterfacePHIDType.php +++ b/src/applications/almanac/phid/AlmanacInterfacePHIDType.php @@ -1,50 +1,54 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $interface = $objects[$phid]; $id = $interface->getID(); $device_name = $interface->getDevice()->getName(); $address = $interface->getAddress(); $port = $interface->getPort(); $network = $interface->getNetwork()->getName(); $name = pht( '%s:%s (%s on %s)', $device_name, $port, $address, $network); $handle->setObjectName(pht('Interface %d', $id)); $handle->setName($name); } } } diff --git a/src/applications/almanac/phid/AlmanacNetworkPHIDType.php b/src/applications/almanac/phid/AlmanacNetworkPHIDType.php index e27efa5cd8..2264ce0e5f 100644 --- a/src/applications/almanac/phid/AlmanacNetworkPHIDType.php +++ b/src/applications/almanac/phid/AlmanacNetworkPHIDType.php @@ -1,40 +1,44 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $network = $objects[$phid]; $id = $network->getID(); $name = $network->getName(); $handle->setObjectName(pht('Network %d', $id)); $handle->setName($name); $handle->setURI($network->getURI()); } } } diff --git a/src/applications/almanac/phid/AlmanacServicePHIDType.php b/src/applications/almanac/phid/AlmanacServicePHIDType.php index c64e089ce6..a64a229e94 100644 --- a/src/applications/almanac/phid/AlmanacServicePHIDType.php +++ b/src/applications/almanac/phid/AlmanacServicePHIDType.php @@ -1,40 +1,44 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $service = $objects[$phid]; $id = $service->getID(); $name = $service->getName(); $handle->setObjectName(pht('Service %d', $id)); $handle->setName($name); $handle->setURI($service->getURI()); } } } diff --git a/src/applications/auth/phid/PhabricatorAuthAuthFactorPHIDType.php b/src/applications/auth/phid/PhabricatorAuthAuthFactorPHIDType.php index ca21397fb6..2819c84572 100644 --- a/src/applications/auth/phid/PhabricatorAuthAuthFactorPHIDType.php +++ b/src/applications/auth/phid/PhabricatorAuthAuthFactorPHIDType.php @@ -1,35 +1,39 @@ $handle) { $factor = $objects[$phid]; $handle->setName($factor->getFactorName()); } } } diff --git a/src/applications/auth/phid/PhabricatorAuthAuthProviderPHIDType.php b/src/applications/auth/phid/PhabricatorAuthAuthProviderPHIDType.php index b271183f5c..e91b66e647 100644 --- a/src/applications/auth/phid/PhabricatorAuthAuthProviderPHIDType.php +++ b/src/applications/auth/phid/PhabricatorAuthAuthProviderPHIDType.php @@ -1,35 +1,39 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $provider = $objects[$phid]; $handle->setName($provider->getProviderName()); } } } diff --git a/src/applications/auth/phid/PhabricatorAuthInvitePHIDType.php b/src/applications/auth/phid/PhabricatorAuthInvitePHIDType.php index 0f1b205763..b633e10eab 100644 --- a/src/applications/auth/phid/PhabricatorAuthInvitePHIDType.php +++ b/src/applications/auth/phid/PhabricatorAuthInvitePHIDType.php @@ -1,31 +1,35 @@ $handle) { $invite = $objects[$phid]; } } } diff --git a/src/applications/calendar/phid/PhabricatorCalendarEventPHIDType.php b/src/applications/calendar/phid/PhabricatorCalendarEventPHIDType.php index 7acc968f21..d37be2ef32 100644 --- a/src/applications/calendar/phid/PhabricatorCalendarEventPHIDType.php +++ b/src/applications/calendar/phid/PhabricatorCalendarEventPHIDType.php @@ -1,78 +1,78 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $event = $objects[$phid]; $id = $event->getID(); $name = $event->getName(); $is_cancelled = $event->getIsCancelled(); $handle ->setName($name) ->setFullName(pht('E%d: %s', $id, $name)) ->setURI('/E'.$id); if ($is_cancelled) { $handle->setStatus(PhabricatorObjectHandle::STATUS_CLOSED); } } } public function canLoadNamedObject($name) { return preg_match('/^E[1-9]\d*$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new PhabricatorCalendarEventQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/config/phid/PhabricatorConfigConfigPHIDType.php b/src/applications/config/phid/PhabricatorConfigConfigPHIDType.php index 161b1e42f4..95c543427f 100644 --- a/src/applications/config/phid/PhabricatorConfigConfigPHIDType.php +++ b/src/applications/config/phid/PhabricatorConfigConfigPHIDType.php @@ -1,38 +1,42 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $entry = $objects[$phid]; $key = $entry->getConfigKey(); $handle->setName($key); $handle->setURI("/config/edit/{$key}/"); } } } diff --git a/src/applications/countdown/phid/PhabricatorCountdownCountdownPHIDType.php b/src/applications/countdown/phid/PhabricatorCountdownCountdownPHIDType.php index 852c5889ed..573d89c843 100644 --- a/src/applications/countdown/phid/PhabricatorCountdownCountdownPHIDType.php +++ b/src/applications/countdown/phid/PhabricatorCountdownCountdownPHIDType.php @@ -1,69 +1,73 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $countdown = $objects[$phid]; $name = $countdown->getTitle(); $id = $countdown->getID(); $handle->setName("C{$id}"); $handle->setFullName("C{$id}: {$name}"); $handle->setURI("/countdown/{$id}/"); } } public function canLoadNamedObject($name) { return preg_match('/^C\d*[1-9]\d*$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new PhabricatorCountdownQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/dashboard/phid/PhabricatorDashboardDashboardPHIDType.php b/src/applications/dashboard/phid/PhabricatorDashboardDashboardPHIDType.php index e097dc161d..1450e2aa68 100644 --- a/src/applications/dashboard/phid/PhabricatorDashboardDashboardPHIDType.php +++ b/src/applications/dashboard/phid/PhabricatorDashboardDashboardPHIDType.php @@ -1,38 +1,42 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $dashboard = $objects[$phid]; $id = $dashboard->getID(); $handle->setName($dashboard->getName()); $handle->setURI("/dashboard/view/{$id}/"); } } } diff --git a/src/applications/dashboard/phid/PhabricatorDashboardPanelPHIDType.php b/src/applications/dashboard/phid/PhabricatorDashboardPanelPHIDType.php index c4aec82b8e..49a5091412 100644 --- a/src/applications/dashboard/phid/PhabricatorDashboardPanelPHIDType.php +++ b/src/applications/dashboard/phid/PhabricatorDashboardPanelPHIDType.php @@ -1,73 +1,77 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $panel = $objects[$phid]; $name = $panel->getName(); $monogram = $panel->getMonogram(); $handle->setName($panel->getMonogram()); $handle->setFullName("{$monogram} {$name}"); $handle->setURI("/{$monogram}"); if ($panel->getIsArchived()) { $handle->setStatus(PhabricatorObjectHandle::STATUS_CLOSED); } } } public function canLoadNamedObject($name) { return preg_match('/^W\d*[1-9]\d*$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new PhabricatorDashboardPanelQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/differential/phid/DifferentialDiffPHIDType.php b/src/applications/differential/phid/DifferentialDiffPHIDType.php index 887397d57f..746da368c7 100644 --- a/src/applications/differential/phid/DifferentialDiffPHIDType.php +++ b/src/applications/differential/phid/DifferentialDiffPHIDType.php @@ -1,38 +1,42 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $diff = $objects[$phid]; $id = $diff->getID(); $handle->setName(pht('Diff %d', $id)); $handle->setURI("/differential/diff/{$id}/"); } } } diff --git a/src/applications/differential/phid/DifferentialRevisionPHIDType.php b/src/applications/differential/phid/DifferentialRevisionPHIDType.php index a46dc71c65..b22c8b05cb 100644 --- a/src/applications/differential/phid/DifferentialRevisionPHIDType.php +++ b/src/applications/differential/phid/DifferentialRevisionPHIDType.php @@ -1,78 +1,78 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $revision = $objects[$phid]; $title = $revision->getTitle(); $id = $revision->getID(); $status = $revision->getStatus(); $handle->setName("D{$id}"); $handle->setURI("/D{$id}"); $handle->setFullName("D{$id}: {$title}"); if ($revision->isClosed()) { $handle->setStatus(PhabricatorObjectHandle::STATUS_CLOSED); } } } public function canLoadNamedObject($name) { return preg_match('/^D[1-9]\d*$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new DifferentialRevisionQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/drydock/phid/DrydockAuthorizationPHIDType.php b/src/applications/drydock/phid/DrydockAuthorizationPHIDType.php index e518149945..058ccff6a9 100644 --- a/src/applications/drydock/phid/DrydockAuthorizationPHIDType.php +++ b/src/applications/drydock/phid/DrydockAuthorizationPHIDType.php @@ -1,37 +1,41 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $authorization = $objects[$phid]; $id = $authorization->getID(); $handle->setName(pht('Drydock Authorization %d', $id)); $handle->setURI("/drydock/authorization/{$id}/"); } } } diff --git a/src/applications/drydock/phid/DrydockBlueprintPHIDType.php b/src/applications/drydock/phid/DrydockBlueprintPHIDType.php index e63f1294a7..ef286cf5f1 100644 --- a/src/applications/drydock/phid/DrydockBlueprintPHIDType.php +++ b/src/applications/drydock/phid/DrydockBlueprintPHIDType.php @@ -1,48 +1,48 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $blueprint = $objects[$phid]; $id = $blueprint->getID(); $name = $blueprint->getBlueprintName(); $handle ->setName($name) ->setFullName(pht('Blueprint %d: %s', $id, $name)) ->setURI("/drydock/blueprint/{$id}/"); } } } diff --git a/src/applications/drydock/phid/DrydockLeasePHIDType.php b/src/applications/drydock/phid/DrydockLeasePHIDType.php index fc921cee3a..faa751b0f1 100644 --- a/src/applications/drydock/phid/DrydockLeasePHIDType.php +++ b/src/applications/drydock/phid/DrydockLeasePHIDType.php @@ -1,47 +1,47 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $lease = $objects[$phid]; $id = $lease->getID(); $handle->setName(pht( 'Lease %d', $id)); $handle->setURI("/drydock/lease/{$id}/"); } } } diff --git a/src/applications/drydock/phid/DrydockRepositoryOperationPHIDType.php b/src/applications/drydock/phid/DrydockRepositoryOperationPHIDType.php index d21efd8a86..0926f92388 100644 --- a/src/applications/drydock/phid/DrydockRepositoryOperationPHIDType.php +++ b/src/applications/drydock/phid/DrydockRepositoryOperationPHIDType.php @@ -1,37 +1,41 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $operation = $objects[$phid]; $id = $operation->getID(); $handle->setName(pht('Drydock Repository Operation %d', $id)); $handle->setURI("/drydock/operation/{$id}/"); } } } diff --git a/src/applications/drydock/phid/DrydockResourcePHIDType.php b/src/applications/drydock/phid/DrydockResourcePHIDType.php index 966cf35abe..a36647964d 100644 --- a/src/applications/drydock/phid/DrydockResourcePHIDType.php +++ b/src/applications/drydock/phid/DrydockResourcePHIDType.php @@ -1,50 +1,50 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $resource = $objects[$phid]; $id = $resource->getID(); $handle->setName( pht( 'Resource %d: %s', $id, $resource->getResourceName())); $handle->setURI("/drydock/resource/{$id}/"); } } } diff --git a/src/applications/files/phid/PhabricatorFileFilePHIDType.php b/src/applications/files/phid/PhabricatorFileFilePHIDType.php index 7b74065535..c847c7f1a5 100644 --- a/src/applications/files/phid/PhabricatorFileFilePHIDType.php +++ b/src/applications/files/phid/PhabricatorFileFilePHIDType.php @@ -1,70 +1,74 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $file = $objects[$phid]; $id = $file->getID(); $name = $file->getName(); $uri = $file->getInfoURI(); $handle->setName("F{$id}"); $handle->setFullName("F{$id}: {$name}"); $handle->setURI($uri); } } public function canLoadNamedObject($name) { return preg_match('/^F\d*[1-9]\d*$/', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new PhabricatorFileQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/fund/phid/FundBackerPHIDType.php b/src/applications/fund/phid/FundBackerPHIDType.php index f5f1258334..3feff6364a 100644 --- a/src/applications/fund/phid/FundBackerPHIDType.php +++ b/src/applications/fund/phid/FundBackerPHIDType.php @@ -1,41 +1,45 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $initiative = $objects[$phid]; $id = $initiative->getID(); $monogram = $initiative->getMonogram(); $name = $initiative->getName(); $handle->setName($name); $handle->setFullName("{$monogram} {$name}"); $handle->setURI("/fund/view/{$id}/"); } } } diff --git a/src/applications/harbormaster/phid/HarbormasterBuildArtifactPHIDType.php b/src/applications/harbormaster/phid/HarbormasterBuildArtifactPHIDType.php index 5c3eb992f7..29256afd96 100644 --- a/src/applications/harbormaster/phid/HarbormasterBuildArtifactPHIDType.php +++ b/src/applications/harbormaster/phid/HarbormasterBuildArtifactPHIDType.php @@ -1,35 +1,39 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $artifact = $objects[$phid]; $artifact_id = $artifact->getID(); $handle->setName(pht('Build Artifact %d', $artifact_id)); } } } diff --git a/src/applications/harbormaster/phid/HarbormasterBuildLogPHIDType.php b/src/applications/harbormaster/phid/HarbormasterBuildLogPHIDType.php index 5e2705a40a..c0fba81c43 100644 --- a/src/applications/harbormaster/phid/HarbormasterBuildLogPHIDType.php +++ b/src/applications/harbormaster/phid/HarbormasterBuildLogPHIDType.php @@ -1,33 +1,37 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $build_log = $objects[$phid]; } } } diff --git a/src/applications/harbormaster/phid/HarbormasterBuildPHIDType.php b/src/applications/harbormaster/phid/HarbormasterBuildPHIDType.php index 5669df4ee9..27551f13a8 100644 --- a/src/applications/harbormaster/phid/HarbormasterBuildPHIDType.php +++ b/src/applications/harbormaster/phid/HarbormasterBuildPHIDType.php @@ -1,38 +1,42 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $build = $objects[$phid]; $build_id = $build->getID(); $name = $build->getName(); $handle->setName(pht('Build %d: %s', $build_id, $name)); $handle->setURI("/harbormaster/build/{$build_id}/"); } } } diff --git a/src/applications/harbormaster/phid/HarbormasterBuildPlanPHIDType.php b/src/applications/harbormaster/phid/HarbormasterBuildPlanPHIDType.php index d2a733630a..86aacfb8d3 100644 --- a/src/applications/harbormaster/phid/HarbormasterBuildPlanPHIDType.php +++ b/src/applications/harbormaster/phid/HarbormasterBuildPlanPHIDType.php @@ -1,40 +1,44 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $build_plan = $objects[$phid]; $id = $build_plan->getID(); $handles[$phid]->setName(pht('Plan %d %s', $id, $build_plan->getName())); $handles[$phid]->setURI('/harbormaster/plan/'.$id.'/'); } } } diff --git a/src/applications/harbormaster/phid/HarbormasterBuildStepPHIDType.php b/src/applications/harbormaster/phid/HarbormasterBuildStepPHIDType.php index c3427fe46f..63e9bc6a12 100644 --- a/src/applications/harbormaster/phid/HarbormasterBuildStepPHIDType.php +++ b/src/applications/harbormaster/phid/HarbormasterBuildStepPHIDType.php @@ -1,41 +1,45 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $build_step = $objects[$phid]; $id = $build_step->getID(); $name = $build_step->getName(); $handle ->setName($name) ->setFullName(pht('Build Step %d: %s', $id, $name)) ->setURI("/harbormaster/step/view/{$id}/"); } } } diff --git a/src/applications/harbormaster/phid/HarbormasterBuildTargetPHIDType.php b/src/applications/harbormaster/phid/HarbormasterBuildTargetPHIDType.php index e16db13ccb..b20d6dc0a4 100644 --- a/src/applications/harbormaster/phid/HarbormasterBuildTargetPHIDType.php +++ b/src/applications/harbormaster/phid/HarbormasterBuildTargetPHIDType.php @@ -1,43 +1,47 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $target = $objects[$phid]; $target_id = $target->getID(); // Build target don't currently have their own page, so just point // the user at the build until we have one. $build = $target->getBuild(); $build_id = $build->getID(); $uri = "/harbormaster/build/{$build_id}/"; $handle->setName(pht('Build Target %d', $target_id)); $handle->setURI($uri); } } } diff --git a/src/applications/harbormaster/phid/HarbormasterBuildablePHIDType.php b/src/applications/harbormaster/phid/HarbormasterBuildablePHIDType.php index 8c854efdf6..c6ccabf515 100644 --- a/src/applications/harbormaster/phid/HarbormasterBuildablePHIDType.php +++ b/src/applications/harbormaster/phid/HarbormasterBuildablePHIDType.php @@ -1,70 +1,74 @@ withPHIDs($phids) ->needBuildableHandles(true); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $buildable = $objects[$phid]; $id = $buildable->getID(); $target = $buildable->getBuildableHandle()->getFullName(); $handle->setURI("/B{$id}"); $handle->setName("B{$id}"); $handle->setFullName("B{$id}: ".$target); } } public function canLoadNamedObject($name) { return preg_match('/^B\d*[1-9]\d*$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new HarbormasterBuildableQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/herald/phid/HeraldRulePHIDType.php b/src/applications/herald/phid/HeraldRulePHIDType.php index 4820eee62b..f8d5c25db4 100644 --- a/src/applications/herald/phid/HeraldRulePHIDType.php +++ b/src/applications/herald/phid/HeraldRulePHIDType.php @@ -1,69 +1,73 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $rule = $objects[$phid]; $id = $rule->getID(); $name = $rule->getName(); $handle->setName("H{$id}"); $handle->setFullName("H{$id} {$name}"); $handle->setURI("/herald/rule/{$id}/"); } } public function canLoadNamedObject($name) { return preg_match('/^H\d*[1-9]\d*$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new HeraldRuleQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/legalpad/phid/PhabricatorLegalpadDocumentPHIDType.php b/src/applications/legalpad/phid/PhabricatorLegalpadDocumentPHIDType.php index 5b1a4a9833..39c744f271 100644 --- a/src/applications/legalpad/phid/PhabricatorLegalpadDocumentPHIDType.php +++ b/src/applications/legalpad/phid/PhabricatorLegalpadDocumentPHIDType.php @@ -1,70 +1,74 @@ withPHIDs($phids) ->needDocumentBodies(true); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $document = $objects[$phid]; $name = $document->getDocumentBody()->getTitle(); $handle->setName($document->getMonogram().' '.$name); $handle->setURI('/'.$document->getMonogram()); } } public function canLoadNamedObject($name) { return preg_match('/^L\d*[1-9]\d*$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new LegalpadDocumentQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/maniphest/phid/ManiphestTaskPHIDType.php b/src/applications/maniphest/phid/ManiphestTaskPHIDType.php index 719b4a8446..3b3c4a203f 100644 --- a/src/applications/maniphest/phid/ManiphestTaskPHIDType.php +++ b/src/applications/maniphest/phid/ManiphestTaskPHIDType.php @@ -1,76 +1,76 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $task = $objects[$phid]; $id = $task->getID(); $title = $task->getTitle(); $handle->setName("T{$id}"); $handle->setFullName("T{$id}: {$title}"); $handle->setURI("/T{$id}"); if ($task->isClosed()) { $handle->setStatus(PhabricatorObjectHandle::STATUS_CLOSED); } } } public function canLoadNamedObject($name) { return preg_match('/^T\d*[1-9]\d*$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new ManiphestTaskQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/meta/phid/PhabricatorApplicationApplicationPHIDType.php b/src/applications/meta/phid/PhabricatorApplicationApplicationPHIDType.php index aa2b21b967..d0b1f763a4 100644 --- a/src/applications/meta/phid/PhabricatorApplicationApplicationPHIDType.php +++ b/src/applications/meta/phid/PhabricatorApplicationApplicationPHIDType.php @@ -1,41 +1,45 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $application = $objects[$phid]; $handle->setName($application->getName()); $handle->setURI($application->getApplicationURI()); } } } diff --git a/src/applications/metamta/phid/PhabricatorMetaMTAMailPHIDType.php b/src/applications/metamta/phid/PhabricatorMetaMTAMailPHIDType.php index 7117b50f8e..1436038fae 100644 --- a/src/applications/metamta/phid/PhabricatorMetaMTAMailPHIDType.php +++ b/src/applications/metamta/phid/PhabricatorMetaMTAMailPHIDType.php @@ -1,43 +1,43 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $mail = $objects[$phid]; $id = $mail->getID(); $name = pht('Mail %d', $id); $handle ->setName($name) ->setURI('/mail/detail/'.$id.'/'); } } } diff --git a/src/applications/nuance/phid/NuanceItemPHIDType.php b/src/applications/nuance/phid/NuanceItemPHIDType.php index e1068cc50d..f401c63594 100644 --- a/src/applications/nuance/phid/NuanceItemPHIDType.php +++ b/src/applications/nuance/phid/NuanceItemPHIDType.php @@ -1,37 +1,41 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { $viewer = $query->getViewer(); foreach ($handles as $phid => $handle) { $item = $objects[$phid]; $handle->setName($item->getLabel($viewer)); $handle->setURI($item->getURI()); } } } diff --git a/src/applications/nuance/phid/NuanceQueuePHIDType.php b/src/applications/nuance/phid/NuanceQueuePHIDType.php index 13bcfa5d20..b51812320d 100644 --- a/src/applications/nuance/phid/NuanceQueuePHIDType.php +++ b/src/applications/nuance/phid/NuanceQueuePHIDType.php @@ -1,37 +1,41 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { $viewer = $query->getViewer(); foreach ($handles as $phid => $handle) { $queue = $objects[$phid]; $handle->setName($queue->getName()); $handle->setURI($queue->getURI()); } } } diff --git a/src/applications/nuance/phid/NuanceRequestorPHIDType.php b/src/applications/nuance/phid/NuanceRequestorPHIDType.php index 2cf06bbb10..a2442d3b48 100644 --- a/src/applications/nuance/phid/NuanceRequestorPHIDType.php +++ b/src/applications/nuance/phid/NuanceRequestorPHIDType.php @@ -1,39 +1,43 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { $viewer = $query->getViewer(); foreach ($handles as $phid => $handle) { $requestor = $objects[$phid]; // TODO: This is currently useless and should be far more informative. $handle->setName(pht('Requestor %d', $requestor->getID())); $handle->setURI($requestor->getURI()); } } } diff --git a/src/applications/nuance/phid/NuanceSourcePHIDType.php b/src/applications/nuance/phid/NuanceSourcePHIDType.php index d259fe48a9..774939bf29 100644 --- a/src/applications/nuance/phid/NuanceSourcePHIDType.php +++ b/src/applications/nuance/phid/NuanceSourcePHIDType.php @@ -1,37 +1,41 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { $viewer = $query->getViewer(); foreach ($handles as $phid => $handle) { $source = $objects[$phid]; $handle->setName($source->getName()); $handle->setURI($source->getURI()); } } } diff --git a/src/applications/oauthserver/phid/PhabricatorOAuthServerClientAuthorizationPHIDType.php b/src/applications/oauthserver/phid/PhabricatorOAuthServerClientAuthorizationPHIDType.php index e3ff50a6f7..b2fc1554fd 100644 --- a/src/applications/oauthserver/phid/PhabricatorOAuthServerClientAuthorizationPHIDType.php +++ b/src/applications/oauthserver/phid/PhabricatorOAuthServerClientAuthorizationPHIDType.php @@ -1,35 +1,39 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $authorization = $objects[$phid]; $handle->setName(pht('Authorization %d', $authorization->getID())); } } } diff --git a/src/applications/oauthserver/phid/PhabricatorOAuthServerClientPHIDType.php b/src/applications/oauthserver/phid/PhabricatorOAuthServerClientPHIDType.php index 81b8fdacde..a4d8834b96 100644 --- a/src/applications/oauthserver/phid/PhabricatorOAuthServerClientPHIDType.php +++ b/src/applications/oauthserver/phid/PhabricatorOAuthServerClientPHIDType.php @@ -1,35 +1,39 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $client = $objects[$phid]; $handle->setName($client->getName()); } } } diff --git a/src/applications/owners/phid/PhabricatorOwnersPackagePHIDType.php b/src/applications/owners/phid/PhabricatorOwnersPackagePHIDType.php index b2492b0bef..fa667d4dcb 100644 --- a/src/applications/owners/phid/PhabricatorOwnersPackagePHIDType.php +++ b/src/applications/owners/phid/PhabricatorOwnersPackagePHIDType.php @@ -1,43 +1,47 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $package = $objects[$phid]; $name = $package->getName(); $id = $package->getID(); $handle->setName($name); $handle->setURI("/owners/package/{$id}/"); } } } diff --git a/src/applications/paste/phid/PhabricatorPastePastePHIDType.php b/src/applications/paste/phid/PhabricatorPastePastePHIDType.php index c07f902316..d08d52e2e1 100644 --- a/src/applications/paste/phid/PhabricatorPastePastePHIDType.php +++ b/src/applications/paste/phid/PhabricatorPastePastePHIDType.php @@ -1,69 +1,73 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $paste = $objects[$phid]; $id = $paste->getID(); $name = $paste->getFullName(); $handle->setName("P{$id}"); $handle->setFullName($name); $handle->setURI("/P{$id}"); } } public function canLoadNamedObject($name) { return preg_match('/^P\d*[1-9]\d*$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new PhabricatorPasteQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/people/phid/PhabricatorPeopleExternalPHIDType.php b/src/applications/people/phid/PhabricatorPeopleExternalPHIDType.php index 9fd565700c..4be4cc5359 100644 --- a/src/applications/people/phid/PhabricatorPeopleExternalPHIDType.php +++ b/src/applications/people/phid/PhabricatorPeopleExternalPHIDType.php @@ -1,36 +1,40 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $account = $objects[$phid]; $display_name = $account->getDisplayName(); $handle->setName($display_name); } } } diff --git a/src/applications/people/phid/PhabricatorPeopleUserPHIDType.php b/src/applications/people/phid/PhabricatorPeopleUserPHIDType.php index f09c75087e..0304173f90 100644 --- a/src/applications/people/phid/PhabricatorPeopleUserPHIDType.php +++ b/src/applications/people/phid/PhabricatorPeopleUserPHIDType.php @@ -1,99 +1,99 @@ withPHIDs($phids) ->needProfileImage(true) ->needAvailability(true); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $user = $objects[$phid]; $realname = $user->getRealName(); $handle->setName($user->getUsername()); $handle->setURI('/p/'.$user->getUsername().'/'); $handle->setFullName($user->getFullName()); $handle->setImageURI($user->getProfileImageURI()); if ($user->getIsMailingList()) { $handle->setIcon('fa-envelope-o'); } $availability = null; if (!$user->isUserActivated()) { $availability = PhabricatorObjectHandle::AVAILABILITY_DISABLED; } else { $until = $user->getAwayUntil(); if ($until) { $availability = PhabricatorObjectHandle::AVAILABILITY_NONE; } } if ($availability) { $handle->setAvailability($availability); } } } public function canLoadNamedObject($name) { return preg_match('/^@.+/', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = substr($name, 1); $id = phutil_utf8_strtolower($id); $id_map[$id][] = $name; } $objects = id(new PhabricatorPeopleQuery()) ->setViewer($query->getViewer()) ->withUsernames(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { $user_key = $object->getUsername(); $user_key = phutil_utf8_strtolower($user_key); foreach (idx($id_map, $user_key, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/phame/phid/PhabricatorPhameBlogPHIDType.php b/src/applications/phame/phid/PhabricatorPhameBlogPHIDType.php index 458da16c4d..18ea30aea8 100644 --- a/src/applications/phame/phid/PhabricatorPhameBlogPHIDType.php +++ b/src/applications/phame/phid/PhabricatorPhameBlogPHIDType.php @@ -1,36 +1,40 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $blog = $objects[$phid]; $handle->setName($blog->getName()); $handle->setFullName($blog->getName()); $handle->setURI('/phame/blog/view/'.$blog->getID().'/'); } } } diff --git a/src/applications/phame/phid/PhabricatorPhamePostPHIDType.php b/src/applications/phame/phid/PhabricatorPhamePostPHIDType.php index e5eeef3715..5573f2db9f 100644 --- a/src/applications/phame/phid/PhabricatorPhamePostPHIDType.php +++ b/src/applications/phame/phid/PhabricatorPhamePostPHIDType.php @@ -1,36 +1,40 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $post = $objects[$phid]; $handle->setName($post->getTitle()); $handle->setFullName($post->getTitle()); $handle->setURI('/phame/post/view/'.$post->getID().'/'); } } } diff --git a/src/applications/phid/PhabricatorMetaMTAApplicationEmailPHIDType.php b/src/applications/phid/PhabricatorMetaMTAApplicationEmailPHIDType.php index 1069b35793..93d8a47de7 100644 --- a/src/applications/phid/PhabricatorMetaMTAApplicationEmailPHIDType.php +++ b/src/applications/phid/PhabricatorMetaMTAApplicationEmailPHIDType.php @@ -1,44 +1,44 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $email = $objects[$phid]; $handle->setName($email->getAddress()); $handle->setFullName($email->getAddress()); } } } diff --git a/src/applications/phid/type/PhabricatorPHIDType.php b/src/applications/phid/type/PhabricatorPHIDType.php index a8502b12f7..e39ff5f562 100644 --- a/src/applications/phid/type/PhabricatorPHIDType.php +++ b/src/applications/phid/type/PhabricatorPHIDType.php @@ -1,202 +1,197 @@ getPhobjectClassConstant('TYPECONST'); if (!is_string($const) || !preg_match('/^[A-Z]{4}$/', $const)) { throw new Exception( pht( '%s class "%s" has an invalid %s property. PHID '. 'constants must be a four character uppercase string.', __CLASS__, get_class($this), 'TYPECONST')); } return $const; } abstract public function getTypeName(); - public function newObject() { - return null; - } - public function getTypeIcon() { // Default to the application icon if the type doesn't specify one. $application_class = $this->getPHIDTypeApplicationClass(); if ($application_class) { $application = newv($application_class, array()); return $application->getFontIcon(); } return null; } + public function newObject() { + return null; + } + /** * Get the class name for the application this type belongs to. * * @return string|null Class name of the corresponding application, or null * if the type is not bound to an application. */ - public function getPHIDTypeApplicationClass() { - // TODO: Some day this should probably be abstract, but for now it only - // affects global search and there's no real burning need to go classify - // every PHID type. - return null; - } + abstract public function getPHIDTypeApplicationClass(); /** * Build a @{class:PhabricatorPolicyAwareQuery} to load objects of this type * by PHID. * * If you can not build a single query which satisfies this requirement, you * can provide a dummy implementation for this method and overload * @{method:loadObjects} instead. * * @param PhabricatorObjectQuery Query being executed. * @param list PHIDs to load. * @return PhabricatorPolicyAwareQuery Query object which loads the * specified PHIDs when executed. */ abstract protected function buildQueryForObjects( PhabricatorObjectQuery $query, array $phids); /** * Load objects of this type, by PHID. For most PHID types, it is only * necessary to implement @{method:buildQueryForObjects} to get object * loading to work. * * @param PhabricatorObjectQuery Query being executed. * @param list PHIDs to load. * @return list Corresponding objects. */ public function loadObjects( PhabricatorObjectQuery $query, array $phids) { $object_query = $this->buildQueryForObjects($query, $phids) ->setViewer($query->getViewer()) ->setParentQuery($query); // If the user doesn't have permission to use the application at all, // just mark all the PHIDs as filtered. This primarily makes these // objects show up as "Restricted" instead of "Unknown" when loaded as // handles, which is technically true. if (!$object_query->canViewerUseQueryApplication()) { $object_query->addPolicyFilteredPHIDs(array_fuse($phids)); return array(); } return $object_query->execute(); } /** * Populate provided handles with application-specific data, like titles and * URIs. * * NOTE: The `$handles` and `$objects` lists are guaranteed to be nonempty * and have the same keys: subclasses are expected to load information only * for handles with visible objects. * * Because of this guarantee, a safe implementation will typically look like* * * foreach ($handles as $phid => $handle) { * $object = $objects[$phid]; * * $handle->setStuff($object->getStuff()); * // ... * } * * In general, an implementation should call `setName()` and `setURI()` on * each handle at a minimum. See @{class:PhabricatorObjectHandle} for other * handle properties. * * @param PhabricatorHandleQuery Issuing query object. * @param list Handles to populate with data. * @param list Objects for these PHIDs loaded by * @{method:buildQueryForObjects()}. * @return void */ abstract public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects); public function canLoadNamedObject($name) { return false; } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { throw new PhutilMethodNotImplementedException(); } /** * Get all known PHID types. * * To get PHID types a given user has access to, see * @{method:getAllInstalledTypes}. * * @return dict Map of type constants to types. */ final public static function getAllTypes() { return id(new PhutilClassMapQuery()) ->setAncestorClass(__CLASS__) ->setUniqueMethod('getTypeConstant') ->execute(); } /** * Get all PHID types of applications installed for a given viewer. * * @param PhabricatorUser Viewing user. * @return dict Map of constants to installed * types. */ public static function getAllInstalledTypes(PhabricatorUser $viewer) { $all_types = self::getAllTypes(); $installed_types = array(); $app_classes = array(); foreach ($all_types as $key => $type) { $app_class = $type->getPHIDTypeApplicationClass(); if ($app_class === null) { // If the PHID type isn't bound to an application, include it as // installed. $installed_types[$key] = $type; continue; } // Otherwise, we need to check if this application is installed before // including the PHID type. $app_classes[$app_class][$key] = $type; } if ($app_classes) { $apps = id(new PhabricatorApplicationQuery()) ->setViewer($viewer) ->withInstalled(true) ->withClasses(array_keys($app_classes)) ->execute(); foreach ($apps as $app_class => $app) { $installed_types += $app_classes[$app_class]; } } return $installed_types; } } diff --git a/src/applications/phid/type/__tests__/PhabricatorPHIDTypeTestCase.php b/src/applications/phid/type/__tests__/PhabricatorPHIDTypeTestCase.php index e7707095ad..ec2d932047 100644 --- a/src/applications/phid/type/__tests__/PhabricatorPHIDTypeTestCase.php +++ b/src/applications/phid/type/__tests__/PhabricatorPHIDTypeTestCase.php @@ -1,10 +1,22 @@ assertTrue(true); } + public function testGetPHIDTypeApplicationClass() { + $types = PhabricatorPHIDType::getAllTypes(); + + foreach ($types as $type) { + $application_class = $type->getPHIDTypeApplicationClass(); + + if ($application_class !== null) { + $this->assertTrue(class_exists($application_class)); + } + } + } + } diff --git a/src/applications/phlux/phid/PhluxVariablePHIDType.php b/src/applications/phlux/phid/PhluxVariablePHIDType.php index 643025fd9c..97525c4052 100644 --- a/src/applications/phlux/phid/PhluxVariablePHIDType.php +++ b/src/applications/phlux/phid/PhluxVariablePHIDType.php @@ -1,39 +1,43 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $variable = $objects[$phid]; $key = $variable->getVariableKey(); $handle->setName($key); $handle->setFullName(pht('Variable "%s"', $key)); $handle->setURI("/phlux/view/{$key}/"); } } } diff --git a/src/applications/pholio/phid/PholioImagePHIDType.php b/src/applications/pholio/phid/PholioImagePHIDType.php index 9278977b77..b28dbd64d5 100644 --- a/src/applications/pholio/phid/PholioImagePHIDType.php +++ b/src/applications/pholio/phid/PholioImagePHIDType.php @@ -1,41 +1,45 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $image = $objects[$phid]; $id = $image->getID(); $mock_id = $image->getMockID(); $name = $image->getName(); $handle->setURI("/M{$mock_id}/{$id}/"); $handle->setName($name); $handle->setFullName($name); } } } diff --git a/src/applications/pholio/phid/PholioMockPHIDType.php b/src/applications/pholio/phid/PholioMockPHIDType.php index e41f326e94..13ee4cb81f 100644 --- a/src/applications/pholio/phid/PholioMockPHIDType.php +++ b/src/applications/pholio/phid/PholioMockPHIDType.php @@ -1,77 +1,77 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $mock = $objects[$phid]; $id = $mock->getID(); $name = $mock->getName(); $handle->setURI("/M{$id}"); $handle->setName("M{$id}"); $handle->setFullName("M{$id}: {$name}"); if ($mock->isClosed()) { $handle->setStatus(PhabricatorObjectHandle::STATUS_CLOSED); } } } public function canLoadNamedObject($name) { return preg_match('/^M\d*[1-9]\d*$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new PholioMockQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/phortune/phid/PhortuneAccountPHIDType.php b/src/applications/phortune/phid/PhortuneAccountPHIDType.php index b9d1bee1a6..cf5f5d06f2 100644 --- a/src/applications/phortune/phid/PhortuneAccountPHIDType.php +++ b/src/applications/phortune/phid/PhortuneAccountPHIDType.php @@ -1,38 +1,42 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $account = $objects[$phid]; $id = $account->getID(); $handle->setName($account->getName()); $handle->setURI("/phortune/{$id}/"); } } } diff --git a/src/applications/phortune/phid/PhortuneCartPHIDType.php b/src/applications/phortune/phid/PhortuneCartPHIDType.php index f42e563cee..c805a4a921 100644 --- a/src/applications/phortune/phid/PhortuneCartPHIDType.php +++ b/src/applications/phortune/phid/PhortuneCartPHIDType.php @@ -1,39 +1,43 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $cart = $objects[$phid]; $id = $cart->getID(); $name = $cart->getName(); $handle->setName($name); $handle->setURI("/phortune/cart/{$id}/"); } } } diff --git a/src/applications/phortune/phid/PhortuneChargePHIDType.php b/src/applications/phortune/phid/PhortuneChargePHIDType.php index b88a605d0c..013db6ab1c 100644 --- a/src/applications/phortune/phid/PhortuneChargePHIDType.php +++ b/src/applications/phortune/phid/PhortuneChargePHIDType.php @@ -1,38 +1,42 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $charge = $objects[$phid]; $id = $charge->getID(); $handle->setName(pht('Charge %d', $id)); $handle->setURI("/phortune/charge/{$id}/"); } } } diff --git a/src/applications/phortune/phid/PhortuneMerchantPHIDType.php b/src/applications/phortune/phid/PhortuneMerchantPHIDType.php index a1b8b73871..941f704ab8 100644 --- a/src/applications/phortune/phid/PhortuneMerchantPHIDType.php +++ b/src/applications/phortune/phid/PhortuneMerchantPHIDType.php @@ -1,38 +1,42 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $merchant = $objects[$phid]; $id = $merchant->getID(); $handle->setName($merchant->getName()); $handle->setURI("/phortune/merchant/{$id}/"); } } } diff --git a/src/applications/phortune/phid/PhortunePaymentMethodPHIDType.php b/src/applications/phortune/phid/PhortunePaymentMethodPHIDType.php index 2df0a0acd5..7906f87414 100644 --- a/src/applications/phortune/phid/PhortunePaymentMethodPHIDType.php +++ b/src/applications/phortune/phid/PhortunePaymentMethodPHIDType.php @@ -1,37 +1,41 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $method = $objects[$phid]; $id = $method->getID(); $handle->setName($method->getFullDisplayName()); } } } diff --git a/src/applications/phortune/phid/PhortunePaymentProviderPHIDType.php b/src/applications/phortune/phid/PhortunePaymentProviderPHIDType.php index 7391e71108..dc96d08648 100644 --- a/src/applications/phortune/phid/PhortunePaymentProviderPHIDType.php +++ b/src/applications/phortune/phid/PhortunePaymentProviderPHIDType.php @@ -1,37 +1,41 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $provider_config = $objects[$phid]; $id = $provider_config->getID(); $handle->setName($provider_config->buildProvider()->getName()); } } } diff --git a/src/applications/phortune/phid/PhortuneProductPHIDType.php b/src/applications/phortune/phid/PhortuneProductPHIDType.php index 7acbafe9a3..409377186f 100644 --- a/src/applications/phortune/phid/PhortuneProductPHIDType.php +++ b/src/applications/phortune/phid/PhortuneProductPHIDType.php @@ -1,38 +1,42 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $product = $objects[$phid]; $id = $product->getID(); $handle->setName(pht('Product %d', $id)); $handle->setURI("/phortune/product/{$id}/"); } } } diff --git a/src/applications/phortune/phid/PhortunePurchasePHIDType.php b/src/applications/phortune/phid/PhortunePurchasePHIDType.php index b00faa585c..08f88b1d33 100644 --- a/src/applications/phortune/phid/PhortunePurchasePHIDType.php +++ b/src/applications/phortune/phid/PhortunePurchasePHIDType.php @@ -1,38 +1,42 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $purchase = $objects[$phid]; $id = $purchase->getID(); $handle->setName($purchase->getFullDisplayName()); $handle->setURI($purchase->getURI()); } } } diff --git a/src/applications/phortune/phid/PhortuneSubscriptionPHIDType.php b/src/applications/phortune/phid/PhortuneSubscriptionPHIDType.php index 9eafc4ed83..6d7275c62b 100644 --- a/src/applications/phortune/phid/PhortuneSubscriptionPHIDType.php +++ b/src/applications/phortune/phid/PhortuneSubscriptionPHIDType.php @@ -1,39 +1,43 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $subscription = $objects[$phid]; $id = $subscription->getID(); $handle->setName($subscription->getSubscriptionName()); $handle->setURI($subscription->getURI()); } } } diff --git a/src/applications/phragment/phid/PhragmentFragmentPHIDType.php b/src/applications/phragment/phid/PhragmentFragmentPHIDType.php index 3722b2fd69..2947bca98e 100644 --- a/src/applications/phragment/phid/PhragmentFragmentPHIDType.php +++ b/src/applications/phragment/phid/PhragmentFragmentPHIDType.php @@ -1,40 +1,44 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { $viewer = $query->getViewer(); foreach ($handles as $phid => $handle) { $fragment = $objects[$phid]; $handle->setName(pht( 'Fragment %s: %s', $fragment->getID(), $fragment->getName())); $handle->setURI($fragment->getURI()); } } } diff --git a/src/applications/phragment/phid/PhragmentFragmentVersionPHIDType.php b/src/applications/phragment/phid/PhragmentFragmentVersionPHIDType.php index 2ab0240b5c..2fa00b15ce 100644 --- a/src/applications/phragment/phid/PhragmentFragmentVersionPHIDType.php +++ b/src/applications/phragment/phid/PhragmentFragmentVersionPHIDType.php @@ -1,40 +1,44 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { $viewer = $query->getViewer(); foreach ($handles as $phid => $handle) { $version = $objects[$phid]; $handle->setName(pht( 'Fragment Version %d: %s', $version->getSequence(), $version->getFragment()->getName())); $handle->setURI($version->getURI()); } } } diff --git a/src/applications/phragment/phid/PhragmentSnapshotPHIDType.php b/src/applications/phragment/phid/PhragmentSnapshotPHIDType.php index 060b37963c..d97026a601 100644 --- a/src/applications/phragment/phid/PhragmentSnapshotPHIDType.php +++ b/src/applications/phragment/phid/PhragmentSnapshotPHIDType.php @@ -1,39 +1,43 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { $viewer = $query->getViewer(); foreach ($handles as $phid => $handle) { $snapshot = $objects[$phid]; $handle->setName(pht( 'Snapshot: %s', $snapshot->getName())); $handle->setURI($snapshot->getURI()); } } } diff --git a/src/applications/phriction/phid/PhrictionDocumentPHIDType.php b/src/applications/phriction/phid/PhrictionDocumentPHIDType.php index 934dc73b30..57afdb84d6 100644 --- a/src/applications/phriction/phid/PhrictionDocumentPHIDType.php +++ b/src/applications/phriction/phid/PhrictionDocumentPHIDType.php @@ -1,50 +1,50 @@ withPHIDs($phids) ->needContent(true); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $document = $objects[$phid]; $content = $document->getContent(); $title = $content->getTitle(); $slug = $document->getSlug(); $status = $document->getStatus(); $handle->setName($title); $handle->setURI(PhrictionDocument::getSlugURI($slug)); if ($status != PhrictionDocumentStatus::STATUS_EXISTS) { $handle->setStatus(PhabricatorObjectHandle::STATUS_CLOSED); } } } } diff --git a/src/applications/phurl/phid/PhabricatorPhurlURLPHIDType.php b/src/applications/phurl/phid/PhabricatorPhurlURLPHIDType.php index f273732b82..979b25c791 100644 --- a/src/applications/phurl/phid/PhabricatorPhurlURLPHIDType.php +++ b/src/applications/phurl/phid/PhabricatorPhurlURLPHIDType.php @@ -1,74 +1,74 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $url = $objects[$phid]; $id = $url->getID(); $name = $url->getName(); $full_name = $url->getMonogram().' '.$name; $handle ->setName($name) ->setFullName($full_name) ->setURI($url->getURI()); } } public function canLoadNamedObject($name) { return preg_match('/^U[1-9]\d*$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new PhabricatorPhurlURLQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/policy/phid/PhabricatorPolicyPHIDTypePolicy.php b/src/applications/policy/phid/PhabricatorPolicyPHIDTypePolicy.php index 225aa22ac1..ed75561327 100644 --- a/src/applications/policy/phid/PhabricatorPolicyPHIDTypePolicy.php +++ b/src/applications/policy/phid/PhabricatorPolicyPHIDTypePolicy.php @@ -1,36 +1,40 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $policy = $objects[$phid]; $handle->setName($policy->getName()); $handle->setURI($policy->getHref()); } } } diff --git a/src/applications/ponder/phid/PonderQuestionPHIDType.php b/src/applications/ponder/phid/PonderQuestionPHIDType.php index db1d5acff2..9bdd80aae6 100644 --- a/src/applications/ponder/phid/PonderQuestionPHIDType.php +++ b/src/applications/ponder/phid/PonderQuestionPHIDType.php @@ -1,72 +1,72 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $question = $objects[$phid]; $id = $question->getID(); $handle->setName("Q{$id}"); $handle->setURI("/Q{$id}"); $handle->setFullName($question->getFullTitle()); } } public function canLoadNamedObject($name) { return preg_match('/^Q\d*[1-9]\d*$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new PonderQuestionQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/project/phid/PhabricatorProjectColumnPHIDType.php b/src/applications/project/phid/PhabricatorProjectColumnPHIDType.php index 4ac0399cf7..07c7f7a0ee 100644 --- a/src/applications/project/phid/PhabricatorProjectColumnPHIDType.php +++ b/src/applications/project/phid/PhabricatorProjectColumnPHIDType.php @@ -1,44 +1,48 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $column = $objects[$phid]; $handle->setName($column->getDisplayName()); $handle->setURI('/project/board/'.$column->getProject()->getID().'/'); if ($column->isHidden()) { $handle->setStatus(PhabricatorObjectHandle::STATUS_CLOSED); } } } } diff --git a/src/applications/project/phid/PhabricatorProjectProjectPHIDType.php b/src/applications/project/phid/PhabricatorProjectProjectPHIDType.php index 5689be49ce..c3d9bdd3fb 100644 --- a/src/applications/project/phid/PhabricatorProjectProjectPHIDType.php +++ b/src/applications/project/phid/PhabricatorProjectProjectPHIDType.php @@ -1,110 +1,110 @@ withPHIDs($phids) ->needImages(true); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $project = $objects[$phid]; $name = $project->getName(); $id = $project->getID(); $slug = $project->getPrimarySlug(); $handle->setName($name); $handle->setObjectName('#'.$slug); $handle->setURI("/tag/{$slug}/"); $handle->setImageURI($project->getProfileImageURI()); $handle->setIcon($project->getIcon()); $handle->setTagColor($project->getColor()); if ($project->isArchived()) { $handle->setStatus(PhabricatorObjectHandle::STATUS_CLOSED); } } } public static function getProjectMonogramPatternFragment() { // NOTE: See some discussion in ProjectRemarkupRule. return '[^\s,#]+'; } public function canLoadNamedObject($name) { $fragment = self::getProjectMonogramPatternFragment(); return preg_match('/^#'.$fragment.'$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { // If the user types "#YoloSwag", we still want to match "#yoloswag", so // we normalize, query, and then map back to the original inputs. $map = array(); foreach ($names as $key => $slug) { $map[$this->normalizeSlug(substr($slug, 1))][] = $slug; } $projects = id(new PhabricatorProjectQuery()) ->setViewer($query->getViewer()) ->withSlugs(array_keys($map)) ->needSlugs(true) ->execute(); $result = array(); foreach ($projects as $project) { $slugs = $project->getSlugs(); $slug_strs = mpull($slugs, 'getSlug'); foreach ($slug_strs as $slug) { $slug_map = idx($map, $slug, array()); foreach ($slug_map as $original) { $result[$original] = $project; } } } return $result; } private function normalizeSlug($slug) { // NOTE: We're using phutil_utf8_strtolower() (and not PhabricatorSlug's // normalize() method) because this normalization should be only somewhat // liberal. We want "#YOLO" to match against "#yolo", but "#\\yo!!lo" // should not. normalize() strips out most punctuation and leads to // excessively aggressive matches. return phutil_utf8_strtolower($slug); } } diff --git a/src/applications/releeph/phid/ReleephBranchPHIDType.php b/src/applications/releeph/phid/ReleephBranchPHIDType.php index 487f5eebb0..d3a545d0df 100644 --- a/src/applications/releeph/phid/ReleephBranchPHIDType.php +++ b/src/applications/releeph/phid/ReleephBranchPHIDType.php @@ -1,37 +1,41 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $branch = $objects[$phid]; $handle->setURI($branch->getURI()); $handle->setName($branch->getBasename()); $handle->setFullName($branch->getName()); } } } diff --git a/src/applications/releeph/phid/ReleephProductPHIDType.php b/src/applications/releeph/phid/ReleephProductPHIDType.php index 7e8079b309..c7979cfba3 100644 --- a/src/applications/releeph/phid/ReleephProductPHIDType.php +++ b/src/applications/releeph/phid/ReleephProductPHIDType.php @@ -1,36 +1,40 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $product = $objects[$phid]; $handle->setName($product->getName()); $handle->setURI($product->getURI()); } } } diff --git a/src/applications/releeph/phid/ReleephRequestPHIDType.php b/src/applications/releeph/phid/ReleephRequestPHIDType.php index 202b146fe8..7bd853f984 100644 --- a/src/applications/releeph/phid/ReleephRequestPHIDType.php +++ b/src/applications/releeph/phid/ReleephRequestPHIDType.php @@ -1,40 +1,44 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $request = $objects[$phid]; $id = $request->getID(); $title = $request->getSummaryForDisplay(); $handle->setURI("/RQ{$id}"); $handle->setName($title); $handle->setFullName("RQ{$id}: {$title}"); } } } diff --git a/src/applications/repository/phid/PhabricatorRepositoryCommitPHIDType.php b/src/applications/repository/phid/PhabricatorRepositoryCommitPHIDType.php index a176c5b7dd..0f62d523d2 100644 --- a/src/applications/repository/phid/PhabricatorRepositoryCommitPHIDType.php +++ b/src/applications/repository/phid/PhabricatorRepositoryCommitPHIDType.php @@ -1,82 +1,82 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $commit = $objects[$phid]; $repository = $commit->getRepository(); $commit_identifier = $commit->getCommitIdentifier(); $name = $repository->formatCommitName($commit_identifier); $summary = $commit->getSummary(); if (strlen($summary)) { $full_name = $name.': '.$summary; } else { $full_name = $name; } $handle->setName($name); $handle->setFullName($full_name); $handle->setURI($commit->getURI()); $handle->setTimestamp($commit->getEpoch()); } } public static function getCommitObjectNamePattern() { $min_unqualified = PhabricatorRepository::MINIMUM_UNQUALIFIED_HASH; $min_qualified = PhabricatorRepository::MINIMUM_QUALIFIED_HASH; return '(?:r[A-Z]+:?|R[0-9]+:)[1-9]\d*'. '|'. '(?:r[A-Z]+:?|R[0-9]+:)[a-f0-9]{'.$min_qualified.',40}'. '|'. '[a-f0-9]{'.$min_unqualified.',40}'; } public function canLoadNamedObject($name) { $pattern = self::getCommitObjectNamePattern(); return preg_match('(^'.$pattern.'$)', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $query = id(new DiffusionCommitQuery()) ->setViewer($query->getViewer()) ->withIdentifiers($names); $query->execute(); return $query->getIdentifierMap(); } } diff --git a/src/applications/repository/phid/PhabricatorRepositoryMirrorPHIDType.php b/src/applications/repository/phid/PhabricatorRepositoryMirrorPHIDType.php index f10af8ac58..42737c7281 100644 --- a/src/applications/repository/phid/PhabricatorRepositoryMirrorPHIDType.php +++ b/src/applications/repository/phid/PhabricatorRepositoryMirrorPHIDType.php @@ -1,37 +1,41 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $mirror = $objects[$phid]; $handle->setName( pht('Mirror %d %s', $mirror->getID(), $mirror->getRemoteURI())); $handle->setURI('/diffusion/mirror/'.$mirror->getID().'/'); } } } diff --git a/src/applications/repository/phid/PhabricatorRepositoryPushEventPHIDType.php b/src/applications/repository/phid/PhabricatorRepositoryPushEventPHIDType.php index db02bd8c1f..364ce62e5d 100644 --- a/src/applications/repository/phid/PhabricatorRepositoryPushEventPHIDType.php +++ b/src/applications/repository/phid/PhabricatorRepositoryPushEventPHIDType.php @@ -1,35 +1,39 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $event = $objects[$phid]; $handle->setName(pht('Push Event %d', $event->getID())); } } } diff --git a/src/applications/repository/phid/PhabricatorRepositoryPushLogPHIDType.php b/src/applications/repository/phid/PhabricatorRepositoryPushLogPHIDType.php index 4a315ac004..6af117db19 100644 --- a/src/applications/repository/phid/PhabricatorRepositoryPushLogPHIDType.php +++ b/src/applications/repository/phid/PhabricatorRepositoryPushLogPHIDType.php @@ -1,35 +1,39 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $log = $objects[$phid]; $handle->setName(pht('Push Log %d', $log->getID())); } } } diff --git a/src/applications/repository/phid/PhabricatorRepositoryRepositoryPHIDType.php b/src/applications/repository/phid/PhabricatorRepositoryRepositoryPHIDType.php index d46a69dd33..5a3bca339d 100644 --- a/src/applications/repository/phid/PhabricatorRepositoryRepositoryPHIDType.php +++ b/src/applications/repository/phid/PhabricatorRepositoryRepositoryPHIDType.php @@ -1,79 +1,83 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $repository = $objects[$phid]; $monogram = $repository->getMonogram(); $callsign = $repository->getCallsign(); $name = $repository->getName(); $handle->setName($monogram); $handle->setFullName("{$monogram} {$name}"); $handle->setURI("/diffusion/{$callsign}/"); } } public function canLoadNamedObject($name) { return preg_match('/^r[A-Z]+|R[0-9]+$/', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $results = array(); $id_map = array(); foreach ($names as $key => $name) { $id = substr($name, 1); $id_map[$id][] = $name; $names[$key] = substr($name, 1); } $query = id(new PhabricatorRepositoryQuery()) ->setViewer($query->getViewer()) ->withIdentifiers($names); if ($query->execute()) { $objects = $query->getIdentifierMap(); foreach ($objects as $key => $object) { foreach (idx($id_map, $key, array()) as $name) { $results[$name] = $object; } } return $results; } else { return array(); } } } diff --git a/src/applications/slowvote/phid/PhabricatorSlowvotePollPHIDType.php b/src/applications/slowvote/phid/PhabricatorSlowvotePollPHIDType.php index 927e6a3942..42ced85b22 100644 --- a/src/applications/slowvote/phid/PhabricatorSlowvotePollPHIDType.php +++ b/src/applications/slowvote/phid/PhabricatorSlowvotePollPHIDType.php @@ -1,66 +1,70 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $poll = $objects[$phid]; $handle->setName('V'.$poll->getID()); $handle->setFullName('V'.$poll->getID().': '.$poll->getQuestion()); $handle->setURI('/V'.$poll->getID()); } } public function canLoadNamedObject($name) { return preg_match('/^V\d*[1-9]\d*$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new PhabricatorSlowvoteQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php b/src/applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php index 6645c7edbd..86371d6420 100644 --- a/src/applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php +++ b/src/applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php @@ -1,78 +1,78 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $namespace = $objects[$phid]; $monogram = $namespace->getMonogram(); $name = $namespace->getNamespaceName(); $handle->setName($name); $handle->setFullName(pht('%s %s', $monogram, $name)); $handle->setURI('/'.$monogram); if ($namespace->getIsArchived()) { $handle->setStatus(PhabricatorObjectHandle::STATUS_CLOSED); } } } public function canLoadNamedObject($name) { return preg_match('/^S[1-9]\d*$/i', $name); } public function loadNamedObjects( PhabricatorObjectQuery $query, array $names) { $id_map = array(); foreach ($names as $name) { $id = (int)substr($name, 1); $id_map[$id][] = $name; } $objects = id(new PhabricatorSpacesNamespaceQuery()) ->setViewer($query->getViewer()) ->withIDs(array_keys($id_map)) ->execute(); $results = array(); foreach ($objects as $id => $object) { foreach (idx($id_map, $id, array()) as $name) { $results[$name] = $object; } } return $results; } } diff --git a/src/applications/tokens/phid/PhabricatorTokenTokenPHIDType.php b/src/applications/tokens/phid/PhabricatorTokenTokenPHIDType.php index 1791cc88c7..93ff9500ac 100644 --- a/src/applications/tokens/phid/PhabricatorTokenTokenPHIDType.php +++ b/src/applications/tokens/phid/PhabricatorTokenTokenPHIDType.php @@ -1,37 +1,41 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $token = $objects[$phid]; $name = $token->getName(); $handle->setName(pht('%s Token', $name)); } } } diff --git a/src/applications/transactions/phid/PhabricatorApplicationTransactionTransactionPHIDType.php b/src/applications/transactions/phid/PhabricatorApplicationTransactionTransactionPHIDType.php index ccb5d271ab..e6184b1ae4 100644 --- a/src/applications/transactions/phid/PhabricatorApplicationTransactionTransactionPHIDType.php +++ b/src/applications/transactions/phid/PhabricatorApplicationTransactionTransactionPHIDType.php @@ -1,88 +1,92 @@ setAncestorClass('PhabricatorApplicationTransactionQuery') ->execute(); $queries = array(); foreach ($objects as $object) { $type = $object ->getTemplateApplicationTransaction() ->getApplicationTransactionType(); $queries[$type] = $object; } } $phid_subtypes = array(); foreach ($phids as $phid) { $subtype = phid_get_subtype($phid); if ($subtype) { $phid_subtypes[$subtype][] = $phid; } } $results = array(); foreach ($phid_subtypes as $subtype => $subtype_phids) { $query = idx($queries, $subtype); if (!$query) { continue; } $xaction_query = id(clone $query) ->setViewer($object_query->getViewer()) ->setParentQuery($object_query) ->withPHIDs($subtype_phids); if (!$xaction_query->canViewerUseQueryApplication()) { $object_query->addPolicyFilteredPHIDs(array_fuse($subtype_phids)); continue; } $xactions = $xaction_query->execute(); $results += mpull($xactions, null, 'getPHID'); } return $results; } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { // NOTE: We don't produce meaningful handles here because they're // impractical to produce and no application uses them. } } diff --git a/src/infrastructure/daemon/workers/phid/PhabricatorWorkerBulkJobPHIDType.php b/src/infrastructure/daemon/workers/phid/PhabricatorWorkerBulkJobPHIDType.php index 7550d1cf02..b94f7eab27 100644 --- a/src/infrastructure/daemon/workers/phid/PhabricatorWorkerBulkJobPHIDType.php +++ b/src/infrastructure/daemon/workers/phid/PhabricatorWorkerBulkJobPHIDType.php @@ -1,37 +1,41 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $job = $objects[$phid]; $id = $job->getID(); $handle->setName(pht('Bulk Job %d', $id)); } } } diff --git a/src/infrastructure/daemon/workers/phid/PhabricatorWorkerTriggerPHIDType.php b/src/infrastructure/daemon/workers/phid/PhabricatorWorkerTriggerPHIDType.php index 02112c91b5..b1dadb568e 100644 --- a/src/infrastructure/daemon/workers/phid/PhabricatorWorkerTriggerPHIDType.php +++ b/src/infrastructure/daemon/workers/phid/PhabricatorWorkerTriggerPHIDType.php @@ -1,37 +1,41 @@ withPHIDs($phids); } public function loadHandles( PhabricatorHandleQuery $query, array $handles, array $objects) { foreach ($handles as $phid => $handle) { $trigger = $objects[$phid]; $id = $trigger->getID(); $handle->setName(pht('Trigger %d', $id)); } } }