@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Restore "Tags" and "Subscribers" edit capabilities to Maniphest bulk editor

Summary: Depends on D18867. Ref T13025. Fixes T8740. Rebuilds the tag/subscriber actions (add, remove, set) into the bulk editor.

Test Plan: Added, removed and set these values via bulk edit.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T13025, T8740

Differential Revision: https://secure.phabricator.com/D18868

+123 -4
+2
src/__phutil_library_map__.php
··· 226 226 'BulkRemarkupParameterType' => 'applications/transactions/bulk/type/BulkRemarkupParameterType.php', 227 227 'BulkSelectParameterType' => 'applications/transactions/bulk/type/BulkSelectParameterType.php', 228 228 'BulkStringParameterType' => 'applications/transactions/bulk/type/BulkStringParameterType.php', 229 + 'BulkTokenizerParameterType' => 'applications/transactions/bulk/type/BulkTokenizerParameterType.php', 229 230 'CalendarTimeUtil' => 'applications/calendar/util/CalendarTimeUtil.php', 230 231 'CalendarTimeUtilTestCase' => 'applications/calendar/__tests__/CalendarTimeUtilTestCase.php', 231 232 'CelerityAPI' => 'applications/celerity/CelerityAPI.php', ··· 5249 5250 'BulkRemarkupParameterType' => 'BulkParameterType', 5250 5251 'BulkSelectParameterType' => 'BulkParameterType', 5251 5252 'BulkStringParameterType' => 'BulkParameterType', 5253 + 'BulkTokenizerParameterType' => 'BulkParameterType', 5252 5254 'CalendarTimeUtil' => 'Phobject', 5253 5255 'CalendarTimeUtilTestCase' => 'PhabricatorTestCase', 5254 5256 'CelerityAPI' => 'Phobject',
+18 -2
src/applications/project/engineextension/PhabricatorProjectsEditEngineExtension.php
··· 46 46 $project_phids = array(); 47 47 } 48 48 49 + $viewer = $engine->getViewer(); 50 + 49 51 $projects_field = id(new PhabricatorProjectsEditField()) 50 52 ->setKey('projectPHIDs') 51 53 ->setLabel(pht('Tags')) ··· 58 60 ->setDescription(pht('Select project tags for the object.')) 59 61 ->setTransactionType($edge_type) 60 62 ->setMetadataValue('edge:type', $project_edge_type) 61 - ->setValue($project_phids); 63 + ->setValue($project_phids) 64 + ->setViewer($viewer); 62 65 63 - $projects_field->setViewer($engine->getViewer()); 66 + $projects_datasource = id(new PhabricatorProjectDatasource()) 67 + ->setViewer($viewer); 64 68 65 69 $edit_add = $projects_field->getConduitEditType(self::EDITKEY_ADD) 66 70 ->setConduitDescription(pht('Add project tags.')); ··· 71 75 72 76 $edit_rem = $projects_field->getConduitEditType(self::EDITKEY_REMOVE) 73 77 ->setConduitDescription(pht('Remove project tags.')); 78 + 79 + $projects_field->getBulkEditType(self::EDITKEY_ADD) 80 + ->setBulkEditLabel(pht('Add project tags')) 81 + ->setDatasource($projects_datasource); 82 + 83 + $projects_field->getBulkEditType(self::EDITKEY_SET) 84 + ->setBulkEditLabel(pht('Set project tags to')) 85 + ->setDatasource($projects_datasource); 86 + 87 + $projects_field->getBulkEditType(self::EDITKEY_REMOVE) 88 + ->setBulkEditLabel(pht('Remove project tags')) 89 + ->setDatasource($projects_datasource); 74 90 75 91 return array( 76 92 $projects_field,
+18 -2
src/applications/subscriptions/engineextension/PhabricatorSubscriptionsEditEngineExtension.php
··· 42 42 $sub_phids = array(); 43 43 } 44 44 45 + $viewer = $engine->getViewer(); 46 + 45 47 $subscribers_field = id(new PhabricatorSubscribersEditField()) 46 48 ->setKey(self::FIELDKEY) 47 49 ->setLabel(pht('Subscribers')) ··· 53 55 ->setCommentActionOrder(9000) 54 56 ->setDescription(pht('Choose subscribers.')) 55 57 ->setTransactionType($subscribers_type) 56 - ->setValue($sub_phids); 58 + ->setValue($sub_phids) 59 + ->setViewer($viewer); 57 60 58 - $subscribers_field->setViewer($engine->getViewer()); 61 + $subscriber_datasource = id(new PhabricatorMetaMTAMailableDatasource()) 62 + ->setViewer($viewer); 59 63 60 64 $edit_add = $subscribers_field->getConduitEditType(self::EDITKEY_ADD) 61 65 ->setConduitDescription(pht('Add subscribers.')); ··· 66 70 67 71 $edit_rem = $subscribers_field->getConduitEditType(self::EDITKEY_REMOVE) 68 72 ->setConduitDescription(pht('Remove subscribers.')); 73 + 74 + $subscribers_field->getBulkEditType(self::EDITKEY_ADD) 75 + ->setBulkEditLabel(pht('Add subscribers')) 76 + ->setDatasource($subscriber_datasource); 77 + 78 + $subscribers_field->getBulkEditType(self::EDITKEY_SET) 79 + ->setBulkEditLabel(pht('Set subscribers to')) 80 + ->setDatasource($subscriber_datasource); 81 + 82 + $subscribers_field->getBulkEditType(self::EDITKEY_REMOVE) 83 + ->setBulkEditLabel(pht('Remove subscribers')) 84 + ->setDatasource($subscriber_datasource); 69 85 70 86 return array( 71 87 $subscribers_field,
+6
src/applications/transactions/bulk/PhabricatorEditEngineBulkJobType.php
··· 82 82 $xaction->attachComment($comment); 83 83 } 84 84 85 + if (isset($raw_xaction['metadata'])) { 86 + foreach ($raw_xaction['metadata'] as $meta_key => $meta_value) { 87 + $xaction->setMetadataValue($meta_key, $meta_value); 88 + } 89 + } 90 + 85 91 $xactions[] = $xaction; 86 92 } 87 93
+40
src/applications/transactions/bulk/type/BulkTokenizerParameterType.php
··· 1 + <?php 2 + 3 + final class BulkTokenizerParameterType 4 + extends BulkParameterType { 5 + 6 + private $datasource; 7 + 8 + public function setDatasource(PhabricatorTypeaheadDatasource $datasource) { 9 + $this->datasource = $datasource; 10 + return $this; 11 + } 12 + 13 + public function getDatasource() { 14 + return $this->datasource; 15 + } 16 + 17 + public function getPHUIXControlType() { 18 + return 'tokenizer'; 19 + } 20 + 21 + public function getPHUIXControlSpecification() { 22 + $template = new AphrontTokenizerTemplateView(); 23 + $template_markup = $template->render(); 24 + 25 + $datasource = $this->getDatasource(); 26 + $limit = null; 27 + 28 + return array( 29 + 'markup' => (string)hsprintf('%s', $template_markup), 30 + 'config' => array( 31 + 'src' => $datasource->getDatasourceURI(), 32 + 'browseURI' => $datasource->getBrowseURI(), 33 + 'placeholder' => $datasource->getPlaceholderText(), 34 + 'limit' => $limit, 35 + ), 36 + 'value' => null, 37 + ); 38 + } 39 + 40 + }
+2
src/applications/transactions/editengine/PhabricatorEditEngine.php
··· 2498 2498 // but it's possible that this isn't the case. 2499 2499 $xaction['type'] = $edit_type->getTransactionType(); 2500 2500 2501 + $xaction['metadata'] = $edit_type->getMetadata(); 2502 + 2501 2503 $xaction = $edit_type->newRawBulkTransaction($xaction); 2502 2504 if ($xaction === null) { 2503 2505 unset($xactions[$key]);
+13
src/applications/transactions/editfield/PhabricatorEditField.php
··· 769 769 return $this->bulkEditTypes; 770 770 } 771 771 772 + final public function getBulkEditType($key) { 773 + $edit_types = $this->getBulkEditTypes(); 774 + 775 + if (empty($edit_types[$key])) { 776 + throw new Exception( 777 + pht( 778 + 'This EditField does not provide a Bulk EditType with key "%s".', 779 + $key)); 780 + } 781 + 782 + return $edit_types[$key]; 783 + } 784 + 772 785 protected function newBulkEditTypes() { 773 786 $edit_type = $this->getEditType(); 774 787
+24
src/applications/transactions/edittype/PhabricatorEdgeEditType.php
··· 34 34 return array($xaction); 35 35 } 36 36 37 + protected function newBulkParameterType() { 38 + if (!$this->getDatasource()) { 39 + return null; 40 + } 41 + 42 + return id(new BulkTokenizerParameterType()) 43 + ->setDatasource($this->getDatasource()); 44 + } 45 + 46 + 47 + public function newRawBulkTransaction(array $xaction) { 48 + $value = idx($xaction, 'value'); 49 + 50 + if ($this->getEdgeOperation() !== null) { 51 + $value = array_fuse($value); 52 + $value = array( 53 + $this->getEdgeOperation() => $value, 54 + ); 55 + $xaction['value'] = $value; 56 + } 57 + 58 + return $xaction; 59 + } 60 + 37 61 }