Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15376479
D18868.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
8 KB
Referenced Files
None
Subscribers
None
D18868.diff
View Options
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
Details
Attached
Mime Type
text/plain
Expires
Fri, Mar 14, 3:57 AM (3 w, 4 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7644556
Default Alt Text
D18868.diff (8 KB)
Attached To
Mode
D18868: Restore "Tags" and "Subscribers" edit capabilities to Maniphest bulk editor
Attached
Detach File
Event Timeline
Log In to Comment