Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15333209
D20796.id49587.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Referenced Files
None
Subscribers
None
D20796.id49587.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D20796: Add a "Remove flag" action to Herald
Attached
Detach File
Event Timeline
Log In to Comment