public function indexFulltextObject($object, PhabricatorSearchAbstractDocument $document)
 {
     $query = PhabricatorApplicationTransactionQuery::newQueryForObject($object);
     if (!$query) {
         return;
     }
     $xactions = $query->setViewer($this->getViewer())->withObjectPHIDs(array($object->getPHID()))->needComments(true)->execute();
     foreach ($xactions as $xaction) {
         if (!$xaction->hasComment()) {
             continue;
         }
         $comment = $xaction->getComment();
         $document->addField(PhabricatorSearchDocumentFieldType::FIELD_COMMENT, $comment->getContent());
     }
 }
 /**
  * Load the transactions to be published.
  */
 private function loadTransactions(PhabricatorApplicationTransactionInterface $object)
 {
     $data = $this->getTaskData();
     $xaction_phids = idx($data, 'xactionPHIDs');
     if (!$xaction_phids) {
         throw new PhabricatorWorkerPermanentFailureException(pht('Task has no transaction PHIDs!'));
     }
     $viewer = PhabricatorUser::getOmnipotentUser();
     $query = PhabricatorApplicationTransactionQuery::newQueryForObject($object);
     if (!$query) {
         throw new PhabricatorWorkerPermanentFailureException(pht('Unable to load query for transaction object "%s"!', $object->getPHID()));
     }
     $xactions = $query->setViewer($viewer)->withPHIDs($xaction_phids)->needComments(true)->execute();
     $xactions = mpull($xactions, null, 'getPHID');
     $missing = array_diff($xaction_phids, array_keys($xactions));
     if ($missing) {
         throw new PhabricatorWorkerPermanentFailureException(pht('Unable to load transactions: %s.', implode(', ', $missing)));
     }
     return array_select_keys($xactions, $xaction_phids);
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $this->getViewer();
     $object = id(new PhabricatorObjectQuery())->withPHIDs(array($request->getURIData('phid')))->setViewer($viewer)->executeOne();
     if (!$object) {
         return new Aphront404Response();
     }
     if (!$object instanceof PhabricatorApplicationTransactionInterface) {
         return new Aphront404Response();
     }
     $query = PhabricatorApplicationTransactionQuery::newQueryForObject($object);
     if (!$query) {
         return new Aphront404Response();
     }
     $timeline = $this->buildTransactionTimeline($object, $query);
     $phui_timeline = $timeline->buildPHUITimelineView($with_hiding = false);
     $phui_timeline->setShouldAddSpacers(false);
     $events = $phui_timeline->buildEvents();
     return id(new AphrontAjaxResponse())->setContent(array('timeline' => hsprintf('%s', $events)));
 }
 /**
  * Load the transactions to be published.
  */
 private function loadTransactions(PhabricatorApplicationTransactionInterface $object)
 {
     $data = $this->getTaskData();
     $xaction_phids = idx($data, 'xactionPHIDs');
     if (!$xaction_phids) {
         // It's okay if we don't have any transactions. This can happen when
         // creating objects or performing no-op updates. We will still apply
         // meaningful side effects like updating search engine indexes.
         return array();
     }
     $viewer = PhabricatorUser::getOmnipotentUser();
     $query = PhabricatorApplicationTransactionQuery::newQueryForObject($object);
     if (!$query) {
         throw new PhabricatorWorkerPermanentFailureException(pht('Unable to load query for transaction object "%s"!', $object->getPHID()));
     }
     $xactions = $query->setViewer($viewer)->withPHIDs($xaction_phids)->needComments(true)->execute();
     $xactions = mpull($xactions, null, 'getPHID');
     $missing = array_diff($xaction_phids, array_keys($xactions));
     if ($missing) {
         throw new PhabricatorWorkerPermanentFailureException(pht('Unable to load transactions: %s.', implode(', ', $missing)));
     }
     return array_select_keys($xactions, $xaction_phids);
 }