Summary: This attempts some consistency in form layouts. Notably, they all now contain headers and are 16px off the sides and tops of pages. Also updated dialogs to the same look and feel. I think I got 98% of forms with this pass, but it's likely I missed some buried somewhere. TODO: will take another pass as consolidating these colors and new gradients in another diff. Test Plan: Played in my sandbox all week. Please play with it too and let me know how they feel. Reviewers: epriestley, btrahan Reviewed By: epriestley CC: Korvin, aran Differential Revision: https://secure.phabricator.com/D6806
120 lines
3.5 KiB
PHP
120 lines
3.5 KiB
PHP
<?php
|
|
|
|
final class PhabricatorRepositoryCreateController
|
|
extends PhabricatorRepositoryController {
|
|
|
|
public function processRequest() {
|
|
|
|
|
|
$request = $this->getRequest();
|
|
$user = $request->getUser();
|
|
|
|
$e_name = true;
|
|
$e_callsign = true;
|
|
|
|
$repository = new PhabricatorRepository();
|
|
|
|
$type_map = PhabricatorRepositoryType::getAllRepositoryTypes();
|
|
$errors = array();
|
|
|
|
if ($request->isFormPost()) {
|
|
|
|
$repository->setName($request->getStr('name'));
|
|
$repository->setCallsign($request->getStr('callsign'));
|
|
$repository->setVersionControlSystem($request->getStr('type'));
|
|
|
|
if (!strlen($repository->getName())) {
|
|
$e_name = 'Required';
|
|
$errors[] = 'Repository name is required.';
|
|
} else {
|
|
$e_name = null;
|
|
}
|
|
|
|
if (!strlen($repository->getCallsign())) {
|
|
$e_callsign = 'Required';
|
|
$errors[] = 'Callsign is required.';
|
|
} else if (!preg_match('/^[A-Z]+$/', $repository->getCallsign())) {
|
|
$e_callsign = 'Invalid';
|
|
$errors[] = 'Callsign must be ALL UPPERCASE LETTERS.';
|
|
} else {
|
|
$e_callsign = null;
|
|
}
|
|
|
|
if (empty($type_map[$repository->getVersionControlSystem()])) {
|
|
$errors[] = 'Invalid version control system.';
|
|
}
|
|
|
|
if (!$errors) {
|
|
try {
|
|
$repository->save();
|
|
|
|
return id(new AphrontRedirectResponse())
|
|
->setURI('/repository/edit/'.$repository->getID().'/');
|
|
|
|
} catch (AphrontQueryDuplicateKeyException $ex) {
|
|
$e_callsign = 'Duplicate';
|
|
$errors[] = 'Callsign must be unique. Another repository already '.
|
|
'uses that callsign.';
|
|
}
|
|
}
|
|
}
|
|
|
|
$error_view = null;
|
|
if ($errors) {
|
|
$error_view = new AphrontErrorView();
|
|
$error_view->setErrors($errors);
|
|
$error_view->setTitle('Form Errors');
|
|
}
|
|
|
|
$form = new AphrontFormView();
|
|
$form
|
|
->setUser($user)
|
|
->setAction('/repository/create/')
|
|
->appendChild(
|
|
id(new AphrontFormTextControl())
|
|
->setLabel('Name')
|
|
->setName('name')
|
|
->setValue($repository->getName())
|
|
->setError($e_name)
|
|
->setCaption('Human-readable repository name.'))
|
|
->appendChild(hsprintf(
|
|
'<p class="aphront-form-instructions">Select a "Callsign" — a '.
|
|
'short, uppercase string to identify revisions in this repository. If '.
|
|
'you choose "EX", revisions in this repository will be identified '.
|
|
'with the prefix "rEX".</p>'))
|
|
->appendChild(
|
|
id(new AphrontFormTextControl())
|
|
->setLabel('Callsign')
|
|
->setName('callsign')
|
|
->setValue($repository->getCallsign())
|
|
->setError($e_callsign)
|
|
->setCaption(
|
|
'Short, UPPERCASE identifier. Once set, it can not be changed.'))
|
|
->appendChild(
|
|
id(new AphrontFormSelectControl())
|
|
->setLabel('Type')
|
|
->setName('type')
|
|
->setOptions($type_map)
|
|
->setValue($repository->getVersionControlSystem()))
|
|
->appendChild(
|
|
id(new AphrontFormSubmitControl())
|
|
->setValue('Create Repository')
|
|
->addCancelButton('/repository/'));
|
|
|
|
$form_box = id(new PHUIFormBoxView())
|
|
->setHeaderText(pht('Create Repository'))
|
|
->setFormError($error_view)
|
|
->setForm($form);
|
|
|
|
return $this->buildApplicationPage(
|
|
array(
|
|
$form_box,
|
|
),
|
|
array(
|
|
'title' => pht('Create Repository'),
|
|
'device' => true,
|
|
));
|
|
}
|
|
|
|
}
|