BluePrint: Sunflower
Table of Contents
Introduction
- Sahana Sunflower is the Sahana Software Foundation’s Community Management Tool and is built using Sahana Eden.
- Sunflower is deployed here - http://sunflower.sahanafoundation.org. A demo version is also available - http://demo.ssf.sahanafoundation.org
- The current implementation can be found in the trunk at
modules/templates/SSF
here. - It's development started during the Sahanathon in 2012 and has been developed as part of a GSoC '14 project by Somay Jain (Github Repo, IRC : Somay).
Stakeholders
- The Sahana Community - Since this is a community management and coordination tool, it is a means for the community to see what everyone is interested/is working on.
- People using Sahana Eden - They will be able to report a problem/seek assistance regarding Sahana Eden.
- Organisations for fundraising - It will be a tool to give stats about the work going on in Sahana Eden which would be useful in getting funds.
- Deployments - Information about how and where is Sahana Eden being used.
Goals
- To publish information about all Sahana deployments
- To allow for better task management across deployments & projects (eg GSoC)
- To give the Sahana Community an opportunity to Eat our own dog food
- To help us keep better track of who's in our community and what they are working on
- To provide a solution that other digital humanitarian groups can use for their own coordination platform
Description
Sahana Sunflower will help the Sahana Software Foundation manage information about:
- projects
- deployments
- volunteers
- opportunities
- grants
- proposals
- organizations
- Partners
- Users
- Donors
- contacts
- tasks (potentially including bugs/feature requests)
It will also be used to promote our work to the general public. One potential use is to generate iframes with deployment information and maps that can be embedded in the SSF website.
User Stories
- Contributors
- I want to share my personal profile so others can see who I am and know what I can contribute to
- I want to see others personal profile so that I can get to know them better
- I want to be able to see a list of current contributors so that I can get motivated to contribute
- I want to see a list of organizations that Sahana has relationships with so that I can collaborate with others and strengthen the community
- I want to learn more about Sahana deployments so that I can better appreciate the impact of my contributions
- I want to find tasks that I can work on to contribute to Sahana
- I want to manage tasks so that I know what needs to be done
- I want to be able to find mentors that can help me work on tasks
- (Future) I want to be able to see a list of contacts so that I can find people and organisations to partner with.
- Users
- I want to learn more about Sahana deployments so that I can discover how I could use Sahana.
- I want to to be able to share my requirements for Sahana with contributors who can help me
(Future) I want to be able to connect with existing users to learn from them and help them.
Requirements
Features currently implemented in Sunflower
Non-Functional
Data
Data models for Sunflower objects can be found here: https://docs.google.com/a/sarapisfoundation.org/spreadsheet/ccc?key=0ArhSktWsQi1VdE5lQncyYWNESUxsdXdDYUI3ZEg1dEE&usp=sharing
Metrics
Sunflower should be able to produce the
- Number of active (tasks, emails to list, wiki updates, trunk commits) contributors
- Daily Active
- Weekly Active
- Monthly Active
- Yearly Active
Functional
Personal Profiles
A personal profile includes:
- Name
- Photo
- Sex
- Bio Paragraph
- Country
- Projects/Deployments worked on + role
- Contact Details:
- Github Repo
- IRC Handle
- LinkedIn Profile
- Phone No.
- Skype
Subscription
- A person who is subscribed to a task/project/organisation/etc receives notifications via email(default mode) about it.
- The updates can be for new records or updates in the records.
- The frequency of the updates can be
- Immediately
- Hourly
- Daily
- Weekly
- Never
- One should be able to view the subscriptions settings and edit them. These settings are -
- Tasks/projects/organisations/etc for which updates are required.
- The frequency of updates as mentioned above.
- These notifications also show on the SSF homepage when the person is logged in.
Task Management
- Review Permissions
- Different types of tasks - Bug Reports / Help Tickets
- Manage workflow of Help Ticket -> Bug Report
- Make it simpler to log bugs
- http://eden.sahanafoundation.org/ticket/1307
- Less fields / progressively show fields (easier to log for people)
- No login required - but allow user to specify who’s login it in a field
- Add a default link to log a bug in Sunflower - which copies the current URL to the “Source” field
- Log a bug when an error is encountered
- If not already logged for this bug
Use-Cases
- View a list of Sahana Volunteers
- Show a Volunteer Profile page with a list of the tasks that they have completed
- View a list of tasks needing to be done for Sahana
- View a map/table/chart of Sahana Deployments
- Log a task that needs to be done in Sahana
- View a list of internal Sahana contacts.
- View a list of partner organizations.
- View a list of opportunities (grants, jobs, etc) and their status.
- Get notifications on new/edited tasks & projects
- Be able to control the notifications you receive by task & project (all tasks for a specific project). Automatically be subscribed to your own tasks & projects and those assigned to you.
- ...?
Design
User Interface
- Use a bootstrap theme
- Use datalists (http://demo.drm.tl/eden/default/index/newsfeed) and summary pages (http://demo.lacrmt.sahanafoundation.org/eden/stats/people/summary) to present data
Homepage
- "News" could be implemented in a couple of different ways:
- Using custom code to pull data together from Projects, Deployments & Events (MH: My choice)
- Use a dedicated data-model just for news (would require updating)
- Use the update functionality (as on the CRMT homepage)
- Syndicating news feeds from specific organizations RSS feeds, which is how news comes into the NYCPrepared EDEN.
- Register as Contributors would disappear when logged in
- You could toggle between contributors & deployment layers on the map
- You could toggle between all tasks & tasks for beginners
- Do we want to switch the boxs for tasks & news?
Deployments Page
Contributors
Summary page of Contributors (probably use the "Volunteer" data model - would volunteer be a better term?):
- Datalist showing Contributors + photos
- Map of Contributors
- Chart of Contributors per country
Also include:
- Picture (when they register?)
- Bio
- What groups/teams they belong to (PMC, Board, Interns, GSoC Students 2013)
Deployments
Summary page of deployments (could these be a filtered type of project?)
- Datalist
- Chart
- Map
Projects
These would be things like GSOC projects & other internal projects (Communication Strategy, Blog Update, etc). Summary page:
- Datalist
- Chart
- Map
Tasks
Summary page:
- Datalist
- Chart
Events
Summary page:
- Datalist
- Chart
- Map
- Calendars
Organisations
Does it make sense having a list or all organisations here? Or just partners? Summary page:
- Datalist
- Chart
- Map
Report a Bug
Users
Anonymous
All Anonymous users will be able to do the following (whether or not they are logged in):
- View All Information - except email addresses, github repo, facebook pages (all pr_contact) (Without registering)
- Add a Task / Bug Report (Without registering)
Authenticated
This will require registration, which is automatically approved. All Authenticated users will be able to do the following (whether or not they are logged in):
- Create and edit their own profile
- Create tasks and edit tasks they have created
Contributors
Any person who has registered in and are given contributor permissions by by an admin will be able to edit:
- View email addresses
- All Projects
- All Organisation
- All Deployments
- All Tasks
- Their own profile information
NOTE: If the public are able to register and create their own profile, then there will need to be another process for them to request to become contributors, then admin can grant them the contributor Role
Admin
Admins will be able to do everything (including site administration - assigning new permissions)
Implementation
Homepage
The default controller for the homepage is defined in modules/templates/SSF/controllers.py
under the class index
.
Updates Feed
- The Updates Feed is made using
FeedControl
from Google Feed API. - The following RSS feeds are present -
- Tasks (
eden/project/task.rss
) - Gives the updated of the tasks in Sunflower. - Tickets - Wiki Tickets
- Wiki - Wiki changes
- Github commits for
flavour/eden
- Twitter updates from @SahanaFOSS
- Sahana Blog
- Tasks (
Map
- The contributors and deployments are overlayed on the map.
- The deployment locations are stored in
project_location
- The contributor locations are stored in
pr_address
Action Buttons
- The Action buttons on the homepage (Report a bug/Request feature/Request Support) provide a trimmed form for task with the pre-selected tags, so that these actions are made easier.
Contributors
- Implemented using the
pr
module. - All users except admins can edit only their own profile.
- The users who are not assigned "Contributor" role, cannot view other's contact information.
- The users can build their profile and add the following contact details - Github/IRC handle/Linkedin/Blog/Skype/Mobile Phone using the "Contact Details" tab.
- These contact details are stored in
pr_contact
table.
Deployments
- The deployments are implemented using the
project
module, using theproject_project
table. - To distinguish them from projects, they have sector = "Deployment"
- Each deployment has a custom view which contains the concise information on a single page for read view. This custom view can be found in
modules/templates/SSF/views/deployment_page.html
. - The default open button on the list view links to this custom page.
- The tabbed view with the rheader is linked from the custom page. This is kept keeping in mind that the main usecase for deployments is viewing the information about the deployment.
Projects
- The projects are implemented using the
project
module, using theproject_project
table and have sector="Project"
Tasks
- The tasks are implemented using the
project
module, using theproject_task
table. - The tasks can be assigned to belong to some project and can be associated with a milestone.
- Tags can be associated with the tasks. These tags can be keywords such as "bug", "feature request", "easy", etc. These use the
project_tag
andproject_task_tag
tables. - Tasks can be filtered using the Filter form on
/eden/project/task
and the filter link can be generated on clicking "Link to this result".
Disaster Organisations
- The organisations use the
org
module.
Features To Be Implemented
The following features still need to be implemented and would be good tasks for new contributors to Sahana Eden. In addition, there are a number of tasks logged on Sahana Sunflower itself which contributors can work on!
Homepage
- Updates Feed could be styled better.
- Improve design of homepage
Personal Profiles
A personal profile should record:
- Tasks Logged
- Tasks Resolved
- Comments?()
- Links to trunk contributors
- Links to messages on mailing list
- Irc Messages in Channel?()
- Wiki updates
- What access people have (Sunflower Admin, Mailing List Admin, Has CI Server Access, Facebook, Twitter...)
- What groups/teams people belong to (eg. Board, GSoC Mentors, GCI Student...)
- Summary of the contributions
Maps
- Maps should be able to be styled in an iframe to insert into the Sahana website.
Contributors
- Custom page to show the relevant information of the contributor on a single page.
- Tasks they were members on
- Projects they had roles on
- Deployments they had roles on
- Visibility of the projects/tasks/etc which the people are subscribed to/interested in.
Deployments
- Including and improvement of the design of the custom deployment page.
- Link Deployments to their Templates
Teams
- There can be different teams that people are members of
Tasks
- Subscription of tasks -
- Using teams -
- Tasks can be assigned to some team (Eg - "A-team" for automated testing team).
- All people that belong to this team are subscribed to receive updates about these tasks.
- The people can update their subscription, filtering the tasks and frequency of updates.
- Marking as "I'm Interested"
- A person can mark himself/herself as interested in the task.
- All the people interested in the task are visible to all, so that one may wish to contact any of them for exchanging ideas, etc.
- All the people interested get updates of the task using the subscriptions.
- Using teams -
- Settings to have new tasks automatically assigned to specific teams.
- Filter lists for different users.
- This can be implemented by having a
project_member
member table andproject_task_member
link table linking members to the tasks. - The member can also have a role such as "Volunteer", "Mentor", "Watching", etc.
- Users can indicate themselves as "Volunteer", "Mentor", etc for the task.
- We should be able to flag/tag what we are currently working on and see what others are working on. Ideally by drag and drop
- Show tasks as multiple side-by-side datalists - separated by custom filters- like Trello. Ideally with the ability to drag and drop tasks between lists to apply those filters to the task
- Github integration
Disaster Organisations
- Custom page to show the relevant information for the org on a single page.
Subscriptions
(For more details - see this thread: https://groups.google.com/forum/#!searchin/sahana-eden/audit/sahana-eden/2wORfmUcAS0/py9azw1W_7oJ)
Design Ideas
- A person commenting on a task should automatically be subscribed to the comments feed of that task.
- There can be a central newsfeed and the users can subscribe to a filtered list of the newsfeed.
- The posts in this newsfeed would contain a title, description, type(task/project/org etc), author, ...
- We would thus be able to filter across item types (task/project/org)
- Repeated updates of the same record should be filtered out.
- No new notifications if new records get immediately deleted.
- Onclick
- Using just a "click" to subscribe to an item. Eg- "Subscribe/Unsubscribe to Project", "Subscribe/Unsubscribe to task" action buttons on project/task.
- On Subscribing/Unsubscribing, it internally modifies the same newsfeed filter to get updates about the newsfeed items. These set the appropriate filter automatically.
- The user can also subscribe to the individual item by clicking on "Subscribe/Unsubscribe" button on the newsfeed item.
- Hand crafted Filters
- Hand crafted subscription filter and subscription settings for the newsfeed - The user can set the subscription filter manually. Eg - Selecting All tasks for project X, Updates on Org Y, etc.
- The user should also be able to change the Mode of Notifications, i.e, Email/No Email.
Implementation Ideas
- On a "create"/"update"/"delete" event of a record from any of the table (for eg -
project_project
,project_task
), an audit can be created (check CRMT template for reference - https://github.com/flavour/eden/blob/master/modules/templates/CRMT/config.py#L113). - When this audit is created, a newsfeed item could be generated having -
- Title (Eg - Task Updated/Task Created/ Project Updated...)
- Type - Can be the tablename (Eg - project_task/project_project)
- Value - Can contain key:value pairs separated by a delimiter such as "name:new task;project_task_project.id:1;status:2". The keys can be database fields and link tablename's fieldname for embedded inline components.
- Author - user_id of the person who made the change
- The newsfeed can be created using the
cms_post
table, or a new table (if necessary). - This newsfeed can be made filterable according to the key:value pairs. Eg - All tasks under the project "Sunflower" whose Author is "Bob".
- The newsfeed can be linked to subscriptions using
pr_subscription_resource
with apr_filter
on the newsfeed resource.
Possible Extensions
- Having the above design allows as to provide subscription for any feed which can be converted in (title, type, value, author) format.
- Eg - Having incoming feeds converted to such format.
Points
There have been suggestions that we determine a way in which to recognise top contributors - one way of doing this would be to give people "Points" (Sunflower seeds?) for completing tasks. This could work something like:
- All contributors can vote on the number of points a task is worth (0-5). The value of the task is the average of those votes. If there are no votes, a task gets 1 point.
- Tasks are often assigned value by the person who creates them. I think that's a good way to establish not just their difficulty but also their priority level. Additionally, it would be nice if the person who completes the task also indicates the amount of time they put into that task. Both factors could be recorded to create more useful information about community contributors and their contributions.
- When a task is completed, the contributors that the task is assigned to gets the average value of their votes (although their own vote is ignored)
- On the homepage the top contributors based on points accumulated over the past month are displayed
- We can also keep historic point talleys over time
- I think it's useful to think about the types of rewards that could be offered to people with lots of points.
- I also think this would be a good reason to incorporaespeciallyte badges into EDEN, specifically http://openbadges.org/ which could be used as a reward mechanism as well as a way to share information about people's skills and experiences.
Github Integration
- Tag tasks in Github comments log and have add comments in Sunflower
Metrics
- Making the metrics being automatically updated
- Emails links on the list.
- Trunk commits URLs
- Tasks logged URLs
- Tasks resolved URLs
- Links of wiki pages edited.
Diff Viewer
- Include a diff viewer on the task page to display the patch(if any) added as an attachment.
- The viewer should be able to support inline comments, preferably like Github viewer does.
CI Server
Integrated a [ CI Server] in Sunflower:
- Enable scheduling of CI tests
- Enable subscription of notifications for test results
- Provide formatted results - stored in DB not HTML
- Create scheduler with logs visible through web
- Create tickets for failure
Other Extentions
- Integrated [BluePrint/CAPBroker CAP Broker] in Sunflower
- Integrated Location and Demographic Data Repository
- Integrated Chat functionality
- Integrated Discussion Board