1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-02 19:52:44 +01:00
phorge-phorge/src/applications/differential
epriestley 73e3057c52 Rename "MetaMTA" mail attachments and add more mail message objects
Summary:
Depends on D19953. Ref T9141. We have a "MetaMTAAttachment" object, rename it to "MailAttachment".

Also add a "Header" object and an "EmailMessage" object. Currently, mail adapters have a large number of methods like `setSubject()`, `addTo()`, etc, that I would like to remove.

I'd like the API to be more like `sendMessage(PhabricatorMailExternalMessage $message)`. This is likely a significant simplification anyway, since the implementations of all these methods are just copy/pasted boilerplate anyway (lots of `$this->subject = $subject;`) and this will let Adapters support other message media (SMS, APNS, Whatsapp, etc.)

That's a larger change, but move toward a world where we can build a concrete `$message` object for "email" or "sms".

The `PhabricatorMailEmailMessage` object is just a dumb, flat object representation of the information an adapter needs to actually send mail. The existing `PhabricatorMetaMTAMail` is a much more complex object and has a lot of rich data (delivery status, related object PHIDs, etc) and is a storage object.

The new flow will be something like:

  - `PhabricatorMetaMTAMail` (possibly renamed) is the storage object for any outbound message on this channel. It tracks message content, acceptable delivery media (SMS vs email), delivery status, related objects, has a PHID, and has a daemon worker associated with delivering it.
  - It builds a `PhabricatorMailExternalMessage`, which is a simple, flat description of the message it wants to send. The subclass of this object depends on the message medium. For email, this will be an `EmailMessage`. This is just a "bag of strings" sort of object, with appropriate flattened values for the adapter to work with (e.g., Email has email addresses, SMS has phone numbers).
  - It passes the `ExternalMessage` (which is a `MailMessage` or `SMSMessage` or whatever) to the adapter.
  - The adapter reads the nice flat properties off it and turns them into an API request, SMTP call, etc.

This is sort of how things work today anyway. The major change is that I want to hand off a "bag of strings" object instead of calling `setX()`, `setY()`, `setZ()` with each individual value.

Test Plan: Grepped for `MetaMTAAttachment`. This doesn't change any behavior yet.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T9141

Differential Revision: https://secure.phabricator.com/D19954
2019-01-04 15:23:44 -08:00
..
__tests__ phtize all the things 2015-05-22 21:16:39 +10:00
application Support export of revisions to Excel/CSV/JSON/etc 2018-10-11 13:34:33 -07:00
capability Simplify the implementation of PhabricatorPolicyCapability subclasses 2014-07-25 08:25:42 +10:00
command Define Differential email action in terms of EditEngine 2017-01-02 13:25:45 -08:00
conduit Remove "Large Changes" documentation and make some minor behavioral improvements 2018-04-05 06:40:46 -07:00
config Add yaml files to differential.whitespace-matters 2017-11-15 11:57:11 -08:00
constants Add some more UI reminder text about draft revisions 2018-03-08 12:07:40 -08:00
controller Allow reviewers to mark their own inlines as "Done" before they submit them 2018-09-07 11:17:42 -07:00
customfield Tailor the "no reviewers on this revision" warnings to handle the case where all reviewers have resigned 2018-11-28 13:50:29 -08:00
doorkeeper Reduce callsites to "ArcanistDifferentialRevisionStatus" in Phabricator 2017-08-09 11:04:52 -07:00
edge Update parent/child revision timeline messages to use modern language ("parent revision") 2018-07-13 09:02:10 -07:00
editor Rename "MetaMTA" mail attachments and add more mail message objects 2019-01-04 15:23:44 -08:00
engine Remove "willRenderTimeline()" from ApplicationTransactionInterface 2018-12-20 14:55:07 -08:00
engineextension Add a "commits" attachment to "differential.diff.search" for retrieving local commit information 2018-04-19 17:25:06 -07:00
exception Remove an unused class 2015-01-03 09:07:32 +11:00
field Move misplaced validation for ambiguous fields in "Test Plan" to the right place 2017-06-30 06:36:05 -07:00
garbagecollector Provide bin/garbage for interacting with garbage collection 2015-10-02 09:17:24 -07:00
harbormaster Pass commit authorship information to Buildkite 2018-08-27 12:52:11 -07:00
herald Add "Revision test plan" as a Herald field; remove test plan from the "Revision summary" field 2018-08-29 14:17:38 -07:00
lipsum Fix Lipsum generators for Differential Revisions and Pastes 2018-07-23 15:05:51 -05:00
mail Consolidate some application email receiver code in preparation for API changes 2019-01-04 15:21:50 -08:00
management When showing a diff-of-diffs, hide files which didn't get any more changes and have no inlines 2018-05-16 17:18:53 -07:00
parser Fix an off-by-one error affecting mail rendering of inlines on the final line of a file 2018-11-26 10:12:09 -08:00
phid Make all revision status readers explicitly read modern or legacy status 2017-08-11 17:22:22 -07:00
query Continue making application fixes to Phabricator for changes to %Q semantics 2018-11-15 03:50:02 -08:00
relationships Convert all standard relationship-editing actions to modern Relationships code 2016-06-29 11:24:52 -07:00
remarkup Rename PhutilRemarkupRule subclasses 2014-08-05 00:55:43 +10:00
render Use more consistent diff coloration in unified diffs 2018-06-08 09:39:34 -07:00
search Reduce the amount of boilerplate that implementing FerretInterface requires 2017-09-07 13:23:31 -07:00
storage Remove "getApplicationTransactionObject()" from ApplicationTransactionInterface 2018-12-20 15:16:19 -08:00
typeahead Fix spelling 2017-10-09 10:48:04 -07:00
view Add more accessibility labels for screen readers 2018-08-17 13:31:51 -07:00
xaction Allow "Abandoned" revisions to be commandeered 2018-11-26 10:13:52 -08:00
DifferentialGetWorkingCopy.php Extend from Phobject 2015-06-15 18:02:27 +10:00