@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 PhabricatorEditEngineConfigurationDefaultsController
4 extends PhabricatorEditEngineController {
5
6 public function handleRequest(AphrontRequest $request) {
7 $engine_key = $request->getURIData('engineKey');
8 $this->setEngineKey($engine_key);
9
10 $key = $request->getURIData('key');
11 $viewer = $this->getViewer();
12
13 $config = id(new PhabricatorEditEngineConfigurationQuery())
14 ->setViewer($viewer)
15 ->withEngineKeys(array($engine_key))
16 ->withIdentifiers(array($key))
17 ->requireCapabilities(
18 array(
19 PhabricatorPolicyCapability::CAN_VIEW,
20 PhabricatorPolicyCapability::CAN_EDIT,
21 ))
22 ->executeOne();
23 if (!$config) {
24 return id(new Aphront404Response());
25 }
26
27 $cancel_uri = "/transactions/editengine/{$engine_key}/view/{$key}/";
28
29 $engine = $config->getEngine();
30 $fields = $engine->getFieldsForConfig($config);
31
32 foreach ($fields as $key => $field) {
33 if (!$field->getIsFormField()) {
34 unset($fields[$key]);
35 continue;
36 }
37
38 if (!$field->getIsDefaultable()) {
39 unset($fields[$key]);
40 continue;
41 }
42 }
43
44 foreach ($fields as $field) {
45 $field->setIsEditDefaults(true);
46 }
47
48 if ($request->isFormPost()) {
49 $xactions = array();
50
51 foreach ($fields as $field) {
52 $field->readValueFromSubmit($request);
53 }
54
55 $type = PhabricatorEditEngineDefaultTransaction::TRANSACTIONTYPE;
56
57 $xactions = array();
58 foreach ($fields as $field) {
59 $new_value = $field->getValueForDefaults();
60 $xactions[] = id(new PhabricatorEditEngineConfigurationTransaction())
61 ->setTransactionType($type)
62 ->setMetadataValue('field.key', $field->getKey())
63 ->setNewValue($new_value);
64 }
65
66 $editor = id(new PhabricatorEditEngineConfigurationEditor())
67 ->setActor($viewer)
68 ->setContentSourceFromRequest($request)
69 ->setContinueOnMissingFields(true)
70 ->setContinueOnNoEffect(true);
71
72 $editor->applyTransactions($config, $xactions);
73
74 return id(new AphrontRedirectResponse())
75 ->setURI($cancel_uri);
76 }
77
78 $title = pht('Edit Form Defaults');
79
80 $form = id(new AphrontFormView())
81 ->setUser($viewer);
82
83 foreach ($fields as $field) {
84 $field->appendToForm($form);
85 }
86
87 $form
88 ->appendControl(
89 id(new AphrontFormSubmitControl())
90 ->setValue(pht('Save Defaults'))
91 ->addCancelButton($cancel_uri));
92
93 $info = id(new PHUIInfoView())
94 ->setSeverity(PHUIInfoView::SEVERITY_WARNING)
95 ->setErrors(
96 array(
97 pht('You are editing the default values for this form.'),
98 ));
99
100
101 $box = id(new PHUIObjectBoxView())
102 ->setHeaderText(pht('Form'))
103 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
104 ->setForm($form);
105
106 $crumbs = $this->buildApplicationCrumbs();
107 $crumbs->addTextCrumb(pht('Form %d', $config->getID()), $cancel_uri);
108 $crumbs->addTextCrumb(pht('Edit Defaults'));
109 $crumbs->setBorder(true);
110
111 $header = id(new PHUIHeaderView())
112 ->setHeader(pht('Edit Form Defaults'))
113 ->setHeaderIcon('fa-pencil');
114
115 $view = id(new PHUITwoColumnView())
116 ->setHeader($header)
117 ->setFooter(array(
118 $info,
119 $box,
120 ));
121
122 return $this->newPage()
123 ->setTitle($title)
124 ->setCrumbs($crumbs)
125 ->appendChild($view);
126 }
127
128}