mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-30 02:32:42 +01:00
Add a "date" standard custom field
Summary: See previous revisions. As maniphest. Test Plan: See screenshots. Reviewers: btrahan Reviewed By: btrahan CC: aran Differential Revision: https://secure.phabricator.com/D7009
This commit is contained in:
parent
726144b995
commit
6115670615
4 changed files with 88 additions and 1 deletions
|
@ -1637,6 +1637,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorSourceCodeView' => 'view/layout/PhabricatorSourceCodeView.php',
|
'PhabricatorSourceCodeView' => 'view/layout/PhabricatorSourceCodeView.php',
|
||||||
'PhabricatorStandardCustomField' => 'infrastructure/customfield/standard/PhabricatorStandardCustomField.php',
|
'PhabricatorStandardCustomField' => 'infrastructure/customfield/standard/PhabricatorStandardCustomField.php',
|
||||||
'PhabricatorStandardCustomFieldBool' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldBool.php',
|
'PhabricatorStandardCustomFieldBool' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldBool.php',
|
||||||
|
'PhabricatorStandardCustomFieldDate' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldDate.php',
|
||||||
'PhabricatorStandardCustomFieldInt' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldInt.php',
|
'PhabricatorStandardCustomFieldInt' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldInt.php',
|
||||||
'PhabricatorStandardCustomFieldInterface' => 'infrastructure/customfield/interface/PhabricatorStandardCustomFieldInterface.php',
|
'PhabricatorStandardCustomFieldInterface' => 'infrastructure/customfield/interface/PhabricatorStandardCustomFieldInterface.php',
|
||||||
'PhabricatorStandardCustomFieldRemarkup' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldRemarkup.php',
|
'PhabricatorStandardCustomFieldRemarkup' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldRemarkup.php',
|
||||||
|
@ -3789,6 +3790,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorSourceCodeView' => 'AphrontView',
|
'PhabricatorSourceCodeView' => 'AphrontView',
|
||||||
'PhabricatorStandardCustomField' => 'PhabricatorCustomField',
|
'PhabricatorStandardCustomField' => 'PhabricatorCustomField',
|
||||||
'PhabricatorStandardCustomFieldBool' => 'PhabricatorStandardCustomField',
|
'PhabricatorStandardCustomFieldBool' => 'PhabricatorStandardCustomField',
|
||||||
|
'PhabricatorStandardCustomFieldDate' => 'PhabricatorStandardCustomField',
|
||||||
'PhabricatorStandardCustomFieldInt' => 'PhabricatorStandardCustomField',
|
'PhabricatorStandardCustomFieldInt' => 'PhabricatorStandardCustomField',
|
||||||
'PhabricatorStandardCustomFieldRemarkup' => 'PhabricatorStandardCustomField',
|
'PhabricatorStandardCustomFieldRemarkup' => 'PhabricatorStandardCustomField',
|
||||||
'PhabricatorStandardCustomFieldSelect' => 'PhabricatorStandardCustomField',
|
'PhabricatorStandardCustomFieldSelect' => 'PhabricatorStandardCustomField',
|
||||||
|
|
|
@ -35,7 +35,9 @@ final class PhabricatorPeopleProfileEditController
|
||||||
$field_list = PhabricatorCustomField::getObjectFields(
|
$field_list = PhabricatorCustomField::getObjectFields(
|
||||||
$user,
|
$user,
|
||||||
PhabricatorCustomField::ROLE_EDIT);
|
PhabricatorCustomField::ROLE_EDIT);
|
||||||
$field_list->readFieldsFromStorage($user);
|
$field_list
|
||||||
|
->setViewer($user)
|
||||||
|
->readFieldsFromStorage($user);
|
||||||
|
|
||||||
if ($request->isFormPost()) {
|
if ($request->isFormPost()) {
|
||||||
$xactions = $field_list->buildFieldTransactionsFromRequest(
|
$xactions = $field_list->buildFieldTransactionsFromRequest(
|
||||||
|
|
|
@ -20,6 +20,13 @@ final class PhabricatorCustomFieldList extends Phobject {
|
||||||
return $this->fields;
|
return $this->fields;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setViewer(PhabricatorUser $viewer) {
|
||||||
|
foreach ($this->getFields() as $field) {
|
||||||
|
$field->setViewer($viewer);
|
||||||
|
}
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read stored values for all fields which support storage.
|
* Read stored values for all fields which support storage.
|
||||||
*
|
*
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class PhabricatorStandardCustomFieldDate
|
||||||
|
extends PhabricatorStandardCustomField {
|
||||||
|
|
||||||
|
public function getFieldType() {
|
||||||
|
return 'date';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function buildFieldIndexes() {
|
||||||
|
$indexes = array();
|
||||||
|
|
||||||
|
$value = $this->getFieldValue();
|
||||||
|
if (strlen($value)) {
|
||||||
|
$indexes[] = $this->newNumericIndex((int)$value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $indexes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getValueForStorage() {
|
||||||
|
$value = $this->getFieldValue();
|
||||||
|
if (strlen($value)) {
|
||||||
|
return (int)$value;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setValueFromStorage($value) {
|
||||||
|
if (strlen($value)) {
|
||||||
|
$value = (int)$value;
|
||||||
|
} else {
|
||||||
|
$value = null;
|
||||||
|
}
|
||||||
|
return $this->setFieldValue($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function renderEditControl() {
|
||||||
|
return $this->newDateControl();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function readValueFromRequest(AphrontRequest $request) {
|
||||||
|
$control = $this->newDateControl();
|
||||||
|
$control->setUser($request->getUser());
|
||||||
|
$value = $control->readValueFromRequest($request);
|
||||||
|
|
||||||
|
$this->setFieldValue($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function renderPropertyViewValue() {
|
||||||
|
$value = $this->getFieldValue();
|
||||||
|
if (!$value) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return phabricator_datetime($value, $this->getViewer());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function newDateControl() {
|
||||||
|
$control = id(new AphrontFormDateControl())
|
||||||
|
->setLabel($this->getFieldName())
|
||||||
|
->setName($this->getFieldKey())
|
||||||
|
->setUser($this->getViewer())
|
||||||
|
->setAllowNull(true);
|
||||||
|
|
||||||
|
$control->setValue($this->getFieldValue());
|
||||||
|
|
||||||
|
return $control;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Support ApplicationSearch for these fields. We build indexes above,
|
||||||
|
// but don't provide a UI for searching. To do so, we need a reasonable date
|
||||||
|
// range control and the ability to add a range constraint.
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue