@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 72 lines 1.6 kB view raw
1<?php 2 3final class DifferentialAsanaRepresentationField 4 extends DifferentialCustomField { 5 6 public function getFieldKey() { 7 return 'differential:asana-representation'; 8 } 9 10 public function getFieldName() { 11 return pht('In Asana'); 12 } 13 14 public function canDisableField() { 15 return false; 16 } 17 18 public function getFieldDescription() { 19 return pht('Shows revision representation in Asana.'); 20 } 21 22 public function shouldAppearInPropertyView() { 23 return (bool)PhabricatorEnv::getEnvConfig('asana.workspace-id'); 24 } 25 26 public function renderPropertyViewLabel() { 27 return $this->getFieldName(); 28 } 29 30 public function renderPropertyViewValue(array $handles) { 31 $viewer = $this->getViewer(); 32 $src_phid = $this->getObject()->getPHID(); 33 $edge_type = PhabricatorObjectHasAsanaTaskEdgeType::EDGECONST; 34 35 $query = id(new PhabricatorEdgeQuery()) 36 ->withSourcePHIDs(array($src_phid)) 37 ->withEdgeTypes(array($edge_type)) 38 ->needEdgeData(true); 39 40 $edges = $query->execute(); 41 if (!$edges) { 42 return null; 43 } 44 45 $edge = head($edges[$src_phid][$edge_type]); 46 47 if (!$edge) { 48 return null; 49 } 50 51 if (!empty($edge['data']['gone'])) { 52 return phutil_tag( 53 'em', 54 array(), 55 pht('Asana Task Deleted')); 56 } 57 58 $ref = id(new DoorkeeperImportEngine()) 59 ->setViewer($viewer) 60 ->withPHIDs(array($edge['dst'])) 61 ->needLocalOnly(true) 62 ->executeOne(); 63 64 if (!$ref) { 65 return null; 66 } 67 68 return id(new DoorkeeperTagView()) 69 ->setExternalObject($ref->getExternalObject()); 70 } 71 72}