Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/drydock/controller/DrydockAuthorizationViewController.php
12262 views
1
<?php
2
3
final class DrydockAuthorizationViewController
4
extends DrydockController {
5
6
public function handleRequest(AphrontRequest $request) {
7
$viewer = $request->getViewer();
8
$id = $request->getURIData('id');
9
10
$authorization = id(new DrydockAuthorizationQuery())
11
->setViewer($viewer)
12
->withIDs(array($id))
13
->executeOne();
14
if (!$authorization) {
15
return new Aphront404Response();
16
}
17
18
$id = $authorization->getID();
19
$title = pht('Authorization %d', $id);
20
21
$blueprint = $authorization->getBlueprint();
22
$blueprint_id = $blueprint->getID();
23
24
$header = id(new PHUIHeaderView())
25
->setHeader($title)
26
->setUser($viewer)
27
->setPolicyObject($authorization);
28
29
$state = $authorization->getBlueprintAuthorizationState();
30
$icon = DrydockAuthorization::getBlueprintStateIcon($state);
31
$name = DrydockAuthorization::getBlueprintStateName($state);
32
33
$header->setStatus($icon, null, $name);
34
35
$curtain = $this->buildCurtain($authorization);
36
$properties = $this->buildPropertyListView($authorization);
37
38
$crumbs = $this->buildApplicationCrumbs();
39
$crumbs->addTextCrumb(
40
pht('Blueprints'),
41
$this->getApplicationURI('blueprint/'));
42
$crumbs->addTextCrumb(
43
$blueprint->getBlueprintName(),
44
$this->getApplicationURI("blueprint/{$blueprint_id}/"));
45
$crumbs->addTextCrumb($title);
46
$crumbs->setBorder(true);
47
48
$object_box = id(new PHUIObjectBoxView())
49
->setHeader($header)
50
->addPropertyList($properties);
51
52
$view = id(new PHUITwoColumnView())
53
->setHeader($header)
54
->setCurtain($curtain)
55
->addPropertySection(pht('Properties'), $properties);
56
57
return $this->newPage()
58
->setTitle($title)
59
->setCrumbs($crumbs)
60
->appendChild(
61
array(
62
$view,
63
));
64
65
}
66
67
private function buildCurtain(DrydockAuthorization $authorization) {
68
$viewer = $this->getViewer();
69
$id = $authorization->getID();
70
71
$curtain = $this->newCurtainView($authorization);
72
73
$can_edit = PhabricatorPolicyFilter::hasCapability(
74
$viewer,
75
$authorization,
76
PhabricatorPolicyCapability::CAN_EDIT);
77
78
$authorize_uri = $this->getApplicationURI("authorization/{$id}/authorize/");
79
$decline_uri = $this->getApplicationURI("authorization/{$id}/decline/");
80
81
$state_authorized = DrydockAuthorization::BLUEPRINTAUTH_AUTHORIZED;
82
$state_declined = DrydockAuthorization::BLUEPRINTAUTH_DECLINED;
83
84
$state = $authorization->getBlueprintAuthorizationState();
85
$can_authorize = $can_edit && ($state != $state_authorized);
86
$can_decline = $can_edit && ($state != $state_declined);
87
88
$curtain->addAction(
89
id(new PhabricatorActionView())
90
->setHref($authorize_uri)
91
->setName(pht('Approve Authorization'))
92
->setIcon('fa-check')
93
->setWorkflow(true)
94
->setDisabled(!$can_authorize));
95
96
$curtain->addAction(
97
id(new PhabricatorActionView())
98
->setHref($decline_uri)
99
->setName(pht('Decline Authorization'))
100
->setIcon('fa-times')
101
->setWorkflow(true)
102
->setDisabled(!$can_decline));
103
104
return $curtain;
105
}
106
107
private function buildPropertyListView(DrydockAuthorization $authorization) {
108
$viewer = $this->getViewer();
109
110
$object_phid = $authorization->getObjectPHID();
111
$handles = $viewer->loadHandles(array($object_phid));
112
$handle = $handles[$object_phid];
113
114
$view = new PHUIPropertyListView();
115
116
$view->addProperty(
117
pht('Authorized Object'),
118
$handle->renderLink($handle->getFullName()));
119
120
$view->addProperty(pht('Object Type'), $handle->getTypeName());
121
122
$object_state = $authorization->getObjectAuthorizationState();
123
124
$view->addProperty(
125
pht('Authorization State'),
126
DrydockAuthorization::getObjectStateName($object_state));
127
128
return $view;
129
}
130
131
}
132
133