{"action":"created","comment":{"url":"https://api.github.com/repos/TEAMMATES/repo/pulls/comments/33550201","id":33550201,"diff_hunk":"@@ -12,68 +13,400 @@\n import teammates.common.datatransfer.FeedbackSessionAttributes;\n import teammates.common.datatransfer.InstructorAttributes;\n import teammates.common.datatransfer.StudentAttributes;\n+import teammates.common.util.Assumption;\n import teammates.common.util.Const;\n+import teammates.common.util.TimeHelper;\n+import teammates.common.util.Url;\n+import teammates.ui.template.AdditionalSettingsFormSegment;\n+import teammates.ui.template.ElementTag;\n+import teammates.ui.template.FeedbackQuestionCopyTable;\n+import teammates.ui.template.FeedbackQuestionEditForm;\n+import teammates.ui.template.FeedbackQuestionGeneralSettings;\n+import teammates.ui.template.FeedbackQuestionTableRow;\n+import teammates.ui.template.FeedbackSessionPreviewForm;\n+import teammates.ui.template.FeedbackSessionsForm;\n \n public class InstructorFeedbackEditPageData extends PageData {\n \n-    public FeedbackSessionAttributes session;\n-    public FeedbackQuestionAttributes newQuestion;\n-    public List<FeedbackQuestionAttributes> questions;\n-    public List<FeedbackQuestionAttributes> copiableQuestions;\n-    public Map<String, Boolean> questionHasResponses;\n-    public List<StudentAttributes> studentList;\n-    public List<InstructorAttributes> instructorList;\n-    public InstructorAttributes instructor;\n-\n+    private static final String SAVE_CHANGES = \"Save Changes\";\n+    \n+    private String emptyFsMsg = Const.StatusMessages.FEEDBACK_QUESTION_EMPTY; \n+    private FeedbackSessionsForm fsForm;\n+    private List<FeedbackQuestionEditForm> qnForms;\n+    private FeedbackQuestionEditForm newQnForm;\n+    private FeedbackSessionPreviewForm previewForm;\n+    private FeedbackQuestionCopyTable copyQnForm;\n+    \n     public InstructorFeedbackEditPageData(AccountAttributes account) {\n         super(account);\n-        questionHasResponses = new HashMap<String, Boolean>();\n+        \n+    }\n+    \n+\n+    public void init(FeedbackSessionAttributes feedbackSession, List<FeedbackQuestionAttributes> questions,\n+                     List<FeedbackQuestionAttributes> copiableQuestions, \n+                     Map<String, Boolean> questionHasResponses,\n+                     List<StudentAttributes> studentList, List<InstructorAttributes> instructorList,\n+                     InstructorAttributes instructor) {\n+        Assumption.assertNotNull(feedbackSession);\n+        \n+        buildFsForm(feedbackSession);\n+        \n+        qnForms = new ArrayList<FeedbackQuestionEditForm>();\n+        for (FeedbackQuestionAttributes question : questions) {\n+            buildExistingQuestionForm(feedbackSession, questions, questionHasResponses, instructor, question);\n+        }\n+        \n+        buildNewQuestionForm(feedbackSession, questions, instructor);\n+        \n+        buildPreviewForm(feedbackSession, studentList, instructorList);\n+        \n+        buildCopyQnForm(feedbackSession, copiableQuestions, instructor);\n+        \n+    }\n+\n+\n+    private void buildFsForm(FeedbackSessionAttributes feedbackSession) {\n+        buildBasicFsForm(feedbackSession);\n+        fsForm.setAdditionalSettings(buildFsFormAdditionalSettings(feedbackSession));\n+    }\n+\n+\n+    private void buildCopyQnForm(FeedbackSessionAttributes feedbackSession,\n+                                    List<FeedbackQuestionAttributes> copiableQuestions,\n+                                    InstructorAttributes instructor) {\n+        List<FeedbackQuestionTableRow> copyQuestionRows = buildCopyQuestionsModalRows(copiableQuestions,\n+                                                                                  instructor);\n+        copyQnForm = new FeedbackQuestionCopyTable(feedbackSession.courseId, feedbackSession.feedbackSessionName, \n+                                                   copyQuestionRows);\n+    }\n+\n+\n+    private List<FeedbackQuestionTableRow> buildCopyQuestionsModalRows(List<FeedbackQuestionAttributes> copiableQuestions,\n+                                                                       InstructorAttributes instructor) {\n+        List<FeedbackQuestionTableRow> copyQuestionRows = new ArrayList<FeedbackQuestionTableRow>();\n+        if (instructor.isAllowedForPrivilege(Const.ParamsNames.INSTRUCTOR_PERMISSION_MODIFY_SESSION)) {\n+            for (FeedbackQuestionAttributes question1 : copiableQuestions) {\n+                String courseId = question1.courseId;\n+                String fsName = question1.feedbackSessionName;\n+                String qnType = question1.getQuestionDetails().getQuestionTypeDisplayName();\n+                String qnText = question1.getQuestionDetails().questionText;\n+                String qnId = question1.getId();\n+                \n+                FeedbackQuestionTableRow row = new FeedbackQuestionTableRow(courseId, fsName, qnType, qnText, qnId);\n+                copyQuestionRows.add(row);\n+            }\n+        }\n+        return copyQuestionRows;\n+    }\n+\n+\n+    private void buildPreviewForm(FeedbackSessionAttributes feedbackSession,\n+                                    List<StudentAttributes> studentList,\n+                                    List<InstructorAttributes> instructorList) {\n+        previewForm = new FeedbackSessionPreviewForm(feedbackSession.courseId, feedbackSession.feedbackSessionName, \n+                                                     getPreviewAsStudentOptions(studentList), \n+                                                     getPreviewAsInstructorOptions(instructorList));\n+    }\n+\n+\n+    private void buildExistingQuestionForm(FeedbackSessionAttributes feedbackSession,\n+                                           List<FeedbackQuestionAttributes> questions,\n+                                           Map<String, Boolean> questionHasResponses,\n+                                           InstructorAttributes instructor, FeedbackQuestionAttributes question) {\n+        FeedbackQuestionEditForm qnForm = new FeedbackQuestionEditForm();\n+        qnForm.setAction(new Url(Const.ActionURIs.INSTRUCTOR_FEEDBACK_QUESTION_EDIT));\n+        qnForm.setCourseId(instructor.courseId);\n+        \n+        qnForm.setFeedbackSessionName(feedbackSession.feedbackSessionName);\n+        qnForm.setQuestion(question);\n+        qnForm.setQuestionDetails(question.getQuestionDetails());\n+        qnForm.setQuestionNumberSuffix(\"-\" + String.valueOf(question.questionNumber));\n+        \n+        qnForm.setNumOfQuestionsOnPage(questions.size());\n+        qnForm.setQuestionNumberOptions(getQuestionNumberOptions(questions.size()));\n+        qnForm.setQuestionText(question.getQuestionDetails().questionText);\n+        \n+        FeedbackQuestionGeneralSettings generalSettings = new FeedbackQuestionGeneralSettings();\n+        qnForm.setGeneralSettings(generalSettings);\n+        generalSettings.setGiverParticipantOptions(getParticipantOptions(question, true));\n+        generalSettings.setRecipientParticipantOptions(getParticipantOptions(question, false));\n+        \n+        \n+        // maps for setting visibility\n+        Map<String, Boolean> isGiverNameVisible = new HashMap<String, Boolean>();\n+        for (FeedbackParticipantType giverType : question.showGiverNameTo) {\n+            isGiverNameVisible.put(giverType.name(), true);\n+        }\n+        generalSettings.setGiverNameVisibleFor(isGiverNameVisible);\n+        \n+        Map<String, Boolean> isRecipientNameVisible = new HashMap<String, Boolean>();\n+        for (FeedbackParticipantType recipientType : question.showRecipientNameTo) {\n+            isRecipientNameVisible.put(recipientType.name(), true);\n+        }\n+        generalSettings.setRecipientNameVisibleFor(isRecipientNameVisible);\n+        \n+        Map<String, Boolean> isResponsesVisible = new HashMap<String, Boolean>();\n+        for (FeedbackParticipantType participantType : question.showResponsesTo) {\n+            isResponsesVisible.put(participantType.name(), true);\n+        }\n+        generalSettings.setResponseVisibleFor(isResponsesVisible);\n+        \n+        generalSettings.setNumberOfEntitiesToGiveFeedbackToChecked(question.numberOfEntitiesToGiveFeedbackTo == Const.MAX_POSSIBLE_RECIPIENTS);\n+        generalSettings.setNumOfEntitiesToGiveFeedbackToValue(question.numberOfEntitiesToGiveFeedbackTo == Const.MAX_POSSIBLE_RECIPIENTS ?\n+                                                                 1 :\n+                                                                 question.numberOfEntitiesToGiveFeedbackTo);\n+        qnForm.setQuestionHasResponses(questionHasResponses.get(question.getId()));\n+        \n+        List<String> visibilityMessages = question.getVisibilityMessage();\n+        generalSettings.setVisibilityMessages(visibilityMessages);\n+        \n+        qnForm.setQuestionSpecificEditFormHtml(question.getQuestionDetails().getQuestionSpecificEditFormHtml(question.questionNumber));\n+        qnForm.setEditable(false);\n+        \n+        qnForms.add(qnForm);\n+    }\n+\n+\n+    private void buildNewQuestionForm(FeedbackSessionAttributes feedbackSession,\n+                                      List<FeedbackQuestionAttributes> questions,\n+                                      InstructorAttributes instructor) {\n+        newQnForm = new FeedbackQuestionEditForm();\n+        newQnForm.setDoneEditingLink(new Url(Const.ActionURIs.INSTRUCTOR_FEEDBACKS_PAGE)\n+                                        .withUserId(account.googleId)\n+                                        .withCourseId(feedbackSession.courseId)\n+                                        .withSessionName(feedbackSession.feedbackSessionName));\n+        \n+        \n+        newQnForm.setAction(new Url(Const.ActionURIs.INSTRUCTOR_FEEDBACK_QUESTION_ADD));\n+        newQnForm.setCourseId(instructor.courseId);\n+        newQnForm.setFeedbackSessionName(feedbackSession.feedbackSessionName);\n+        newQnForm.setQuestionNumberSuffix(\"\");\n+        \n+        newQnForm.setQuestionTypeOptions(getQuestionTypeChoiceOptions());\n+      \n+        FeedbackQuestionGeneralSettings generalSettings = new FeedbackQuestionGeneralSettings();  \n+        newQnForm.setGeneralSettings(generalSettings);\n+        generalSettings.setGiverParticipantOptions(getParticipantOptions(null, true));\n+        generalSettings.setRecipientParticipantOptions(getParticipantOptions(null, false));\n+        generalSettings.setNumOfEntitiesToGiveFeedbackToValue(1);\n+        \n+        newQnForm.setNumOfQuestionsOnPage(questions.size());\n+        newQnForm.setQuestionNumberOptions(getQuestionNumberOptions(questions.size() + 1));\n+      \n+        newQnForm.setQuestionSpecificEditFormHtml(getNewQuestionSpecificEditFormHtml());\n+        newQnForm.setEditable(true);\n+        \n+        setDefaultVisibilityOptions(generalSettings);\n+    }\n+\n+\n+    private void setDefaultVisibilityOptions(FeedbackQuestionGeneralSettings generalSettings) {\n+        Map<String, Boolean> isGiverNameVisible = new HashMap<String, Boolean>();\n+        Map<String, Boolean> isRecipientNameVisible = new HashMap<String, Boolean>();\n+        Map<String, Boolean> isResponsesVisible = new HashMap<String, Boolean>();\n+        \n+        List<FeedbackParticipantType> participantVisiblity = new ArrayList<FeedbackParticipantType>();\n+        participantVisiblity.add(FeedbackParticipantType.INSTRUCTORS);\n+        participantVisiblity.add(FeedbackParticipantType.RECEIVER);\n+        \n+        for (FeedbackParticipantType participant : participantVisiblity) {\n+            isGiverNameVisible.put(participant.name(), true);\n+            isRecipientNameVisible.put(participant.name(), true);\n+            isResponsesVisible.put(participant.name(), true);\n+        }\n+        \n+        generalSettings.setGiverNameVisibleFor(isGiverNameVisible);\n+        generalSettings.setRecipientNameVisibleFor(isRecipientNameVisible);\n+        generalSettings.setResponseVisibleFor(isResponsesVisible);\n+    }\n+    \n+    \n+    private void buildBasicFsForm(FeedbackSessionAttributes newFeedbackSession) {\n+        fsForm = new FeedbackSessionsForm();\n+        \n+        fsForm.setFsDeleteLink(new Url(getInstructorFeedbackSessionDeleteLink(newFeedbackSession.courseId, newFeedbackSession.feedbackSessionName, \"\")));\n+        fsForm.setCopyToLink(new Url(getFeedbackSessionEditCopyLink()));\n+        \n+        fsForm.setCourseIdForNewSession(newFeedbackSession.courseId);\n+        \n+        fsForm.setFsNameEditable(false);\n+        fsForm.setFsName(newFeedbackSession.feedbackSessionName);\n+        \n+        fsForm.setCourseIdEditable(false);\n+        fsForm.setCourses(null);\n+        \n+        fsForm.setEditFsButtonsVisible(true);\n+        fsForm.setFeedbackSessionTypeEditable(false);\n+        fsForm.setFeedbackSessionTypeOptions(null);\n+\n+        fsForm.setFeedbackSessionNameForSessionList(null);","path":"src/main/java/teammates/ui/controller/InstructorFeedbackEditPageData.java","position":249,"original_position":249,"commit_id":"650f46c68c5bacee67fd3c9078f2c2b9b01c6df2","original_commit_id":"650f46c68c5bacee67fd3c9078f2c2b9b01c6df2","user":{"login":"yj-soh","id":8586080,"avatar_url":"https://avatars.githubusercontent.com/u/8586080?v=3","gravatar_id":"","url":"https://api.github.com/users/yj-soh","html_url":"https://github.com/yj-soh","followers_url":"https://api.github.com/users/yj-soh/followers","following_url":"https://api.github.com/users/yj-soh/following{/other_user}","gists_url":"https://api.github.com/users/yj-soh/gists{/gist_id}","starred_url":"https://api.github.com/users/yj-soh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yj-soh/subscriptions","organizations_url":"https://api.github.com/users/yj-soh/orgs","repos_url":"https://api.github.com/users/yj-soh/repos","events_url":"https://api.github.com/users/yj-soh/events{/privacy}","received_events_url":"https://api.github.com/users/yj-soh/received_events","type":"User","site_admin":false},"body":"Abstract these into a method/constructor in FeedbackSessionForm to set the default values. ","created_at":"2015-06-30T08:22:47Z","updated_at":"2015-06-30T08:22:47Z","html_url":"https://github.com/TEAMMATES/repo/pull/3736#discussion_r33550201","pull_request_url":"https://api.github.com/repos/TEAMMATES/repo/pulls/3736","_links":{"self":{"href":"https://api.github.com/repos/TEAMMATES/repo/pulls/comments/33550201"},"html":{"href":"https://github.com/TEAMMATES/repo/pull/3736#discussion_r33550201"},"pull_request":{"href":"https://api.github.com/repos/TEAMMATES/repo/pulls/3736"}}},"pull_request":{"url":"https://api.github.com/repos/TEAMMATES/repo/pulls/3736","id":37764060,"html_url":"https://github.com/TEAMMATES/repo/pull/3736","diff_url":"https://github.com/TEAMMATES/repo/pull/3736.diff","patch_url":"https://github.com/TEAMMATES/repo/pull/3736.patch","issue_url":"https://api.github.com/repos/TEAMMATES/repo/issues/3736","number":3736,"state":"open","locked":false,"title":"JSTL - InstructorFeedbackEdit","user":{"login":"kanghj","id":2216119,"avatar_url":"https://avatars.githubusercontent.com/u/2216119?v=3","gravatar_id":"","url":"https://api.github.com/users/kanghj","html_url":"https://github.com/kanghj","followers_url":"https://api.github.com/users/kanghj/followers","following_url":"https://api.github.com/users/kanghj/following{/other_user}","gists_url":"https://api.github.com/users/kanghj/gists{/gist_id}","starred_url":"https://api.github.com/users/kanghj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kanghj/subscriptions","organizations_url":"https://api.github.com/users/kanghj/orgs","repos_url":"https://api.github.com/users/kanghj/repos","events_url":"https://api.github.com/users/kanghj/events{/privacy}","received_events_url":"https://api.github.com/users/kanghj/received_events","type":"User","site_admin":false},"body":"Will make the modifications to the test html in another pr, when the consistency issues have been fixed.\r\n\r\n@yj-soh","created_at":"2015-06-16T06:45:34Z","updated_at":"2015-06-30T08:22:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3b1b0c8945008c903e8e9502bdb9f3f5ccc1d305","assignee":{"login":"yj-soh","id":8586080,"avatar_url":"https://avatars.githubusercontent.com/u/8586080?v=3","gravatar_id":"","url":"https://api.github.com/users/yj-soh","html_url":"https://github.com/yj-soh","followers_url":"https://api.github.com/users/yj-soh/followers","following_url":"https://api.github.com/users/yj-soh/following{/other_user}","gists_url":"https://api.github.com/users/yj-soh/gists{/gist_id}","starred_url":"https://api.github.com/users/yj-soh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yj-soh/subscriptions","organizations_url":"https://api.github.com/users/yj-soh/orgs","repos_url":"https://api.github.com/users/yj-soh/repos","events_url":"https://api.github.com/users/yj-soh/events{/privacy}","received_events_url":"https://api.github.com/users/yj-soh/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/TEAMMATES/repo/pulls/3736/commits","review_comments_url":"https://api.github.com/repos/TEAMMATES/repo/pulls/3736/comments","review_comment_url":"https://api.github.com/repos/TEAMMATES/repo/pulls/comments{/number}","comments_url":"https://api.github.com/repos/TEAMMATES/repo/issues/3736/comments","statuses_url":"https://api.github.com/repos/TEAMMATES/repo/statuses/650f46c68c5bacee67fd3c9078f2c2b9b01c6df2","head":{"label":"TEAMMATES:JSTL-FeedbackEdit","ref":"JSTL-FeedbackEdit","sha":"650f46c68c5bacee67fd3c9078f2c2b9b01c6df2","user":{"login":"TEAMMATES","id":7374810,"avatar_url":"https://avatars.githubusercontent.com/u/7374810?v=3","gravatar_id":"","url":"https://api.github.com/users/TEAMMATES","html_url":"https://github.com/TEAMMATES","followers_url":"https://api.github.com/users/TEAMMATES/followers","following_url":"https://api.github.com/users/TEAMMATES/following{/other_user}","gists_url":"https://api.github.com/users/TEAMMATES/gists{/gist_id}","starred_url":"https://api.github.com/users/TEAMMATES/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TEAMMATES/subscriptions","organizations_url":"https://api.github.com/users/TEAMMATES/orgs","repos_url":"https://api.github.com/users/TEAMMATES/repos","events_url":"https://api.github.com/users/TEAMMATES/events{/privacy}","received_events_url":"https://api.github.com/users/TEAMMATES/received_events","type":"Organization","site_admin":false},"repo":{"id":19369035,"name":"repo","full_name":"TEAMMATES/repo","owner":{"login":"TEAMMATES","id":7374810,"avatar_url":"https://avatars.githubusercontent.com/u/7374810?v=3","gravatar_id":"","url":"https://api.github.com/users/TEAMMATES","html_url":"https://github.com/TEAMMATES","followers_url":"https://api.github.com/users/TEAMMATES/followers","following_url":"https://api.github.com/users/TEAMMATES/following{/other_user}","gists_url":"https://api.github.com/users/TEAMMATES/gists{/gist_id}","starred_url":"https://api.github.com/users/TEAMMATES/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TEAMMATES/subscriptions","organizations_url":"https://api.github.com/users/TEAMMATES/orgs","repos_url":"https://api.github.com/users/TEAMMATES/repos","events_url":"https://api.github.com/users/TEAMMATES/events{/privacy}","received_events_url":"https://api.github.com/users/TEAMMATES/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/TEAMMATES/repo","description":"This is the project website for the TEAMMATES feedback management tool for education","fork":false,"url":"https://api.github.com/repos/TEAMMATES/repo","forks_url":"https://api.github.com/repos/TEAMMATES/repo/forks","keys_url":"https://api.github.com/repos/TEAMMATES/repo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/TEAMMATES/repo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/TEAMMATES/repo/teams","hooks_url":"https://api.github.com/repos/TEAMMATES/repo/hooks","issue_events_url":"https://api.github.com/repos/TEAMMATES/repo/issues/events{/number}","events_url":"https://api.github.com/repos/TEAMMATES/repo/events","assignees_url":"https://api.github.com/repos/TEAMMATES/repo/assignees{/user}","branches_url":"https://api.github.com/repos/TEAMMATES/repo/branches{/branch}","tags_url":"https://api.github.com/repos/TEAMMATES/repo/tags","blobs_url":"https://api.github.com/repos/TEAMMATES/repo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/TEAMMATES/repo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/TEAMMATES/repo/git/refs{/sha}","trees_url":"https://api.github.com/repos/TEAMMATES/repo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/TEAMMATES/repo/statuses/{sha}","languages_url":"https://api.github.com/repos/TEAMMATES/repo/languages","stargazers_url":"https://api.github.com/repos/TEAMMATES/repo/stargazers","contributors_url":"https://api.github.com/repos/TEAMMATES/repo/contributors","subscribers_url":"https://api.github.com/repos/TEAMMATES/repo/subscribers","subscription_url":"https://api.github.com/repos/TEAMMATES/repo/subscription","commits_url":"https://api.github.com/repos/TEAMMATES/repo/commits{/sha}","git_commits_url":"https://api.github.com/repos/TEAMMATES/repo/git/commits{/sha}","comments_url":"https://api.github.com/repos/TEAMMATES/repo/comments{/number}","issue_comment_url":"https://api.github.com/repos/TEAMMATES/repo/issues/comments{/number}","contents_url":"https://api.github.com/repos/TEAMMATES/repo/contents/{+path}","compare_url":"https://api.github.com/repos/TEAMMATES/repo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/TEAMMATES/repo/merges","archive_url":"https://api.github.com/repos/TEAMMATES/repo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/TEAMMATES/repo/downloads","issues_url":"https://api.github.com/repos/TEAMMATES/repo/issues{/number}","pulls_url":"https://api.github.com/repos/TEAMMATES/repo/pulls{/number}","milestones_url":"https://api.github.com/repos/TEAMMATES/repo/milestones{/number}","notifications_url":"https://api.github.com/repos/TEAMMATES/repo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/TEAMMATES/repo/labels{/name}","releases_url":"https://api.github.com/repos/TEAMMATES/repo/releases{/id}","created_at":"2014-05-02T07:43:00Z","updated_at":"2015-06-14T23:15:10Z","pushed_at":"2015-06-30T08:00:50Z","git_url":"git://github.com/TEAMMATES/repo.git","ssh_url":"git@github.com:TEAMMATES/repo.git","clone_url":"https://github.com/TEAMMATES/repo.git","svn_url":"https://github.com/TEAMMATES/repo","homepage":"http://teammatesv4.appspot.com/","size":153321,"stargazers_count":44,"watchers_count":44,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":124,"mirror_url":null,"open_issues_count":436,"forks":124,"open_issues":436,"watchers":44,"default_branch":"master"}},"base":{"label":"TEAMMATES:JSTL-Dev","ref":"JSTL-Dev","sha":"c42c29e3df060d76efcd34afd99f4fe3b000aa02","user":{"login":"TEAMMATES","id":7374810,"avatar_url":"https://avatars.githubusercontent.com/u/7374810?v=3","gravatar_id":"","url":"https://api.github.com/users/TEAMMATES","html_url":"https://github.com/TEAMMATES","followers_url":"https://api.github.com/users/TEAMMATES/followers","following_url":"https://api.github.com/users/TEAMMATES/following{/other_user}","gists_url":"https://api.github.com/users/TEAMMATES/gists{/gist_id}","starred_url":"https://api.github.com/users/TEAMMATES/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TEAMMATES/subscriptions","organizations_url":"https://api.github.com/users/TEAMMATES/orgs","repos_url":"https://api.github.com/users/TEAMMATES/repos","events_url":"https://api.github.com/users/TEAMMATES/events{/privacy}","received_events_url":"https://api.github.com/users/TEAMMATES/received_events","type":"Organization","site_admin":false},"repo":{"id":19369035,"name":"repo","full_name":"TEAMMATES/repo","owner":{"login":"TEAMMATES","id":7374810,"avatar_url":"https://avatars.githubusercontent.com/u/7374810?v=3","gravatar_id":"","url":"https://api.github.com/users/TEAMMATES","html_url":"https://github.com/TEAMMATES","followers_url":"https://api.github.com/users/TEAMMATES/followers","following_url":"https://api.github.com/users/TEAMMATES/following{/other_user}","gists_url":"https://api.github.com/users/TEAMMATES/gists{/gist_id}","starred_url":"https://api.github.com/users/TEAMMATES/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TEAMMATES/subscriptions","organizations_url":"https://api.github.com/users/TEAMMATES/orgs","repos_url":"https://api.github.com/users/TEAMMATES/repos","events_url":"https://api.github.com/users/TEAMMATES/events{/privacy}","received_events_url":"https://api.github.com/users/TEAMMATES/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/TEAMMATES/repo","description":"This is the project website for the TEAMMATES feedback management tool for education","fork":false,"url":"https://api.github.com/repos/TEAMMATES/repo","forks_url":"https://api.github.com/repos/TEAMMATES/repo/forks","keys_url":"https://api.github.com/repos/TEAMMATES/repo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/TEAMMATES/repo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/TEAMMATES/repo/teams","hooks_url":"https://api.github.com/repos/TEAMMATES/repo/hooks","issue_events_url":"https://api.github.com/repos/TEAMMATES/repo/issues/events{/number}","events_url":"https://api.github.com/repos/TEAMMATES/repo/events","assignees_url":"https://api.github.com/repos/TEAMMATES/repo/assignees{/user}","branches_url":"https://api.github.com/repos/TEAMMATES/repo/branches{/branch}","tags_url":"https://api.github.com/repos/TEAMMATES/repo/tags","blobs_url":"https://api.github.com/repos/TEAMMATES/repo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/TEAMMATES/repo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/TEAMMATES/repo/git/refs{/sha}","trees_url":"https://api.github.com/repos/TEAMMATES/repo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/TEAMMATES/repo/statuses/{sha}","languages_url":"https://api.github.com/repos/TEAMMATES/repo/languages","stargazers_url":"https://api.github.com/repos/TEAMMATES/repo/stargazers","contributors_url":"https://api.github.com/repos/TEAMMATES/repo/contributors","subscribers_url":"https://api.github.com/repos/TEAMMATES/repo/subscribers","subscription_url":"https://api.github.com/repos/TEAMMATES/repo/subscription","commits_url":"https://api.github.com/repos/TEAMMATES/repo/commits{/sha}","git_commits_url":"https://api.github.com/repos/TEAMMATES/repo/git/commits{/sha}","comments_url":"https://api.github.com/repos/TEAMMATES/repo/comments{/number}","issue_comment_url":"https://api.github.com/repos/TEAMMATES/repo/issues/comments{/number}","contents_url":"https://api.github.com/repos/TEAMMATES/repo/contents/{+path}","compare_url":"https://api.github.com/repos/TEAMMATES/repo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/TEAMMATES/repo/merges","archive_url":"https://api.github.com/repos/TEAMMATES/repo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/TEAMMATES/repo/downloads","issues_url":"https://api.github.com/repos/TEAMMATES/repo/issues{/number}","pulls_url":"https://api.github.com/repos/TEAMMATES/repo/pulls{/number}","milestones_url":"https://api.github.com/repos/TEAMMATES/repo/milestones{/number}","notifications_url":"https://api.github.com/repos/TEAMMATES/repo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/TEAMMATES/repo/labels{/name}","releases_url":"https://api.github.com/repos/TEAMMATES/repo/releases{/id}","created_at":"2014-05-02T07:43:00Z","updated_at":"2015-06-14T23:15:10Z","pushed_at":"2015-06-30T08:00:50Z","git_url":"git://github.com/TEAMMATES/repo.git","ssh_url":"git@github.com:TEAMMATES/repo.git","clone_url":"https://github.com/TEAMMATES/repo.git","svn_url":"https://github.com/TEAMMATES/repo","homepage":"http://teammatesv4.appspot.com/","size":153321,"stargazers_count":44,"watchers_count":44,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":124,"mirror_url":null,"open_issues_count":436,"forks":124,"open_issues":436,"watchers":44,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/TEAMMATES/repo/pulls/3736"},"html":{"href":"https://github.com/TEAMMATES/repo/pull/3736"},"issue":{"href":"https://api.github.com/repos/TEAMMATES/repo/issues/3736"},"comments":{"href":"https://api.github.com/repos/TEAMMATES/repo/issues/3736/comments"},"review_comments":{"href":"https://api.github.com/repos/TEAMMATES/repo/pulls/3736/comments"},"review_comment":{"href":"https://api.github.com/repos/TEAMMATES/repo/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/TEAMMATES/repo/pulls/3736/commits"},"statuses":{"href":"https://api.github.com/repos/TEAMMATES/repo/statuses/650f46c68c5bacee67fd3c9078f2c2b9b01c6df2"}}}}