{"action":"created","comment":{"url":"https://api.github.com/repos/phenotips/phenotips/pulls/comments/32123423","id":32123423,"diff_hunk":"@@ -0,0 +1,108 @@\n+/*\n+ * See the NOTICE file distributed with this work for additional\n+ * information regarding copyright ownership.\n+ *\n+ * This program is free software: you can redistribute it and/or modify\n+ * it under the terms of the GNU Affero General Public License as published by\n+ * the Free Software Foundation, either version 3 of the License, or\n+ * (at your option) any later version.\n+ *\n+ * This program is distributed in the hope that it will be useful,\n+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+ * GNU Affero General Public License for more details.\n+ *\n+ * You should have received a copy of the GNU Affero General Public License\n+ * along with this program.  If not, see http://www.gnu.org/licenses/\n+ */\n+package org.phenotips.data.permissions.script;\n+\n+import org.phenotips.Constants;\n+import org.phenotips.data.Patient;\n+import org.phenotips.data.PatientRepository;\n+import org.phenotips.data.permissions.PatientAccess;\n+import org.phenotips.data.permissions.PermissionsManager;\n+import org.phenotips.data.permissions.internal.access.ManageAccessLevel;\n+\n+import org.xwiki.component.annotation.Component;\n+import org.xwiki.context.Execution;\n+import org.xwiki.model.EntityType;\n+import org.xwiki.model.reference.DocumentReference;\n+import org.xwiki.model.reference.EntityReference;\n+import org.xwiki.script.service.ScriptService;\n+\n+import javax.inject.Inject;\n+import javax.inject.Named;\n+import javax.inject.Singleton;\n+\n+import com.xpn.xwiki.XWiki;\n+import com.xpn.xwiki.XWikiContext;\n+import com.xpn.xwiki.XWikiException;\n+import com.xpn.xwiki.doc.XWikiDocument;\n+import com.xpn.xwiki.objects.BaseObject;\n+\n+/**\n+ * A service to add or remove a lock object to a record. The lock object will remove edit rights for all users on the\n+ * document.\n+ * @version $Id$\n+ * @since 1.3\n+ */\n+@Component\n+@Named(\"recordLocking\")\n+@Singleton\n+public class RecordLockingService implements ScriptService\n+{\n+    /** The XClass used for lock objects. */\n+    private EntityReference lockClassReference = new EntityReference(\"PatientLock\", EntityType.DOCUMENT,\n+        Constants.CODE_SPACE_REFERENCE);\n+\n+    /** Provides access to the current request context. */\n+    @Inject\n+    private Execution execution;\n+\n+    /** Allows retrieval of Patient from ID*/\n+    @Inject\n+    PatientRepository pr;\n+\n+    /** Allows checking of access rights on a patient*/\n+    @Inject\n+    PermissionsManager pm;\n+\n+    /**\n+     * Sets or removes a lock from a record. Locks remove edit rights from all users.\n+     * @param patientId The record to be locked\n+     * @param lock \"true\" to create a lock, \"false\" to remove\n+     */\n+    public void setRecordLock (String patientId, Boolean lock) throws XWikiException","path":"components/patient-access-rules/api/src/main/java/org/phenotips/data/permissions/script/RecordLockingService.java","position":76,"original_position":76,"commit_id":"071955c6f64c677bd4185c220e024f48e990e7a5","original_commit_id":"071955c6f64c677bd4185c220e024f48e990e7a5","user":{"login":"antonkatz","id":3529008,"avatar_url":"https://avatars.githubusercontent.com/u/3529008?v=3","gravatar_id":"","url":"https://api.github.com/users/antonkatz","html_url":"https://github.com/antonkatz","followers_url":"https://api.github.com/users/antonkatz/followers","following_url":"https://api.github.com/users/antonkatz/following{/other_user}","gists_url":"https://api.github.com/users/antonkatz/gists{/gist_id}","starred_url":"https://api.github.com/users/antonkatz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/antonkatz/subscriptions","organizations_url":"https://api.github.com/users/antonkatz/orgs","repos_url":"https://api.github.com/users/antonkatz/repos","events_url":"https://api.github.com/users/antonkatz/events{/privacy}","received_events_url":"https://api.github.com/users/antonkatz/received_events","type":"User","site_admin":false},"body":"Not a good idea for a script service to throw exceptions. It'll go straight to the user.","created_at":"2015-06-10T14:35:34Z","updated_at":"2015-06-10T14:35:34Z","html_url":"https://github.com/phenotips/phenotips/pull/1749#discussion_r32123423","pull_request_url":"https://api.github.com/repos/phenotips/phenotips/pulls/1749","_links":{"self":{"href":"https://api.github.com/repos/phenotips/phenotips/pulls/comments/32123423"},"html":{"href":"https://github.com/phenotips/phenotips/pull/1749#discussion_r32123423"},"pull_request":{"href":"https://api.github.com/repos/phenotips/phenotips/pulls/1749"}}},"pull_request":{"url":"https://api.github.com/repos/phenotips/phenotips/pulls/1749","id":37304879,"html_url":"https://github.com/phenotips/phenotips/pull/1749","diff_url":"https://github.com/phenotips/phenotips/pull/1749.diff","patch_url":"https://github.com/phenotips/phenotips/pull/1749.patch","issue_url":"https://api.github.com/repos/phenotips/phenotips/issues/1749","number":1749,"state":"open","locked":false,"title":"Issue #1442: Patient records can now be locked","user":{"login":"mjshepherd","id":9931605,"avatar_url":"https://avatars.githubusercontent.com/u/9931605?v=3","gravatar_id":"","url":"https://api.github.com/users/mjshepherd","html_url":"https://github.com/mjshepherd","followers_url":"https://api.github.com/users/mjshepherd/followers","following_url":"https://api.github.com/users/mjshepherd/following{/other_user}","gists_url":"https://api.github.com/users/mjshepherd/gists{/gist_id}","starred_url":"https://api.github.com/users/mjshepherd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjshepherd/subscriptions","organizations_url":"https://api.github.com/users/mjshepherd/orgs","repos_url":"https://api.github.com/users/mjshepherd/repos","events_url":"https://api.github.com/users/mjshepherd/events{/privacy}","received_events_url":"https://api.github.com/users/mjshepherd/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-06-09T21:59:30Z","updated_at":"2015-06-10T14:35:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5c38cd24e8165cd443de38e91fac6c8625888005","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/phenotips/phenotips/pulls/1749/commits","review_comments_url":"https://api.github.com/repos/phenotips/phenotips/pulls/1749/comments","review_comment_url":"https://api.github.com/repos/phenotips/phenotips/pulls/comments{/number}","comments_url":"https://api.github.com/repos/phenotips/phenotips/issues/1749/comments","statuses_url":"https://api.github.com/repos/phenotips/phenotips/statuses/071955c6f64c677bd4185c220e024f48e990e7a5","head":{"label":"mjshepherd:Issue-#1442","ref":"Issue-#1442","sha":"071955c6f64c677bd4185c220e024f48e990e7a5","user":{"login":"mjshepherd","id":9931605,"avatar_url":"https://avatars.githubusercontent.com/u/9931605?v=3","gravatar_id":"","url":"https://api.github.com/users/mjshepherd","html_url":"https://github.com/mjshepherd","followers_url":"https://api.github.com/users/mjshepherd/followers","following_url":"https://api.github.com/users/mjshepherd/following{/other_user}","gists_url":"https://api.github.com/users/mjshepherd/gists{/gist_id}","starred_url":"https://api.github.com/users/mjshepherd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjshepherd/subscriptions","organizations_url":"https://api.github.com/users/mjshepherd/orgs","repos_url":"https://api.github.com/users/mjshepherd/repos","events_url":"https://api.github.com/users/mjshepherd/events{/privacy}","received_events_url":"https://api.github.com/users/mjshepherd/received_events","type":"User","site_admin":false},"repo":{"id":35223758,"name":"phenotips","full_name":"mjshepherd/phenotips","owner":{"login":"mjshepherd","id":9931605,"avatar_url":"https://avatars.githubusercontent.com/u/9931605?v=3","gravatar_id":"","url":"https://api.github.com/users/mjshepherd","html_url":"https://github.com/mjshepherd","followers_url":"https://api.github.com/users/mjshepherd/followers","following_url":"https://api.github.com/users/mjshepherd/following{/other_user}","gists_url":"https://api.github.com/users/mjshepherd/gists{/gist_id}","starred_url":"https://api.github.com/users/mjshepherd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjshepherd/subscriptions","organizations_url":"https://api.github.com/users/mjshepherd/orgs","repos_url":"https://api.github.com/users/mjshepherd/repos","events_url":"https://api.github.com/users/mjshepherd/events{/privacy}","received_events_url":"https://api.github.com/users/mjshepherd/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mjshepherd/phenotips","description":"PhenoTips provides an easy-to-use Web interface and standardized database back-end for collecting clinical findings observed in patients with possible genetic disorders.","fork":true,"url":"https://api.github.com/repos/mjshepherd/phenotips","forks_url":"https://api.github.com/repos/mjshepherd/phenotips/forks","keys_url":"https://api.github.com/repos/mjshepherd/phenotips/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mjshepherd/phenotips/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mjshepherd/phenotips/teams","hooks_url":"https://api.github.com/repos/mjshepherd/phenotips/hooks","issue_events_url":"https://api.github.com/repos/mjshepherd/phenotips/issues/events{/number}","events_url":"https://api.github.com/repos/mjshepherd/phenotips/events","assignees_url":"https://api.github.com/repos/mjshepherd/phenotips/assignees{/user}","branches_url":"https://api.github.com/repos/mjshepherd/phenotips/branches{/branch}","tags_url":"https://api.github.com/repos/mjshepherd/phenotips/tags","blobs_url":"https://api.github.com/repos/mjshepherd/phenotips/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mjshepherd/phenotips/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mjshepherd/phenotips/git/refs{/sha}","trees_url":"https://api.github.com/repos/mjshepherd/phenotips/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mjshepherd/phenotips/statuses/{sha}","languages_url":"https://api.github.com/repos/mjshepherd/phenotips/languages","stargazers_url":"https://api.github.com/repos/mjshepherd/phenotips/stargazers","contributors_url":"https://api.github.com/repos/mjshepherd/phenotips/contributors","subscribers_url":"https://api.github.com/repos/mjshepherd/phenotips/subscribers","subscription_url":"https://api.github.com/repos/mjshepherd/phenotips/subscription","commits_url":"https://api.github.com/repos/mjshepherd/phenotips/commits{/sha}","git_commits_url":"https://api.github.com/repos/mjshepherd/phenotips/git/commits{/sha}","comments_url":"https://api.github.com/repos/mjshepherd/phenotips/comments{/number}","issue_comment_url":"https://api.github.com/repos/mjshepherd/phenotips/issues/comments{/number}","contents_url":"https://api.github.com/repos/mjshepherd/phenotips/contents/{+path}","compare_url":"https://api.github.com/repos/mjshepherd/phenotips/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mjshepherd/phenotips/merges","archive_url":"https://api.github.com/repos/mjshepherd/phenotips/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mjshepherd/phenotips/downloads","issues_url":"https://api.github.com/repos/mjshepherd/phenotips/issues{/number}","pulls_url":"https://api.github.com/repos/mjshepherd/phenotips/pulls{/number}","milestones_url":"https://api.github.com/repos/mjshepherd/phenotips/milestones{/number}","notifications_url":"https://api.github.com/repos/mjshepherd/phenotips/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mjshepherd/phenotips/labels{/name}","releases_url":"https://api.github.com/repos/mjshepherd/phenotips/releases{/id}","created_at":"2015-05-07T14:10:06Z","updated_at":"2015-05-07T14:10:11Z","pushed_at":"2015-06-09T21:59:01Z","git_url":"git://github.com/mjshepherd/phenotips.git","ssh_url":"git@github.com:mjshepherd/phenotips.git","clone_url":"https://github.com/mjshepherd/phenotips.git","svn_url":"https://github.com/mjshepherd/phenotips","homepage":"http://phenotips.org/","size":367550,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"phenotips:master","ref":"master","sha":"0199f537618a13c4bd1f6d0a6dccc07a3b78cd8b","user":{"login":"phenotips","id":4872353,"avatar_url":"https://avatars.githubusercontent.com/u/4872353?v=3","gravatar_id":"","url":"https://api.github.com/users/phenotips","html_url":"https://github.com/phenotips","followers_url":"https://api.github.com/users/phenotips/followers","following_url":"https://api.github.com/users/phenotips/following{/other_user}","gists_url":"https://api.github.com/users/phenotips/gists{/gist_id}","starred_url":"https://api.github.com/users/phenotips/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/phenotips/subscriptions","organizations_url":"https://api.github.com/users/phenotips/orgs","repos_url":"https://api.github.com/users/phenotips/repos","events_url":"https://api.github.com/users/phenotips/events{/privacy}","received_events_url":"https://api.github.com/users/phenotips/received_events","type":"Organization","site_admin":false},"repo":{"id":2685841,"name":"phenotips","full_name":"phenotips/phenotips","owner":{"login":"phenotips","id":4872353,"avatar_url":"https://avatars.githubusercontent.com/u/4872353?v=3","gravatar_id":"","url":"https://api.github.com/users/phenotips","html_url":"https://github.com/phenotips","followers_url":"https://api.github.com/users/phenotips/followers","following_url":"https://api.github.com/users/phenotips/following{/other_user}","gists_url":"https://api.github.com/users/phenotips/gists{/gist_id}","starred_url":"https://api.github.com/users/phenotips/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/phenotips/subscriptions","organizations_url":"https://api.github.com/users/phenotips/orgs","repos_url":"https://api.github.com/users/phenotips/repos","events_url":"https://api.github.com/users/phenotips/events{/privacy}","received_events_url":"https://api.github.com/users/phenotips/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/phenotips/phenotips","description":"PhenoTips provides an easy-to-use Web interface and standardized database back-end for collecting clinical findings observed in patients with possible genetic disorders.","fork":false,"url":"https://api.github.com/repos/phenotips/phenotips","forks_url":"https://api.github.com/repos/phenotips/phenotips/forks","keys_url":"https://api.github.com/repos/phenotips/phenotips/keys{/key_id}","collaborators_url":"https://api.github.com/repos/phenotips/phenotips/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/phenotips/phenotips/teams","hooks_url":"https://api.github.com/repos/phenotips/phenotips/hooks","issue_events_url":"https://api.github.com/repos/phenotips/phenotips/issues/events{/number}","events_url":"https://api.github.com/repos/phenotips/phenotips/events","assignees_url":"https://api.github.com/repos/phenotips/phenotips/assignees{/user}","branches_url":"https://api.github.com/repos/phenotips/phenotips/branches{/branch}","tags_url":"https://api.github.com/repos/phenotips/phenotips/tags","blobs_url":"https://api.github.com/repos/phenotips/phenotips/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/phenotips/phenotips/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/phenotips/phenotips/git/refs{/sha}","trees_url":"https://api.github.com/repos/phenotips/phenotips/git/trees{/sha}","statuses_url":"https://api.github.com/repos/phenotips/phenotips/statuses/{sha}","languages_url":"https://api.github.com/repos/phenotips/phenotips/languages","stargazers_url":"https://api.github.com/repos/phenotips/phenotips/stargazers","contributors_url":"https://api.github.com/repos/phenotips/phenotips/contributors","subscribers_url":"https://api.github.com/repos/phenotips/phenotips/subscribers","subscription_url":"https://api.github.com/repos/phenotips/phenotips/subscription","commits_url":"https://api.github.com/repos/phenotips/phenotips/commits{/sha}","git_commits_url":"https://api.github.com/repos/phenotips/phenotips/git/commits{/sha}","comments_url":"https://api.github.com/repos/phenotips/phenotips/comments{/number}","issue_comment_url":"https://api.github.com/repos/phenotips/phenotips/issues/comments{/number}","contents_url":"https://api.github.com/repos/phenotips/phenotips/contents/{+path}","compare_url":"https://api.github.com/repos/phenotips/phenotips/compare/{base}...{head}","merges_url":"https://api.github.com/repos/phenotips/phenotips/merges","archive_url":"https://api.github.com/repos/phenotips/phenotips/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/phenotips/phenotips/downloads","issues_url":"https://api.github.com/repos/phenotips/phenotips/issues{/number}","pulls_url":"https://api.github.com/repos/phenotips/phenotips/pulls{/number}","milestones_url":"https://api.github.com/repos/phenotips/phenotips/milestones{/number}","notifications_url":"https://api.github.com/repos/phenotips/phenotips/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/phenotips/phenotips/labels{/name}","releases_url":"https://api.github.com/repos/phenotips/phenotips/releases{/id}","created_at":"2011-11-01T05:55:21Z","updated_at":"2015-06-10T08:18:22Z","pushed_at":"2015-06-10T00:57:59Z","git_url":"git://github.com/phenotips/phenotips.git","ssh_url":"git@github.com:phenotips/phenotips.git","clone_url":"https://github.com/phenotips/phenotips.git","svn_url":"https://github.com/phenotips/phenotips","homepage":"http://phenotips.org/","size":431584,"stargazers_count":10,"watchers_count":10,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":12,"mirror_url":null,"open_issues_count":310,"forks":12,"open_issues":310,"watchers":10,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/phenotips/phenotips/pulls/1749"},"html":{"href":"https://github.com/phenotips/phenotips/pull/1749"},"issue":{"href":"https://api.github.com/repos/phenotips/phenotips/issues/1749"},"comments":{"href":"https://api.github.com/repos/phenotips/phenotips/issues/1749/comments"},"review_comments":{"href":"https://api.github.com/repos/phenotips/phenotips/pulls/1749/comments"},"review_comment":{"href":"https://api.github.com/repos/phenotips/phenotips/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/phenotips/phenotips/pulls/1749/commits"},"statuses":{"href":"https://api.github.com/repos/phenotips/phenotips/statuses/071955c6f64c677bd4185c220e024f48e990e7a5"}}}}