@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
at recaptime-dev/main 96 lines 3.0 kB view raw
1<?php 2 3final class PhabricatorProjectsEditEngineExtension 4 extends PhabricatorEditEngineExtension { 5 6 const EXTENSIONKEY = 'projects.projects'; 7 8 const EDITKEY_ADD = 'projects.add'; 9 const EDITKEY_SET = 'projects.set'; 10 const EDITKEY_REMOVE = 'projects.remove'; 11 12 public function getExtensionPriority() { 13 return 500; 14 } 15 16 public function isExtensionEnabled() { 17 return PhabricatorApplication::isClassInstalled( 18 PhabricatorProjectApplication::class); 19 } 20 21 public function getExtensionName() { 22 return pht('Projects'); 23 } 24 25 public function supportsObject( 26 PhabricatorEditEngine $engine, 27 PhabricatorApplicationTransactionInterface $object) { 28 29 return ($object instanceof PhabricatorProjectInterface); 30 } 31 32 public function buildCustomEditFields( 33 PhabricatorEditEngine $engine, 34 PhabricatorApplicationTransactionInterface $object) { 35 36 $edge_type = PhabricatorTransactions::TYPE_EDGE; 37 $project_edge_type = PhabricatorProjectObjectHasProjectEdgeType::EDGECONST; 38 39 $object_phid = $object->getPHID(); 40 if ($object_phid) { 41 $project_phids = PhabricatorEdgeQuery::loadDestinationPHIDs( 42 $object_phid, 43 $project_edge_type); 44 $project_phids = array_reverse($project_phids); 45 } else { 46 $project_phids = array(); 47 } 48 49 $viewer = $engine->getViewer(); 50 51 $projects_field = id(new PhabricatorProjectsEditField()) 52 ->setKey('projectPHIDs') 53 ->setLabel(pht('Project Tags')) 54 ->setEditTypeKey('projects') 55 ->setAliases(array('project', 'projects', 'tag', 'tags')) 56 ->setIsCopyable(true) 57 ->setUseEdgeTransactions(true) 58 ->setCommentActionLabel(pht('Change Project Tags')) 59 ->setCommentActionOrder(8000) 60 ->setDescription(pht('Select project tags for the object.')) 61 ->setTransactionType($edge_type) 62 ->setMetadataValue('edge:type', $project_edge_type) 63 ->setValue($project_phids) 64 ->setViewer($viewer); 65 66 $projects_datasource = id(new PhabricatorProjectDatasource()) 67 ->setViewer($viewer); 68 69 $edit_add = $projects_field->getConduitEditType(self::EDITKEY_ADD) 70 ->setConduitDescription(pht('Add project tags.')); 71 72 $edit_set = $projects_field->getConduitEditType(self::EDITKEY_SET) 73 ->setConduitDescription( 74 pht('Set project tags, overwriting current value.')); 75 76 $edit_rem = $projects_field->getConduitEditType(self::EDITKEY_REMOVE) 77 ->setConduitDescription(pht('Remove project tags.')); 78 79 $projects_field->getBulkEditType(self::EDITKEY_ADD) 80 ->setBulkEditLabel(pht('Add project tags')) 81 ->setDatasource($projects_datasource); 82 83 $projects_field->getBulkEditType(self::EDITKEY_SET) 84 ->setBulkEditLabel(pht('Set project tags to')) 85 ->setDatasource($projects_datasource); 86 87 $projects_field->getBulkEditType(self::EDITKEY_REMOVE) 88 ->setBulkEditLabel(pht('Remove project tags')) 89 ->setDatasource($projects_datasource); 90 91 return array( 92 $projects_field, 93 ); 94 } 95 96}