Differential D21553 Diff 51304 src/applications/search/controller/PhabricatorSearchHovercardController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/search/controller/PhabricatorSearchHovercardController.php
| <?php | <?php | ||||
| final class PhabricatorSearchHovercardController | final class PhabricatorSearchHovercardController | ||||
| extends PhabricatorSearchBaseController { | extends PhabricatorSearchBaseController { | ||||
| public function shouldAllowPublic() { | public function shouldAllowPublic() { | ||||
| return true; | return true; | ||||
| } | } | ||||
| public function handleRequest(AphrontRequest $request) { | public function handleRequest(AphrontRequest $request) { | ||||
| $viewer = $this->getViewer(); | $viewer = $this->getViewer(); | ||||
| $phids = $request->getArr('phids'); | |||||
| $cards = $request->getJSONMap('cards'); | |||||
| // If object names are provided, look them up and pretend they were | // If object names are provided, look them up and pretend they were | ||||
| // passed as additional PHIDs. This is primarily useful for debugging, | // passed as additional PHIDs. This is primarily useful for debugging, | ||||
| // since you don't have to go look up user PHIDs to preview their | // since you don't have to go look up user PHIDs to preview their | ||||
| // hovercards. | // hovercards. | ||||
| $names = $request->getStrList('names'); | $names = $request->getStrList('names'); | ||||
| if ($names) { | if ($names) { | ||||
| $named_objects = id(new PhabricatorObjectQuery()) | $named_objects = id(new PhabricatorObjectQuery()) | ||||
| ->setViewer($viewer) | ->setViewer($viewer) | ||||
| ->withNames($names) | ->withNames($names) | ||||
| ->execute(); | ->execute(); | ||||
| foreach ($named_objects as $object) { | foreach ($named_objects as $object) { | ||||
| $phids[] = $object->getPHID(); | $cards[] = array( | ||||
| 'objectPHID' => $object->getPHID(), | |||||
| ); | |||||
| } | } | ||||
| } | } | ||||
| $object_phids = array(); | |||||
| $handle_phids = array(); | |||||
| foreach ($cards as $card) { | |||||
| $object_phid = idx($card, 'objectPHID'); | |||||
| $handle_phids[] = $object_phid; | |||||
| $object_phids[] = $object_phid; | |||||
| } | |||||
| $handles = id(new PhabricatorHandleQuery()) | $handles = id(new PhabricatorHandleQuery()) | ||||
| ->setViewer($viewer) | ->setViewer($viewer) | ||||
| ->withPHIDs($phids) | ->withPHIDs($handle_phids) | ||||
| ->execute(); | ->execute(); | ||||
| $objects = id(new PhabricatorObjectQuery()) | $objects = id(new PhabricatorObjectQuery()) | ||||
| ->setViewer($viewer) | ->setViewer($viewer) | ||||
| ->withPHIDs($phids) | ->withPHIDs($object_phids) | ||||
| ->execute(); | ->execute(); | ||||
| $objects = mpull($objects, null, 'getPHID'); | $objects = mpull($objects, null, 'getPHID'); | ||||
| $extensions = | $extensions = | ||||
| PhabricatorHovercardEngineExtension::getAllEnabledExtensions(); | PhabricatorHovercardEngineExtension::getAllEnabledExtensions(); | ||||
| $extension_maps = array(); | $extension_maps = array(); | ||||
| foreach ($extensions as $key => $extension) { | foreach ($extensions as $key => $extension) { | ||||
| Show All 16 Lines | foreach ($extensions as $key => $extension) { | ||||
| unset($extensions[$key]); | unset($extensions[$key]); | ||||
| continue; | continue; | ||||
| } | } | ||||
| $extension_data[$key] = $extension->willRenderHovercards( | $extension_data[$key] = $extension->willRenderHovercards( | ||||
| array_select_keys($objects, $extension_phids)); | array_select_keys($objects, $extension_phids)); | ||||
| } | } | ||||
| $cards = array(); | $results = array(); | ||||
| foreach ($phids as $phid) { | foreach ($cards as $card_key => $card) { | ||||
| $handle = $handles[$phid]; | $object_phid = $card['objectPHID']; | ||||
| $object = idx($objects, $phid); | |||||
| $handle = $handles[$object_phid]; | |||||
| $object = idx($objects, $object_phid); | |||||
| $hovercard = id(new PHUIHovercardView()) | $hovercard = id(new PHUIHovercardView()) | ||||
| ->setUser($viewer) | ->setUser($viewer) | ||||
| ->setObjectHandle($handle); | ->setObjectHandle($handle); | ||||
| if ($object) { | if ($object) { | ||||
| $hovercard->setObject($object); | $hovercard->setObject($object); | ||||
| foreach ($extension_maps as $key => $extension_phids) { | foreach ($extension_maps as $key => $extension_phids) { | ||||
| if (isset($extension_phids[$phid])) { | if (isset($extension_phids[$phid])) { | ||||
| $extensions[$key]->renderHovercard( | $extensions[$key]->renderHovercard( | ||||
| $hovercard, | $hovercard, | ||||
| $handle, | $handle, | ||||
| $object, | $object, | ||||
| $extension_data[$key]); | $extension_data[$key]); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| $cards[$phid] = $hovercard; | $results[$card_key] = $hovercard; | ||||
| } | } | ||||
| if ($request->isAjax()) { | if ($request->isAjax()) { | ||||
| return id(new AphrontAjaxResponse())->setContent( | return id(new AphrontAjaxResponse())->setContent( | ||||
| array( | array( | ||||
| 'cards' => $cards, | 'cards' => $results, | ||||
| )); | )); | ||||
| } | } | ||||
| foreach ($cards as $key => $hovercard) { | foreach ($results as $key => $hovercard) { | ||||
| $cards[$key] = phutil_tag('div', | $results[$key] = phutil_tag('div', | ||||
| array( | array( | ||||
| 'class' => 'ml', | 'class' => 'ml', | ||||
| ), | ), | ||||
| $hovercard); | $hovercard); | ||||
| } | } | ||||
| return $this->newPage() | return $this->newPage() | ||||
| ->appendChild($cards) | ->appendChild($results) | ||||
| ->setShowFooter(false); | ->setShowFooter(false); | ||||
| } | } | ||||
| } | } | ||||