Skip to content

Commit 9c63760

Browse files
author
epriestley
committedAug 8, 2013
Move most Herald actions and values into dynamic adapters
Summary: Ref T2769. Shift the bulk of value and action config into Adapters. Test Plan: Viewed and edited Herald list and rules. Reviewers: btrahan Reviewed By: btrahan CC: aran, vrana Maniphest Tasks: T2769 Differential Revision: https://secure.phabricator.com/D6660
1 parent 2e87f9f commit 9c63760

8 files changed

+226
-127
lines changed
 

‎src/__phutil_library_map__.php

-1
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,6 @@
635635
'HeraldTranscript' => 'applications/herald/storage/transcript/HeraldTranscript.php',
636636
'HeraldTranscriptController' => 'applications/herald/controller/HeraldTranscriptController.php',
637637
'HeraldTranscriptListController' => 'applications/herald/controller/HeraldTranscriptListController.php',
638-
'HeraldValueTypeConfig' => 'applications/herald/config/HeraldValueTypeConfig.php',
639638
'Javelin' => 'infrastructure/javelin/Javelin.php',
640639
'JavelinReactorExample' => 'applications/uiexample/examples/JavelinReactorExample.php',
641640
'JavelinUIExample' => 'applications/uiexample/examples/JavelinUIExample.php',

‎src/applications/herald/adapter/HeraldAdapter.php

