OSE Microfunding Proposal/Implementation

=Terminology= Here is the common terminology:
 * TF = True Fan

=Design=

Wireframes
The wireframes of the proposal were implemented in Lumzy.

=Development=

PHP CMS (Content Management System)
We chose Drupal.

CRM (Contact Relationship Management)
We chose CiviCRM. (http://civicrm.org)

From the CiviCRM Web site:

''CiviCRM is a free, libre and open source software constituent relationship management solution. CiviCRM is web-based, internationalized, and designed specifically to meet the needs of advocacy, non-profit and non-governmental groups. Integration with both Drupal and Joomla! content management systems gives you the tools to connect, communicate and activate your supporters and constituents.''

We are specially interested in CiviContribute module (http://civicrm.org/civicontribute):

''CiviContribute is an online fundraising and donor management component which enables you to track and manage contributions to your organization. It also allows you to quickly and easily create customized web pages to accept online donations. CiviContribute is fully integrated with CiviCRM, and creates or updates contact and donation records for all contributions, eliminating data entry time and errors.''

Why we chose CiviCRM?
 * We don't want to reinvent.
 * It's an application orientated to non-profit microfunding improved during years for hundreds of developers.
 * It's installed over Drupal, so we can integrate it with our web page, web profiles, personal blogs, etc.
 * It has a lot of helpful tools around microfunding: bulk email by groups, reports, integration of events, contact and groups management, etc.

Resources:
 * http://civicrm.org/ - CiviCRM Web. Good to get a general idea about it and about the different modules.
 * http://en.flossmanuals.net/CiviCRM/ - CiviCRM book. Good to understand CiviCRM concepts (the most important and maybe the most difficult).
 * http://wiki.civicrm.org/confluence/display/CRMDOC40/CiviCRM+Documentation - Wiki documentation. Good to work.
 * http://d7.demo.civicrm.org/ - CiviCRM admin demo. With Drupal integration and test data. Good to play.

Drupal Environments

 * Drupal-test - http://microfundingtest.openfarmtech.org/ - used for development and testing
 * Official Drupal - http://civicrm.opensourceecology.org/ - used for real

True Fans Page

 * Description
 * Showing motivational content about OSE, its importance, tangible outcome, etc.
 * Allowing subscription.
 * Transitions
 * Recognition Page
 * Requirements: all data for the user is gathered: Name, Email, Subscription (verified, PayPal for now). This means that the user will be forwarded to PayPal, will subscribe, and then comes back to a page of ours - Recognition Page or a temporary page where he can fill out additional information (City, Country, ...) and after submitting these forwarded to the Recognition Page.
 * Effects: the user is added as a True Fan, an embeddable badge is created for him, email notifications is sent to him containing a link to the recognition page.
 * Final State: the user is logged in his Recognition Page


 * Design considerations
 * TODO by Alistair

Recognition Page

 * Description
 * If The True Fan is logged. Edit mode is available:
 * He sees his information and edit links for video, photo and text are available for clicking.
 * When he saves some information, he will be offered a link to the Share page.
 * If it is not the True Fan who is logged, or it is an anonymous user:
 * The person sees the information the True Fan has saved.
 * Under that is the TF subscription.
 * There is a login link somewhere (top-right?), so that if this is the TF itself, he can login to his page.
 * Transitions
 * Share Page
 * Requirements:
 * TF of the Recognition page should be logged
 * video or text should be filled out.
 * The TF clicks on the "Share page" link.
 * Effects: no
 * Final State: the TF is logged in the Share page.
 * Design Considerations
 * Add form inputs for user to link to their Twitter, Facebook accounts for use in sharing page.

Share Page

 * Description
 * If The True Fan is logged. Edit mode is available:
 * The TF writes the name, email of several of his friends, and clicking on each one of the added friends, he can add a personal video and text below. He can add/remove/edit friends and their data.
 * He can send the data either to one of his friends (maybe a button to the right of the email) or to all of them (asking for confirmation).
 * If it is not the True Fan who is logged, or it is an anonymous user:
 * the page is not accessible.
 * Transitions
 * Share Page
 * Requirements:
 * TF cliks on invite friend, or invite all friends.
 * Effects:
 * a notifications appears that the friend/s was/were successfully invited.
 * an email is sent to every invited friend, containing a link to the "Invited Page".
 * a link is offered back to his Recognition Page. In this case he can just open it (this transition understandable and will not be described).
 * Final State: the TF remains on the Share page.

Invited Page

 * Description
 * Everybody who has the link can access it, no difference between logged users and anonymous.
 * Shows the invitation of the TF to his friend.
 * Shows the TF subscription.
 * Transitions
 * Recognition Page
 * the same transition as in the True Fans Page

=Strategy=

Video
The videos can be
 * youtube video (easy to program, time-intensive for the user)
 * flash camera recorder (harder to program, quick to record for the user, lower quality)

We have the possibility of providing the user with two options:


 * 1) Past a link to a YoueTube video
 * 2) Record video from Flash and upload to YouTube using their developer API

If we rely on Option 2, we might bottleneck the development. It would make sense to build the functionality for Option 1 first and then begin working on a solution for Option 2 when the project is functionally complete.

Details of the YouTube's video uploads can be found here:
 * http://code.google.com/apis/youtube/2.0/developers_guide_protocol.html#Uploading_Videos
 * http://code.google.com/apis/youtube/2.0/developers_guide_protocol.html#Resumable_uploads

=Replication=

