Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/herald/controller/HeraldRuleViewController.php
12262 views
1
<?php
2
3
final class HeraldRuleViewController extends HeraldController {
4
5
public function shouldAllowPublic() {
6
return true;
7
}
8
9
public function handleRequest(AphrontRequest $request) {
10
$viewer = $request->getViewer();
11
$id = $request->getURIData('id');
12
13
$rule = id(new HeraldRuleQuery())
14
->setViewer($viewer)
15
->withIDs(array($id))
16
->needConditionsAndActions(true)
17
->needValidateAuthors(true)
18
->executeOne();
19
if (!$rule) {
20
return new Aphront404Response();
21
}
22
23
$header = id(new PHUIHeaderView())
24
->setUser($viewer)
25
->setHeader($rule->getName())
26
->setPolicyObject($rule)
27
->setHeaderIcon('fa-bullhorn');
28
29
if ($rule->getIsDisabled()) {
30
$header->setStatus('fa-ban', 'red', pht('Disabled'));
31
} else if (!$rule->hasValidAuthor()) {
32
$header->setStatus('fa-user', 'red', pht('Author Not Active'));
33
} else {
34
$header->setStatus('fa-check', 'bluegrey', pht('Active'));
35
}
36
37
$curtain = $this->buildCurtain($rule);
38
$details = $this->buildPropertySectionView($rule);
39
$description = $this->buildDescriptionView($rule);
40
41
$id = $rule->getID();
42
43
$crumbs = $this->buildApplicationCrumbs();
44
$crumbs->addTextCrumb("H{$id}");
45
$crumbs->setBorder(true);
46
47
$timeline = $this->buildTransactionTimeline(
48
$rule,
49
new HeraldTransactionQuery());
50
$timeline->setShouldTerminate(true);
51
52
$title = $rule->getName();
53
54
$view = id(new PHUITwoColumnView())
55
->setHeader($header)
56
->setCurtain($curtain)
57
->setMainColumn($timeline)
58
->addPropertySection(pht('Details'), $details)
59
->addPropertySection(pht('Description'), $description);
60
61
return $this->newPage()
62
->setTitle($title)
63
->setCrumbs($crumbs)
64
->appendChild($view);
65
}
66
67
private function buildCurtain(HeraldRule $rule) {
68
$viewer = $this->getViewer();
69
70
$id = $rule->getID();
71
72
$can_edit = PhabricatorPolicyFilter::hasCapability(
73
$viewer,
74
$rule,
75
PhabricatorPolicyCapability::CAN_EDIT);
76
77
$curtain = $this->newCurtainView($rule);
78
79
$curtain->addAction(
80
id(new PhabricatorActionView())
81
->setName(pht('Edit Rule'))
82
->setHref($this->getApplicationURI("edit/{$id}/"))
83
->setIcon('fa-pencil')
84
->setDisabled(!$can_edit)
85
->setWorkflow(!$can_edit));
86
87
if ($rule->getIsDisabled()) {
88
$disable_uri = "disable/{$id}/enable/";
89
$disable_icon = 'fa-check';
90
$disable_name = pht('Enable Rule');
91
} else {
92
$disable_uri = "disable/{$id}/disable/";
93
$disable_icon = 'fa-ban';
94
$disable_name = pht('Disable Rule');
95
}
96
97
$curtain->addAction(
98
id(new PhabricatorActionView())
99
->setHref($this->getApplicationURI($disable_uri))
100
->setIcon($disable_icon)
101
->setName($disable_name)
102
->setDisabled(!$can_edit)
103
->setWorkflow(true));
104
105
return $curtain;
106
}
107
108
private function buildPropertySectionView(
109
HeraldRule $rule) {
110
111
$viewer = $this->getRequest()->getUser();
112
$view = id(new PHUIPropertyListView())
113
->setUser($viewer);
114
115
$view->addProperty(
116
pht('Rule Type'),
117
idx(HeraldRuleTypeConfig::getRuleTypeMap(), $rule->getRuleType()));
118
119
if ($rule->isPersonalRule()) {
120
$view->addProperty(
121
pht('Author'),
122
$viewer->renderHandle($rule->getAuthorPHID()));
123
}
124
125
$adapter = HeraldAdapter::getAdapterForContentType($rule->getContentType());
126
if ($adapter) {
127
$view->addProperty(
128
pht('Applies To'),
129
idx(
130
HeraldAdapter::getEnabledAdapterMap($viewer),
131
$rule->getContentType()));
132
133
if ($rule->isObjectRule()) {
134
$view->addProperty(
135
pht('Trigger Object'),
136
$viewer->renderHandle($rule->getTriggerObjectPHID()));
137
}
138
}
139
140
return $view;
141
}
142
143
private function buildDescriptionView(HeraldRule $rule) {
144
$viewer = $this->getRequest()->getUser();
145
$view = id(new PHUIPropertyListView())
146
->setViewer($viewer);
147
148
$adapter = HeraldAdapter::getAdapterForContentType($rule->getContentType());
149
if ($adapter) {
150
$rule_text = $adapter->renderRuleAsText($rule, $viewer);
151
$view->addTextContent($rule_text);
152
return $view;
153
}
154
return null;
155
}
156
157
}
158
159