Page MenuHomePhabricator

D20567.diff
No OneTemporary

D20567.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1560,6 +1560,7 @@
'HeraldRuleIndexEngineExtension' => 'applications/herald/engineextension/HeraldRuleIndexEngineExtension.php',
'HeraldRuleListController' => 'applications/herald/controller/HeraldRuleListController.php',
'HeraldRuleListView' => 'applications/herald/view/HeraldRuleListView.php',
+ 'HeraldRuleManagementWorkflow' => 'applications/herald/management/HeraldRuleManagementWorkflow.php',
'HeraldRuleNameTransaction' => 'applications/herald/xaction/HeraldRuleNameTransaction.php',
'HeraldRulePHIDType' => 'applications/herald/phid/HeraldRulePHIDType.php',
'HeraldRuleQuery' => 'applications/herald/query/HeraldRuleQuery.php',
@@ -7381,6 +7382,7 @@
'HeraldRuleIndexEngineExtension' => 'PhabricatorEdgeIndexEngineExtension',
'HeraldRuleListController' => 'HeraldController',
'HeraldRuleListView' => 'AphrontView',
+ 'HeraldRuleManagementWorkflow' => 'HeraldManagementWorkflow',
'HeraldRuleNameTransaction' => 'HeraldRuleTransactionType',
'HeraldRulePHIDType' => 'PhabricatorPHIDType',
'HeraldRuleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
diff --git a/src/applications/herald/management/HeraldRuleManagementWorkflow.php b/src/applications/herald/management/HeraldRuleManagementWorkflow.php
new file mode 100644
--- /dev/null
+++ b/src/applications/herald/management/HeraldRuleManagementWorkflow.php
@@ -0,0 +1,106 @@
+<?php
+
+final class HeraldRuleManagementWorkflow
+ extends HeraldManagementWorkflow {
+
+ protected function didConstruct() {
+ $this
+ ->setName('rule')
+ ->setExamples('**rule** --rule __rule__ --disable')
+ ->setSynopsis(
+ pht(
+ 'Modify a rule, bypassing policies. This workflow can disable '.
+ 'problematic personal rules.'))
+ ->setArguments(
+ array(
+ array(
+ 'name' => 'rule',
+ 'param' => 'rule',
+ 'help' => pht('Apply changes to this rule.'),
+ ),
+ array(
+ 'name' => 'disable',
+ 'help' => pht('Disable the rule.'),
+ ),
+ array(
+ 'name' => 'enable',
+ 'help' => pht('Enable the rule.'),
+ ),
+ ));
+ }
+
+ public function execute(PhutilArgumentParser $args) {
+ $viewer = $this->getViewer();
+
+ $rule_name = $args->getArg('rule');
+ if (!strlen($rule_name)) {
+ throw new PhutilArgumentUsageException(
+ pht('Specify a rule to edit with "--rule <id|monogram>".'));
+ }
+
+ if (preg_match('/^H\d+/', $rule_name)) {
+ $rule_id = substr($rule_name, 1);
+ } else {
+ $rule_id = $rule_name;
+ }
+
+ $rule = id(new HeraldRuleQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($rule_id))
+ ->executeOne();
+ if (!$rule) {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'Unable to load Herald rule with ID or monogram "%s".',
+ $rule_name));
+ }
+
+ $is_disable = $args->getArg('disable');
+ $is_enable = $args->getArg('enable');
+
+ $xactions = array();
+
+ if ($is_disable && $is_enable) {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'Specify "--enable" or "--disable", but not both.'));
+ } else if ($is_disable || $is_enable) {
+ $xactions[] = $rule->getApplicationTransactionTemplate()
+ ->setTransactionType(HeraldRuleDisableTransaction::TRANSACTIONTYPE)
+ ->setNewValue($is_disable);
+ }
+
+ if (!$xactions) {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'Use flags to specify at least one edit to apply to the '.
+ 'rule (for example, use "--disable" to disable a rule).'));
+ }
+
+ $herald_phid = id(new PhabricatorHeraldApplication())->getPHID();
+
+ $editor = $rule->getApplicationTransactionEditor()
+ ->setActor($viewer)
+ ->setActingAsPHID($herald_phid)
+ ->setContentSource($this->newContentSource())
+ ->setContinueOnMissingFields(true)
+ ->setContinueOnNoEffect(true);
+
+ echo tsprintf(
+ "%s\n",
+ pht(
+ 'Applying changes to %s: %s...',
+ $rule->getMonogram(),
+ $rule->getName()));
+
+ $editor->applyTransactions($rule, $xactions);
+
+ echo tsprintf(
+ "%s\n",
+ pht('Done.'));
+
+
+ return 0;
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 24, 4:42 AM (18 h, 8 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6781135
Default Alt Text
D20567.diff (4 KB)

Event Timeline