mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-01 03:02:43 +01:00
42ef21f8fa
Summary: Ref T9132. I think the featureset is approximatley stable, so here's some documentation. I also cleaned up a handful of things in the UI and tried to make them more obvious or more consistent. Test Plan: Read documentation. Reviewers: chad Reviewed By: chad Maniphest Tasks: T9132 Differential Revision: https://secure.phabricator.com/D14718
243 lines
6.3 KiB
PHP
243 lines
6.3 KiB
PHP
<?php
|
|
|
|
final class PhabricatorEditEngineConfigurationViewController
|
|
extends PhabricatorEditEngineController {
|
|
|
|
public function shouldAllowPublic() {
|
|
return true;
|
|
}
|
|
|
|
public function handleRequest(AphrontRequest $request) {
|
|
$viewer = $this->getViewer();
|
|
|
|
$config = $this->loadConfigForView();
|
|
if (!$config) {
|
|
return id(new Aphront404Response());
|
|
}
|
|
|
|
$is_concrete = (bool)$config->getID();
|
|
|
|
$actions = $this->buildActionView($config);
|
|
|
|
$properties = $this->buildPropertyView($config)
|
|
->setActionList($actions);
|
|
|
|
$header = id(new PHUIHeaderView())
|
|
->setUser($viewer)
|
|
->setPolicyObject($config)
|
|
->setHeader(pht('Edit Form: %s', $config->getDisplayName()));
|
|
|
|
$box = id(new PHUIObjectBoxView())
|
|
->setHeader($header)
|
|
->addPropertyList($properties);
|
|
|
|
$field_list = $this->buildFieldList($config);
|
|
|
|
$crumbs = $this->buildApplicationCrumbs();
|
|
|
|
if ($is_concrete) {
|
|
$crumbs->addTextCrumb(pht('Form %d', $config->getID()));
|
|
} else {
|
|
$crumbs->addTextCrumb(pht('Builtin'));
|
|
}
|
|
|
|
if ($is_concrete) {
|
|
$timeline = $this->buildTransactionTimeline(
|
|
$config,
|
|
new PhabricatorEditEngineConfigurationTransactionQuery());
|
|
|
|
$timeline->setShouldTerminate(true);
|
|
} else {
|
|
$timeline = null;
|
|
}
|
|
|
|
return $this->newPage()
|
|
->setCrumbs($crumbs)
|
|
->appendChild(
|
|
array(
|
|
$box,
|
|
$field_list,
|
|
$timeline,
|
|
));
|
|
}
|
|
|
|
private function buildActionView(
|
|
PhabricatorEditEngineConfiguration $config) {
|
|
$viewer = $this->getViewer();
|
|
$engine = $config->getEngine();
|
|
$engine_key = $engine->getEngineKey();
|
|
|
|
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
|
$viewer,
|
|
$config,
|
|
PhabricatorPolicyCapability::CAN_EDIT);
|
|
|
|
$view = id(new PhabricatorActionListView())
|
|
->setUser($viewer);
|
|
|
|
$form_key = $config->getIdentifier();
|
|
|
|
$base_uri = "/transactions/editengine/{$engine_key}";
|
|
|
|
$is_concrete = (bool)$config->getID();
|
|
if (!$is_concrete) {
|
|
$save_uri = "{$base_uri}/save/{$form_key}/";
|
|
|
|
$view->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setName(pht('Make Editable'))
|
|
->setIcon('fa-pencil')
|
|
->setDisabled(!$can_edit)
|
|
->setWorkflow(true)
|
|
->setHref($save_uri));
|
|
|
|
$can_edit = false;
|
|
} else {
|
|
$edit_uri = "{$base_uri}/edit/{$form_key}/";
|
|
$view->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setName(pht('Edit Form Configuration'))
|
|
->setIcon('fa-pencil')
|
|
->setDisabled(!$can_edit)
|
|
->setWorkflow(!$can_edit)
|
|
->setHref($edit_uri));
|
|
}
|
|
|
|
$use_uri = $engine->getEditURI(null, "form/{$form_key}/");
|
|
|
|
$view->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setName(pht('Use Form'))
|
|
->setIcon('fa-th-list')
|
|
->setHref($use_uri));
|
|
|
|
$defaults_uri = "{$base_uri}/defaults/{$form_key}/";
|
|
|
|
$view->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setName(pht('Change Default Values'))
|
|
->setIcon('fa-paint-brush')
|
|
->setHref($defaults_uri)
|
|
->setWorkflow(!$can_edit)
|
|
->setDisabled(!$can_edit));
|
|
|
|
$reorder_uri = "{$base_uri}/reorder/{$form_key}/";
|
|
|
|
$view->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setName(pht('Change Field Order'))
|
|
->setIcon('fa-sort-alpha-asc')
|
|
->setHref($reorder_uri)
|
|
->setWorkflow(true)
|
|
->setDisabled(!$can_edit));
|
|
|
|
$lock_uri = "{$base_uri}/lock/{$form_key}/";
|
|
|
|
$view->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setName(pht('Lock / Hide Fields'))
|
|
->setIcon('fa-lock')
|
|
->setHref($lock_uri)
|
|
->setWorkflow(true)
|
|
->setDisabled(!$can_edit));
|
|
|
|
$disable_uri = "{$base_uri}/disable/{$form_key}/";
|
|
|
|
if ($config->getIsDisabled()) {
|
|
$disable_name = pht('Enable Form');
|
|
$disable_icon = 'fa-check';
|
|
} else {
|
|
$disable_name = pht('Disable Form');
|
|
$disable_icon = 'fa-ban';
|
|
}
|
|
|
|
$view->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setName($disable_name)
|
|
->setIcon($disable_icon)
|
|
->setHref($disable_uri)
|
|
->setWorkflow(true)
|
|
->setDisabled(!$can_edit));
|
|
|
|
$defaultcreate_uri = "{$base_uri}/defaultcreate/{$form_key}/";
|
|
|
|
if ($config->getIsDefault()) {
|
|
$defaultcreate_name = pht('Unmark as "Create" Form');
|
|
$defaultcreate_icon = 'fa-minus';
|
|
} else {
|
|
$defaultcreate_name = pht('Mark as "Create" Form');
|
|
$defaultcreate_icon = 'fa-plus';
|
|
}
|
|
|
|
$view->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setName($defaultcreate_name)
|
|
->setIcon($defaultcreate_icon)
|
|
->setHref($defaultcreate_uri)
|
|
->setWorkflow(true)
|
|
->setDisabled(!$can_edit));
|
|
|
|
if ($config->getIsEdit()) {
|
|
$isedit_name = pht('Unmark as "Edit" Form');
|
|
$isedit_icon = 'fa-minus';
|
|
} else {
|
|
$isedit_name = pht('Mark as "Edit" Form');
|
|
$isedit_icon = 'fa-plus';
|
|
}
|
|
|
|
$isedit_uri = "{$base_uri}/defaultedit/{$form_key}/";
|
|
|
|
$view->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setName($isedit_name)
|
|
->setIcon($isedit_icon)
|
|
->setHref($isedit_uri)
|
|
->setWorkflow(true)
|
|
->setDisabled(!$can_edit));
|
|
|
|
return $view;
|
|
}
|
|
|
|
private function buildPropertyView(
|
|
PhabricatorEditEngineConfiguration $config) {
|
|
$viewer = $this->getViewer();
|
|
|
|
$properties = id(new PHUIPropertyListView())
|
|
->setUser($viewer)
|
|
->setObject($config);
|
|
|
|
return $properties;
|
|
}
|
|
|
|
private function buildFieldList(PhabricatorEditEngineConfiguration $config) {
|
|
$viewer = $this->getViewer();
|
|
$engine = $config->getEngine();
|
|
|
|
$fields = $engine->getFieldsForConfig($config);
|
|
|
|
$form = id(new AphrontFormView())
|
|
->setUser($viewer)
|
|
->setAction(null);
|
|
|
|
foreach ($fields as $field) {
|
|
$field->setIsPreview(true);
|
|
|
|
$field->appendToForm($form);
|
|
}
|
|
|
|
$info = id(new PHUIInfoView())
|
|
->setSeverity(PHUIInfoView::SEVERITY_NOTICE)
|
|
->setErrors(
|
|
array(
|
|
pht('This is a preview of the current form configuration.'),
|
|
));
|
|
|
|
$box = id(new PHUIObjectBoxView())
|
|
->setHeaderText(pht('Form Preview'))
|
|
->setInfoView($info)
|
|
->setForm($form);
|
|
|
|
return $box;
|
|
}
|
|
|
|
}
|