#summary Common Features in User Stories
#labels Importance-Useful,Phase-Requirements

Melange [http://code.google.com/p/soc/issues/list?sort=-id User stories] 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 [GenericPages a new page is created] 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||Summit||Hosts need to be able to set basic Program home page content||
||Issue 9||GSoC||Hosts need to be able to specify feed URLs for Program home pages||
||Issue 28||Summit||Hosts should be able to create per-Program Documents||
||Issue 35||Summit||"program name" links for Active Programs on User Roles page should point to per-Program home page||
||Issue 36||GSoC||"program name" links for past Programs on User Roles page should point to per-Program history pages||
||Issue 40||Summit||"org name" links in Active Programs on User Roles page should point to per-Program per-Org home page||
||Issue 41||GSoC||"org name" links in past Programs on User Roles page should point to per-Program, per-Org history pages||
||Issue 43||GSoC||User Roles page should link to historical read-only view of past Roles||
||Issue 54||Summit||Task list view||
||Issue 55||GHOP||Each GHOP org needs a list of tasks||
||Issue 56||GHOP||GHOP students need a task list||
||Issue 20||GHOP||"Public" information should be used to look up Users||
||Issue 19||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.

  [http://spreadsheets.google.com/newform Google forms] 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||Summit||Authors need to be able to create Questionnaires||
||Issue 22||Summit||Users need to be able to create a Response to a Questionnaire||
||Issue 23||GHOP||Site admins should be able to create a Terms of Service "Questionnaire"||
||Issue 26||GHOP||Hosts should be able to create per-Program Terms of Service "Questionnaires"||
||Issue 29||Summit||Hosts should be able to create per-Program Organization Application "Questionnaires"||
||Issue 57||GSoC||Hosts of a GHOP Program create the Task template||
||Issue 24||Summit||Users need to agree to a site-wide Terms of Service||
||Issue 30||GHOP||User can apply per-Program to create an organization||
||Issue 42||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||GHOP||Claiming a Task||
||Issue 4||Summit||Site administrators need to be able to create Sponsor organization profiles||
||Issue 5||Summit||Site administrators need to be able to designate Users as Hosts in a Sponsor organization||
||Issue 6||Summit||Users who have been given Host roles by site administrators need to complete a profile||
||Issue 7||Summit||Hosts need to be able to create a new Program||
||Issue 15||GHOP||Documents should have Role-based access control lists||
||Issue 17||GSoC||Hosts need to be able to nominate new Hosts||
||Issue 31||GHOP||Hosts need to be able to review and approve Organization Applications||
||Issue 32||Summit||User Roles page should display Pending Roles||
||Issue 33||GHOP||User Roles page should display Potential New Roles||
||Issue 37||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||GHOP||Opt-in email should be available to communicate certain events||
||Issue 16||GSoC||Role-specific feeds should be provided for events||
||Issue 25||GSoC||An image upload/crop/scale/accept view is needed||
||Issue 34||GSoC||User Roles page may need a tabbed or tree interface||
||Issue 52||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||GSoC||Changing a per-Role profile in an active Role should offer to update other Roles||
||Issue 39||GSoC||The profile for a new User Role should be prepopulated||