Melange [User stories](http://code.google.com/p/soc/issues/list?sort=-id) need to be grouped to spot common themes, so that we avoid writing 'the same code' many times over in different disguises.  A first try at grouping the user stories is done here.

## Stories Presenting Read-Only Pages

Story 28, 'creating a page' is one story which leads in to many others.  Once [a new page is created](GenericPages.md) by the host, it is read only, at least for most readers.  The created page can include a table.  The author chooses what table, what fields from that table and what formatting.

  * Melange will need many read only pages which present the results of a 'query'. Stories 8,9,28,35,36,40,41,43,54,55,56 could be implemented using one generic technique for creating pages.
  * Story 20 and 19 are about looking up information.  A read-only table with an alphabetical list of 'linknames' with corresponding e-mail addresses could provide these.
  * The original 'Story 28' was written as being only for 'hosts'.  This ability to create custom pages for their organisation could be given to 'org admins' too, using the same code.


|ID|For|Summary|
|:-|:--|:------|
|Issue 8 (on Google Code)|Summit|Hosts need to be able to set basic Program home page content|
|Issue 9 (on Google Code)|GSoC|Hosts need to be able to specify feed URLs for Program home pages|
|Issue 28 (on Google Code)|Summit|Hosts should be able to create per-Program Documents|
|Issue 35 (on Google Code)|Summit|"program name" links for Active Programs on User Roles page should point to per-Program home page|
|Issue 36 (on Google Code)|GSoC|"program name" links for past Programs on User Roles page should point to per-Program history pages|
|Issue 40 (on Google Code)|Summit|"org name" links in Active Programs on User Roles page should point to per-Program per-Org home page|
|Issue 41 (on Google Code)|GSoC|"org name" links in past Programs on User Roles page should point to per-Program, per-Org history pages|
|Issue 43 (on Google Code)|GSoC|User Roles page should link to historical read-only view of past Roles|
|Issue 54 (on Google Code)|Summit|Task list view|
|Issue 55 (on Google Code)|GHOP|Each GHOP org needs a list of tasks|
|Issue 56 (on Google Code)|GHOP|GHOP students need a task list|
|Issue 20 (on Google Code)|GHOP|"Public" information should be used to look up Users|
|Issue 19 (on Google Code)|Summit|Hosts and site admins should be able to look up Users by Google Account|


## Questionnaire Stories

Stories 21, 22, 23, 26, 29, 57 are all about creating or answering QuestionnairePages.

  * Some questionnaires have a 'finalise' step - there's no going back after the step.  If you're a potential mentor organisation applying to google, you can't edit your responses after you click submit.  A similar thing happens when you accept terms of service.  With that feature as part of making a questionnaire we can add stories 24, 30 and 42 to this group.

> [Google forms](http://spreadsheets.google.com/newform) provides a good interface for creating questionnaires.  It's worth looking in some detail at the differences between what it provides and what we need.


|ID|For|Summary|
|:-|:--|:------|
|Issue 21 (on Google Code)|Summit|Authors need to be able to create Questionnaires|
|Issue 22 (on Google Code)|Summit|Users need to be able to create a Response to a Questionnaire|
|Issue 23 (on Google Code)|GHOP|Site admins should be able to create a Terms of Service "Questionnaire"|
|Issue 26 (on Google Code)|GHOP|Hosts should be able to create per-Program Terms of Service "Questionnaires"|
|Issue 29 (on Google Code)|Summit|Hosts should be able to create per-Program Organization Application "Questionnaires"|
|Issue 57 (on Google Code)|GSoC|Hosts of a GHOP Program create the Task template|
|Issue 24 (on Google Code)|Summit|Users need to agree to a site-wide Terms of Service|
|Issue 30 (on Google Code)|GHOP|User can apply per-Program to create an organization|
|Issue 42 (on Google Code)|GHOP|Users need to agree to per-Program Terms of Service or Contest Rules|


## ACL Related Stories

The difficulty of stories 1,4,5,6,7,15,17,31,32,33,37 is mainly in the logic for who has the rights to do what.  This needs to be cleanly factored in the design.  See AccessControl for details and discussion.

|ID|For|Summary|
|:-|:--|:------|
|Issue 1 (on Google Code)|GHOP|Claiming a Task|
|Issue 4 (on Google Code)|Summit|Site administrators need to be able to create Sponsor organization profiles|
|Issue 5 (on Google Code)|Summit|Site administrators need to be able to designate Users as Hosts in a Sponsor organization|
|Issue 6 (on Google Code)|Summit|Users who have been given Host roles by site administrators need to complete a profile|
|Issue 7 (on Google Code)|Summit|Hosts need to be able to create a new Program|
|Issue 15 (on Google Code)|GHOP|Documents should have Role-based access control lists|
|Issue 17 (on Google Code)|GSoC|Hosts need to be able to nominate new Hosts|
|Issue 31 (on Google Code)|GHOP|Hosts need to be able to review and approve Organization Applications|
|Issue 32 (on Google Code)|Summit|User Roles page should display Pending Roles|
|Issue 33 (on Google Code)|GHOP|User Roles page should display Potential New Roles|
|Issue 37 (on Google Code)|Summit|User Roles page should display Active Roles|


## Media Specific Stories

This group, 13,16,25,34,52 involves features such as e-mail and image upload which do not lend themselves to generic approaches.


|ID|For|Summary|
|:-|:--|:------|
|Issue 13 (on Google Code)|GHOP|Opt-in email should be available to communicate certain events|
|Issue 16 (on Google Code)|GSoC|Role-specific feeds should be provided for events|
|Issue 25 (on Google Code)|GSoC|An image upload/crop/scale/accept view is needed|
|Issue 34 (on Google Code)|GSoC|User Roles page may need a tabbed or tree interface|
|Issue 52 (on Google Code)|GSoC|Hosts should be able to attach date-sensitive reminders to evaluations|


## Profile Stories
Stories 38 and 39 are to ensure profiles work well.


|ID|For|Summary|
|:-|:--|:------|
|Issue 38 (on Google Code)|GSoC|Changing a per-Role profile in an active Role should offer to update other Roles|
|Issue 39 (on Google Code)|GSoC|The profile for a new User Role should be prepopulated|