+158-17
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,41 @@ abstract class HeraldAdapter {
1616
const FIELD_AFFECTED_PACKAGE = 'affected-package';
1717
const FIELD_AFFECTED_PACKAGE_OWNER = 'affected-package-owner';
1818

19-
const CONDITION_CONTAINS = 'contains';
20-
const CONDITION_NOT_CONTAINS = '!contains';
21-
const CONDITION_IS = 'is';
22-
const CONDITION_IS_NOT = '!is';
23-
const CONDITION_IS_ANY = 'isany';
24-
const CONDITION_IS_NOT_ANY = '!isany';
25-
const CONDITION_INCLUDE_ALL = 'all';
26-
const CONDITION_INCLUDE_ANY = 'any';
27-
const CONDITION_INCLUDE_NONE = 'none';
28-
const CONDITION_IS_ME = 'me';
29-
const CONDITION_IS_NOT_ME = '!me';
30-
const CONDITION_REGEXP = 'regexp';
31-
const CONDITION_RULE = 'conditions';
32-
const CONDITION_NOT_RULE = '!conditions';
33-
const CONDITION_EXISTS = 'exists';
34-
const CONDITION_NOT_EXISTS = '!exists';
35-
const CONDITION_REGEXP_PAIR = 'regexp-pair';
19+
const CONDITION_CONTAINS = 'contains';
20+
const CONDITION_NOT_CONTAINS = '!contains';
21+
const CONDITION_IS = 'is';
22+
const CONDITION_IS_NOT = '!is';
23+
const CONDITION_IS_ANY = 'isany';
24+
const CONDITION_IS_NOT_ANY = '!isany';
25+
const CONDITION_INCLUDE_ALL = 'all';
26+
const CONDITION_INCLUDE_ANY = 'any';
27+
const CONDITION_INCLUDE_NONE = 'none';
28+
const CONDITION_IS_ME = 'me';
29+
const CONDITION_IS_NOT_ME = '!me';
30+
const CONDITION_REGEXP = 'regexp';
31+
const CONDITION_RULE = 'conditions';
32+
const CONDITION_NOT_RULE = '!conditions';
33+
const CONDITION_EXISTS = 'exists';
34+
const CONDITION_NOT_EXISTS = '!exists';
35+
const CONDITION_REGEXP_PAIR = 'regexp-pair';
36+
37+
const ACTION_ADD_CC = 'addcc';
38+
const ACTION_REMOVE_CC = 'remcc';
39+
const ACTION_EMAIL = 'email';
40+
const ACTION_NOTHING = 'nothing';
41+
const ACTION_AUDIT = 'audit';
42+
const ACTION_FLAG = 'flag';
43+
44+
const VALUE_TEXT = 'text';
45+
const VALUE_NONE = 'none';
46+
const VALUE_EMAIL = 'email';
47+
const VALUE_USER = 'user';
48+
const VALUE_TAG = 'tag';
49+
const VALUE_RULE = 'rule';
50+
const VALUE_REPOSITORY = 'repository';
51+
const VALUE_OWNERS_PACKAGE = 'package';
52+
const VALUE_PROJECT = 'project';
53+
const VALUE_FLAG_COLOR = 'flagcolor';
3654

3755
abstract public function getPHID();
3856
abstract public function getHeraldName();
@@ -53,6 +71,11 @@ public function getAdapterContentType() {
5371
}
5472

5573
abstract public function getAdapterContentName();
74+
75+
76+
/* -( Fields )------------------------------------------------------------- */
77+
78+
5679
abstract public function getFields();
5780

5881
public function getFieldNameMap() {
@@ -74,6 +97,10 @@ public function getFieldNameMap() {
7497
);
7598
}
7699

100+
101+
/* -( Conditions )--------------------------------------------------------- */
102+
103+
77104
public function getConditionNameMap() {
78105
return array(
79106
self::CONDITION_CONTAINS => pht('contains'),
@@ -151,6 +178,120 @@ public function getConditionsForField($field) {
151178
}
152179

153180

181+
/* -( Actions )------------------------------------------------------------ */
182+
183+
abstract public function getActions($rule_type);
184+
185+
public function getActionNameMap($rule_type) {
186+
switch ($rule_type) {
187+
case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:
188+
return array(
189+
self::ACTION_NOTHING => pht('Do nothing'),
190+
self::ACTION_ADD_CC => pht('Add emails to CC'),
191+
self::ACTION_REMOVE_CC => pht('Remove emails from CC'),
192+
self::ACTION_EMAIL => pht('Send an email to'),
193+
self::ACTION_AUDIT => pht('Trigger an Audit by'),
194+
);
195+
case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL:
196+
return array(
197+
self::ACTION_NOTHING => pht('Do nothing'),
198+
self::ACTION_ADD_CC => pht('Add me to CC'),
199+
self::ACTION_REMOVE_CC => pht('Remove me from CC'),
200+
self::ACTION_EMAIL => pht('Send me an email'),
201+
self::ACTION_AUDIT => pht('Trigger an Audit by me'),
202+
self::ACTION_FLAG => pht('Mark with flag'),
203+
);
204+
default:
205+
throw new Exception("Unknown rule type '{$rule_type}'!");
206+
}
207+
}
208+
209+
210+
/* -( Values )------------------------------------------------------------- */
211+
212+
213+
public function getValueTypeForFieldAndCondition($field, $condition) {
214+
switch ($condition) {
215+
case self::CONDITION_CONTAINS:
216+
case self::CONDITION_NOT_CONTAINS:
217+
case self::CONDITION_IS:
218+
case self::CONDITION_IS_NOT:
219+
case self::CONDITION_REGEXP:
220+
case self::CONDITION_REGEXP_PAIR:
221+
return self::VALUE_TEXT;
222+
case self::CONDITION_IS_ANY:
223+
case self::CONDITION_IS_NOT_ANY:
224+
switch ($field) {
225+
case self::FIELD_REPOSITORY:
226+
return self::VALUE_REPOSITORY;
227+
default:
228+
return self::VALUE_USER;
229+
}
230+
break;
231+
case self::CONDITION_INCLUDE_ALL:
232+
case self::CONDITION_INCLUDE_ANY:
233+
case self::CONDITION_INCLUDE_NONE:
234+
switch ($field) {
235+
case self::FIELD_REPOSITORY:
236+
return self::VALUE_REPOSITORY;
237+
case self::FIELD_CC:
238+
return self::VALUE_EMAIL;
239+
case self::FIELD_TAGS:
240+
return self::VALUE_TAG;
241+
case self::FIELD_AFFECTED_PACKAGE:
242+
return self::VALUE_OWNERS_PACKAGE;
243+
default:
244+
return self::VALUE_USER;
245+
}
246+
break;
247+
case self::CONDITION_IS_ME:
248+
case self::CONDITION_IS_NOT_ME:
249+
case self::CONDITION_EXISTS:
250+
case self::CONDITION_NOT_EXISTS:
251+
return self::VALUE_NONE;
252+
case self::CONDITION_RULE:
253+
case self::CONDITION_NOT_RULE:
254+
return self::VALUE_RULE;
255+
default:
256+
throw new Exception("Unknown condition '{$condition}'.");
257+
}
258+
}
259+
260+
public static function getValueTypeForAction($action, $rule_type) {
261+
$is_personal = ($rule_type == HeraldRuleTypeConfig::RULE_TYPE_PERSONAL);
262+
263+
if ($is_personal) {
264+
switch ($action) {
265+
case self::ACTION_ADD_CC:
266+
case self::ACTION_REMOVE_CC:
267+
case self::ACTION_EMAIL:
268+
case self::ACTION_NOTHING:
269+
case self::ACTION_AUDIT:
270+
return self::VALUE_NONE;
271+
case self::ACTION_FLAG:
272+
return self::VALUE_FLAG_COLOR;
273+
default:
274+
throw new Exception("Unknown or invalid action '{$action}'.");
275+
}
276+
} else {
277+
switch ($action) {
278+
case self::ACTION_ADD_CC:
279+
case self::ACTION_REMOVE_CC:
280+
case self::ACTION_EMAIL:
281+
return self::VALUE_EMAIL;
282+
case self::ACTION_NOTHING:
283+
return self::VALUE_NONE;
284+
case self::ACTION_AUDIT:
285+
return self::VALUE_PROJECT;
286+
case self::ACTION_FLAG:
287+
return self::VALUE_FLAG_COLOR;
288+
default:
289+
throw new Exception("Unknown or invalid action '{$action}'.");
290+
}
291+
}
292+
}
293+
294+
154295
public static function applyFlagEffect(HeraldEffect $effect, $phid) {
155296
$color = $effect->getTarget();
156297

‎src/applications/herald/adapter/HeraldCommitAdapter.php

+30
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,36 @@ public function getConditionsForField($field) {
8686
return parent::getConditionsForField($field);
8787
}
8888

89+
public function getActions($rule_type) {
90+
switch ($rule_type) {
91+
case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:
92+
return array(
93+
self::ACTION_ADD_CC,
94+
self::ACTION_REMOVE_CC,
95+
self::ACTION_EMAIL,
96+
self::ACTION_NOTHING,
97+
);
98+
case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL:
99+
return array(
100+
self::ACTION_ADD_CC,
101+
self::ACTION_REMOVE_CC,
102+
self::ACTION_EMAIL,
103+
self::ACTION_NOTHING,
104+
);
105+
}
106+
}
107+
108+
public function getValueTypeForFieldAndCondition($field, $condition) {
109+
switch ($field) {
110+
case self::FIELD_DIFFERENTIAL_CCS:
111+
return self::VALUE_EMAIL;
112+
case self::FIELD_NEED_AUDIT_FOR_PACKAGE:
113+
return self::VALUE_OWNERS_PACKAGE;
114+
}
115+
116+
return parent::getValueTypeForFieldAndCondition($field, $condition);
117+
}
118+
89119
public static function newLegacyAdapter(
90120
PhabricatorRepository $repository,
91121
PhabricatorRepositoryCommit $commit,

‎src/applications/herald/adapter/HeraldDifferentialRevisionAdapter.php

+19
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,25 @@ public function getHeraldField($field) {
242242
}
243243
}
244244

245+
public function getActions($rule_type) {
246+
switch ($rule_type) {
247+
case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:
248+
return array(
249+
self::ACTION_ADD_CC,
250+
self::ACTION_REMOVE_CC,
251+
self::ACTION_EMAIL,
252+
self::ACTION_NOTHING,
253+
);
254+
case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL:
255+
return array(
256+
self::ACTION_ADD_CC,
257+
self::ACTION_REMOVE_CC,
258+
self::ACTION_EMAIL,
259+
self::ACTION_NOTHING,
260+
);
261+
}
262+
}
263+
245264
public function applyHeraldEffects(array $effects) {
246265
assert_instances_of($effects, 'HeraldEffect');
247266

‎src/applications/herald/adapter/HeraldDryRunAdapter.php

+4
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ public function getFields() {
3030
return array();
3131
}
3232

33+
public function getActions($rule_type) {
34+
return array();
35+
}
36+
3337
public function applyHeraldEffects(array $effects) {
3438
assert_instances_of($effects, 'HeraldEffect');
3539
$results = array();

‎src/applications/herald/config/HeraldActionConfig.php

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ final class HeraldActionConfig {
99
const ACTION_AUDIT = 'audit';
1010
const ACTION_FLAG = 'flag';
1111

12+
// TODO: Remove; still used by transcripts.
1213
public static function getActionMessageMapForRuleType($rule_type) {
1314
$generic_mappings = array(
1415
self::ACTION_NOTHING => pht('Do nothing'),
@@ -43,6 +44,7 @@ public static function getActionMessageMapForRuleType($rule_type) {
4344
return $specific_mappings + $generic_mappings;
4445
}
4546

47+
// TODO: Remove; still used by transcripts.
4648
public static function getActionMessageMap($content_type,
4749
$rule_type) {
4850
$map = self::getActionMessageMapForRuleType($rule_type);

‎src/applications/herald/config/HeraldValueTypeConfig.php

-98
This file was deleted.

0 commit comments

Comments
 (0)
Failed to load comments.