{"action":"created","comment":{"url":"https://api.github.com/repos/edx/edx-platform/pulls/comments/23238588","id":23238588,"diff_hunk":"@@ -230,3 +230,20 @@ class Meta:\n \n     def __unicode__(self):\n         return \"[OCGLog] %s: %s\" % (self.course_id.to_deprecated_string(), self.created)  # pylint: disable=no-member\n+\n+\n+class StudentFieldOverride(models.Model):\n+    \"\"\"\n+    Holds the value of a specific field overriden for a student.  This is used\n+    by the code in the `courseware.student_field_overrides` module to provide\n+    overrides of xblock fields on a per user basis.\n+    \"\"\"\n+    course_id = CourseKeyField(max_length=255, db_index=True)\n+    location = LocationKeyField(max_length=255, db_index=True)\n+    student = models.ForeignKey(User, db_index=True)\n+\n+    class Meta:   # pylint: disable=missing-docstring\n+        unique_together = (('course_id', 'location', 'student'),)\n+\n+    field = models.CharField(max_length=255)\n+    value = models.TextField(default='null')","path":"lms/djangoapps/courseware/models.py","position":29,"original_position":29,"commit_id":"c2d2f4c7b6e6e38ce3dbe543b6a8d7419ffe7cf2","original_commit_id":"c2d2f4c7b6e6e38ce3dbe543b6a8d7419ffe7cf2","user":{"login":"ormsbee","id":41625,"avatar_url":"https://avatars.githubusercontent.com/u/41625?v=3","gravatar_id":"","url":"https://api.github.com/users/ormsbee","html_url":"https://github.com/ormsbee","followers_url":"https://api.github.com/users/ormsbee/followers","following_url":"https://api.github.com/users/ormsbee/following{/other_user}","gists_url":"https://api.github.com/users/ormsbee/gists{/gist_id}","starred_url":"https://api.github.com/users/ormsbee/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ormsbee/subscriptions","organizations_url":"https://api.github.com/users/ormsbee/orgs","repos_url":"https://api.github.com/users/ormsbee/repos","events_url":"https://api.github.com/users/ormsbee/events{/privacy}","received_events_url":"https://api.github.com/users/ormsbee/received_events","type":"User","site_admin":false},"body":"Ack, forgot that this had dependencies on other PRs. I'll move my comments there.","created_at":"2015-01-20T17:27:02Z","updated_at":"2015-01-20T17:27:02Z","html_url":"https://github.com/edx/edx-platform/pull/6636#discussion_r23238588","pull_request_url":"https://api.github.com/repos/edx/edx-platform/pulls/6636","_links":{"self":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/comments/23238588"},"html":{"href":"https://github.com/edx/edx-platform/pull/6636#discussion_r23238588"},"pull_request":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/6636"}}},"pull_request":{"url":"https://api.github.com/repos/edx/edx-platform/pulls/6636","id":27407877,"html_url":"https://github.com/edx/edx-platform/pull/6636","diff_url":"https://github.com/edx/edx-platform/pull/6636.diff","patch_url":"https://github.com/edx/edx-platform/pull/6636.patch","issue_url":"https://api.github.com/repos/edx/edx-platform/issues/6636","number":6636,"state":"open","locked":false,"title":"WIP: MIT Feature - Personal Online Courses","user":{"login":"cewing","id":417109,"avatar_url":"https://avatars.githubusercontent.com/u/417109?v=3","gravatar_id":"","url":"https://api.github.com/users/cewing","html_url":"https://github.com/cewing","followers_url":"https://api.github.com/users/cewing/followers","following_url":"https://api.github.com/users/cewing/following{/other_user}","gists_url":"https://api.github.com/users/cewing/gists{/gist_id}","starred_url":"https://api.github.com/users/cewing/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cewing/subscriptions","organizations_url":"https://api.github.com/users/cewing/orgs","repos_url":"https://api.github.com/users/cewing/repos","events_url":"https://api.github.com/users/cewing/events{/privacy}","received_events_url":"https://api.github.com/users/cewing/received_events","type":"User","site_admin":false},"body":"This PR implements \"Personal Online Courses\" or POCs (working title). POCs are a simplified approach to SPOCs that allow for a course (or portions of a course) to be reused with a small groups of students. Course instructors assign a \"POC Coach\" who can create a POC, choose a subset of course modules for the POC (with start and end dates) and administer students. Importantly, POC Coaches cannot change the content and do not have the same permissions as course staff. \r\n\r\nPOCs were originally proposed [on the edx code list last year](https://groups.google.com/d/msg/edx-code/BF5_am0CmD4/90w-B2sun4gJ) and have been discussed with edX Product (including @explorerleslie ) and with edX Engineering ( @cpennington and @nedbat ). \r\n\r\nThis feature is intended to be used on edX.org. In particular, we are fielding requests to use this feature with 15.390.1x and 15.390.2x. This PR only affects LMS. \r\n\r\nFor manual testing, please view the [demo screencast](https://drive.google.com/file/d/0B9nbgzSIkR7mcTlXSkZqQTZwSnc/view?usp=sharing). The edX Demo course can be used for testing. \r\n\r\nWe are under constant demand for this feature. We would like to have it merged by the end of January. \r\n\r\nFor this WIP PR we have a couple of issues that we could use some help with:\r\n\r\n1. This PR has a dependency on PR https://github.com/edx/edx-platform/pull/5802 which provides the settings override feature that allows POC start and end dates to be applied just for POC students. \r\n\r\n2. Since POCs may omit some content from the MOOC, we need to override grading policy. We would like feedback from @ormsbee on our approach.\r\n\r\n3. We have introduced a new role -- POC Coach (working title) -- and a new course tab to go with it. @chrissrossi inquired about [the best approach to handling tab permissions on the mailing list](https://groups.google.com/d/msg/edx-code/08V3Ni7NxlI/as7cKCjXkoMJ) but we would like a confirmation that the approach suggested by @andyarmstrong is OK. We have not yet implemented this. \r\n\r\nAll the authors of this PR are covered under the edX-MIT agreement. ","created_at":"2015-01-15T05:59:04Z","updated_at":"2015-01-20T17:27:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"bc67d2110b39574a76e7d518e895e0826ab8a973","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/edx/edx-platform/pulls/6636/commits","review_comments_url":"https://api.github.com/repos/edx/edx-platform/pulls/6636/comments","review_comment_url":"https://api.github.com/repos/edx/edx-platform/pulls/comments/{number}","comments_url":"https://api.github.com/repos/edx/edx-platform/issues/6636/comments","statuses_url":"https://api.github.com/repos/edx/edx-platform/statuses/c2d2f4c7b6e6e38ce3dbe543b6a8d7419ffe7cf2","head":{"label":"jazkarta:feature-pocs","ref":"feature-pocs","sha":"c2d2f4c7b6e6e38ce3dbe543b6a8d7419ffe7cf2","user":{"login":"jazkarta","id":974974,"avatar_url":"https://avatars.githubusercontent.com/u/974974?v=3","gravatar_id":"","url":"https://api.github.com/users/jazkarta","html_url":"https://github.com/jazkarta","followers_url":"https://api.github.com/users/jazkarta/followers","following_url":"https://api.github.com/users/jazkarta/following{/other_user}","gists_url":"https://api.github.com/users/jazkarta/gists{/gist_id}","starred_url":"https://api.github.com/users/jazkarta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jazkarta/subscriptions","organizations_url":"https://api.github.com/users/jazkarta/orgs","repos_url":"https://api.github.com/users/jazkarta/repos","events_url":"https://api.github.com/users/jazkarta/events{/privacy}","received_events_url":"https://api.github.com/users/jazkarta/received_events","type":"Organization","site_admin":false},"repo":{"id":13279839,"name":"edx-platform","full_name":"jazkarta/edx-platform","owner":{"login":"jazkarta","id":974974,"avatar_url":"https://avatars.githubusercontent.com/u/974974?v=3","gravatar_id":"","url":"https://api.github.com/users/jazkarta","html_url":"https://github.com/jazkarta","followers_url":"https://api.github.com/users/jazkarta/followers","following_url":"https://api.github.com/users/jazkarta/following{/other_user}","gists_url":"https://api.github.com/users/jazkarta/gists{/gist_id}","starred_url":"https://api.github.com/users/jazkarta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jazkarta/subscriptions","organizations_url":"https://api.github.com/users/jazkarta/orgs","repos_url":"https://api.github.com/users/jazkarta/repos","events_url":"https://api.github.com/users/jazkarta/events{/privacy}","received_events_url":"https://api.github.com/users/jazkarta/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/jazkarta/edx-platform","description":"the edX learning management system (LMS) and course authoring tool, Studio","fork":true,"url":"https://api.github.com/repos/jazkarta/edx-platform","forks_url":"https://api.github.com/repos/jazkarta/edx-platform/forks","keys_url":"https://api.github.com/repos/jazkarta/edx-platform/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jazkarta/edx-platform/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jazkarta/edx-platform/teams","hooks_url":"https://api.github.com/repos/jazkarta/edx-platform/hooks","issue_events_url":"https://api.github.com/repos/jazkarta/edx-platform/issues/events{/number}","events_url":"https://api.github.com/repos/jazkarta/edx-platform/events","assignees_url":"https://api.github.com/repos/jazkarta/edx-platform/assignees{/user}","branches_url":"https://api.github.com/repos/jazkarta/edx-platform/branches{/branch}","tags_url":"https://api.github.com/repos/jazkarta/edx-platform/tags","blobs_url":"https://api.github.com/repos/jazkarta/edx-platform/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jazkarta/edx-platform/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jazkarta/edx-platform/git/refs{/sha}","trees_url":"https://api.github.com/repos/jazkarta/edx-platform/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jazkarta/edx-platform/statuses/{sha}","languages_url":"https://api.github.com/repos/jazkarta/edx-platform/languages","stargazers_url":"https://api.github.com/repos/jazkarta/edx-platform/stargazers","contributors_url":"https://api.github.com/repos/jazkarta/edx-platform/contributors","subscribers_url":"https://api.github.com/repos/jazkarta/edx-platform/subscribers","subscription_url":"https://api.github.com/repos/jazkarta/edx-platform/subscription","commits_url":"https://api.github.com/repos/jazkarta/edx-platform/commits{/sha}","git_commits_url":"https://api.github.com/repos/jazkarta/edx-platform/git/commits{/sha}","comments_url":"https://api.github.com/repos/jazkarta/edx-platform/comments{/number}","issue_comment_url":"https://api.github.com/repos/jazkarta/edx-platform/issues/comments/{number}","contents_url":"https://api.github.com/repos/jazkarta/edx-platform/contents/{+path}","compare_url":"https://api.github.com/repos/jazkarta/edx-platform/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jazkarta/edx-platform/merges","archive_url":"https://api.github.com/repos/jazkarta/edx-platform/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jazkarta/edx-platform/downloads","issues_url":"https://api.github.com/repos/jazkarta/edx-platform/issues{/number}","pulls_url":"https://api.github.com/repos/jazkarta/edx-platform/pulls{/number}","milestones_url":"https://api.github.com/repos/jazkarta/edx-platform/milestones{/number}","notifications_url":"https://api.github.com/repos/jazkarta/edx-platform/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jazkarta/edx-platform/labels{/name}","releases_url":"https://api.github.com/repos/jazkarta/edx-platform/releases{/id}","created_at":"2013-10-02T18:52:14Z","updated_at":"2015-01-16T20:29:22Z","pushed_at":"2015-01-16T22:28:33Z","git_url":"git://github.com/jazkarta/edx-platform.git","ssh_url":"git@github.com:jazkarta/edx-platform.git","clone_url":"https://github.com/jazkarta/edx-platform.git","svn_url":"https://github.com/jazkarta/edx-platform","homepage":"http://code.edx.org/","size":406253,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1,"mirror_url":null,"open_issues_count":14,"forks":1,"open_issues":14,"watchers":0,"default_branch":"master"}},"base":{"label":"edx:master","ref":"master","sha":"e64d45b7053cdb727f2c305462d16c5ada152406","user":{"login":"edx","id":3179841,"avatar_url":"https://avatars.githubusercontent.com/u/3179841?v=3","gravatar_id":"","url":"https://api.github.com/users/edx","html_url":"https://github.com/edx","followers_url":"https://api.github.com/users/edx/followers","following_url":"https://api.github.com/users/edx/following{/other_user}","gists_url":"https://api.github.com/users/edx/gists{/gist_id}","starred_url":"https://api.github.com/users/edx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edx/subscriptions","organizations_url":"https://api.github.com/users/edx/orgs","repos_url":"https://api.github.com/users/edx/repos","events_url":"https://api.github.com/users/edx/events{/privacy}","received_events_url":"https://api.github.com/users/edx/received_events","type":"Organization","site_admin":false},"repo":{"id":10391073,"name":"edx-platform","full_name":"edx/edx-platform","owner":{"login":"edx","id":3179841,"avatar_url":"https://avatars.githubusercontent.com/u/3179841?v=3","gravatar_id":"","url":"https://api.github.com/users/edx","html_url":"https://github.com/edx","followers_url":"https://api.github.com/users/edx/followers","following_url":"https://api.github.com/users/edx/following{/other_user}","gists_url":"https://api.github.com/users/edx/gists{/gist_id}","starred_url":"https://api.github.com/users/edx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edx/subscriptions","organizations_url":"https://api.github.com/users/edx/orgs","repos_url":"https://api.github.com/users/edx/repos","events_url":"https://api.github.com/users/edx/events{/privacy}","received_events_url":"https://api.github.com/users/edx/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/edx/edx-platform","description":"Open edX, the edX platform that powers http://edx.org","fork":false,"url":"https://api.github.com/repos/edx/edx-platform","forks_url":"https://api.github.com/repos/edx/edx-platform/forks","keys_url":"https://api.github.com/repos/edx/edx-platform/keys{/key_id}","collaborators_url":"https://api.github.com/repos/edx/edx-platform/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/edx/edx-platform/teams","hooks_url":"https://api.github.com/repos/edx/edx-platform/hooks","issue_events_url":"https://api.github.com/repos/edx/edx-platform/issues/events{/number}","events_url":"https://api.github.com/repos/edx/edx-platform/events","assignees_url":"https://api.github.com/repos/edx/edx-platform/assignees{/user}","branches_url":"https://api.github.com/repos/edx/edx-platform/branches{/branch}","tags_url":"https://api.github.com/repos/edx/edx-platform/tags","blobs_url":"https://api.github.com/repos/edx/edx-platform/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/edx/edx-platform/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/edx/edx-platform/git/refs{/sha}","trees_url":"https://api.github.com/repos/edx/edx-platform/git/trees{/sha}","statuses_url":"https://api.github.com/repos/edx/edx-platform/statuses/{sha}","languages_url":"https://api.github.com/repos/edx/edx-platform/languages","stargazers_url":"https://api.github.com/repos/edx/edx-platform/stargazers","contributors_url":"https://api.github.com/repos/edx/edx-platform/contributors","subscribers_url":"https://api.github.com/repos/edx/edx-platform/subscribers","subscription_url":"https://api.github.com/repos/edx/edx-platform/subscription","commits_url":"https://api.github.com/repos/edx/edx-platform/commits{/sha}","git_commits_url":"https://api.github.com/repos/edx/edx-platform/git/commits{/sha}","comments_url":"https://api.github.com/repos/edx/edx-platform/comments{/number}","issue_comment_url":"https://api.github.com/repos/edx/edx-platform/issues/comments/{number}","contents_url":"https://api.github.com/repos/edx/edx-platform/contents/{+path}","compare_url":"https://api.github.com/repos/edx/edx-platform/compare/{base}...{head}","merges_url":"https://api.github.com/repos/edx/edx-platform/merges","archive_url":"https://api.github.com/repos/edx/edx-platform/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/edx/edx-platform/downloads","issues_url":"https://api.github.com/repos/edx/edx-platform/issues{/number}","pulls_url":"https://api.github.com/repos/edx/edx-platform/pulls{/number}","milestones_url":"https://api.github.com/repos/edx/edx-platform/milestones{/number}","notifications_url":"https://api.github.com/repos/edx/edx-platform/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/edx/edx-platform/labels{/name}","releases_url":"https://api.github.com/repos/edx/edx-platform/releases{/id}","created_at":"2013-05-30T20:20:38Z","updated_at":"2015-01-20T17:26:49Z","pushed_at":"2015-01-20T17:26:39Z","git_url":"git://github.com/edx/edx-platform.git","ssh_url":"git@github.com:edx/edx-platform.git","clone_url":"https://github.com/edx/edx-platform.git","svn_url":"https://github.com/edx/edx-platform","homepage":"http://openedx.org/","size":1583302,"stargazers_count":1688,"watchers_count":1688,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":964,"mirror_url":null,"open_issues_count":124,"forks":964,"open_issues":124,"watchers":1688,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/6636"},"html":{"href":"https://github.com/edx/edx-platform/pull/6636"},"issue":{"href":"https://api.github.com/repos/edx/edx-platform/issues/6636"},"comments":{"href":"https://api.github.com/repos/edx/edx-platform/issues/6636/comments"},"review_comments":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/6636/comments"},"review_comment":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/6636/commits"},"statuses":{"href":"https://api.github.com/repos/edx/edx-platform/statuses/c2d2f4c7b6e6e38ce3dbe543b6a8d7419ffe7cf2"}}}}