@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.

Consolidate some application email receiver code in preparation for API changes

Summary:
Ref T7477. The various "create a new X via email" applications (Paste, Differential, Maniphest, etc) all have a bunch of duplicate code.

The inheritance stack here is generally a little weird. Extend these from a shared parent to reduce the number of callsites I need to change when this API is adjusted for T7477.

Test Plan: Ran unit tests. This will get more thorough testing once more pieces are in place.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T7477

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

+61 -72
+7 -5
src/__phutil_library_map__.php
··· 2111 2111 'PhabricatorApplicationEditHTTPParameterHelpView' => 'applications/transactions/view/PhabricatorApplicationEditHTTPParameterHelpView.php', 2112 2112 'PhabricatorApplicationEditor' => 'applications/meta/editor/PhabricatorApplicationEditor.php', 2113 2113 'PhabricatorApplicationEmailCommandsController' => 'applications/meta/controller/PhabricatorApplicationEmailCommandsController.php', 2114 + 'PhabricatorApplicationMailReceiver' => 'applications/metamta/receiver/PhabricatorApplicationMailReceiver.php', 2114 2115 'PhabricatorApplicationObjectMailEngineExtension' => 'applications/transactions/engineextension/PhabricatorApplicationObjectMailEngineExtension.php', 2115 2116 'PhabricatorApplicationPanelController' => 'applications/meta/controller/PhabricatorApplicationPanelController.php', 2116 2117 'PhabricatorApplicationPolicyChangeTransaction' => 'applications/meta/xactions/PhabricatorApplicationPolicyChangeTransaction.php', ··· 5852 5853 'DifferentialCreateCommentConduitAPIMethod' => 'DifferentialConduitAPIMethod', 5853 5854 'DifferentialCreateDiffConduitAPIMethod' => 'DifferentialConduitAPIMethod', 5854 5855 'DifferentialCreateInlineConduitAPIMethod' => 'DifferentialConduitAPIMethod', 5855 - 'DifferentialCreateMailReceiver' => 'PhabricatorMailReceiver', 5856 + 'DifferentialCreateMailReceiver' => 'PhabricatorApplicationMailReceiver', 5856 5857 'DifferentialCreateRawDiffConduitAPIMethod' => 'DifferentialConduitAPIMethod', 5857 5858 'DifferentialCreateRevisionConduitAPIMethod' => 'DifferentialConduitAPIMethod', 5858 5859 'DifferentialCustomField' => 'PhabricatorCustomField', ··· 6704 6705 'FeedStoryNotificationGarbageCollector' => 'PhabricatorGarbageCollector', 6705 6706 'FileAllocateConduitAPIMethod' => 'FileConduitAPIMethod', 6706 6707 'FileConduitAPIMethod' => 'ConduitAPIMethod', 6707 - 'FileCreateMailReceiver' => 'PhabricatorMailReceiver', 6708 + 'FileCreateMailReceiver' => 'PhabricatorApplicationMailReceiver', 6708 6709 'FileDeletionWorker' => 'PhabricatorWorker', 6709 6710 'FileDownloadConduitAPIMethod' => 'FileConduitAPIMethod', 6710 6711 'FileInfoConduitAPIMethod' => 'FileConduitAPIMethod', ··· 7232 7233 ), 7233 7234 'ManiphestConstants' => 'Phobject', 7234 7235 'ManiphestController' => 'PhabricatorController', 7235 - 'ManiphestCreateMailReceiver' => 'PhabricatorMailReceiver', 7236 + 'ManiphestCreateMailReceiver' => 'PhabricatorApplicationMailReceiver', 7236 7237 'ManiphestCreateTaskConduitAPIMethod' => 'ManiphestConduitAPIMethod', 7237 7238 'ManiphestCustomField' => 'PhabricatorCustomField', 7238 7239 'ManiphestCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage', ··· 7679 7680 'PassphraseTokenCredentialType' => 'PassphraseCredentialType', 7680 7681 'PasteConduitAPIMethod' => 'ConduitAPIMethod', 7681 7682 'PasteCreateConduitAPIMethod' => 'PasteConduitAPIMethod', 7682 - 'PasteCreateMailReceiver' => 'PhabricatorMailReceiver', 7683 + 'PasteCreateMailReceiver' => 'PhabricatorApplicationMailReceiver', 7683 7684 'PasteDefaultEditCapability' => 'PhabricatorPolicyCapability', 7684 7685 'PasteDefaultViewCapability' => 'PhabricatorPolicyCapability', 7685 7686 'PasteEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', ··· 7740 7741 'PhabricatorApplicationEditHTTPParameterHelpView' => 'AphrontView', 7741 7742 'PhabricatorApplicationEditor' => 'PhabricatorApplicationTransactionEditor', 7742 7743 'PhabricatorApplicationEmailCommandsController' => 'PhabricatorApplicationsController', 7744 + 'PhabricatorApplicationMailReceiver' => 'PhabricatorMailReceiver', 7743 7745 'PhabricatorApplicationObjectMailEngineExtension' => 'PhabricatorMailEngineExtension', 7744 7746 'PhabricatorApplicationPanelController' => 'PhabricatorApplicationsController', 7745 7747 'PhabricatorApplicationPolicyChangeTransaction' => 'PhabricatorApplicationTransactionType', ··· 11364 11366 'PonderQuestionAnswerWikiTransaction' => 'PonderQuestionTransactionType', 11365 11367 'PonderQuestionCommentController' => 'PonderController', 11366 11368 'PonderQuestionContentTransaction' => 'PonderQuestionTransactionType', 11367 - 'PonderQuestionCreateMailReceiver' => 'PhabricatorMailReceiver', 11369 + 'PonderQuestionCreateMailReceiver' => 'PhabricatorApplicationMailReceiver', 11368 11370 'PonderQuestionEditController' => 'PonderController', 11369 11371 'PonderQuestionEditEngine' => 'PhabricatorEditEngine', 11370 11372 'PonderQuestionEditor' => 'PonderEditor',
+4 -9
src/applications/differential/mail/DifferentialCreateMailReceiver.php
··· 1 1 <?php 2 2 3 - final class DifferentialCreateMailReceiver extends PhabricatorMailReceiver { 3 + final class DifferentialCreateMailReceiver 4 + extends PhabricatorApplicationMailReceiver { 4 5 5 - public function isEnabled() { 6 - return PhabricatorApplication::isClassInstalled( 7 - 'PhabricatorDifferentialApplication'); 8 - } 9 - 10 - public function canAcceptMail(PhabricatorMetaMTAReceivedMail $mail) { 11 - $differential_app = new PhabricatorDifferentialApplication(); 12 - return $this->canAcceptApplicationMail($differential_app, $mail); 6 + protected function newApplication() { 7 + return new PhabricatorDifferentialApplication(); 13 8 } 14 9 15 10 protected function processReceivedMail(
+4 -9
src/applications/files/mail/FileCreateMailReceiver.php
··· 1 1 <?php 2 2 3 - final class FileCreateMailReceiver extends PhabricatorMailReceiver { 3 + final class FileCreateMailReceiver 4 + extends PhabricatorApplicationMailReceiver { 4 5 5 - public function isEnabled() { 6 - $app_class = 'PhabricatorFilesApplication'; 7 - return PhabricatorApplication::isClassInstalled($app_class); 8 - } 9 - 10 - public function canAcceptMail(PhabricatorMetaMTAReceivedMail $mail) { 11 - $files_app = new PhabricatorFilesApplication(); 12 - return $this->canAcceptApplicationMail($files_app, $mail); 6 + protected function newApplication() { 7 + return new PhabricatorFilesApplication(); 13 8 } 14 9 15 10 protected function processReceivedMail(
+4 -9
src/applications/maniphest/mail/ManiphestCreateMailReceiver.php
··· 1 1 <?php 2 2 3 - final class ManiphestCreateMailReceiver extends PhabricatorMailReceiver { 3 + final class ManiphestCreateMailReceiver 4 + extends PhabricatorApplicationMailReceiver { 4 5 5 - public function isEnabled() { 6 - return PhabricatorApplication::isClassInstalled( 7 - 'PhabricatorManiphestApplication'); 8 - } 9 - 10 - public function canAcceptMail(PhabricatorMetaMTAReceivedMail $mail) { 11 - $maniphest_app = new PhabricatorManiphestApplication(); 12 - return $this->canAcceptApplicationMail($maniphest_app, $mail); 6 + protected function newApplication() { 7 + return new PhabricatorManiphestApplication(); 13 8 } 14 9 15 10 protected function processReceivedMail(
+34
src/applications/metamta/receiver/PhabricatorApplicationMailReceiver.php
··· 1 + <?php 2 + 3 + abstract class PhabricatorApplicationMailReceiver 4 + extends PhabricatorMailReceiver { 5 + 6 + abstract protected function newApplication(); 7 + 8 + final public function isEnabled() { 9 + return $this->newApplication()->isInstalled(); 10 + } 11 + 12 + final public function canAcceptMail(PhabricatorMetaMTAReceivedMail $mail) { 13 + $application = $this->newApplication(); 14 + $viewer = $this->getViewer(); 15 + 16 + $application_emails = id(new PhabricatorMetaMTAApplicationEmailQuery()) 17 + ->setViewer($viewer) 18 + ->withApplicationPHIDs(array($application->getPHID())) 19 + ->execute(); 20 + 21 + foreach ($mail->newTargetAddresses() as $address) { 22 + foreach ($application_emails as $application_email) { 23 + $create_address = $application_email->newAddress(); 24 + if (PhabricatorMailUtil::matchAddresses($create_address, $address)) { 25 + $this->setApplicationEmail($application_email); 26 + return true; 27 + } 28 + } 29 + } 30 + 31 + return false; 32 + } 33 + 34 + }
-22
src/applications/metamta/receiver/PhabricatorMailReceiver.php
··· 16 16 17 17 abstract public function isEnabled(); 18 18 abstract public function canAcceptMail(PhabricatorMetaMTAReceivedMail $mail); 19 - final protected function canAcceptApplicationMail( 20 - PhabricatorApplication $app, 21 - PhabricatorMetaMTAReceivedMail $mail) { 22 - 23 - $application_emails = id(new PhabricatorMetaMTAApplicationEmailQuery()) 24 - ->setViewer($this->getViewer()) 25 - ->withApplicationPHIDs(array($app->getPHID())) 26 - ->execute(); 27 - 28 - foreach ($mail->newTargetAddresses() as $address) { 29 - foreach ($application_emails as $application_email) { 30 - $create_address = $application_email->newAddress(); 31 - if (PhabricatorMailUtil::matchAddresses($create_address, $address)) { 32 - $this->setApplicationEmail($application_email); 33 - return true; 34 - } 35 - } 36 - } 37 - 38 - return false; 39 - } 40 - 41 19 42 20 abstract protected function processReceivedMail( 43 21 PhabricatorMetaMTAReceivedMail $mail,
+4 -9
src/applications/paste/mail/PasteCreateMailReceiver.php
··· 1 1 <?php 2 2 3 - final class PasteCreateMailReceiver extends PhabricatorMailReceiver { 3 + final class PasteCreateMailReceiver 4 + extends PhabricatorApplicationMailReceiver { 4 5 5 - public function isEnabled() { 6 - $app_class = 'PhabricatorPasteApplication'; 7 - return PhabricatorApplication::isClassInstalled($app_class); 8 - } 9 - 10 - public function canAcceptMail(PhabricatorMetaMTAReceivedMail $mail) { 11 - $paste_app = new PhabricatorPasteApplication(); 12 - return $this->canAcceptApplicationMail($paste_app, $mail); 6 + protected function newApplication() { 7 + return new PhabricatorPasteApplication(); 13 8 } 14 9 15 10 protected function processReceivedMail(
+4 -9
src/applications/ponder/mail/PonderQuestionCreateMailReceiver.php
··· 1 1 <?php 2 2 3 - final class PonderQuestionCreateMailReceiver extends PhabricatorMailReceiver { 3 + final class PonderQuestionCreateMailReceiver 4 + extends PhabricatorApplicationMailReceiver { 4 5 5 - public function isEnabled() { 6 - $app_class = 'PhabricatorPonderApplication'; 7 - return PhabricatorApplication::isClassInstalled($app_class); 8 - } 9 - 10 - public function canAcceptMail(PhabricatorMetaMTAReceivedMail $mail) { 11 - $ponder_app = new PhabricatorPonderApplication(); 12 - return $this->canAcceptApplicationMail($ponder_app, $mail); 6 + protected function newApplication() { 7 + return new PhabricatorPonderApplication(); 13 8 } 14 9 15 10 protected function processReceivedMail(