@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 DiffusionRepositoryEditController
4 extends DiffusionRepositoryManageController {
5
6 public function handleRequest(AphrontRequest $request) {
7 $engine = id(new DiffusionRepositoryEditEngine())
8 ->setController($this);
9
10 $id = $request->getURIData('id');
11 if (!$id) {
12 $this->requireApplicationCapability(
13 DiffusionCreateRepositoriesCapability::CAPABILITY);
14
15 $vcs = $request->getStr('vcs');
16 $vcs_types = PhabricatorRepositoryType::getRepositoryTypeMap();
17 if (!$vcs || empty($vcs_types[$vcs])) {
18 return $this->buildVCSTypeResponse();
19 }
20
21 $engine
22 ->addContextParameter('vcs', $vcs)
23 ->setVersionControlSystem($vcs);
24 }
25
26 return $engine->buildResponse();
27 }
28
29 private function buildVCSTypeResponse() {
30 $vcs_types = PhabricatorRepositoryType::getRepositoryTypeMap();
31
32 $request = $this->getRequest();
33 $viewer = $this->getViewer();
34
35 $crumbs = $this->buildApplicationCrumbs();
36 $crumbs->addTextCrumb(pht('Create Repository'));
37 $crumbs->setBorder(true);
38
39 $title = pht('Choose Repository Type');
40
41 $layout = id(new AphrontMultiColumnView())
42 ->setFluidLayout(true);
43
44 $create_uri = $request->getRequestURI();
45
46 foreach ($vcs_types as $vcs_key => $vcs_type) {
47 $image = idx($vcs_type, 'image');
48 $image = PhabricatorFile::loadBuiltin($viewer, $image);
49 $action = id(new PHUIActionPanelView())
50 ->setImage($image->getBestURI())
51 ->setHeader(idx($vcs_type, 'create.header'))
52 ->setHref($create_uri->alter('vcs', $vcs_key))
53 ->setSubheader(idx($vcs_type, 'create.subheader'));
54
55 $layout->addColumn($action);
56 }
57
58 $hints = id(new AphrontMultiColumnView())
59 ->setFluidLayout(true);
60
61 $observe_href = PhabricatorEnv::getDoclink(
62 'Diffusion User Guide: Existing Repositories');
63
64 require_celerity_resource('diffusion-css');
65
66 $image = PhabricatorFile::loadBuiltin($viewer, 'repo/repo.png');
67 $hints->addColumn(
68 id(new PHUIActionPanelView())
69 ->setImage($image->getBestURI())
70 ->setHeader(pht('Import or Observe an Existing Repository'))
71 ->setHref($observe_href)
72 ->setSubheader(
73 pht(
74 'Review the documentation describing how to import or observe an '.
75 'existing repository.')));
76
77 $layout = id(new PHUIBoxView())
78 ->addClass('diffusion-create-repo')
79 ->appendChild($layout);
80
81 $launcher_view = id(new PHUILauncherView())
82 ->appendChild(
83 array(
84 $layout,
85 $hints,
86 ));
87
88 $view = id(new PHUITwoColumnView())
89 ->setFooter($launcher_view);
90
91 return $this->newPage()
92 ->setTitle($title)
93 ->setCrumbs($crumbs)
94 ->appendChild($view);
95 }
96
97}