{"action":"created","comment":{"url":"https://api.github.com/repos/aces/Loris/pulls/comments/186842294","pull_request_review_id":118502832,"id":186842294,"diff_hunk":"@@ -23,96 +30,210 @@\n \n $data = stream_get_contents(STDIN);\n \n-$instruments=explode(\"{-@-}\",trim($data));\n+$instruments = explode(\"{-@-}\", trim($data));\n+\n+$tblCount       = 0;\n+$parameterCount = 0;\n \n-$tblCount=0;\n-$parameterCount=0;\n $pages = array();\n-foreach($instruments AS $instrument){\n-    $catId=\"\";\n-    $items=explode(\"\\n\",trim($instrument));\n-    foreach($items AS $item){\n-        $paramId=\"\";\n-        $bits=explode(\"{@}\",trim($item));\n-        if(preg_match(\"/Examiner[0-9]*/\" , $bits[1])){\n+\n+$sql_query_statement  = \"\";\n+$sql_query_table_name = \"\";\n+$sql_query_columns    = array();\n+\n+foreach ($instruments AS $instrument) {\n+\n+    $catId = \"\";\n+    $items = explode(\"\\n\", trim($instrument));\n+\n+    foreach ($items AS $item) {\n+        $paramId = \"\";\n+        $bits    = explode(\"{@}\", trim($item));\n+\n+        if (preg_match(\"/Examiner[0-9]*/\", $bits[1])) {\n             continue;\n         }\n-        switch($bits[0]){\n+\n+        switch($bits[0]) {\n             //generate the CREATE TABLE syntax\n-            case \"table\":\n-                $tablename = $bits[1];\n-\n-                $filename=\"../project/tables_sql/\".$bits[1].\".sql\";\n-                $output=\"CREATE TABLE `$bits[1]` (\\n\";\n-                $output.=\"`CommentID` varchar(255) NOT NULL default '',\n-                          `UserID` varchar(255) default NULL,\n-                          `Examiner` varchar(255) default NULL,\n-                          `Testdate` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n-                          `Data_entry_completion_status` enum('Incomplete','Complete') NOT NULL default 'Incomplete',\\n\";\n+        case \"table\":\n+            $tablename            = $bits[1];\n+            $sql_query_table_name = sanitizeSqlString($bits[1]);\n+            $filename = \"../project/tables_sql/\".$bits[1].\".sql\";\n+            $output   = \"CREATE TABLE `$bits[1]` (\\n\";\n+            $output  .= \"`CommentID` varchar(255) NOT NULL default '',\\n\"\n+                        .\"`UserID` varchar(255) default NULL,\\n\"\n+                        .\"`Examiner` varchar(255) default NULL,\\n\"\n+                        .\"`Testdate` timestamp DEFAULT CURRENT_TIMESTAMP ON \"\n+                        .\"UPDATE CURRENT_TIMESTAMP,\\n\"\n+                        .\"`Data_entry_completion_status` \"\n+                        .\"enum('Incomplete','Complete') \"\n+                        .\"NOT NULL default 'Incomplete',\\n\";\n+            $sql_query_statement = \"CREATE TABLE `$sql_query_table_name` (\\n\";\n+            // created first five query entries.\n+            array_push(\n+                $sql_query_columns,\n+                \"`CommentID` varchar(255) NOT NULL default '',\\n\"\n+            );\n+            array_push(\n+                $sql_query_columns,\n+                \"`UserID` varchar(255) default NULL,\\n\"\n+            );\n+            array_push(\n+                $sql_query_columns,\n+                \"`Examiner` varchar(255) default NULL,\\n\"\n+            );\n+            array_push(\n+                $sql_query_columns,\n+                \"`Testdate` timestamp DEFAULT CURRENT_TIMESTAMP \n+                ON UPDATE CURRENT_TIMESTAMP,\\n\"\n+            );\n+            array_push(\n+                $sql_query_columns,\n+                \"`Data_entry_completion_status` enum('Incomplete',\n+                'Complete') NOT NULL default 'Incomplete',\\n\"\n+            );\n             break;\n-            case \"page\":\n-                $pages[] = $bits[2];\n-                continue;\n-\n-            //no SQL need be generated.\n-            case \"title\":\n-                $title = $bits[1];\n-            case \"header\":\n-                continue;\n+        case \"page\":\n+            $pages[] = $bits[2];\n+            continue;\n+        //no SQL need be generated.\n+        case \"title\":\n+            $title = $bits[1];\n+        case \"header\":\n+            continue;\n             break;\n-\n-            //generate specific column definitions for specific types of HTML elements\n-            default:\n-                if($bits[1] == \"\") {\n-                    continue;\n-                }\n-                if($bits[0]==\"select\"){\n-                    $bits[0]=enumizeOptions($bits[3], isset($tablename) ? $tablename : null, $bits[1]);\n-                } else if($bits[0]==\"selectmultiple\"){\n-                    $bits[0]=\"varchar(255)\";\n-                } else if($bits[0]==\"textarea\"){\n-                    $bits[0]=\"text\";\n-                } else if($bits[0]==\"text\"){\n-                    $bits[0]=\"varchar(255)\";\n-                } else if($bits[0]==\"checkbox\") {\n-                    $bits[0]=\"varchar(255)\";\n-                } else if ($bits[0]==\"static\") {\n-                    $bits[0]=\"varchar(255)\";\n-                }\n-\n-                $bits[2]=htmlspecialchars($bits[2]);\n-                $output.=\"`$bits[1]` $bits[0] default NULL,\\n\";\n+        //generate specific column definitions for specific types of HTML elements\n+        default:\n+            if ($bits[1] == \"\") {\n+                continue;\n+            }\n+            if ($bits[0]==\"select\") {\n+                $bits[0] = enumizeOptions(\n+                    $bits[3],\n+                    isset($tablename)\n+                    ?? null,\n+                    $bits[1]\n+                );\n+            } else if ($bits[0]==\"selectmultiple\") {\n+                $bits[0] = \"varchar(255)\";\n+            } else if ($bits[0]==\"textarea\") {\n+                $bits[0] = \"text\";\n+            } else if ($bits[0]==\"text\") {\n+                $bits[0] = \"varchar(255)\";\n+            } else if ($bits[0]==\"checkbox\") {\n+                $bits[0] = \"varchar(255)\";\n+            } else if ($bits[0]==\"static\") {\n+                $bits[0] = \"varchar(255)\";\n+            } else {\n+                // Safety SQL injection prevention.\n+                $bits[0] = sanitizeSqlString($bits[0]);\n+            }\n+            $bits[2]     = htmlspecialchars($bits[2]);\n+            $output     .= \"`$bits[1]` $bits[0] default NULL,\\n\";\n+            $column_name = sanitizeSqlString($bits[1]);\n+            array_push(\n+                $sql_query_columns,\n+                \"`$column_name` $bits[0] default NULL,\\n\"\n+            );\n         }\n-\n     }\n-    $output.=\"PRIMARY KEY  (`CommentID`)\\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\\n\";\n-    print \"Filename: $filename\\n\";\n-    $fp=fopen($filename, \"w\");\n-    fwrite($fp, $output);\n-    fwrite($fp, \"REPLACE INTO test_names (Test_name, Full_name, Sub_group) VALUES ('$tablename', '$title', 1);\\n\");\n-    foreach($pages as $pageNo => $page) {\n-        fwrite($fp, \"INSERT INTO instrument_subtests (Test_name, Subtest_name, Description) VALUES ('$tablename', '\" . $tablename  . \"_page\" . ($pageNo+1) . \"', '$page');\\n\");\n \n+    $output .= \"PRIMARY KEY  (`CommentID`)\\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\\n\";\n+    $fp      = fopen($filename, \"w\");\n+    fwrite($fp, $output);\n+    fwrite(\n+        $fp,\n+        \"REPLACE INTO test_names (Test_name, Full_name, Sub_group) \"\n+        .\"VALUES ('$tablename', '$title', 1);\\n\"\n+    );\n+\n+    foreach ($pages as $pageNo => $page) {","path":"tools/generate_tables_sql_and_testNames.php","position":212,"original_position":212,"commit_id":"d7087b8c6984f5f57fff6917a2762e61448186bf","original_commit_id":"d7087b8c6984f5f57fff6917a2762e61448186bf","user":{"login":"johnsaigle","id":4022790,"avatar_url":"https://avatars0.githubusercontent.com/u/4022790?v=4","gravatar_id":"","url":"https://api.github.com/users/johnsaigle","html_url":"https://github.com/johnsaigle","followers_url":"https://api.github.com/users/johnsaigle/followers","following_url":"https://api.github.com/users/johnsaigle/following{/other_user}","gists_url":"https://api.github.com/users/johnsaigle/gists{/gist_id}","starred_url":"https://api.github.com/users/johnsaigle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnsaigle/subscriptions","organizations_url":"https://api.github.com/users/johnsaigle/orgs","repos_url":"https://api.github.com/users/johnsaigle/repos","events_url":"https://api.github.com/users/johnsaigle/events{/privacy}","received_events_url":"https://api.github.com/users/johnsaigle/received_events","type":"User","site_admin":false},"body":"A comment would be nice here explaining that this writes a record of the intended changes to a file but the file is not actually sourced directly (as was the previous behaviour)","created_at":"2018-05-08T19:34:15Z","updated_at":"2018-05-08T19:34:15Z","html_url":"https://github.com/aces/Loris/pull/3647#discussion_r186842294","pull_request_url":"https://api.github.com/repos/aces/Loris/pulls/3647","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/aces/Loris/pulls/comments/186842294"},"html":{"href":"https://github.com/aces/Loris/pull/3647#discussion_r186842294"},"pull_request":{"href":"https://api.github.com/repos/aces/Loris/pulls/3647"}}},"pull_request":{"url":"https://api.github.com/repos/aces/Loris/pulls/3647","id":186710180,"html_url":"https://github.com/aces/Loris/pull/3647","diff_url":"https://github.com/aces/Loris/pull/3647.diff","patch_url":"https://github.com/aces/Loris/pull/3647.patch","issue_url":"https://api.github.com/repos/aces/Loris/issues/3647","number":3647,"state":"open","locked":false,"title":"SQL injection when creating instrument by linst form","user":{"login":"intralizee","id":16293415,"avatar_url":"https://avatars3.githubusercontent.com/u/16293415?v=4","gravatar_id":"","url":"https://api.github.com/users/intralizee","html_url":"https://github.com/intralizee","followers_url":"https://api.github.com/users/intralizee/followers","following_url":"https://api.github.com/users/intralizee/following{/other_user}","gists_url":"https://api.github.com/users/intralizee/gists{/gist_id}","starred_url":"https://api.github.com/users/intralizee/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/intralizee/subscriptions","organizations_url":"https://api.github.com/users/intralizee/orgs","repos_url":"https://api.github.com/users/intralizee/repos","events_url":"https://api.github.com/users/intralizee/events{/privacy}","received_events_url":"https://api.github.com/users/intralizee/received_events","type":"User","site_admin":false},"body":"This pull request `SQL injection possible by `superadmin` users via a malicious LINST form`. It `uses prepared statements, sanitizes the string for creating a table and checks if table already exists.`.\r\n\r\nSee also: `Bug #14390`\r\n","created_at":"2018-05-08T17:57:34Z","updated_at":"2018-05-08T19:34:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":{"login":"driusan","id":498329,"avatar_url":"https://avatars0.githubusercontent.com/u/498329?v=4","gravatar_id":"","url":"https://api.github.com/users/driusan","html_url":"https://github.com/driusan","followers_url":"https://api.github.com/users/driusan/followers","following_url":"https://api.github.com/users/driusan/following{/other_user}","gists_url":"https://api.github.com/users/driusan/gists{/gist_id}","starred_url":"https://api.github.com/users/driusan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/driusan/subscriptions","organizations_url":"https://api.github.com/users/driusan/orgs","repos_url":"https://api.github.com/users/driusan/repos","events_url":"https://api.github.com/users/driusan/events{/privacy}","received_events_url":"https://api.github.com/users/driusan/received_events","type":"User","site_admin":false},"assignees":[{"login":"driusan","id":498329,"avatar_url":"https://avatars0.githubusercontent.com/u/498329?v=4","gravatar_id":"","url":"https://api.github.com/users/driusan","html_url":"https://github.com/driusan","followers_url":"https://api.github.com/users/driusan/followers","following_url":"https://api.github.com/users/driusan/following{/other_user}","gists_url":"https://api.github.com/users/driusan/gists{/gist_id}","starred_url":"https://api.github.com/users/driusan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/driusan/subscriptions","organizations_url":"https://api.github.com/users/driusan/orgs","repos_url":"https://api.github.com/users/driusan/repos","events_url":"https://api.github.com/users/driusan/events{/privacy}","received_events_url":"https://api.github.com/users/driusan/received_events","type":"User","site_admin":false},{"login":"johnsaigle","id":4022790,"avatar_url":"https://avatars0.githubusercontent.com/u/4022790?v=4","gravatar_id":"","url":"https://api.github.com/users/johnsaigle","html_url":"https://github.com/johnsaigle","followers_url":"https://api.github.com/users/johnsaigle/followers","following_url":"https://api.github.com/users/johnsaigle/following{/other_user}","gists_url":"https://api.github.com/users/johnsaigle/gists{/gist_id}","starred_url":"https://api.github.com/users/johnsaigle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnsaigle/subscriptions","organizations_url":"https://api.github.com/users/johnsaigle/orgs","repos_url":"https://api.github.com/users/johnsaigle/repos","events_url":"https://api.github.com/users/johnsaigle/events{/privacy}","received_events_url":"https://api.github.com/users/johnsaigle/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":152305414,"url":"https://api.github.com/repos/aces/Loris/labels/Bug%20Fix","name":"Bug Fix","color":"f7c6c7","default":false},{"id":152314516,"url":"https://api.github.com/repos/aces/Loris/labels/Cleanup","name":"Cleanup","color":"006b75","default":false},{"id":153844577,"url":"https://api.github.com/repos/aces/Loris/labels/SQL","name":"SQL","color":"bfe5bf","default":false},{"id":708895841,"url":"https://api.github.com/repos/aces/Loris/labels/[branch]%20bugfix","name":"[branch] bugfix","color":"cc9966","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/aces/Loris/pulls/3647/commits","review_comments_url":"https://api.github.com/repos/aces/Loris/pulls/3647/comments","review_comment_url":"https://api.github.com/repos/aces/Loris/pulls/comments{/number}","comments_url":"https://api.github.com/repos/aces/Loris/issues/3647/comments","statuses_url":"https://api.github.com/repos/aces/Loris/statuses/d7087b8c6984f5f57fff6917a2762e61448186bf","head":{"label":"intralizee:generate_tables_sql_and_testNames_fix","ref":"generate_tables_sql_and_testNames_fix","sha":"d7087b8c6984f5f57fff6917a2762e61448186bf","user":{"login":"intralizee","id":16293415,"avatar_url":"https://avatars3.githubusercontent.com/u/16293415?v=4","gravatar_id":"","url":"https://api.github.com/users/intralizee","html_url":"https://github.com/intralizee","followers_url":"https://api.github.com/users/intralizee/followers","following_url":"https://api.github.com/users/intralizee/following{/other_user}","gists_url":"https://api.github.com/users/intralizee/gists{/gist_id}","starred_url":"https://api.github.com/users/intralizee/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/intralizee/subscriptions","organizations_url":"https://api.github.com/users/intralizee/orgs","repos_url":"https://api.github.com/users/intralizee/repos","events_url":"https://api.github.com/users/intralizee/events{/privacy}","received_events_url":"https://api.github.com/users/intralizee/received_events","type":"User","site_admin":false},"repo":{"id":130723427,"name":"Loris","full_name":"intralizee/Loris","owner":{"login":"intralizee","id":16293415,"avatar_url":"https://avatars3.githubusercontent.com/u/16293415?v=4","gravatar_id":"","url":"https://api.github.com/users/intralizee","html_url":"https://github.com/intralizee","followers_url":"https://api.github.com/users/intralizee/followers","following_url":"https://api.github.com/users/intralizee/following{/other_user}","gists_url":"https://api.github.com/users/intralizee/gists{/gist_id}","starred_url":"https://api.github.com/users/intralizee/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/intralizee/subscriptions","organizations_url":"https://api.github.com/users/intralizee/orgs","repos_url":"https://api.github.com/users/intralizee/repos","events_url":"https://api.github.com/users/intralizee/events{/privacy}","received_events_url":"https://api.github.com/users/intralizee/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/intralizee/Loris","description":"LORIS is a web-accessible database solution for longitudinal multi-site studies.","fork":true,"url":"https://api.github.com/repos/intralizee/Loris","forks_url":"https://api.github.com/repos/intralizee/Loris/forks","keys_url":"https://api.github.com/repos/intralizee/Loris/keys{/key_id}","collaborators_url":"https://api.github.com/repos/intralizee/Loris/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/intralizee/Loris/teams","hooks_url":"https://api.github.com/repos/intralizee/Loris/hooks","issue_events_url":"https://api.github.com/repos/intralizee/Loris/issues/events{/number}","events_url":"https://api.github.com/repos/intralizee/Loris/events","assignees_url":"https://api.github.com/repos/intralizee/Loris/assignees{/user}","branches_url":"https://api.github.com/repos/intralizee/Loris/branches{/branch}","tags_url":"https://api.github.com/repos/intralizee/Loris/tags","blobs_url":"https://api.github.com/repos/intralizee/Loris/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/intralizee/Loris/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/intralizee/Loris/git/refs{/sha}","trees_url":"https://api.github.com/repos/intralizee/Loris/git/trees{/sha}","statuses_url":"https://api.github.com/repos/intralizee/Loris/statuses/{sha}","languages_url":"https://api.github.com/repos/intralizee/Loris/languages","stargazers_url":"https://api.github.com/repos/intralizee/Loris/stargazers","contributors_url":"https://api.github.com/repos/intralizee/Loris/contributors","subscribers_url":"https://api.github.com/repos/intralizee/Loris/subscribers","subscription_url":"https://api.github.com/repos/intralizee/Loris/subscription","commits_url":"https://api.github.com/repos/intralizee/Loris/commits{/sha}","git_commits_url":"https://api.github.com/repos/intralizee/Loris/git/commits{/sha}","comments_url":"https://api.github.com/repos/intralizee/Loris/comments{/number}","issue_comment_url":"https://api.github.com/repos/intralizee/Loris/issues/comments{/number}","contents_url":"https://api.github.com/repos/intralizee/Loris/contents/{+path}","compare_url":"https://api.github.com/repos/intralizee/Loris/compare/{base}...{head}","merges_url":"https://api.github.com/repos/intralizee/Loris/merges","archive_url":"https://api.github.com/repos/intralizee/Loris/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/intralizee/Loris/downloads","issues_url":"https://api.github.com/repos/intralizee/Loris/issues{/number}","pulls_url":"https://api.github.com/repos/intralizee/Loris/pulls{/number}","milestones_url":"https://api.github.com/repos/intralizee/Loris/milestones{/number}","notifications_url":"https://api.github.com/repos/intralizee/Loris/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/intralizee/Loris/labels{/name}","releases_url":"https://api.github.com/repos/intralizee/Loris/releases{/id}","deployments_url":"https://api.github.com/repos/intralizee/Loris/deployments","created_at":"2018-04-23T16:08:30Z","updated_at":"2018-04-23T18:35:57Z","pushed_at":"2018-05-08T18:28:03Z","git_url":"git://github.com/intralizee/Loris.git","ssh_url":"git@github.com:intralizee/Loris.git","clone_url":"https://github.com/intralizee/Loris.git","svn_url":"https://github.com/intralizee/Loris","homepage":"","size":76159,"stargazers_count":1,"watchers_count":1,"language":"PHP","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0"},"forks":0,"open_issues":0,"watchers":1,"default_branch":"minor"}},"base":{"label":"aces:bugfix","ref":"bugfix","sha":"9bd5b477ff61622bd6393aa2be3f426d9d18f40e","user":{"login":"aces","id":472868,"avatar_url":"https://avatars2.githubusercontent.com/u/472868?v=4","gravatar_id":"","url":"https://api.github.com/users/aces","html_url":"https://github.com/aces","followers_url":"https://api.github.com/users/aces/followers","following_url":"https://api.github.com/users/aces/following{/other_user}","gists_url":"https://api.github.com/users/aces/gists{/gist_id}","starred_url":"https://api.github.com/users/aces/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aces/subscriptions","organizations_url":"https://api.github.com/users/aces/orgs","repos_url":"https://api.github.com/users/aces/repos","events_url":"https://api.github.com/users/aces/events{/privacy}","received_events_url":"https://api.github.com/users/aces/received_events","type":"Organization","site_admin":false},"repo":{"id":1125630,"name":"Loris","full_name":"aces/Loris","owner":{"login":"aces","id":472868,"avatar_url":"https://avatars2.githubusercontent.com/u/472868?v=4","gravatar_id":"","url":"https://api.github.com/users/aces","html_url":"https://github.com/aces","followers_url":"https://api.github.com/users/aces/followers","following_url":"https://api.github.com/users/aces/following{/other_user}","gists_url":"https://api.github.com/users/aces/gists{/gist_id}","starred_url":"https://api.github.com/users/aces/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aces/subscriptions","organizations_url":"https://api.github.com/users/aces/orgs","repos_url":"https://api.github.com/users/aces/repos","events_url":"https://api.github.com/users/aces/events{/privacy}","received_events_url":"https://api.github.com/users/aces/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aces/Loris","description":"LORIS is a web-accessible database solution for longitudinal multi-site studies.","fork":false,"url":"https://api.github.com/repos/aces/Loris","forks_url":"https://api.github.com/repos/aces/Loris/forks","keys_url":"https://api.github.com/repos/aces/Loris/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aces/Loris/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aces/Loris/teams","hooks_url":"https://api.github.com/repos/aces/Loris/hooks","issue_events_url":"https://api.github.com/repos/aces/Loris/issues/events{/number}","events_url":"https://api.github.com/repos/aces/Loris/events","assignees_url":"https://api.github.com/repos/aces/Loris/assignees{/user}","branches_url":"https://api.github.com/repos/aces/Loris/branches{/branch}","tags_url":"https://api.github.com/repos/aces/Loris/tags","blobs_url":"https://api.github.com/repos/aces/Loris/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aces/Loris/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aces/Loris/git/refs{/sha}","trees_url":"https://api.github.com/repos/aces/Loris/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aces/Loris/statuses/{sha}","languages_url":"https://api.github.com/repos/aces/Loris/languages","stargazers_url":"https://api.github.com/repos/aces/Loris/stargazers","contributors_url":"https://api.github.com/repos/aces/Loris/contributors","subscribers_url":"https://api.github.com/repos/aces/Loris/subscribers","subscription_url":"https://api.github.com/repos/aces/Loris/subscription","commits_url":"https://api.github.com/repos/aces/Loris/commits{/sha}","git_commits_url":"https://api.github.com/repos/aces/Loris/git/commits{/sha}","comments_url":"https://api.github.com/repos/aces/Loris/comments{/number}","issue_comment_url":"https://api.github.com/repos/aces/Loris/issues/comments{/number}","contents_url":"https://api.github.com/repos/aces/Loris/contents/{+path}","compare_url":"https://api.github.com/repos/aces/Loris/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aces/Loris/merges","archive_url":"https://api.github.com/repos/aces/Loris/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aces/Loris/downloads","issues_url":"https://api.github.com/repos/aces/Loris/issues{/number}","pulls_url":"https://api.github.com/repos/aces/Loris/pulls{/number}","milestones_url":"https://api.github.com/repos/aces/Loris/milestones{/number}","notifications_url":"https://api.github.com/repos/aces/Loris/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aces/Loris/labels{/name}","releases_url":"https://api.github.com/repos/aces/Loris/releases{/id}","deployments_url":"https://api.github.com/repos/aces/Loris/deployments","created_at":"2010-11-30T14:57:57Z","updated_at":"2018-05-05T03:17:48Z","pushed_at":"2018-05-08T18:28:05Z","git_url":"git://github.com/aces/Loris.git","ssh_url":"git@github.com:aces/Loris.git","clone_url":"https://github.com/aces/Loris.git","svn_url":"https://github.com/aces/Loris","homepage":"","size":76311,"stargazers_count":61,"watchers_count":61,"language":"PHP","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":90,"mirror_url":null,"archived":false,"open_issues_count":74,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0"},"forks":90,"open_issues":74,"watchers":61,"default_branch":"minor"}},"_links":{"self":{"href":"https://api.github.com/repos/aces/Loris/pulls/3647"},"html":{"href":"https://github.com/aces/Loris/pull/3647"},"issue":{"href":"https://api.github.com/repos/aces/Loris/issues/3647"},"comments":{"href":"https://api.github.com/repos/aces/Loris/issues/3647/comments"},"review_comments":{"href":"https://api.github.com/repos/aces/Loris/pulls/3647/comments"},"review_comment":{"href":"https://api.github.com/repos/aces/Loris/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/aces/Loris/pulls/3647/commits"},"statuses":{"href":"https://api.github.com/repos/aces/Loris/statuses/d7087b8c6984f5f57fff6917a2762e61448186bf"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"johnsaigle"}}