@@ -16,23 +16,41 @@ abstract class HeraldAdapter {
16
16
const FIELD_AFFECTED_PACKAGE = 'affected-package ' ;
17
17
const FIELD_AFFECTED_PACKAGE_OWNER = 'affected-package-owner ' ;
18
18
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 ' ;
36
54
37
55
abstract public function getPHID ();
38
56
abstract public function getHeraldName ();
@@ -53,6 +71,11 @@ public function getAdapterContentType() {
53
71
}
54
72
55
73
abstract public function getAdapterContentName ();
74
+
75
+
76
+ /* -( Fields )------------------------------------------------------------- */
77
+
78
+
56
79
abstract public function getFields ();
57
80
58
81
public function getFieldNameMap () {
@@ -74,6 +97,10 @@ public function getFieldNameMap() {
74
97
);
75
98
}
76
99
100
+
101
+ /* -( Conditions )--------------------------------------------------------- */
102
+
103
+
77
104
public function getConditionNameMap () {
78
105
return array (
79
106
self ::CONDITION_CONTAINS => pht ('contains ' ),
@@ -151,6 +178,120 @@ public function getConditionsForField($field) {
151
178
}
152
179
153
180
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
+
154
295
public static function applyFlagEffect (HeraldEffect $ effect , $ phid ) {
155
296
$ color = $ effect ->getTarget ();
156
297
0 commit comments