Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/diffusion/controller/DiffusionPathTreeController.php
12242 views
1
<?php
2
3
final class DiffusionPathTreeController extends DiffusionController {
4
5
public function handleRequest(AphrontRequest $request) {
6
$response = $this->loadDiffusionContext();
7
if ($response) {
8
return $response;
9
}
10
11
$drequest = $this->getDiffusionRequest();
12
$repository = $drequest->getRepository();
13
14
if (!$repository->canUsePathTree()) {
15
return new Aphront404Response();
16
}
17
18
$paths = $this->callConduitWithDiffusionRequest(
19
'diffusion.querypaths',
20
array(
21
'path' => $drequest->getPath(),
22
'commit' => $drequest->getCommit(),
23
));
24
25
$tree = array();
26
foreach ($paths as $path) {
27
$parts = preg_split('((?<=/))', $path);
28
$cursor = &$tree;
29
foreach ($parts as $part) {
30
if (!is_array($cursor)) {
31
$cursor = array();
32
}
33
if (!isset($cursor[$part])) {
34
$cursor[$part] = 1;
35
}
36
$cursor = &$cursor[$part];
37
}
38
}
39
40
return id(new AphrontAjaxResponse())->setContent(array('tree' => $tree));
41
}
42
}
43
44