These are the steps required to replicate our implementation into another Drupal installation.


 * Install the modules:
 * CKEditor - from the URL and extract the contents of from the download in sites/all/modules/ckeditor/ckeditor.
 * media
 * media_youtube
 * media_vimeo

=Prototype 1=


 * A user opens the True Fans page Phttp://microfundingtest.openfarmtech.org/truefan
 * The user clicks the PayPal subscribe button, goes to PayPal, completes the subscription and gets redirected back to his True Fans profile (http://microfundingtest.openfarmtech.org/user#overlay=user/1/edit/true_fan) as logged in True Fan.
 * The True Fan edits his profile and clicks save. A text is shown with a link to create an Invitation content - http://microfundingtest.openfarmtech.org/user#overlay=node/add/invitation
 * The True Fan adds in the Invitation a video, text and a photo, clicks save, and then he is shown a "Invite by email" button (seen only by him, the author). He clicks it and an invitational email is sent to his friend containing a link to the Invitation page. Also a relationship is created between the True Fan and the friend.

=Drupal Tasks=

You can view the current tasks in the Pivotal project.

We need urgently people to implement the Recognition, Share and Invited page. Please contact Nikolay : nikolay (at) opensourceecology.org

Recognition Page

 * Implement the Recognition in CiviCRM.
 * One idea for implementation: make a new True Fans user profile.

Status: Nick Person worked on it, but no status report from him. Need: A person to implement it either individually or in team with Nick.

Description: This page should be createable and editable only by the True Fan (and Administrators of course). He should be able to add a video (youtube, vimeo) of himself and write some text. Under the text should come PayPal subscription. The page should have a unique URL and be visible publicly. Note: there will be no badge and photo of the True Fan in the Recognition page in the first prototype! Technical Consideration:
 * Please consider using CiviCRM Personal Campaigns: http://wiki.civicrm.org/confluence/pages/viewpage.action?pageId=35128166
 * Research how best to do the recognition page - video + text + PayPal:
 * with CiviCRM Personal Campaigns
 * or as a new CiviCRM user profile
 * Consider the connection with the Share and Invited page.
 * Build a prototype example of the recognition page.

Share and Invited Page

 * Implement the Share and Invited Page in CiviCRM.
 * Eduardo's idea for implementation: use CiviCRM personal campaigns.

Status: Eduardo Riesco worked on it, but no status report from him. He will be available on 20. Sep for more info. Need: A person to implement it either individually or in team with Eduardo.

Badges
Status: Michael McAndrew built on the work of Thomas Levine and made badge.php which has first and last name (if they are stored in CiviCRM). This can be embedded as an iframe e.g. mm.html

Check a demo for the embeddable badge: http://microfundingtest.openfarmtech.org/mm.html

This displays the 'display name' in CiviCRM, which is based on the first and last name if present, and the email if it isn't.

TODO
TODO Tasks (Jask Sudyka may help us on that):
 * remove the border in mm.html
 * put the name above the badge in a smaller font so that it fits the size (the name can be on two rows).
 * performance - if the data (the first and last name) is read dynamically from the Database in the badge.php, please save all the names in a file and read them from there. My initial suggestion is a CSV file containing (id, first name, last name).
 * security - make reading the Id in a secure way.

Archived Tasks
Here are the Archived Tasks which are not relevant to the current implementation. They are saved only for archive purposes.

=Team=

This is the Team working currently on the Proposal.

The people who are not currently working on the proposal, but who have helped with it, are:

Lukasz Jagodzinski Done: created the OSE Drupal Theme Contact: luke (dot) jagodzinski (at) gmail (dot) com Skills: PHP, CSS, JavaScript, Symfony, Java, MySQL

Jacob Roufa Done: created PayPal integration for Drupal 7 Contact: jacob (dot) roufa (at) gmail (dot) com Skills: Project Manager / Intermediate Developer : Drupal, CiviCRM, XHTML/HTML5, CSS, Javascript (jQuery library mostly), PHP, MySQL

Kelly Schutt Done: created PayPal integration for Drupal 7 and Blocks: OSE info, social sharing Contact: Skype:kellyschutt Skills: Graphic design, HTML/CSS, Drupal configuration, intermediate Javascript and PHP

=Team Communication=

Communication Practices
Here we outline some of the communication practices we should follow in order to work better in a team. A short explanation for each point is given, so that it is understandable. If there are further questions please ask Nikolay.
 * Share your work status daily!
 * HOW: Create a YourFirstName_Log page, add it to the Team Logs below and write what you have done and on which day. Do it everytime when you've worked on something. For example see Marcin Log.
 * REASON: Nikolay allowed that there is no communication on the status for few time periods (3-5 days each period) because he didn't want to stress people but the consequence was that nobody knew how the project was moving on! This should not happen!
 * Share immediately when you have a problem stopping you from getting the work done!
 * HOW: Send email to Nikolay.
 * REASON: We should detect problems early, no matter what kind they are: technical (impossible or hard task) or personal (lack of time, new priorities). Communicating this is not bad, it is actually the best thing you could do so that the problems are known and we can react promptly to fix them, so please share immediately when you see a problem.

Stagnated task assumption: So with that said, if there is no communication of the status and no email communication within 3 days (more days only if communicated explicitly by the person), then it is assumed that the task is stagnated and help should be found.

Google Group
We are communicating in https://groups.google.com/group/ose-microfunding

Skype
Please choose your available time in Doodle for the next Skype call: http://doodle.com/9s6gvhunmzvvv68q

Team Logs

 * Nikolay Log
 * Joe Log
 * Eduardo Log
 * Michael Log
 * Jack Log
 * FirstName Log <- add your Log page here