Changeset View
Changeset View
Standalone View
Standalone View
src/applications/phrequent/controller/PhrequentEditController.php
- This file was added.
<?php | |||||
final class PhrequentEditController extends PhrequentController { | |||||
private $id; | |||||
public function willProcessRequest(array $data) { | |||||
$this->id = idx($data, 'id'); | |||||
} | |||||
public function processRequest() { | |||||
$request = $this->getRequest(); | |||||
$user = $request->getUser(); | |||||
$is_create = !$this->id; | |||||
if ($is_create) { | |||||
$usertime = id(new PhrequentUserTime()) | |||||
->setUserPHID($user->getPHID()); | |||||
} else { | |||||
$usertime = id(new PhrequentUserTimeQuery()) | |||||
->setViewer($user) | |||||
->requireCapabilities( | |||||
array( | |||||
PhabricatorPolicyCapability::CAN_VIEW, | |||||
PhabricatorPolicyCapability::CAN_EDIT, | |||||
)) | |||||
->withIDs(array($this->id)) | |||||
->executeOne(); | |||||
if (!$usertime) { | |||||
return new Aphront404Response(); | |||||
} | |||||
} | |||||
$phids = array( | |||||
$usertime->getUserPHID(), | |||||
$usertime->getObjectPHID()); | |||||
$handles = $this->loadViewerHandles($phids); | |||||
$user_control = id(new AphrontFormTokenizerControl()) | |||||
->setLabel(pht('User')) | |||||
->setName('user') | |||||
->setUser($user) | |||||
->setDatasource(new PhabricatorPeopleDatasource()) | |||||
->setLimit(1) | |||||
->setDisableBehavior(true); | |||||
$object_control = id(new AphrontFormTokenizerControl()) | |||||
->setLabel(pht('Object')) | |||||
->setName('object') | |||||
->setUser($user) | |||||
->setDatasource(new PhabricatorSearchDatasource()) | |||||
->setLimit(1); | |||||
$start_control = id(new AphrontFormDateControl()) | |||||
->setLabel(pht('Start')) | |||||
->setName('start') | |||||
->setUser($user) | |||||
->setInitialTime(AphrontFormDateControl::TIME_START_OF_DAY); | |||||
$end_control = id(new AphrontFormDateControl()) | |||||
->setLabel(pht('End')) | |||||
->setName('end') | |||||
->setUser($user) | |||||
->setInitialTime(AphrontFormDateControl::TIME_END_OF_DAY); | |||||
$text = null; | |||||
$errors = array(); | |||||
$error_view = null; | |||||
if ($is_create) { | |||||
$page_title = pht('New Tracked Time'); | |||||
} else { | |||||
$page_title = pht('Edit Tracked Time'); | |||||
} | |||||
if ($request->isFormPost()) { | |||||
$object_value = $request->getArr('object'); | |||||
$user_value = $request->getArr('user'); | |||||
$object_phid = reset($object_value); | |||||
$user_phid = reset($user_value); | |||||
$start_value = $start_control->readValueFromRequest($request); | |||||
$end_value = $end_control->readValueFromRequest($request); | |||||
if (!strlen($object_phid)) { | |||||
$object_control->setError(pht('Required')); | |||||
$errors[] = pht('Object is required.'); | |||||
} | |||||
if ($start_value >= $end_value) { | |||||
$end_control->setError(pht('Undersized')); | |||||
$errors[] = pht('End must be greater than start.'); | |||||
} | |||||
if (!$errors) { | |||||
$usertime | |||||
->setUserPHID($user_phid) | |||||
->setObjectPHID($object_phid) | |||||
->setDateStarted($start_value) | |||||
->setDateEnded($end_value) | |||||
->save(); | |||||
$uri = new PhutilURI($this->getApplicationURI()); | |||||
if ($request->isAjax()) { | |||||
$response = id(new AphrontAjaxResponse()) | |||||
->setContent(array('redirect_uri' => $uri)); | |||||
} else { | |||||
$response = id(new AphrontRedirectResponse()) | |||||
->setURI($uri); | |||||
} | |||||
return $response; | |||||
} | |||||
} | |||||
$form = new AphrontFormView(); | |||||
if ($error_view) { | |||||
$form->appendChild($error_view); | |||||
} | |||||
$form | |||||
->setUser($user); | |||||
if (!$is_create) { | |||||
$user_control->setValue(array($handles[$usertime->getUserPHID()])); | |||||
$object_control->setValue(array($handles[$usertime->getObjectPHID()])); | |||||
$start_control->setValue($usertime->getDateStarted()); | |||||
$end_control->setValue($usertime->getDateEnded()); | |||||
} else { | |||||
$user_control->setValue(array($handles[$usertime->getUserPHID()])); | |||||
} | |||||
$form | |||||
->appendChild($user_control) | |||||
->appendChild($object_control) | |||||
->appendChild($start_control) | |||||
->appendChild($end_control); | |||||
$submit = new AphrontFormSubmitControl(); | |||||
$submit->addCancelButton($this->getApplicationURI()); | |||||
if (!$is_create) { | |||||
$submit->setValue(pht('Save Tracked Time')); | |||||
$title = pht('Edit Tracked Time'); | |||||
$short = pht('Edit'); | |||||
} else { | |||||
$submit->setValue(pht('Create Tracked Time')); | |||||
$title = pht('Create New Tracked Time'); | |||||
$short = pht('Create'); | |||||
} | |||||
$form->appendChild($submit); | |||||
$form_box = id(new PHUIObjectBoxView()) | |||||
->setHeaderText($title) | |||||
->setFormErrors($errors) | |||||
->setForm($form); | |||||
$crumbs = $this->buildApplicationCrumbs($this->buildSideNavView()); | |||||
$crumbs->addTextCrumb($page_title); | |||||
return $this->buildApplicationPage( | |||||
array( | |||||
$crumbs, | |||||
$form_box, | |||||
), | |||||
array( | |||||
'title' => $title, | |||||
'device' => true, | |||||
)); | |||||
} | |||||
} |