User:Adamw/old/RFC - Campaigns entities

These improvements to Extension:Campaigns will persist information about campaigns, and provide an API.

Considerations

 * Not sure if we want to have campaign "owners".
 * How to deal with fuzz spam?
 * Do we want any kind of namespacing done on campaigns? Seems wise.  This could be done in a semi-transparent way by forming a campaign name like "/ " during campaign creation.

Campaign member table
This table should be designed more carefully so we are future-compatible with obvious, new Campaigns use cases.

Campaign owners
There is currently only one class of campaign owner, and these users are allowed to view all information and make any changes to a campaign.

Interaction with Wikimetrics
We'll push new campaign creation events to the Wikimetrics server, where a matching cohort will be created.

Extension:Campaigns will need a configuration variable $wgCampaignsWikiMetricsApi and some kind of secret to authenticate with Flask.

Wikimetrics will need to be extended to support this new usage.

Future enhancements
Things which need to happen, but are not covered by this RFC:
 * Admin UI: create campaigns, edit properties, assign owners. Allow the community to create social campaigns.
 * Campaign link generation
 * Campaigns for things other than new account creation (e.g. fundraising, editathons)