User:YuviPanda/Campaigns namespace proposal

Proposal to give UploadCampaigns their own Campaign: namespace

Current System
Most people are not aware of UploadCampaigns at all, and if they are, unsure how exactly to use it. Discoverability is very low. Also there is no ability to 'show off' - display all pictures that turned up from a Campaign, upload/deletion/editing stats, etc. No place to discuss the campaign for people who are contributing / running the campaign exists either.

Proposed System
Create Campaign and Campaign_talk namespaces, where each campaign will have its own page.

Assuming a Campaign named, say, Campaign:Wikimania_2013_Hong_Kong, someone visiting that page will be shown: Campaign_talk:Wikimania_2013_Hong_Kong will be a typical talk page where people can talk about the Campaign itself (images uploaded via it, related conversations, etc).
 * 1) Information about the Campaign
 * 2) Tutorial (if any)
 * 3) Images uploaded via that Campaign so far
 * 4) Call to Action to upload a new Image to the Campaign (can point to current UploadWizard stuff)

Editing the Campaign:Wikimania_2013_Hong_Kong will open up a an editor similar to the current UploadCampaign editor. Permissions to create and edit pages in Campaign: namespace is granted via the same rights in place now.

What do we get out of this?
Plenty!
 * 1) Campaigns get a lot more visibility
 * 2) Makes organizing local Photo Hunt competitions such as 'Wiki Takes Hong Kong' a lot easier
 * 3) Provides a central location for people to discuss about the campaign itself
 * 4) Functionality developed for getting 'Images uploaded via this Campaign' can be used in many different places (such as the Mobile app)
 * 5) Prominent Call to Action + display of current images will potentially increase contributions
 * 6) Ability to add custom metadata for use by other applications / clients (since all data is just JSON)
 * 7) Automatically fix bug 30645

OK, I'm sold. What do we need to do?

 * 1) Steal code from Extension:EventLogging to create the Campaign: namespace
 * 2) Modify current UploadWizard code to load Campaign info from data in the Campaign: namespace than from the database
 * 3) Implement a proper 'tracking category' mechanism to be able to identify images from a campaign
 * 4) Render paginated current contributions for the campaign on the Campaign: page whenever people visit
 * 5) Implement a 'call to action' (customizable) that just puts people into the appropriate step in UploadWizard

Implementation
Should be done in multiple incremental phases.

Phase 1

 * 1) Implement ContentHandler to handle storing JSON files in Campaign namespace
 * 2) Specify basic JSON validation based on current schema
 * 3) Make UploadWizard read Campaign data from appropriate page, than internal store

Phase 2

 * 1) Make specific properties queryable via API (name, state (open/closed))
 * 2) Establish JSON schema for specific parameters, and extensibility points

Phase 3

 * 1) Implement editing Campaign metadata via custom editing functionality

Phase 4

 * 1) Display currently uploaded pictures in reverse chronological order (with pagination)
 * 2) Provide 'Upload More' call to action that takes people to UploadWizard's screen to upload more pics to this campaign

Phase 1, 2 and 3 would be needed for Mobile Apps' Campaigns workflows.