3 final class PhabricatorEditEngineConfigurationReorderController
4 extends PhabricatorEditEngineController
{
6 public function handleRequest(AphrontRequest
$request) {
7 $engine_key = $request->getURIData('engineKey');
8 $this->setEngineKey($engine_key);
10 $key = $request->getURIData('key');
11 $viewer = $this->getViewer();
13 $config = id(new PhabricatorEditEngineConfigurationQuery())
15 ->withEngineKeys(array($engine_key))
16 ->withIdentifiers(array($key))
17 ->requireCapabilities(
19 PhabricatorPolicyCapability
::CAN_VIEW
,
20 PhabricatorPolicyCapability
::CAN_EDIT
,
24 return id(new Aphront404Response());
27 $cancel_uri = "/transactions/editengine/{$engine_key}/view/{$key}/";
28 $reorder_uri = "/transactions/editengine/{$engine_key}/reorder/{$key}/";
30 if ($request->isFormPost()) {
32 $key_order = $request->getStrList('keyOrder');
34 $type_order = PhabricatorEditEngineOrderTransaction
::TRANSACTIONTYPE
;
35 $xactions[] = id(new PhabricatorEditEngineConfigurationTransaction())
36 ->setTransactionType($type_order)
37 ->setNewValue($key_order);
39 $editor = id(new PhabricatorEditEngineConfigurationEditor())
41 ->setContentSourceFromRequest($request)
42 ->setContinueOnMissingFields(true)
43 ->setContinueOnNoEffect(true);
45 $editor->applyTransactions($config, $xactions);
47 return id(new AphrontRedirectResponse())
48 ->setURI($cancel_uri);
51 $engine = $config->getEngine();
52 $fields = $engine->getFieldsForConfig($config);
54 $list_id = celerity_generate_unique_node_id();
55 $input_id = celerity_generate_unique_node_id();
57 $list = id(new PHUIObjectItemListView())
63 foreach ($fields as $field) {
64 if (!$field->getIsFormField()) {
68 if (!$field->getIsReorderable()) {
72 $label = $field->getLabel();
73 $key = $field->getKey();
75 if ($label !== null) {
81 $item = id(new PHUIObjectItemView())
84 ->addSigil('editengine-form-field')
90 $list->addItem($item);
95 Javelin
::initBehavior(
96 'editengine-reorder-fields',
99 'inputID' => $input_id,
100 'reorderURI' => $reorder_uri,
103 $note = id(new PHUIInfoView())
104 ->appendChild(pht('Drag and drop fields to reorder them.'))
105 ->setSeverity(PHUIInfoView
::SEVERITY_NOTICE
);
111 'name' => 'keyOrder',
112 'value' => implode(', ', $key_order),
116 return $this->newDialog()
117 ->setTitle(pht('Reorder Fields'))
118 ->setWidth(AphrontDialogView
::WIDTH_FORM
)
121 ->appendChild($input)
122 ->addSubmitButton(pht('Save Changes'))
123 ->addCancelButton($cancel_uri);