public function buildCustomEditFields(PhabricatorEditEngine $engine, PhabricatorApplicationTransactionInterface $object)
 {
     $subscribers_type = PhabricatorTransactions::TYPE_SUBSCRIBERS;
     $object_phid = $object->getPHID();
     if ($object_phid) {
         $sub_phids = PhabricatorSubscribersQuery::loadSubscribersForPHID($object_phid);
     } else {
         $sub_phids = array();
     }
     $subscribers_field = id(new PhabricatorSubscribersEditField())->setKey('subscriberPHIDs')->setLabel(pht('Subscribers'))->setEditTypeKey('subscribers')->setDescription(pht('Manage subscribers.'))->setAliases(array('subscriber', 'subscribers'))->setIsCopyable(true)->setUseEdgeTransactions(true)->setEdgeTransactionDescriptions(pht('Add subscribers.'), pht('Remove subscribers.'), pht('Set subscribers, overwriting current value.'))->setCommentActionLabel(pht('Change Subscribers'))->setTransactionType($subscribers_type)->setValue($sub_phids);
     return array($subscribers_field);
 }
 public function buildCustomEditFields(PhabricatorEditEngine $engine, PhabricatorApplicationTransactionInterface $object)
 {
     $edge_type = PhabricatorTransactions::TYPE_EDGE;
     $project_edge_type = PhabricatorProjectObjectHasProjectEdgeType::EDGECONST;
     $object_phid = $object->getPHID();
     if ($object_phid) {
         $project_phids = PhabricatorEdgeQuery::loadDestinationPHIDs($object_phid, $project_edge_type);
         $project_phids = array_reverse($project_phids);
     } else {
         $project_phids = array();
     }
     $projects_field = id(new PhabricatorProjectsEditField())->setKey('projectPHIDs')->setLabel(pht('Projects'))->setEditTypeKey('projects')->setDescription(pht('Add or remove associated projects.'))->setAliases(array('project', 'projects'))->setIsCopyable(true)->setUseEdgeTransactions(true)->setEdgeTransactionDescriptions(pht('Add projects.'), pht('Remove projects.'), pht('Set associated projects, overwriting current value.'))->setCommentActionLabel(pht('Change Projects'))->setTransactionType($edge_type)->setMetadataValue('edge:type', $project_edge_type)->setValue($project_phids);
     return array($projects_field);
 }
 public function buildCustomEditFields(PhabricatorEditEngine $engine, PhabricatorApplicationTransactionInterface $object)
 {
     $edge_type = PhabricatorTransactions::TYPE_EDGE;
     $project_edge_type = PhabricatorProjectObjectHasProjectEdgeType::EDGECONST;
     $object_phid = $object->getPHID();
     if ($object_phid) {
         $project_phids = PhabricatorEdgeQuery::loadDestinationPHIDs($object_phid, $project_edge_type);
         $project_phids = array_reverse($project_phids);
     } else {
         $project_phids = array();
     }
     $projects_field = id(new PhabricatorProjectsEditField())->setKey('projectPHIDs')->setLabel(pht('Tags'))->setEditTypeKey('projects')->setAliases(array('project', 'projects', 'tag', 'tags'))->setIsCopyable(true)->setUseEdgeTransactions(true)->setCommentActionLabel(pht('Change Project Tags'))->setCommentActionOrder(8000)->setDescription(pht('Select project tags for the object.'))->setTransactionType($edge_type)->setMetadataValue('edge:type', $project_edge_type)->setValue($project_phids);
     $projects_field->setViewer($engine->getViewer());
     $edit_add = $projects_field->getConduitEditType('projects.add')->setConduitDescription(pht('Add project tags.'));
     $edit_set = $projects_field->getConduitEditType('projects.set')->setConduitDescription(pht('Set project tags, overwriting current value.'));
     $edit_rem = $projects_field->getConduitEditType('projects.remove')->setConduitDescription(pht('Remove project tags.'));
     return array($projects_field);
 }
 protected function buildTransactionTimeline(PhabricatorApplicationTransactionInterface $object, PhabricatorApplicationTransactionQuery $query, PhabricatorMarkupEngine $engine = null, $render_data = array())
 {
     $viewer = $this->getRequest()->getUser();
     $xaction = $object->getApplicationTransactionTemplate();
     $view = $xaction->getApplicationTransactionViewObject();
     $pager = id(new AphrontCursorPagerView())->readFromRequest($this->getRequest())->setURI(new PhutilURI('/transactions/showolder/' . $object->getPHID() . '/'));
     $xactions = $query->setViewer($viewer)->withObjectPHIDs(array($object->getPHID()))->needComments(true)->executeWithCursorPager($pager);
     $xactions = array_reverse($xactions);
     if ($engine) {
         foreach ($xactions as $xaction) {
             if ($xaction->getComment()) {
                 $engine->addObject($xaction->getComment(), PhabricatorApplicationTransactionComment::MARKUP_FIELD_COMMENT);
             }
         }
         $engine->process();
         $view->setMarkupEngine($engine);
     }
     $timeline = $view->setUser($viewer)->setObjectPHID($object->getPHID())->setTransactions($xactions)->setPager($pager)->setRenderData($render_data)->setQuoteTargetID($this->getRequest()->getStr('quoteTargetID'))->setQuoteRef($this->getRequest()->getStr('quoteRef'));
     $object->willRenderTimeline($timeline, $this->getRequest());
     return $timeline;
 }
 public function getXactionsforColumn(PhabricatorApplicationTransactionInterface $column)
 {
     $xactions = $this->xquery->setViewer($this->viewer)->withObjectPHIDs(array($column->getPHID()))->needComments(true)->setReversePaging(false)->execute();
     $xactions = array_reverse($xactions);
     return $xactions;
 }