@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
at recaptime-dev/main 128 lines 3.4 kB view raw
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}