#summary tracks progress for the "integration with external apis" project.
#labels Phase-Requirements

<wiki:toc max_depth="3" />

= 1. Introduction =

This page is tracking of progress for GSoC 2011 Project: Integration with External API's
----

= 2. Requirements =
== 2.1 Melange Lists ==
===Overview===
Basically an export button for each lists on Melange that triggers an export mechanism to Google SpreadSheets. (including OAuth roundtrip, access token storing on datastore)
===Problems & Solutions===
 * *Problem:* exporting a JavaScript list
 * *Solution:* 

== 2.2 Student Proposals ==
===Overview ===
Students will be able to edit their proposals through tinyMCE editor or link to a Google Document file. There will be a "Sync Now" button to syncronize proposal that Melage holds with actual Google Documents file.
===Problems & Solutions ===
 * *Problem:* Student may not be awere that proposal is syncronised only when he/she clicks "Sync Now" button.
 * *Solution1:* Give responsibility to student.
 * *Solution2:* Sync proposal with stored ACL. Check for single revisions and get the closest revision to deadline.

 * *Problem:* As Google Documents stores HTML files in full-HTML form (including images, css files etc.) a method must be implemented to embed that document to actual proposal entry.
 * *Solution:* 

== 2.3 Surveys (issue 1243) ==
===Overview===
Export a survey as either a pdf, google doc, plain text, something to save the entire webpage view.

== 2.4 Tracking Numbers (issue 1239) ==
=== Overview ===
Program administrators have spreadsheets that will enable students to have tracking numbers for their welcome packages and tshirts. Same for payment status.

== 2.5 Export Melange stuff for developers' use ==
=== Overview ===
Export some statistics and data to Google Documents to work on or to integrate with other services like Fusion Tables.


----

= 4. Project Timeline =
This table is based on deliverables.

|| 25 May - 31 May (Week 1) || Add Google Data packages to Melange. ||
|| 1 June - 7 June (Week 2) || Add related fields create required models. ||
|| 8 June - 21 June (Week 3,4) || Integrate OAuth. ||
|| 22 June - 12 July (Week 5,6,7) || Student proposal syncing. Write tests if possible. ||
|| 13 July - 15 July || Midterm Evaluation. ||
|| 15 July - 19 July (Week 8) || Learn how Melange lists actually works. ||
|| 20 July - 2 August (Week 9,10) || Melange List exporting. ||
|| 3 August - 17 August (Week 11,12) || Work on open issues about APIs. issue 1239, issue 1243 ||
|| 17 August - 26 August (Week 13) || Export Melange stuff for developers' use ||

= 5. Design & Terminology = 
== 5.1 Open Auth Roundtrip ==
https://lh3.googleusercontent.com/-G5GUxfUdXS0/TgC_I0dXVmI/AAAAAAAAADI/hAGOlYZngq0/s640/MelangeOAuth%252520%2525281%252529.png
== 5.2 Resource ==

Resource is a document or file that is exported to GDocs and being kept track of. When Melange exports a document to GDocs it will store returned document ID from Google Documents API. This document should be associated with user for whom resource exported for, and with a unique key that tells where the resource exported from. This shows the basic structure of Resource class:

{{{
class Resource(db.Model):
  """Model of an exported Google Docs resource
  """

  #: Required field storing "ID" of exported resource.
  #: This value is returned from Google Documents at first upload.
  resource_id = db.StringProperty(required=True)

  #: Name of the resource. This value is changed only when
  #: actual name of exported Google document changes.
  resource_name = db.StringProperty(required=True)

  #: Owner of document for whom document exported for, and 
  #: whose Google Documents account is expected to has the resource.
  owner = db.ReferenceProperty(reference_class=soc.models.user.User,
                               required=True,
                               collection_name='exported_documents',
                               verbose_name=ugettext('Owner'))
}}}
----
=6. Meeting Notes & Agendas =
== Monday, May 16 18:30:00 in UTC (Skype Conference)==
=== TODOs ===
 * Create the blogpost summarizing last week today.
 * Have a call with your mentor this week, most of us are in PDT time zone.
 * Put a link to your GAE instance on the wiki page (and blog if possible)
 * Don't forget to make your next blogpost before the next meeting.
 * Get ready to start coding!

== Tuesday, May 20 20:00:00 in UTC (GTalk with Mario) ==

Mario delivered me notes for my project from discussion with Melange team.
===TODOS:===
 * Update project requirements
 * Start working on exporting a html document from Google Documents and integrating with Melange.
 * Come up with a timeline. Designate deliverables.
 * Focus on the main problems instead of thinking whole project or other stuff that is already known how to handle.

== Monday, June 21 20:00:00 in UTC (GTalk with Mario) ==

===TODOS:===
 * Store tokens in datastore.
 * Provide a "remember me" checkbox with login button. 
 * Store "remember me" choice and access token in Profile model.