@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final 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}