Correct a parameter order swap in "diffusion.historyquery" for Mercurial
[phabricator.git] / src / applications / transactions / controller / PhabricatorEditEngineConfigurationReorderController.php
blob563c3141b2fd817c84443dbfc242bb51cf344e67
1 <?php
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())
14 ->setViewer($viewer)
15 ->withEngineKeys(array($engine_key))
16 ->withIdentifiers(array($key))
17 ->requireCapabilities(
18 array(
19 PhabricatorPolicyCapability::CAN_VIEW,
20 PhabricatorPolicyCapability::CAN_EDIT,
22 ->executeOne();
23 if (!$config) {
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()) {
31 $xactions = array();
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())
40 ->setActor($viewer)
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())
58 ->setUser($viewer)
59 ->setID($list_id)
60 ->setFlush(true);
62 $key_order = array();
63 foreach ($fields as $field) {
64 if (!$field->getIsFormField()) {
65 continue;
68 if (!$field->getIsReorderable()) {
69 continue;
72 $label = $field->getLabel();
73 $key = $field->getKey();
75 if ($label !== null) {
76 $header = $label;
77 } else {
78 $header = $key;
81 $item = id(new PHUIObjectItemView())
82 ->setHeader($header)
83 ->setGrippable(true)
84 ->addSigil('editengine-form-field')
85 ->setMetadata(
86 array(
87 'fieldKey' => $key,
88 ));
90 $list->addItem($item);
92 $key_order[] = $key;
95 Javelin::initBehavior(
96 'editengine-reorder-fields',
97 array(
98 'listID' => $list_id,
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);
107 $input = phutil_tag(
108 'input',
109 array(
110 'type' => 'hidden',
111 'name' => 'keyOrder',
112 'value' => implode(', ', $key_order),
113 'id' => $input_id,
116 return $this->newDialog()
117 ->setTitle(pht('Reorder Fields'))
118 ->setWidth(AphrontDialogView::WIDTH_FORM)
119 ->appendChild($note)
120 ->appendChild($list)
121 ->appendChild($input)
122 ->addSubmitButton(pht('Save Changes'))
123 ->addCancelButton($cancel_uri);