@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 PhabricatorProjectReportsController
4 extends PhabricatorProjectController {
5
6 public function shouldAllowPublic() {
7 return true;
8 }
9
10 public function handleRequest(AphrontRequest $request) {
11 $viewer = $request->getViewer();
12
13 $class = PhabricatorFactApplication::class;
14 if (!PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) {
15 return new Aphront404Response();
16 }
17
18 $response = $this->loadProject();
19 if ($response) {
20 return $response;
21 }
22
23 $project = $this->getProject();
24 $id = $project->getID();
25
26 $nav = $this->newNavigation(
27 $project,
28 PhabricatorProject::ITEM_REPORTS);
29
30 $crumbs = $this->buildApplicationCrumbs();
31 $crumbs->addTextCrumb(pht('Reports'));
32 $crumbs->setBorder(true);
33
34 $chart_panel = id(new PhabricatorProjectBurndownChartEngine())
35 ->setViewer($viewer)
36 ->setProjects(array($project))
37 ->buildChartPanel();
38
39 $chart_panel->setName(pht('%s: Burnup / Burndown Rate',
40 $project->getName()));
41
42 $chart_view = id(new PhabricatorDashboardPanelRenderingEngine())
43 ->setViewer($viewer)
44 ->setPanel($chart_panel)
45 ->setParentPanelPHIDs(array())
46 ->renderPanel();
47
48 $activity_panel = id(new PhabricatorProjectActivityChartEngine())
49 ->setViewer($viewer)
50 ->setProjects(array($project))
51 ->buildChartPanel();
52
53 $activity_panel->setName(pht('%s: Activity', $project->getName()));
54
55 $activity_view = id(new PhabricatorDashboardPanelRenderingEngine())
56 ->setViewer($viewer)
57 ->setPanel($activity_panel)
58 ->setParentPanelPHIDs(array())
59 ->renderPanel();
60
61 $view = id(new PHUITwoColumnView())
62 ->setFooter(
63 array(
64 $chart_view,
65 $activity_view,
66 ));
67
68 return $this->newPage()
69 ->setNavigation($nav)
70 ->setCrumbs($crumbs)
71 ->setTitle(array($project->getName(), pht('Reports')))
72 ->appendChild($view);
73 }
74
75}