mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-26 23:40:57 +01:00
Add "user" and "users" standard custom fields
Summary: These end up a little weird with subclassing instead of `switch`, but some day we could alias them to one another or something I guess. If I'm feeling brave, I might get rid of the "user" variant when I migrate Maniphest custom field specs, and turn it into "users, limit = 1" or something like that. Test Plan: See screenshots. Reviewers: btrahan Reviewed By: btrahan CC: aran Differential Revision: https://secure.phabricator.com/D7010
This commit is contained in:
parent
6115670615
commit
ed7a5078f9
5 changed files with 147 additions and 2 deletions
|
@ -1640,9 +1640,11 @@ phutil_register_library_map(array(
|
|||
'PhabricatorStandardCustomFieldDate' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldDate.php',
|
||||
'PhabricatorStandardCustomFieldInt' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldInt.php',
|
||||
'PhabricatorStandardCustomFieldInterface' => 'infrastructure/customfield/interface/PhabricatorStandardCustomFieldInterface.php',
|
||||
'PhabricatorStandardCustomFieldPHIDs' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldPHIDs.php',
|
||||
'PhabricatorStandardCustomFieldRemarkup' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldRemarkup.php',
|
||||
'PhabricatorStandardCustomFieldSelect' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldSelect.php',
|
||||
'PhabricatorStandardCustomFieldText' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldText.php',
|
||||
'PhabricatorStandardCustomFieldUsers' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldUsers.php',
|
||||
'PhabricatorStandardPageView' => 'view/page/PhabricatorStandardPageView.php',
|
||||
'PhabricatorStatusController' => 'applications/system/PhabricatorStatusController.php',
|
||||
'PhabricatorStorageFixtureScopeGuard' => 'infrastructure/testing/fixture/PhabricatorStorageFixtureScopeGuard.php',
|
||||
|
@ -3792,9 +3794,11 @@ phutil_register_library_map(array(
|
|||
'PhabricatorStandardCustomFieldBool' => 'PhabricatorStandardCustomField',
|
||||
'PhabricatorStandardCustomFieldDate' => 'PhabricatorStandardCustomField',
|
||||
'PhabricatorStandardCustomFieldInt' => 'PhabricatorStandardCustomField',
|
||||
'PhabricatorStandardCustomFieldPHIDs' => 'PhabricatorStandardCustomField',
|
||||
'PhabricatorStandardCustomFieldRemarkup' => 'PhabricatorStandardCustomField',
|
||||
'PhabricatorStandardCustomFieldSelect' => 'PhabricatorStandardCustomField',
|
||||
'PhabricatorStandardCustomFieldText' => 'PhabricatorStandardCustomField',
|
||||
'PhabricatorStandardCustomFieldUsers' => 'PhabricatorStandardCustomFieldPHIDs',
|
||||
'PhabricatorStandardPageView' => 'PhabricatorBarePageView',
|
||||
'PhabricatorStatusController' => 'PhabricatorController',
|
||||
'PhabricatorStorageManagementDatabasesWorkflow' => 'PhabricatorStorageManagementWorkflow',
|
||||
|
|
|
@ -105,8 +105,8 @@ final class PhabricatorPeopleQuery
|
|||
$table->getTableName(),
|
||||
$this->buildJoinsClause($conn_r),
|
||||
$this->buildWhereClause($conn_r),
|
||||
$this->buildOrderClause($conn_r),
|
||||
$this->buildApplicationSearchGroupClause($conn_r),
|
||||
$this->buildOrderClause($conn_r),
|
||||
$this->buildLimitClause($conn_r));
|
||||
|
||||
if ($this->needPrimaryEmail) {
|
||||
|
|
|
@ -504,7 +504,7 @@ abstract class PhabricatorApplicationSearchEngine {
|
|||
$handles = array();
|
||||
if ($all_phids) {
|
||||
$handles = id(new PhabricatorHandleQuery())
|
||||
->setViewer($this->getViewer())
|
||||
->setViewer($this->requireViewer())
|
||||
->withPHIDs($all_phids)
|
||||
->execute();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,89 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Common code for standard field types which store lists of PHIDs.
|
||||
*/
|
||||
abstract class PhabricatorStandardCustomFieldPHIDs
|
||||
extends PhabricatorStandardCustomField {
|
||||
|
||||
public function buildFieldIndexes() {
|
||||
$indexes = array();
|
||||
|
||||
$value = $this->getFieldValue();
|
||||
if (is_array($value)) {
|
||||
foreach ($value as $phid) {
|
||||
$indexes[] = $this->newStringIndex($phid);
|
||||
}
|
||||
}
|
||||
|
||||
return $indexes;
|
||||
}
|
||||
|
||||
public function readValueFromRequest(AphrontRequest $request) {
|
||||
$value = $request->getArr($this->getFieldKey());
|
||||
$this->setFieldValue($value);
|
||||
}
|
||||
|
||||
public function getValueForStorage() {
|
||||
$value = $this->getFieldValue();
|
||||
if (!$value) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return json_encode(array_values($value));
|
||||
}
|
||||
|
||||
public function setValueFromStorage($value) {
|
||||
$result = array();
|
||||
if ($value) {
|
||||
$value = json_decode($value, true);
|
||||
if (is_array($value)) {
|
||||
$result = array_values($value);
|
||||
}
|
||||
}
|
||||
$this->setFieldValue($value);
|
||||
}
|
||||
|
||||
public function readApplicationSearchValueFromRequest(
|
||||
PhabricatorApplicationSearchEngine $engine,
|
||||
AphrontRequest $request) {
|
||||
return $request->getArr($this->getFieldKey());
|
||||
}
|
||||
|
||||
public function applyApplicationSearchConstraintToQuery(
|
||||
PhabricatorApplicationSearchEngine $engine,
|
||||
PhabricatorCursorPagedPolicyAwareQuery $query,
|
||||
$value) {
|
||||
if ($value) {
|
||||
$query->withApplicationSearchContainsConstraint(
|
||||
$this->newStringIndex(null),
|
||||
$value);
|
||||
}
|
||||
}
|
||||
|
||||
public function getRequiredHandlePHIDsForApplicationSearch($value) {
|
||||
if ($value) {
|
||||
return $value;
|
||||
}
|
||||
return array();
|
||||
}
|
||||
|
||||
public function renderPropertyViewValue() {
|
||||
$value = $this->getFieldValue();
|
||||
if (!$value) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// TODO: Surface and batch this.
|
||||
|
||||
$handles = id(new PhabricatorHandleQuery())
|
||||
->setViewer($this->getViewer())
|
||||
->withPHIDs($value)
|
||||
->execute();
|
||||
|
||||
$handles = mpull($handles, 'renderLink');
|
||||
$handles = phutil_implode_html(', ', $handles);
|
||||
return $handles;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorStandardCustomFieldUsers
|
||||
extends PhabricatorStandardCustomFieldPHIDs {
|
||||
|
||||
public function getFieldType() {
|
||||
return 'users';
|
||||
}
|
||||
|
||||
public function renderEditControl() {
|
||||
$handles = array();
|
||||
$value = $this->getFieldValue();
|
||||
if ($value) {
|
||||
|
||||
// TODO: Surface and batch.
|
||||
|
||||
$handles = id(new PhabricatorHandleQuery())
|
||||
->setViewer($this->getViewer())
|
||||
->withPHIDs($value)
|
||||
->execute();
|
||||
}
|
||||
|
||||
$control = id(new AphrontFormTokenizerControl())
|
||||
->setLabel($this->getFieldName())
|
||||
->setName($this->getFieldKey())
|
||||
->setDatasource('/typeahead/common/accounts/')
|
||||
->setValue($handles);
|
||||
|
||||
$limit = $this->getFieldConfigValue('limit');
|
||||
if ($limit) {
|
||||
$control->setLimit($limit);
|
||||
}
|
||||
|
||||
return $control;
|
||||
}
|
||||
|
||||
public function appendToApplicationSearchForm(
|
||||
PhabricatorApplicationSearchEngine $engine,
|
||||
AphrontFormView $form,
|
||||
$value,
|
||||
array $handles) {
|
||||
|
||||
$control = id(new AphrontFormTokenizerControl())
|
||||
->setLabel($this->getFieldName())
|
||||
->setName($this->getFieldKey())
|
||||
->setDatasource('/typeahead/common/accounts/')
|
||||
->setValue($handles);
|
||||
|
||||
$form->appendChild($control);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue