Page MenuHomePhabricator

D7852.id17764.diff
No OneTemporary

D7852.id17764.diff

Index: src/applications/diffusion/herald/HeraldPreCommitContentAdapter.php
===================================================================
--- src/applications/diffusion/herald/HeraldPreCommitContentAdapter.php
+++ src/applications/diffusion/herald/HeraldPreCommitContentAdapter.php
@@ -41,6 +41,17 @@
"Hook rules can block changes.");
}
+ public function supportsRuleType($rule_type) {
+ switch ($rule_type) {
+ case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:
+ return true;
+ case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL:
+ case HeraldRuleTypeConfig::RULE_TYPE_OBJECT:
+ default:
+ return false;
+ }
+ }
+
public function getFieldNameMap() {
return array(
) + parent::getFieldNameMap();
Index: src/applications/diffusion/herald/HeraldPreCommitRefAdapter.php
===================================================================
--- src/applications/diffusion/herald/HeraldPreCommitRefAdapter.php
+++ src/applications/diffusion/herald/HeraldPreCommitRefAdapter.php
@@ -44,6 +44,17 @@
"Hook rules can block changes.");
}
+ public function supportsRuleType($rule_type) {
+ switch ($rule_type) {
+ case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:
+ return true;
+ case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL:
+ case HeraldRuleTypeConfig::RULE_TYPE_OBJECT:
+ default:
+ return false;
+ }
+ }
+
public function getFieldNameMap() {
return array(
self::FIELD_REF_TYPE => pht('Ref type'),
Index: src/applications/herald/adapter/HeraldAdapter.php
===================================================================
--- src/applications/herald/adapter/HeraldAdapter.php
+++ src/applications/herald/adapter/HeraldAdapter.php
@@ -140,6 +140,10 @@
abstract public function getAdapterApplicationClass();
abstract public function getObject();
+ public function supportsRuleType($rule_type) {
+ return false;
+ }
+
public function getAdapterSortKey() {
return sprintf(
'%08d%s',
Index: src/applications/herald/adapter/HeraldCommitAdapter.php
===================================================================
--- src/applications/herald/adapter/HeraldCommitAdapter.php
+++ src/applications/herald/adapter/HeraldCommitAdapter.php
@@ -49,6 +49,17 @@
"and run build plans.");
}
+ public function supportsRuleType($rule_type) {
+ switch ($rule_type) {
+ case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:
+ case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL:
+ return true;
+ case HeraldRuleTypeConfig::RULE_TYPE_OBJECT:
+ default:
+ return false;
+ }
+ }
+
public function getFieldNameMap() {
return array(
self::FIELD_NEED_AUDIT_FOR_PACKAGE =>
Index: src/applications/herald/adapter/HeraldDifferentialRevisionAdapter.php
===================================================================
--- src/applications/herald/adapter/HeraldDifferentialRevisionAdapter.php
+++ src/applications/herald/adapter/HeraldDifferentialRevisionAdapter.php
@@ -43,6 +43,17 @@
"and run build plans.");
}
+ public function supportsRuleType($rule_type) {
+ switch ($rule_type) {
+ case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:
+ case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL:
+ return true;
+ case HeraldRuleTypeConfig::RULE_TYPE_OBJECT:
+ default:
+ return false;
+ }
+ }
+
public function getFields() {
return array_merge(
array(
Index: src/applications/herald/adapter/HeraldManiphestTaskAdapter.php
===================================================================
--- src/applications/herald/adapter/HeraldManiphestTaskAdapter.php
+++ src/applications/herald/adapter/HeraldManiphestTaskAdapter.php
@@ -19,6 +19,17 @@
'React to tasks being created or updated.');
}
+ public function supportsRuleType($rule_type) {
+ switch ($rule_type) {
+ case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:
+ case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL:
+ return true;
+ case HeraldRuleTypeConfig::RULE_TYPE_OBJECT:
+ default:
+ return false;
+ }
+ }
+
public function setTask(ManiphestTask $task) {
$this->task = $task;
return $this;
Index: src/applications/herald/adapter/HeraldPholioMockAdapter.php
===================================================================
--- src/applications/herald/adapter/HeraldPholioMockAdapter.php
+++ src/applications/herald/adapter/HeraldPholioMockAdapter.php
@@ -41,6 +41,17 @@
return pht('Pholio Mocks');
}
+ public function supportsRuleType($rule_type) {
+ switch ($rule_type) {
+ case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:
+ case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL:
+ return true;
+ case HeraldRuleTypeConfig::RULE_TYPE_OBJECT:
+ default:
+ return false;
+ }
+ }
+
public function getFields() {
return array_merge(
array(
Index: src/applications/herald/controller/HeraldNewController.php
===================================================================
--- src/applications/herald/controller/HeraldNewController.php
+++ src/applications/herald/controller/HeraldNewController.php
@@ -53,17 +53,13 @@
->setUser($user)
->setAction($this->getApplicationURI('new/'));
- $content_types = $this->renderContentTypeControl(
- $content_type_map,
- $e_type);
-
- $rule_types = $this->renderRuleTypeControl(
- $rule_type_map,
- $e_rule);
-
switch ($step) {
case 0:
default:
+ $content_types = $this->renderContentTypeControl(
+ $content_type_map,
+ $e_type);
+
$form
->addHiddenInput('step', 1)
->appendChild($content_types);
@@ -72,6 +68,10 @@
$cancel_uri = $this->getApplicationURI();
break;
case 1:
+ $rule_types = $this->renderRuleTypeControl(
+ $rule_type_map,
+ $e_rule);
+
$form
->addHiddenInput('content_type', $request->getStr('content_type'))
->addHiddenInput('step', 2)
@@ -185,14 +185,31 @@
->setValue($request->getStr('rule_type'))
->setError($e_rule);
+ $adapter = HeraldAdapter::getAdapterForContentType(
+ $request->getStr('content_type'));
+
foreach ($rule_type_map as $value => $name) {
+ $caption = idx($captions, $value);
$disabled = ($value == HeraldRuleTypeConfig::RULE_TYPE_GLOBAL) &&
(!$can_global);
+ if (!$adapter->supportsRuleType($value)) {
+ $disabled = true;
+ $caption = array(
+ $caption,
+ "\n\n",
+ phutil_tag(
+ 'em',
+ array(),
+ pht(
+ 'This rule type is not supported by the selected content type.')),
+ );
+ }
+
$radio->addButton(
$value,
$name,
- idx($captions, $value),
+ phutil_escape_html_newlines($caption),
$disabled ? 'disabled' : null,
$disabled);
}
Index: src/applications/herald/controller/HeraldRuleController.php
===================================================================
--- src/applications/herald/controller/HeraldRuleController.php
+++ src/applications/herald/controller/HeraldRuleController.php
@@ -59,9 +59,16 @@
$local_version = id(new HeraldRule())->getConfigVersion();
if ($rule->getConfigVersion() > $local_version) {
throw new Exception(
- "This rule was created with a newer version of Herald. You can not ".
- "view or edit it in this older version. Upgrade your Phabricator ".
- "deployment.");
+ pht(
+ "This rule was created with a newer version of Herald. You can not ".
+ "view or edit it in this older version. Upgrade your Phabricator ".
+ "deployment."));
+ }
+
+ if (!$adapter->supportsRuleType($rule->getRuleType())) {
+ throw new Exception(
+ pht(
+ "This rule's content type does not support the selected rule type."));
}
// Upgrade rule version to our version, since we might add newly-defined

File Metadata

Mime Type
text/plain
Expires
Thu, Mar 27, 9:44 PM (3 d, 7 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7321244
Default Alt Text
D7852.id17764.diff (7 KB)

Event Timeline