public function loadObjects(PhabricatorObjectQuery $object_query, array $phids)
 {
     static $queries;
     if ($queries === null) {
         $objects = id(new PhutilClassMapQuery())->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;
 }
 /**
  * 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();
     $type = phid_get_subtype(head($xaction_phids));
     $xactions = $this->buildTransactionQuery($type)->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);
 }