@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 AlmanacNamespaceViewController
4 extends AlmanacNamespaceController {
5
6 public function shouldAllowPublic() {
7 return true;
8 }
9
10 public function handleRequest(AphrontRequest $request) {
11 $viewer = $request->getViewer();
12
13 $id = $request->getURIData('id');
14 $namespace = id(new AlmanacNamespaceQuery())
15 ->setViewer($viewer)
16 ->withIDs(array($id))
17 ->executeOne();
18 if (!$namespace) {
19 return new Aphront404Response();
20 }
21
22 $title = pht('Namespace %s', $namespace->getName());
23
24 $curtain = $this->buildCurtain($namespace);
25
26 $header = id(new PHUIHeaderView())
27 ->setUser($viewer)
28 ->setHeader($namespace->getName())
29 ->setPolicyObject($namespace)
30 ->setHeaderIcon('fa-asterisk');
31
32 $crumbs = $this->buildApplicationCrumbs();
33 $crumbs->addTextCrumb($namespace->getName());
34 $crumbs->setBorder(true);
35
36 $timeline = $this->buildTransactionTimeline(
37 $namespace,
38 new AlmanacNamespaceTransactionQuery());
39 $timeline->setShouldTerminate(true);
40
41 $view = id(new PHUITwoColumnView())
42 ->setHeader($header)
43 ->setCurtain($curtain)
44 ->setMainColumn(array(
45 $timeline,
46 ));
47
48 return $this->newPage()
49 ->setTitle($title)
50 ->setCrumbs($crumbs)
51 ->appendChild(
52 array(
53 $view,
54 ));
55 }
56
57 private function buildCurtain(AlmanacNamespace $namespace) {
58 $viewer = $this->getViewer();
59
60 $can_edit = PhabricatorPolicyFilter::hasCapability(
61 $viewer,
62 $namespace,
63 PhabricatorPolicyCapability::CAN_EDIT);
64
65 $id = $namespace->getID();
66 $edit_uri = $this->getApplicationURI("namespace/edit/{$id}/");
67
68 $curtain = $this->newCurtainView($namespace);
69
70 $curtain->addAction(
71 id(new PhabricatorActionView())
72 ->setIcon('fa-pencil')
73 ->setName(pht('Edit Namespace'))
74 ->setHref($edit_uri)
75 ->setWorkflow(!$can_edit)
76 ->setDisabled(!$can_edit));
77
78 return $curtain;
79 }
80
81}