Page MenuHomePhabricator

D18868.diff
No OneTemporary

D18868.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -226,6 +226,7 @@
'BulkRemarkupParameterType' => 'applications/transactions/bulk/type/BulkRemarkupParameterType.php',
'BulkSelectParameterType' => 'applications/transactions/bulk/type/BulkSelectParameterType.php',
'BulkStringParameterType' => 'applications/transactions/bulk/type/BulkStringParameterType.php',
+ 'BulkTokenizerParameterType' => 'applications/transactions/bulk/type/BulkTokenizerParameterType.php',
'CalendarTimeUtil' => 'applications/calendar/util/CalendarTimeUtil.php',
'CalendarTimeUtilTestCase' => 'applications/calendar/__tests__/CalendarTimeUtilTestCase.php',
'CelerityAPI' => 'applications/celerity/CelerityAPI.php',
@@ -5249,6 +5250,7 @@
'BulkRemarkupParameterType' => 'BulkParameterType',
'BulkSelectParameterType' => 'BulkParameterType',
'BulkStringParameterType' => 'BulkParameterType',
+ 'BulkTokenizerParameterType' => 'BulkParameterType',
'CalendarTimeUtil' => 'Phobject',
'CalendarTimeUtilTestCase' => 'PhabricatorTestCase',
'CelerityAPI' => 'Phobject',
diff --git a/src/applications/project/engineextension/PhabricatorProjectsEditEngineExtension.php b/src/applications/project/engineextension/PhabricatorProjectsEditEngineExtension.php
--- a/src/applications/project/engineextension/PhabricatorProjectsEditEngineExtension.php
+++ b/src/applications/project/engineextension/PhabricatorProjectsEditEngineExtension.php
@@ -46,6 +46,8 @@
$project_phids = array();
}
+ $viewer = $engine->getViewer();
+
$projects_field = id(new PhabricatorProjectsEditField())
->setKey('projectPHIDs')
->setLabel(pht('Tags'))
@@ -58,9 +60,11 @@
->setDescription(pht('Select project tags for the object.'))
->setTransactionType($edge_type)
->setMetadataValue('edge:type', $project_edge_type)
- ->setValue($project_phids);
+ ->setValue($project_phids)
+ ->setViewer($viewer);
- $projects_field->setViewer($engine->getViewer());
+ $projects_datasource = id(new PhabricatorProjectDatasource())
+ ->setViewer($viewer);
$edit_add = $projects_field->getConduitEditType(self::EDITKEY_ADD)
->setConduitDescription(pht('Add project tags.'));
@@ -72,6 +76,18 @@
$edit_rem = $projects_field->getConduitEditType(self::EDITKEY_REMOVE)
->setConduitDescription(pht('Remove project tags.'));
+ $projects_field->getBulkEditType(self::EDITKEY_ADD)
+ ->setBulkEditLabel(pht('Add project tags'))
+ ->setDatasource($projects_datasource);
+
+ $projects_field->getBulkEditType(self::EDITKEY_SET)
+ ->setBulkEditLabel(pht('Set project tags to'))
+ ->setDatasource($projects_datasource);
+
+ $projects_field->getBulkEditType(self::EDITKEY_REMOVE)
+ ->setBulkEditLabel(pht('Remove project tags'))
+ ->setDatasource($projects_datasource);
+
return array(
$projects_field,
);
diff --git a/src/applications/subscriptions/engineextension/PhabricatorSubscriptionsEditEngineExtension.php b/src/applications/subscriptions/engineextension/PhabricatorSubscriptionsEditEngineExtension.php
--- a/src/applications/subscriptions/engineextension/PhabricatorSubscriptionsEditEngineExtension.php
+++ b/src/applications/subscriptions/engineextension/PhabricatorSubscriptionsEditEngineExtension.php
@@ -42,6 +42,8 @@
$sub_phids = array();
}
+ $viewer = $engine->getViewer();
+
$subscribers_field = id(new PhabricatorSubscribersEditField())
->setKey(self::FIELDKEY)
->setLabel(pht('Subscribers'))
@@ -53,9 +55,11 @@
->setCommentActionOrder(9000)
->setDescription(pht('Choose subscribers.'))
->setTransactionType($subscribers_type)
- ->setValue($sub_phids);
+ ->setValue($sub_phids)
+ ->setViewer($viewer);
- $subscribers_field->setViewer($engine->getViewer());
+ $subscriber_datasource = id(new PhabricatorMetaMTAMailableDatasource())
+ ->setViewer($viewer);
$edit_add = $subscribers_field->getConduitEditType(self::EDITKEY_ADD)
->setConduitDescription(pht('Add subscribers.'));
@@ -67,6 +71,18 @@
$edit_rem = $subscribers_field->getConduitEditType(self::EDITKEY_REMOVE)
->setConduitDescription(pht('Remove subscribers.'));
+ $subscribers_field->getBulkEditType(self::EDITKEY_ADD)
+ ->setBulkEditLabel(pht('Add subscribers'))
+ ->setDatasource($subscriber_datasource);
+
+ $subscribers_field->getBulkEditType(self::EDITKEY_SET)
+ ->setBulkEditLabel(pht('Set subscribers to'))
+ ->setDatasource($subscriber_datasource);
+
+ $subscribers_field->getBulkEditType(self::EDITKEY_REMOVE)
+ ->setBulkEditLabel(pht('Remove subscribers'))
+ ->setDatasource($subscriber_datasource);
+
return array(
$subscribers_field,
);
diff --git a/src/applications/transactions/bulk/PhabricatorEditEngineBulkJobType.php b/src/applications/transactions/bulk/PhabricatorEditEngineBulkJobType.php
--- a/src/applications/transactions/bulk/PhabricatorEditEngineBulkJobType.php
+++ b/src/applications/transactions/bulk/PhabricatorEditEngineBulkJobType.php
@@ -82,6 +82,12 @@
$xaction->attachComment($comment);
}
+ if (isset($raw_xaction['metadata'])) {
+ foreach ($raw_xaction['metadata'] as $meta_key => $meta_value) {
+ $xaction->setMetadataValue($meta_key, $meta_value);
+ }
+ }
+
$xactions[] = $xaction;
}
diff --git a/src/applications/transactions/bulk/type/BulkTokenizerParameterType.php b/src/applications/transactions/bulk/type/BulkTokenizerParameterType.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/bulk/type/BulkTokenizerParameterType.php
@@ -0,0 +1,40 @@
+<?php
+
+final class BulkTokenizerParameterType
+ extends BulkParameterType {
+
+ private $datasource;
+
+ public function setDatasource(PhabricatorTypeaheadDatasource $datasource) {
+ $this->datasource = $datasource;
+ return $this;
+ }
+
+ public function getDatasource() {
+ return $this->datasource;
+ }
+
+ public function getPHUIXControlType() {
+ return 'tokenizer';
+ }
+
+ public function getPHUIXControlSpecification() {
+ $template = new AphrontTokenizerTemplateView();
+ $template_markup = $template->render();
+
+ $datasource = $this->getDatasource();
+ $limit = null;
+
+ return array(
+ 'markup' => (string)hsprintf('%s', $template_markup),
+ 'config' => array(
+ 'src' => $datasource->getDatasourceURI(),
+ 'browseURI' => $datasource->getBrowseURI(),
+ 'placeholder' => $datasource->getPlaceholderText(),
+ 'limit' => $limit,
+ ),
+ 'value' => null,
+ );
+ }
+
+}
diff --git a/src/applications/transactions/editengine/PhabricatorEditEngine.php b/src/applications/transactions/editengine/PhabricatorEditEngine.php
--- a/src/applications/transactions/editengine/PhabricatorEditEngine.php
+++ b/src/applications/transactions/editengine/PhabricatorEditEngine.php
@@ -2498,6 +2498,8 @@
// but it's possible that this isn't the case.
$xaction['type'] = $edit_type->getTransactionType();
+ $xaction['metadata'] = $edit_type->getMetadata();
+
$xaction = $edit_type->newRawBulkTransaction($xaction);
if ($xaction === null) {
unset($xactions[$key]);
diff --git a/src/applications/transactions/editfield/PhabricatorEditField.php b/src/applications/transactions/editfield/PhabricatorEditField.php
--- a/src/applications/transactions/editfield/PhabricatorEditField.php
+++ b/src/applications/transactions/editfield/PhabricatorEditField.php
@@ -769,6 +769,19 @@
return $this->bulkEditTypes;
}
+ final public function getBulkEditType($key) {
+ $edit_types = $this->getBulkEditTypes();
+
+ if (empty($edit_types[$key])) {
+ throw new Exception(
+ pht(
+ 'This EditField does not provide a Bulk EditType with key "%s".',
+ $key));
+ }
+
+ return $edit_types[$key];
+ }
+
protected function newBulkEditTypes() {
$edit_type = $this->getEditType();
diff --git a/src/applications/transactions/edittype/PhabricatorEdgeEditType.php b/src/applications/transactions/edittype/PhabricatorEdgeEditType.php
--- a/src/applications/transactions/edittype/PhabricatorEdgeEditType.php
+++ b/src/applications/transactions/edittype/PhabricatorEdgeEditType.php
@@ -34,4 +34,28 @@
return array($xaction);
}
+ protected function newBulkParameterType() {
+ if (!$this->getDatasource()) {
+ return null;
+ }
+
+ return id(new BulkTokenizerParameterType())
+ ->setDatasource($this->getDatasource());
+ }
+
+
+ public function newRawBulkTransaction(array $xaction) {
+ $value = idx($xaction, 'value');
+
+ if ($this->getEdgeOperation() !== null) {
+ $value = array_fuse($value);
+ $value = array(
+ $this->getEdgeOperation() => $value,
+ );
+ $xaction['value'] = $value;
+ }
+
+ return $xaction;
+ }
+
}

File Metadata

Mime Type
text/plain
Expires
May 24 2024, 5:24 AM (4 w, 5 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6272465
Default Alt Text
D18868.diff (8 KB)

Event Timeline