Page MenuHomePhabricator

D20796.id49587.diff
No OneTemporary

D20796.id49587.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
@@ -3438,8 +3438,10 @@
'PhabricatorFlagDeleteController' => 'applications/flag/controller/PhabricatorFlagDeleteController.php',
'PhabricatorFlagDestructionEngineExtension' => 'applications/flag/engineextension/PhabricatorFlagDestructionEngineExtension.php',
'PhabricatorFlagEditController' => 'applications/flag/controller/PhabricatorFlagEditController.php',
+ 'PhabricatorFlagHeraldAction' => 'applications/flag/herald/PhabricatorFlagHeraldAction.php',
'PhabricatorFlagListController' => 'applications/flag/controller/PhabricatorFlagListController.php',
'PhabricatorFlagQuery' => 'applications/flag/query/PhabricatorFlagQuery.php',
+ 'PhabricatorFlagRemoveFlagHeraldAction' => 'applications/flag/herald/PhabricatorFlagRemoveFlagHeraldAction.php',
'PhabricatorFlagSearchEngine' => 'applications/flag/query/PhabricatorFlagSearchEngine.php',
'PhabricatorFlagSelectControl' => 'applications/flag/view/PhabricatorFlagSelectControl.php',
'PhabricatorFlaggableInterface' => 'applications/flag/interface/PhabricatorFlaggableInterface.php',
@@ -9799,7 +9801,7 @@
'PhabricatorFlagDAO',
'PhabricatorPolicyInterface',
),
- 'PhabricatorFlagAddFlagHeraldAction' => 'HeraldAction',
+ 'PhabricatorFlagAddFlagHeraldAction' => 'PhabricatorFlagHeraldAction',
'PhabricatorFlagColor' => 'PhabricatorFlagConstants',
'PhabricatorFlagConstants' => 'Phobject',
'PhabricatorFlagController' => 'PhabricatorController',
@@ -9807,8 +9809,10 @@
'PhabricatorFlagDeleteController' => 'PhabricatorFlagController',
'PhabricatorFlagDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension',
'PhabricatorFlagEditController' => 'PhabricatorFlagController',
+ 'PhabricatorFlagHeraldAction' => 'HeraldAction',
'PhabricatorFlagListController' => 'PhabricatorFlagController',
'PhabricatorFlagQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
+ 'PhabricatorFlagRemoveFlagHeraldAction' => 'PhabricatorFlagHeraldAction',
'PhabricatorFlagSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorFlagSelectControl' => 'AphrontFormControl',
'PhabricatorFlaggableInterface' => 'PhabricatorPHIDInterface',
diff --git a/src/applications/flag/herald/PhabricatorFlagAddFlagHeraldAction.php b/src/applications/flag/herald/PhabricatorFlagAddFlagHeraldAction.php
--- a/src/applications/flag/herald/PhabricatorFlagAddFlagHeraldAction.php
+++ b/src/applications/flag/herald/PhabricatorFlagAddFlagHeraldAction.php
@@ -1,6 +1,7 @@
<?php
-final class PhabricatorFlagAddFlagHeraldAction extends HeraldAction {
+final class PhabricatorFlagAddFlagHeraldAction
+ extends PhabricatorFlagHeraldAction {
const ACTIONCONST = 'flag';
@@ -11,18 +12,6 @@
return pht('Mark with flag');
}
- public function getActionGroupKey() {
- return HeraldSupportActionGroup::ACTIONGROUPKEY;
- }
-
- public function supportsObject($object) {
- return ($object instanceof PhabricatorFlaggableInterface);
- }
-
- public function supportsRuleType($rule_type) {
- return ($rule_type == HeraldRuleTypeConfig::RULE_TYPE_PERSONAL);
- }
-
public function applyEffect($object, HeraldEffect $effect) {
$phid = $this->getAdapter()->getPHID();
$rule = $effect->getRule();
diff --git a/src/applications/flag/herald/PhabricatorFlagHeraldAction.php b/src/applications/flag/herald/PhabricatorFlagHeraldAction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/flag/herald/PhabricatorFlagHeraldAction.php
@@ -0,0 +1,18 @@
+<?php
+
+abstract class PhabricatorFlagHeraldAction
+ extends HeraldAction {
+
+ public function getActionGroupKey() {
+ return HeraldSupportActionGroup::ACTIONGROUPKEY;
+ }
+
+ public function supportsObject($object) {
+ return ($object instanceof PhabricatorFlaggableInterface);
+ }
+
+ public function supportsRuleType($rule_type) {
+ return ($rule_type === HeraldRuleTypeConfig::RULE_TYPE_PERSONAL);
+ }
+
+}
diff --git a/src/applications/flag/herald/PhabricatorFlagRemoveFlagHeraldAction.php b/src/applications/flag/herald/PhabricatorFlagRemoveFlagHeraldAction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/flag/herald/PhabricatorFlagRemoveFlagHeraldAction.php
@@ -0,0 +1,79 @@
+<?php
+
+final class PhabricatorFlagRemoveFlagHeraldAction
+ extends PhabricatorFlagHeraldAction {
+
+ const ACTIONCONST = 'unflag';
+
+ const DO_UNFLAG = 'do.unflag';
+ const DO_IGNORE_UNFLAG = 'do.ignore-unflag';
+
+ public function getHeraldActionName() {
+ return pht('Remove flag');
+ }
+
+ public function applyEffect($object, HeraldEffect $effect) {
+ $phid = $this->getAdapter()->getPHID();
+ $rule = $effect->getRule();
+ $author = $rule->getAuthor();
+
+ $flag = PhabricatorFlagQuery::loadUserFlag($author, $phid);
+ if (!$flag) {
+ $this->logEffect(self::DO_IGNORE_UNFLAG, null);
+ return;
+ }
+
+ if ($flag->getColor() !== $effect->getTarget()) {
+ $this->logEffect(self::DO_IGNORE_UNFLAG, $flag->getColor());
+ return;
+ }
+
+ $flag->delete();
+
+ $this->logEffect(self::DO_UNFLAG, $flag->getColor());
+ }
+
+ public function getHeraldActionValueType() {
+ return id(new HeraldSelectFieldValue())
+ ->setKey('flag.color')
+ ->setOptions(PhabricatorFlagColor::getColorNameMap())
+ ->setDefault(PhabricatorFlagColor::COLOR_BLUE);
+ }
+
+ protected function getActionEffectMap() {
+ return array(
+ self::DO_IGNORE_UNFLAG => array(
+ 'icon' => 'fa-times',
+ 'color' => 'grey',
+ 'name' => pht('Did Not Remove Flag'),
+ ),
+ self::DO_UNFLAG => array(
+ 'icon' => 'fa-flag',
+ 'name' => pht('Removed Flag'),
+ ),
+ );
+ }
+
+ public function renderActionDescription($value) {
+ $color = PhabricatorFlagColor::getColorName($value);
+ return pht('Remove %s flag.', $color);
+ }
+
+ protected function renderActionEffectDescription($type, $data) {
+ switch ($type) {
+ case self::DO_IGNORE_UNFLAG:
+ if (!$data) {
+ return pht('Not marked with any flag.');
+ } else {
+ return pht(
+ 'Marked with flag of the wrong color ("%s").',
+ PhabricatorFlagColor::getColorName($data));
+ }
+ case self::DO_UNFLAG:
+ return pht(
+ 'Removed "%s" flag.',
+ PhabricatorFlagColor::getColorName($data));
+ }
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Sun, Mar 9, 12:51 AM (2 w, 12 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7385174
Default Alt Text
D20796.id49587.diff (6 KB)

Event Timeline