@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 NuanceSourceEditController
4 extends NuanceSourceController {
5
6 public function handleRequest(AphrontRequest $request) {
7 $engine = id(new NuanceSourceEditEngine())
8 ->setController($this);
9
10 $id = $request->getURIData('id');
11 if (!$id) {
12 $this->requireApplicationCapability(
13 NuanceSourceManageCapability::CAPABILITY);
14
15 $cancel_uri = $this->getApplicationURI('source/');
16 $map = NuanceSourceDefinition::getAllDefinitions();
17 $source_type = $request->getStr('sourceType');
18 if (!$source_type || !isset($map[$source_type])) {
19 return $this->buildSourceTypeResponse($cancel_uri);
20 }
21
22 $engine
23 ->setSourceDefinition($map[$source_type])
24 ->addContextParameter('sourceType', $source_type);
25 }
26
27 return $engine->buildResponse();
28 }
29
30 private function buildSourceTypeResponse($cancel_uri) {
31 $viewer = $this->getViewer();
32 $request = $this->getRequest();
33 $map = NuanceSourceDefinition::getAllDefinitions();
34
35 $errors = array();
36 $e_source = null;
37 if ($request->isFormPost()) {
38 $errors[] = pht('You must choose a source type.');
39 $e_source = pht('Required');
40 }
41
42 $source_types = id(new AphrontFormRadioButtonControl())
43 ->setName('sourceType')
44 ->setLabel(pht('Source Type'));
45
46 foreach ($map as $type => $definition) {
47 $source_types->addButton(
48 $type,
49 $definition->getName(),
50 $definition->getSourceDescription());
51 }
52
53 $form = id(new AphrontFormView())
54 ->setUser($viewer)
55 ->appendChild($source_types)
56 ->appendChild(
57 id(new AphrontFormSubmitControl())
58 ->setValue(pht('Continue'))
59 ->addCancelButton($cancel_uri));
60
61 $box = id(new PHUIObjectBoxView())
62 ->setFormErrors($errors)
63 ->setHeaderText(pht('Choose Source Type'))
64 ->appendChild($form);
65
66 $crumbs = $this->buildApplicationCrumbs();
67 $crumbs->addTextCrumb(pht('Sources'), $cancel_uri);
68 $crumbs->addTextCrumb(pht('New'));
69
70 return $this->newPage()
71 ->setTitle(pht('Choose Source Type'))
72 ->setCrumbs($crumbs)
73 ->appendChild($box);
74 }
75
76}