Page MenuHomePhabricator

D20805.id49601.diff
No OneTemporary

D20805.id49601.diff

diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -9,7 +9,7 @@
'names' => array(
'conpherence.pkg.css' => '3c8a0668',
'conpherence.pkg.js' => '020aebcf',
- 'core.pkg.css' => '5a4a5010',
+ 'core.pkg.css' => 'c69171e6',
'core.pkg.js' => '73a06a9f',
'differential.pkg.css' => '8d8360fb',
'differential.pkg.js' => '0b037a4f',
@@ -155,7 +155,7 @@
'rsrc/css/phui/phui-form-view.css' => '01b796c0',
'rsrc/css/phui/phui-form.css' => '159e2d9c',
'rsrc/css/phui/phui-head-thing.css' => 'd7f293df',
- 'rsrc/css/phui/phui-header-view.css' => '285c9139',
+ 'rsrc/css/phui/phui-header-view.css' => 'b500eeea',
'rsrc/css/phui/phui-hovercard.css' => '6ca90fa0',
'rsrc/css/phui/phui-icon-set-selector.css' => '7aa5f3ec',
'rsrc/css/phui/phui-icon.css' => '4cbc684a',
@@ -168,6 +168,7 @@
'rsrc/css/phui/phui-object-box.css' => 'f434b6be',
'rsrc/css/phui/phui-pager.css' => 'd022c7ad',
'rsrc/css/phui/phui-pinboard-view.css' => '1f08f5d8',
+ 'rsrc/css/phui/phui-policy-section-view.css' => '139fdc64',
'rsrc/css/phui/phui-property-list-view.css' => 'cad62236',
'rsrc/css/phui/phui-remarkup-preview.css' => '91767007',
'rsrc/css/phui/phui-segment-bar-view.css' => '5166b370',
@@ -842,7 +843,7 @@
'phui-form-css' => '159e2d9c',
'phui-form-view-css' => '01b796c0',
'phui-head-thing-view-css' => 'd7f293df',
- 'phui-header-view-css' => '285c9139',
+ 'phui-header-view-css' => 'b500eeea',
'phui-hovercard' => '074f0783',
'phui-hovercard-view-css' => '6ca90fa0',
'phui-icon-set-selector-css' => '7aa5f3ec',
@@ -863,6 +864,7 @@
'phui-oi-simple-ui-css' => '6a30fa46',
'phui-pager-css' => 'd022c7ad',
'phui-pinboard-view-css' => '1f08f5d8',
+ 'phui-policy-section-view-css' => '139fdc64',
'phui-property-list-view-css' => 'cad62236',
'phui-remarkup-preview-css' => '91767007',
'phui-segment-bar-view-css' => '5166b370',
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
@@ -4198,6 +4198,7 @@
'PhabricatorPolicyRef' => 'applications/policy/view/PhabricatorPolicyRef.php',
'PhabricatorPolicyRequestExceptionHandler' => 'aphront/handler/PhabricatorPolicyRequestExceptionHandler.php',
'PhabricatorPolicyRule' => 'applications/policy/rule/PhabricatorPolicyRule.php',
+ 'PhabricatorPolicyRulesView' => 'applications/policy/view/PhabricatorPolicyRulesView.php',
'PhabricatorPolicySearchEngineExtension' => 'applications/policy/engineextension/PhabricatorPolicySearchEngineExtension.php',
'PhabricatorPolicyStrengthConstants' => 'applications/policy/constants/PhabricatorPolicyStrengthConstants.php',
'PhabricatorPolicyTestCase' => 'applications/policy/__tests__/PhabricatorPolicyTestCase.php',
@@ -10679,6 +10680,7 @@
'PhabricatorPolicyRef' => 'Phobject',
'PhabricatorPolicyRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler',
'PhabricatorPolicyRule' => 'Phobject',
+ 'PhabricatorPolicyRulesView' => 'AphrontView',
'PhabricatorPolicySearchEngineExtension' => 'PhabricatorSearchEngineExtension',
'PhabricatorPolicyStrengthConstants' => 'PhabricatorPolicyConstants',
'PhabricatorPolicyTestCase' => 'PhabricatorTestCase',
diff --git a/src/applications/policy/controller/PhabricatorPolicyExplainController.php b/src/applications/policy/controller/PhabricatorPolicyExplainController.php
--- a/src/applications/policy/controller/PhabricatorPolicyExplainController.php
+++ b/src/applications/policy/controller/PhabricatorPolicyExplainController.php
@@ -318,7 +318,7 @@
->setViewer($viewer)
->setIcon($handle->getIcon().' bluegrey')
->setHeader(pht('Object Policy'))
- ->appendList(
+ ->appendParagraph(
array(
array(
phutil_tag('strong', array(), pht('%s:', $capability_name)),
@@ -337,6 +337,13 @@
$policy->getPHID()),
));
+ if ($policy->isCustomPolicy()) {
+ $rules_view = id(new PhabricatorPolicyRulesView())
+ ->setViewer($viewer)
+ ->setPolicy($policy);
+ $object_section->appendRulesView($rules_view);
+ }
+
$strength = $this->getStrengthInformation($object, $policy, $capability);
if ($strength) {
$object_section->appendHint($strength);
diff --git a/src/applications/policy/view/PHUIPolicySectionView.php b/src/applications/policy/view/PHUIPolicySectionView.php
--- a/src/applications/policy/view/PHUIPolicySectionView.php
+++ b/src/applications/policy/view/PHUIPolicySectionView.php
@@ -93,6 +93,16 @@
return $this->appendChild(phutil_tag('p', array(), $content));
}
+ public function appendRulesView(PhabricatorPolicyRulesView $rules_view) {
+ return $this->appendChild(
+ phutil_tag(
+ 'div',
+ array(
+ 'class' => 'phui-policy-section-view-rules',
+ ),
+ $rules_view));
+ }
+
protected function getTagAttributes() {
return array(
'class' => 'phui-policy-section-view',
@@ -100,7 +110,7 @@
}
protected function getTagContent() {
- require_celerity_resource('phui-header-view-css');
+ require_celerity_resource('phui-policy-section-view-css');
$icon_view = null;
$icon = $this->getIcon();
diff --git a/src/applications/policy/view/PhabricatorPolicyRulesView.php b/src/applications/policy/view/PhabricatorPolicyRulesView.php
new file mode 100644
--- /dev/null
+++ b/src/applications/policy/view/PhabricatorPolicyRulesView.php
@@ -0,0 +1,84 @@
+<?php
+
+final class PhabricatorPolicyRulesView
+ extends AphrontView {
+
+ private $policy;
+
+ public function setPolicy(PhabricatorPolicy $policy) {
+ $this->policy = $policy;
+ return $this;
+ }
+
+ public function getPolicy() {
+ return $this->policy;
+ }
+
+ public function render() {
+ $policy = $this->getPolicy();
+
+ require_celerity_resource('policy-transaction-detail-css');
+
+ $rule_objects = array();
+ foreach ($policy->getCustomRuleClasses() as $class) {
+ $rule_objects[$class] = newv($class, array());
+ }
+
+ $policy = clone $policy;
+ $policy->attachRuleObjects($rule_objects);
+
+ $details = array();
+ $details[] = phutil_tag(
+ 'p',
+ array(
+ 'class' => 'policy-transaction-detail-intro',
+ ),
+ pht('These rules are processed in order:'));
+
+ foreach ($policy->getRules() as $index => $rule) {
+ $rule_object = $rule_objects[$rule['rule']];
+ if ($rule['action'] == 'allow') {
+ $icon = 'fa-check-circle green';
+ } else {
+ $icon = 'fa-minus-circle red';
+ }
+ $icon = id(new PHUIIconView())
+ ->setIcon($icon)
+ ->setText(
+ ucfirst($rule['action']).' '.$rule_object->getRuleDescription());
+
+ $handle_phids = $rule_object->getRequiredHandlePHIDsForSummary(
+ $rule['value']);
+ if ($handle_phids) {
+ $value = $this->getViewer()
+ ->renderHandleList($handle_phids)
+ ->setAsInline(true);
+ } else {
+ $value = $rule['value'];
+ }
+
+ $details[] = phutil_tag('div',
+ array(
+ 'class' => 'policy-transaction-detail-row',
+ ),
+ array(
+ $icon,
+ $value,
+ ));
+ }
+
+ $details[] = phutil_tag(
+ 'p',
+ array(
+ 'class' => 'policy-transaction-detail-end',
+ ),
+ pht(
+ 'If no rules match, %s all other users.',
+ phutil_tag('b',
+ array(),
+ $policy->getDefaultAction())));
+
+ return $details;
+ }
+
+}
diff --git a/src/applications/transactions/controller/PhabricatorApplicationTransactionValueController.php b/src/applications/transactions/controller/PhabricatorApplicationTransactionValueController.php
--- a/src/applications/transactions/controller/PhabricatorApplicationTransactionValueController.php
+++ b/src/applications/transactions/controller/PhabricatorApplicationTransactionValueController.php
@@ -58,89 +58,16 @@
return new Aphront404Response();
}
- $rule_objects = array();
- foreach ($policy->getCustomRuleClasses() as $class) {
- $rule_objects[$class] = newv($class, array());
- }
- $policy->attachRuleObjects($rule_objects);
+ $rules_view = id(new PhabricatorPolicyRulesView())
+ ->setViewer($viewer)
+ ->setPolicy($policy);
- $this->requireResource('policy-transaction-detail-css');
$cancel_uri = $this->guessCancelURI($viewer, $xaction);
return $this->newDialog()
->setTitle($policy->getFullName())
->setWidth(AphrontDialogView::WIDTH_FORM)
- ->appendChild($this->renderPolicyDetails($policy, $rule_objects))
+ ->appendChild($rules_view)
->addCancelButton($cancel_uri, pht('Close'));
}
-
- private function extractPHIDs(
- PhabricatorPolicy $policy,
- array $rule_objects) {
-
- $phids = array();
- foreach ($policy->getRules() as $rule) {
- $rule_object = $rule_objects[$rule['rule']];
- $phids[] =
- $rule_object->getRequiredHandlePHIDsForSummary($rule['value']);
- }
- return array_filter(array_mergev($phids));
- }
-
- private function renderPolicyDetails(
- PhabricatorPolicy $policy,
- array $rule_objects) {
- $details = array();
- $details[] = phutil_tag(
- 'p',
- array(
- 'class' => 'policy-transaction-detail-intro',
- ),
- pht('These rules are processed in order:'));
-
- foreach ($policy->getRules() as $index => $rule) {
- $rule_object = $rule_objects[$rule['rule']];
- if ($rule['action'] == 'allow') {
- $icon = 'fa-check-circle green';
- } else {
- $icon = 'fa-minus-circle red';
- }
- $icon = id(new PHUIIconView())
- ->setIcon($icon)
- ->setText(
- ucfirst($rule['action']).' '.$rule_object->getRuleDescription());
-
- $handle_phids = $rule_object->getRequiredHandlePHIDsForSummary(
- $rule['value']);
- if ($handle_phids) {
- $value = $this->getViewer()
- ->renderHandleList($handle_phids)
- ->setAsInline(true);
- } else {
- $value = $rule['value'];
- }
-
- $details[] = phutil_tag('div',
- array(
- 'class' => 'policy-transaction-detail-row',
- ),
- array(
- $icon,
- $value,
- ));
- }
-
- $details[] = phutil_tag(
- 'p',
- array(
- 'class' => 'policy-transaction-detail-end',
- ),
- pht(
- 'If no rules match, %s all other users.',
- phutil_tag('b',
- array(),
- $policy->getDefaultAction())));
- return $details;
- }
-
}
diff --git a/webroot/rsrc/css/phui/phui-header-view.css b/webroot/rsrc/css/phui/phui-header-view.css
--- a/webroot/rsrc/css/phui/phui-header-view.css
+++ b/webroot/rsrc/css/phui/phui-header-view.css
@@ -354,45 +354,3 @@
.phui-header-view .phui-tag-indigo a {
color: {$sh-indigotext};
}
-
-.phui-policy-section-view {
- margin-bottom: 24px;
-}
-
-.phui-policy-section-view-header {
- background: {$bluebackground};
- border-bottom: 1px solid {$lightblueborder};
- padding: 4px 8px;
- color: {$darkbluetext};
- margin-bottom: 8px;
-}
-
-.phui-policy-section-view-header-text {
- font-weight: bold;
-}
-
-.phui-policy-section-view-header .phui-icon-view {
- margin-right: 8px;
-}
-
-.phui-policy-section-view-link {
- float: right;
-}
-
-.phui-policy-section-view-link .phui-icon-view {
- color: {$bluetext};
-}
-
-.phui-policy-section-view-hint {
- color: {$greytext};
- background: {$lightbluebackground};
- padding: 8px;
-}
-
-.phui-policy-section-view-body {
- padding: 0 12px;
-}
-
-.phui-policy-section-view-inactive-rule {
- color: {$greytext};
-}
diff --git a/webroot/rsrc/css/phui/phui-policy-section-view.css b/webroot/rsrc/css/phui/phui-policy-section-view.css
new file mode 100644
--- /dev/null
+++ b/webroot/rsrc/css/phui/phui-policy-section-view.css
@@ -0,0 +1,62 @@
+/**
+ * @provides phui-policy-section-view-css
+ */
+
+.phui-policy-section-view {
+ margin-bottom: 24px;
+}
+
+.phui-policy-section-view-header {
+ background: {$bluebackground};
+ border-bottom: 1px solid {$lightblueborder};
+ padding: 4px 8px;
+ color: {$darkbluetext};
+ margin-bottom: 8px;
+}
+
+.phui-policy-section-view-header-text {
+ font-weight: bold;
+}
+
+.phui-policy-section-view-header .phui-icon-view {
+ margin-right: 8px;
+}
+
+.phui-policy-section-view-link {
+ float: right;
+}
+
+.phui-policy-section-view-link .phui-icon-view {
+ color: {$bluetext};
+}
+
+.phui-policy-section-view-hint {
+ color: {$greytext};
+ background: {$lightbluebackground};
+ padding: 8px;
+}
+
+.phui-policy-section-view-body {
+ padding: 0 12px;
+}
+
+.phui-policy-section-view-inactive-rule {
+ color: {$greytext};
+}
+
+.phui-policy-section-view-rules {
+ margin: 8px 0;
+ padding: 8px;
+ background: {$lightbluebackground};
+ border: 1px solid {$lightblueborder};
+}
+
+.phui-policy-section-view .phui-policy-section-view-body ul {
+ margin: 8px 0;
+ padding: 0 16px 0 24px;
+ list-style: disc;
+}
+
+.phui-policy-section-view .phui-policy-section-view-body p + p {
+ margin-top: 8px;
+}

File Metadata

Mime Type
text/plain
Expires
Mon, Mar 17, 5:14 PM (5 d, 15 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7381440
Default Alt Text
D20805.id49601.diff (13 KB)

Event Timeline