@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 264 lines 7.2 kB view raw
1<?php 2 3final class PhabricatorEditEngineConfigurationViewController 4 extends PhabricatorEditEngineController { 5 6 public function shouldAllowPublic() { 7 return true; 8 } 9 10 public function handleRequest(AphrontRequest $request) { 11 $viewer = $this->getViewer(); 12 13 $config = $this->loadConfigForView(); 14 if (!$config) { 15 return id(new Aphront404Response()); 16 } 17 18 $is_concrete = (bool)$config->getID(); 19 20 $curtain = $this->buildCurtainView($config); 21 $properties = $this->buildPropertyView($config); 22 23 $header = id(new PHUIHeaderView()) 24 ->setUser($viewer) 25 ->setPolicyObject($config) 26 ->setHeader(pht('Edit Form: %s', $config->getDisplayName())) 27 ->setHeaderIcon('fa-pencil'); 28 29 if ($config->getIsDisabled()) { 30 $name = pht('Disabled'); 31 $icon = 'fa-ban'; 32 $color = 'indigo'; 33 } else { 34 $name = pht('Enabled'); 35 $icon = 'fa-check'; 36 $color = 'green'; 37 } 38 $header->setStatus($icon, $color, $name); 39 40 $field_list = $this->buildFieldList($config); 41 $crumbs = $this->buildApplicationCrumbs(); 42 $crumbs->setBorder(true); 43 44 if ($is_concrete) { 45 $title = pht('Form %d', $config->getID()); 46 $crumbs->addTextCrumb($title); 47 } else { 48 $title = pht('Builtin'); 49 $crumbs->addTextCrumb(pht('Builtin')); 50 } 51 52 if ($is_concrete) { 53 $timeline = $this->buildTransactionTimeline( 54 $config, 55 new PhabricatorEditEngineConfigurationTransactionQuery()); 56 57 $timeline->setShouldTerminate(true); 58 } else { 59 $timeline = null; 60 } 61 62 $view = id(new PHUITwoColumnView()) 63 ->setHeader($header) 64 ->setCurtain($curtain) 65 ->setMainColumn(array( 66 $field_list, 67 $timeline, 68 )); 69 70 return $this->newPage() 71 ->setTitle($title) 72 ->setCrumbs($crumbs) 73 ->appendChild($view); 74 } 75 76 private function buildCurtainView( 77 PhabricatorEditEngineConfiguration $config) { 78 $viewer = $this->getViewer(); 79 $engine = $config->getEngine(); 80 $engine_key = $engine->getEngineKey(); 81 82 $can_edit = PhabricatorPolicyFilter::hasCapability( 83 $viewer, 84 $config, 85 PhabricatorPolicyCapability::CAN_EDIT); 86 87 $curtain = $this->newCurtainView($config); 88 $form_key = $config->getIdentifier(); 89 90 $base_uri = "/transactions/editengine/{$engine_key}"; 91 92 $is_concrete = (bool)$config->getID(); 93 if (!$is_concrete) { 94 $save_uri = "{$base_uri}/save/{$form_key}/"; 95 96 $curtain->addAction( 97 id(new PhabricatorActionView()) 98 ->setName(pht('Make Editable')) 99 ->setIcon('fa-pencil') 100 ->setDisabled(!$can_edit) 101 ->setWorkflow(true) 102 ->setHref($save_uri)); 103 104 $can_edit = false; 105 } else { 106 $edit_uri = "{$base_uri}/edit/{$form_key}/"; 107 $curtain->addAction( 108 id(new PhabricatorActionView()) 109 ->setName(pht('Edit Form Configuration')) 110 ->setIcon('fa-pencil') 111 ->setDisabled(!$can_edit) 112 ->setWorkflow(!$can_edit) 113 ->setHref($edit_uri)); 114 } 115 116 $use_uri = $engine->getEditURI(null, "form/{$form_key}/"); 117 118 $curtain->addAction( 119 id(new PhabricatorActionView()) 120 ->setName(pht('Use Form')) 121 ->setIcon('fa-th-list') 122 ->setHref($use_uri)); 123 124 $defaults_uri = "{$base_uri}/defaults/{$form_key}/"; 125 126 $curtain->addAction( 127 id(new PhabricatorActionView()) 128 ->setName(pht('Change Default Values')) 129 ->setIcon('fa-paint-brush') 130 ->setHref($defaults_uri) 131 ->setWorkflow(!$can_edit) 132 ->setDisabled(!$can_edit)); 133 134 $reorder_uri = "{$base_uri}/reorder/{$form_key}/"; 135 136 $curtain->addAction( 137 id(new PhabricatorActionView()) 138 ->setName(pht('Change Field Order')) 139 ->setIcon('fa-sort-alpha-asc') 140 ->setHref($reorder_uri) 141 ->setWorkflow(true) 142 ->setDisabled(!$can_edit)); 143 144 $lock_uri = "{$base_uri}/lock/{$form_key}/"; 145 146 $curtain->addAction( 147 id(new PhabricatorActionView()) 148 ->setName(pht('Lock / Hide Fields')) 149 ->setIcon('fa-lock') 150 ->setHref($lock_uri) 151 ->setWorkflow(true) 152 ->setDisabled(!$can_edit)); 153 154 if ($engine->supportsSubtypes()) { 155 $subtype_uri = "{$base_uri}/subtype/{$form_key}/"; 156 157 $curtain->addAction( 158 id(new PhabricatorActionView()) 159 ->setName(pht('Change Form Subtype')) 160 ->setIcon('fa-drivers-license-o') 161 ->setHref($subtype_uri) 162 ->setWorkflow(true) 163 ->setDisabled(!$can_edit)); 164 } 165 166 $disable_uri = "{$base_uri}/disable/{$form_key}/"; 167 168 if ($config->getIsDisabled()) { 169 $disable_name = pht('Enable Form'); 170 $disable_icon = 'fa-check'; 171 } else { 172 $disable_name = pht('Disable Form'); 173 $disable_icon = 'fa-ban'; 174 } 175 176 $curtain->addAction( 177 id(new PhabricatorActionView()) 178 ->setName($disable_name) 179 ->setIcon($disable_icon) 180 ->setHref($disable_uri) 181 ->setWorkflow(true) 182 ->setDisabled(!$can_edit)); 183 184 $defaultcreate_uri = "{$base_uri}/defaultcreate/{$form_key}/"; 185 186 if ($config->getIsDefault()) { 187 $defaultcreate_name = pht('Unmark as "Create" Form'); 188 $defaultcreate_icon = 'fa-minus'; 189 } else { 190 $defaultcreate_name = pht('Mark as "Create" Form'); 191 $defaultcreate_icon = 'fa-plus'; 192 } 193 194 $curtain->addAction( 195 id(new PhabricatorActionView()) 196 ->setName($defaultcreate_name) 197 ->setIcon($defaultcreate_icon) 198 ->setHref($defaultcreate_uri) 199 ->setWorkflow(true) 200 ->setDisabled(!$can_edit)); 201 202 if ($config->getIsEdit()) { 203 $isedit_name = pht('Unmark as "Edit" Form'); 204 $isedit_icon = 'fa-minus'; 205 } else { 206 $isedit_name = pht('Mark as "Edit" Form'); 207 $isedit_icon = 'fa-plus'; 208 } 209 210 $isedit_uri = "{$base_uri}/defaultedit/{$form_key}/"; 211 212 $curtain->addAction( 213 id(new PhabricatorActionView()) 214 ->setName($isedit_name) 215 ->setIcon($isedit_icon) 216 ->setHref($isedit_uri) 217 ->setWorkflow(true) 218 ->setDisabled(!$can_edit)); 219 220 return $curtain; 221 } 222 223 private function buildPropertyView( 224 PhabricatorEditEngineConfiguration $config) { 225 $viewer = $this->getViewer(); 226 227 $properties = id(new PHUIPropertyListView()) 228 ->setUser($viewer); 229 230 return $properties; 231 } 232 233 private function buildFieldList(PhabricatorEditEngineConfiguration $config) { 234 $viewer = $this->getViewer(); 235 $engine = $config->getEngine(); 236 237 $fields = $engine->getFieldsForConfig($config); 238 239 $form = id(new AphrontFormView()) 240 ->setUser($viewer) 241 ->setAction(null); 242 243 foreach ($fields as $field) { 244 $field->setIsPreview(true); 245 246 $field->appendToForm($form); 247 } 248 249 $info = id(new PHUIInfoView()) 250 ->setSeverity(PHUIInfoView::SEVERITY_WARNING) 251 ->setErrors( 252 array( 253 pht('This is a preview of the current form configuration.'), 254 )); 255 256 $box = id(new PHUIObjectBoxView()) 257 ->setHeaderText(pht('Form Preview')) 258 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) 259 ->setForm($form); 260 261 return array($info, $box); 262 } 263 264}