@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.

Add trigger rule to remove projects from tasks

Summary: Ref T13269. Same as D20379 with the polarity reversed.

Test Plan: Added some triggers, removed some projects, observed expected results.

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: Korvin

Maniphest Tasks: T13269

Differential Revision: https://secure.phabricator.com/D20390

+105
+2
src/__phutil_library_map__.php
··· 4222 4222 'PhabricatorProjectTriggerPHIDType' => 'applications/project/phid/PhabricatorProjectTriggerPHIDType.php', 4223 4223 'PhabricatorProjectTriggerPlaySoundRule' => 'applications/project/trigger/PhabricatorProjectTriggerPlaySoundRule.php', 4224 4224 'PhabricatorProjectTriggerQuery' => 'applications/project/query/PhabricatorProjectTriggerQuery.php', 4225 + 'PhabricatorProjectTriggerRemoveProjectsRule' => 'applications/project/trigger/PhabricatorProjectTriggerRemoveProjectsRule.php', 4225 4226 'PhabricatorProjectTriggerRule' => 'applications/project/trigger/PhabricatorProjectTriggerRule.php', 4226 4227 'PhabricatorProjectTriggerRuleRecord' => 'applications/project/trigger/PhabricatorProjectTriggerRuleRecord.php', 4227 4228 'PhabricatorProjectTriggerRulesetTransaction' => 'applications/project/xaction/trigger/PhabricatorProjectTriggerRulesetTransaction.php', ··· 10398 10399 'PhabricatorProjectTriggerPHIDType' => 'PhabricatorPHIDType', 10399 10400 'PhabricatorProjectTriggerPlaySoundRule' => 'PhabricatorProjectTriggerRule', 10400 10401 'PhabricatorProjectTriggerQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 10402 + 'PhabricatorProjectTriggerRemoveProjectsRule' => 'PhabricatorProjectTriggerRule', 10401 10403 'PhabricatorProjectTriggerRule' => 'Phobject', 10402 10404 'PhabricatorProjectTriggerRuleRecord' => 'Phobject', 10403 10405 'PhabricatorProjectTriggerRulesetTransaction' => 'PhabricatorProjectTriggerTransactionType',
+103
src/applications/project/trigger/PhabricatorProjectTriggerRemoveProjectsRule.php
··· 1 + <?php 2 + 3 + final class PhabricatorProjectTriggerRemoveProjectsRule 4 + extends PhabricatorProjectTriggerRule { 5 + 6 + const TRIGGERTYPE = 'task.projects.remove'; 7 + 8 + public function getSelectControLname() { 9 + return pht('Remove projects'); 10 + } 11 + 12 + protected function getValueForEditorField() { 13 + return $this->getDatasource()->getWireTokens($this->getValue()); 14 + } 15 + 16 + protected function assertValidRuleValue($value) { 17 + if (!is_array($value)) { 18 + throw new Exception( 19 + pht( 20 + 'Remove project rule value should be a list, but is not '. 21 + '(value is "%s").', 22 + phutil_describe_type($value))); 23 + } 24 + } 25 + 26 + protected function newDropTransactions($object, $value) { 27 + $project_edge_type = PhabricatorProjectObjectHasProjectEdgeType::EDGECONST; 28 + 29 + $xaction = $object->getApplicationTransactionTemplate() 30 + ->setTransactionType(PhabricatorTransactions::TYPE_EDGE) 31 + ->setMetadataValue('edge:type', $project_edge_type) 32 + ->setNewValue( 33 + array( 34 + '-' => array_fuse($value), 35 + )); 36 + 37 + return array($xaction); 38 + } 39 + 40 + protected function newDropEffects($value) { 41 + return array( 42 + $this->newEffect() 43 + ->setIcon('fa-briefcase', 'red') 44 + ->setContent($this->getRuleViewDescription($value)), 45 + ); 46 + } 47 + 48 + protected function getDefaultValue() { 49 + return null; 50 + } 51 + 52 + protected function getPHUIXControlType() { 53 + return 'tokenizer'; 54 + } 55 + 56 + private function getDatasource() { 57 + return id(new PhabricatorProjectDatasource()) 58 + ->setViewer($this->getViewer()); 59 + } 60 + 61 + protected function getPHUIXControlSpecification() { 62 + $template = id(new AphrontTokenizerTemplateView()) 63 + ->setViewer($this->getViewer()); 64 + 65 + $template_markup = $template->render(); 66 + $datasource = $this->getDatasource(); 67 + 68 + return array( 69 + 'markup' => (string)hsprintf('%s', $template_markup), 70 + 'config' => array( 71 + 'src' => $datasource->getDatasourceURI(), 72 + 'browseURI' => $datasource->getBrowseURI(), 73 + 'placeholder' => $datasource->getPlaceholderText(), 74 + 'limit' => $datasource->getLimit(), 75 + ), 76 + 'value' => null, 77 + ); 78 + } 79 + 80 + public function getRuleViewLabel() { 81 + return pht('Remove Projects'); 82 + } 83 + 84 + public function getRuleViewDescription($value) { 85 + return pht( 86 + 'Remove projects: %s.', 87 + phutil_tag( 88 + 'strong', 89 + array(), 90 + $this->getViewer() 91 + ->renderHandleList($value) 92 + ->setAsInline(true) 93 + ->render())); 94 + } 95 + 96 + public function getRuleViewIcon($value) { 97 + return id(new PHUIIconView()) 98 + ->setIcon('fa-briefcase', 'red'); 99 + } 100 + 101 + 102 + 103 + }