{"action":"created","comment":{"url":"https://api.github.com/repos/Elgg/Elgg/pulls/comments/59060762","id":59060762,"diff_hunk":"@@ -602,6 +605,356 @@ function elgg_get_inline_url(\\ElggFile $file, $use_cookie = false, $expires = ''\n \treturn $file_svc->getURL();\n }\n \n+/**\n+ \n+ * Returns a file's URL suitable for embedding in a text editor\n+ * We can not use elgg_get_inline_url() for these purposes due to a URL structure bound to user session and file modification time\n+ * This function returns a generic (permanent) URL that will then be resolved to an inline URL whenever requested.\n+ * The behaviour of the embed-icon handler is similar to deprecated mod/file/thumbnail.php\n+ *\n+ * @param \\ElggEntity $entity Entity\n+ * @param string      $size   Size\n+ * @return string\n+ * @since 2.2\n+ */\n+function elgg_get_embed_url(\\ElggEntity $entity, $size) {\n+\treturn elgg_normalize_url(\"embed-icon/$entity->guid/$size\");\n+}\n+\n+/**\n+ * Page handler for /embed-icon/ identifier\n+ * \n+ * @param array $segments URL segments\n+ * @return void\n+ * @access private\n+ * @since 2.2\n+ */\n+function _elgg_filestore_embed_icon_handler($segments) {\n+\n+\t// clear cache-boosting headers set by PHP session\n+\theader_remove('Cache-Control');\n+\theader_remove('Pragma');\n+\theader_remove('Expires');\n+\n+\t$request = _elgg_services()->request;\n+\t$response = new Symfony\\Component\\HttpFoundation\\Response();\n+\t$response->prepare($request);\n+\n+\t$guid = array_shift($segments);\n+\t$size = array_shift($segments);\n+\n+\t$file = get_entity($guid);\n+\tif (!$file instanceof ElggFile) {\n+\t\tif (elgg_entity_exists($guid)) {\n+\t\t\t$response->setStatusCode(403)->setContent('You are not allowed to access this file')->send();\n+\t\t} else {\n+\t\t\t$response->setStatusCode(404)->setContent('File does not exist')->send();\n+\t\t}\n+\t\texit;\n+\t}\n+\n+\t$thumbnail = elgg_get_entity_icon($file, $size);\n+\tif (!$thumbnail->exists()) {\n+\t\t$response->setStatusCode(404)->setContent('Thumbnail doest not exist')->send();\n+\t\texit;\n+\t}\n+\n+\t$if_none_match = $request->headers->get('if_none_match');\n+\tif (!empty($if_none_match)) {\n+\t\t// strip mod_deflate suffixes\n+\t\t$request->headers->set('if_none_match', str_replace('-gzip', '', $if_none_match));\n+\t}\n+\n+\t$filenameonfilestore = $thumbnail->getFilenameOnFilestore();\n+\t$last_updated = filemtime($filenameonfilestore);\n+\t$etag = '\"' . $last_updated . '\"';\n+\t$response->setPublic()->setEtag($etag);\n+\tif ($response->isNotModified($request)) {\n+\t\t$response->send();\n+\t\texit();\n+\t}\n+\n+\t$headers = [\n+\t\t'Content-Type' => (new Elgg\\Filesystem\\MimeTypeDetector())->getType($filenameonfilestore),\n+\t];\n+\t$response = new Symfony\\Component\\HttpFoundation\\BinaryFileResponse($filenameonfilestore, 200, $headers, false, 'inline');\n+\t$response->prepare($request);\n+\n+\t$expires_dt = (new DateTime())->setTimestamp(strtotime('+1 day'));\n+\t$response->setExpires($expires_dt);\n+\n+\t$response->setEtag($etag);\n+\t\n+\t$response->send();\n+\texit;\n+}\n+\n+/**\n+ * Returns a configuration array of icon sizes\n+ *\n+ * @param \\ElggEntity $entity Entity\n+ * @return array\n+ */\n+function elgg_get_icon_sizes(\\ElggEntity $entity = null) {\n+\t$icon_sizes = _elgg_services()->config->get('icon_sizes');\n+\n+\tif (!$entity) {\n+\t\treturn $icon_sizes;\n+\t}\n+\n+\treturn elgg_trigger_plugin_hook('entity:icon:sizes', $entity->getType(), ['entity' => $entity], $icon_sizes);\n+}\n+\n+/**\n+ * Create entity icons from a source file\n+ *\n+ * @param \\ElggEntity      $entity        Entity to own the icons\n+ * @param \\ElggFile|string $file          Source image as an \\ElggFile object, or path to source file, or form input name\n+ * @param int              $x1            Cropping coordinate\n+ * @param int              $y1            Cropping coordinate\n+ * @param int              $x2            Cropping coordinate\n+ * @param int              $y2            Cropping coordinate\n+ * @param bool             $keep_original If true, will create a coopy of $file with an alias _uploaded under /icons/_uploaded.jpg\n+ * @return bool\n+ */\n+function elgg_create_entity_icons(\\ElggEntity $entity, $file = null, $x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0, $keep_original = true) {\n+\n+\tif (!$entity->guid) {\n+\t\telgg_log(__FUNCTION__ . ' only works with saved entities that have a guid', '2.2');\n+\t}\n+\t\n+\t$filename = false;\n+\t$default_mimetype = null;\n+\tif ($file instanceof \\ElggFile) {\n+\t\t$filename = $file->getFilenameOnFilestore();\n+\t\t$default_mimetype = $file->mimetype;\n+\t} else if (is_string($file)) {\n+\t\tif (file_exists($file)) {\n+\t\t\t$filename = $file;\n+\t\t} else {\n+\t\t\t$files = _elgg_services()->request->files;\n+\t\t\tif ($files->has($file)) {\n+\t\t\t\t$file = $files->get($file);\n+\t\t\t\tif ($file instanceof \\Symfony\\Component\\HttpFoundation\\File\\UploadedFile && $file->isValid()) {\n+\t\t\t\t\t$filename = $file->getPathname();\n+\t\t\t\t\t$default_mimetype = $file->getClientMimeType();\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t} else if ($entity instanceof \\ElggFile) {\n+\t\t$filename = $entity->getFilenameOnFilestore();\n+\t\t$keep_original = false;\n+\t}\n+\n+\tif (!$filename || !is_readable($filename)) {\n+\t\telgg_log('Source file passed to ' . __FUNCTION__ . ' is not readable', 'ERROR');\n+\t\treturn false;\n+\t}\n+\n+\t$mimetype = (new \\Elgg\\Filesystem\\MimeTypeDetector())->getType($filename, $default_mimetype);\n+\t$simpletype = elgg_get_file_simple_type($mimetype);\n+\n+\tif ($simpletype !== 'image') {","path":"engine/lib/filestore.php","position":350,"original_position":350,"commit_id":"702766c85d2384f9bc59ea2adda7da38a5a72f94","original_commit_id":"702766c85d2384f9bc59ea2adda7da38a5a72f94","user":{"login":"hypeJunction","id":1202761,"avatar_url":"https://avatars.githubusercontent.com/u/1202761?v=3","gravatar_id":"","url":"https://api.github.com/users/hypeJunction","html_url":"https://github.com/hypeJunction","followers_url":"https://api.github.com/users/hypeJunction/followers","following_url":"https://api.github.com/users/hypeJunction/following{/other_user}","gists_url":"https://api.github.com/users/hypeJunction/gists{/gist_id}","starred_url":"https://api.github.com/users/hypeJunction/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hypeJunction/subscriptions","organizations_url":"https://api.github.com/users/hypeJunction/orgs","repos_url":"https://api.github.com/users/hypeJunction/repos","events_url":"https://api.github.com/users/hypeJunction/events{/privacy}","received_events_url":"https://api.github.com/users/hypeJunction/received_events","type":"User","site_admin":false},"body":"We can trigger a prepare hook here","created_at":"2016-04-08T17:29:35Z","updated_at":"2016-04-08T17:29:35Z","html_url":"https://github.com/Elgg/Elgg/pull/9636#discussion_r59060762","pull_request_url":"https://api.github.com/repos/Elgg/Elgg/pulls/9636","_links":{"self":{"href":"https://api.github.com/repos/Elgg/Elgg/pulls/comments/59060762"},"html":{"href":"https://github.com/Elgg/Elgg/pull/9636#discussion_r59060762"},"pull_request":{"href":"https://api.github.com/repos/Elgg/Elgg/pulls/9636"}}},"pull_request":{"url":"https://api.github.com/repos/Elgg/Elgg/pulls/9636","id":65607793,"html_url":"https://github.com/Elgg/Elgg/pull/9636","diff_url":"https://github.com/Elgg/Elgg/pull/9636.diff","patch_url":"https://github.com/Elgg/Elgg/pull/9636.patch","issue_url":"https://api.github.com/repos/Elgg/Elgg/issues/9636","number":9636,"state":"open","locked":false,"title":"feature(icons): standardized API for handling entity icons","user":{"login":"hypeJunction","id":1202761,"avatar_url":"https://avatars.githubusercontent.com/u/1202761?v=3","gravatar_id":"","url":"https://api.github.com/users/hypeJunction","html_url":"https://github.com/hypeJunction","followers_url":"https://api.github.com/users/hypeJunction/followers","following_url":"https://api.github.com/users/hypeJunction/following{/other_user}","gists_url":"https://api.github.com/users/hypeJunction/gists{/gist_id}","starred_url":"https://api.github.com/users/hypeJunction/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hypeJunction/subscriptions","organizations_url":"https://api.github.com/users/hypeJunction/orgs","repos_url":"https://api.github.com/users/hypeJunction/repos","events_url":"https://api.github.com/users/hypeJunction/events{/privacy}","received_events_url":"https://api.github.com/users/hypeJunction/received_events","type":"User","site_admin":false},"body":"**feature(icons): standardized API for handling entity icons**\r\n\r\nAdds API for working with entity icons:\r\n``elgg_get_icon_sizes()`` to retreive icon_sizes config\r\n``elgg_get_entity_icon()`` to retrieve an icon as an ElggFile object\r\n``elgg_create_entity_icons()`` to generate entity icons\r\n``elgg_clear_entity_icons()`` to clear entity icons\r\n\r\nAll icons now have a predicatable location in ``/icons/$size.jpg`` relative to entity's filestore directory.\r\n\r\nLegacy icons are moved to the new location whenever requested. A symlink is established from the old location to the new location.\r\n\r\nIcons sizes are now configurable via ``\"entity:icon:sizes, $entity_type\"`` hook.\r\n\r\n**feature(embed): adds embed-icon page handler**\r\n\r\nAdds a handler to serve embedded icons. Adds ``elgg_get_embed_url()`` to generate embed URLs\r\n\r\n- [x] Add docs\r\n- [ ] Update `ElggDiskFilestore::getSize` to include all entities owned by container\r\n- [x] Symlink old icon location to the new one","created_at":"2016-04-07T10:33:40Z","updated_at":"2016-04-08T17:29:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"dc0a1529a40f3480d957ee6d6f8992886674d2da","assignee":null,"milestone":{"url":"https://api.github.com/repos/Elgg/Elgg/milestones/70","html_url":"https://github.com/Elgg/Elgg/milestones/Icons/uploads%20revamp","labels_url":"https://api.github.com/repos/Elgg/Elgg/milestones/70/labels","id":856322,"number":70,"title":"Icons/uploads revamp","description":null,"creator":{"login":"ewinslow","id":356564,"avatar_url":"https://avatars.githubusercontent.com/u/356564?v=3","gravatar_id":"","url":"https://api.github.com/users/ewinslow","html_url":"https://github.com/ewinslow","followers_url":"https://api.github.com/users/ewinslow/followers","following_url":"https://api.github.com/users/ewinslow/following{/other_user}","gists_url":"https://api.github.com/users/ewinslow/gists{/gist_id}","starred_url":"https://api.github.com/users/ewinslow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ewinslow/subscriptions","organizations_url":"https://api.github.com/users/ewinslow/orgs","repos_url":"https://api.github.com/users/ewinslow/repos","events_url":"https://api.github.com/users/ewinslow/events{/privacy}","received_events_url":"https://api.github.com/users/ewinslow/received_events","type":"User","site_admin":false},"open_issues":8,"closed_issues":8,"state":"open","created_at":"2014-11-06T18:11:20Z","updated_at":"2016-04-08T12:35:21Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/Elgg/Elgg/pulls/9636/commits","review_comments_url":"https://api.github.com/repos/Elgg/Elgg/pulls/9636/comments","review_comment_url":"https://api.github.com/repos/Elgg/Elgg/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Elgg/Elgg/issues/9636/comments","statuses_url":"https://api.github.com/repos/Elgg/Elgg/statuses/702766c85d2384f9bc59ea2adda7da38a5a72f94","head":{"label":"hypeJunction:icons-api","ref":"icons-api","sha":"702766c85d2384f9bc59ea2adda7da38a5a72f94","user":{"login":"hypeJunction","id":1202761,"avatar_url":"https://avatars.githubusercontent.com/u/1202761?v=3","gravatar_id":"","url":"https://api.github.com/users/hypeJunction","html_url":"https://github.com/hypeJunction","followers_url":"https://api.github.com/users/hypeJunction/followers","following_url":"https://api.github.com/users/hypeJunction/following{/other_user}","gists_url":"https://api.github.com/users/hypeJunction/gists{/gist_id}","starred_url":"https://api.github.com/users/hypeJunction/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hypeJunction/subscriptions","organizations_url":"https://api.github.com/users/hypeJunction/orgs","repos_url":"https://api.github.com/users/hypeJunction/repos","events_url":"https://api.github.com/users/hypeJunction/events{/privacy}","received_events_url":"https://api.github.com/users/hypeJunction/received_events","type":"User","site_admin":false},"repo":{"id":2797801,"name":"Elgg","full_name":"hypeJunction/Elgg","owner":{"login":"hypeJunction","id":1202761,"avatar_url":"https://avatars.githubusercontent.com/u/1202761?v=3","gravatar_id":"","url":"https://api.github.com/users/hypeJunction","html_url":"https://github.com/hypeJunction","followers_url":"https://api.github.com/users/hypeJunction/followers","following_url":"https://api.github.com/users/hypeJunction/following{/other_user}","gists_url":"https://api.github.com/users/hypeJunction/gists{/gist_id}","starred_url":"https://api.github.com/users/hypeJunction/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hypeJunction/subscriptions","organizations_url":"https://api.github.com/users/hypeJunction/orgs","repos_url":"https://api.github.com/users/hypeJunction/repos","events_url":"https://api.github.com/users/hypeJunction/events{/privacy}","received_events_url":"https://api.github.com/users/hypeJunction/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/hypeJunction/Elgg","description":"A social networking engine","fork":true,"url":"https://api.github.com/repos/hypeJunction/Elgg","forks_url":"https://api.github.com/repos/hypeJunction/Elgg/forks","keys_url":"https://api.github.com/repos/hypeJunction/Elgg/keys{/key_id}","collaborators_url":"https://api.github.com/repos/hypeJunction/Elgg/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/hypeJunction/Elgg/teams","hooks_url":"https://api.github.com/repos/hypeJunction/Elgg/hooks","issue_events_url":"https://api.github.com/repos/hypeJunction/Elgg/issues/events{/number}","events_url":"https://api.github.com/repos/hypeJunction/Elgg/events","assignees_url":"https://api.github.com/repos/hypeJunction/Elgg/assignees{/user}","branches_url":"https://api.github.com/repos/hypeJunction/Elgg/branches{/branch}","tags_url":"https://api.github.com/repos/hypeJunction/Elgg/tags","blobs_url":"https://api.github.com/repos/hypeJunction/Elgg/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/hypeJunction/Elgg/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/hypeJunction/Elgg/git/refs{/sha}","trees_url":"https://api.github.com/repos/hypeJunction/Elgg/git/trees{/sha}","statuses_url":"https://api.github.com/repos/hypeJunction/Elgg/statuses/{sha}","languages_url":"https://api.github.com/repos/hypeJunction/Elgg/languages","stargazers_url":"https://api.github.com/repos/hypeJunction/Elgg/stargazers","contributors_url":"https://api.github.com/repos/hypeJunction/Elgg/contributors","subscribers_url":"https://api.github.com/repos/hypeJunction/Elgg/subscribers","subscription_url":"https://api.github.com/repos/hypeJunction/Elgg/subscription","commits_url":"https://api.github.com/repos/hypeJunction/Elgg/commits{/sha}","git_commits_url":"https://api.github.com/repos/hypeJunction/Elgg/git/commits{/sha}","comments_url":"https://api.github.com/repos/hypeJunction/Elgg/comments{/number}","issue_comment_url":"https://api.github.com/repos/hypeJunction/Elgg/issues/comments{/number}","contents_url":"https://api.github.com/repos/hypeJunction/Elgg/contents/{+path}","compare_url":"https://api.github.com/repos/hypeJunction/Elgg/compare/{base}...{head}","merges_url":"https://api.github.com/repos/hypeJunction/Elgg/merges","archive_url":"https://api.github.com/repos/hypeJunction/Elgg/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/hypeJunction/Elgg/downloads","issues_url":"https://api.github.com/repos/hypeJunction/Elgg/issues{/number}","pulls_url":"https://api.github.com/repos/hypeJunction/Elgg/pulls{/number}","milestones_url":"https://api.github.com/repos/hypeJunction/Elgg/milestones{/number}","notifications_url":"https://api.github.com/repos/hypeJunction/Elgg/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/hypeJunction/Elgg/labels{/name}","releases_url":"https://api.github.com/repos/hypeJunction/Elgg/releases{/id}","deployments_url":"https://api.github.com/repos/hypeJunction/Elgg/deployments","created_at":"2011-11-17T18:59:58Z","updated_at":"2015-05-09T06:40:26Z","pushed_at":"2016-04-08T16:52:29Z","git_url":"git://github.com/hypeJunction/Elgg.git","ssh_url":"git@github.com:hypeJunction/Elgg.git","clone_url":"https://github.com/hypeJunction/Elgg.git","svn_url":"https://github.com/hypeJunction/Elgg","homepage":"http://elgg.org","size":43924,"stargazers_count":1,"watchers_count":1,"language":"PHP","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":1,"default_branch":"master"}},"base":{"label":"Elgg:2.x","ref":"2.x","sha":"9adf2ef357d30d53ebe494dc27efa5d826020a23","user":{"login":"Elgg","id":79167,"avatar_url":"https://avatars.githubusercontent.com/u/79167?v=3","gravatar_id":"","url":"https://api.github.com/users/Elgg","html_url":"https://github.com/Elgg","followers_url":"https://api.github.com/users/Elgg/followers","following_url":"https://api.github.com/users/Elgg/following{/other_user}","gists_url":"https://api.github.com/users/Elgg/gists{/gist_id}","starred_url":"https://api.github.com/users/Elgg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Elgg/subscriptions","organizations_url":"https://api.github.com/users/Elgg/orgs","repos_url":"https://api.github.com/users/Elgg/repos","events_url":"https://api.github.com/users/Elgg/events{/privacy}","received_events_url":"https://api.github.com/users/Elgg/received_events","type":"Organization","site_admin":false},"repo":{"id":299271,"name":"Elgg","full_name":"Elgg/Elgg","owner":{"login":"Elgg","id":79167,"avatar_url":"https://avatars.githubusercontent.com/u/79167?v=3","gravatar_id":"","url":"https://api.github.com/users/Elgg","html_url":"https://github.com/Elgg","followers_url":"https://api.github.com/users/Elgg/followers","following_url":"https://api.github.com/users/Elgg/following{/other_user}","gists_url":"https://api.github.com/users/Elgg/gists{/gist_id}","starred_url":"https://api.github.com/users/Elgg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Elgg/subscriptions","organizations_url":"https://api.github.com/users/Elgg/orgs","repos_url":"https://api.github.com/users/Elgg/repos","events_url":"https://api.github.com/users/Elgg/events{/privacy}","received_events_url":"https://api.github.com/users/Elgg/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Elgg/Elgg","description":"A social networking engine in PHP/MySQL","fork":false,"url":"https://api.github.com/repos/Elgg/Elgg","forks_url":"https://api.github.com/repos/Elgg/Elgg/forks","keys_url":"https://api.github.com/repos/Elgg/Elgg/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Elgg/Elgg/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Elgg/Elgg/teams","hooks_url":"https://api.github.com/repos/Elgg/Elgg/hooks","issue_events_url":"https://api.github.com/repos/Elgg/Elgg/issues/events{/number}","events_url":"https://api.github.com/repos/Elgg/Elgg/events","assignees_url":"https://api.github.com/repos/Elgg/Elgg/assignees{/user}","branches_url":"https://api.github.com/repos/Elgg/Elgg/branches{/branch}","tags_url":"https://api.github.com/repos/Elgg/Elgg/tags","blobs_url":"https://api.github.com/repos/Elgg/Elgg/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Elgg/Elgg/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Elgg/Elgg/git/refs{/sha}","trees_url":"https://api.github.com/repos/Elgg/Elgg/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Elgg/Elgg/statuses/{sha}","languages_url":"https://api.github.com/repos/Elgg/Elgg/languages","stargazers_url":"https://api.github.com/repos/Elgg/Elgg/stargazers","contributors_url":"https://api.github.com/repos/Elgg/Elgg/contributors","subscribers_url":"https://api.github.com/repos/Elgg/Elgg/subscribers","subscription_url":"https://api.github.com/repos/Elgg/Elgg/subscription","commits_url":"https://api.github.com/repos/Elgg/Elgg/commits{/sha}","git_commits_url":"https://api.github.com/repos/Elgg/Elgg/git/commits{/sha}","comments_url":"https://api.github.com/repos/Elgg/Elgg/comments{/number}","issue_comment_url":"https://api.github.com/repos/Elgg/Elgg/issues/comments{/number}","contents_url":"https://api.github.com/repos/Elgg/Elgg/contents/{+path}","compare_url":"https://api.github.com/repos/Elgg/Elgg/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Elgg/Elgg/merges","archive_url":"https://api.github.com/repos/Elgg/Elgg/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Elgg/Elgg/downloads","issues_url":"https://api.github.com/repos/Elgg/Elgg/issues{/number}","pulls_url":"https://api.github.com/repos/Elgg/Elgg/pulls{/number}","milestones_url":"https://api.github.com/repos/Elgg/Elgg/milestones{/number}","notifications_url":"https://api.github.com/repos/Elgg/Elgg/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Elgg/Elgg/labels{/name}","releases_url":"https://api.github.com/repos/Elgg/Elgg/releases{/id}","deployments_url":"https://api.github.com/repos/Elgg/Elgg/deployments","created_at":"2009-09-06T17:10:11Z","updated_at":"2016-04-05T17:38:29Z","pushed_at":"2016-04-08T16:52:30Z","git_url":"git://github.com/Elgg/Elgg.git","ssh_url":"git@github.com:Elgg/Elgg.git","clone_url":"https://github.com/Elgg/Elgg.git","svn_url":"https://github.com/Elgg/Elgg","homepage":"http://elgg.org","size":83508,"stargazers_count":858,"watchers_count":858,"language":"PHP","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":502,"mirror_url":null,"open_issues_count":814,"forks":502,"open_issues":814,"watchers":858,"default_branch":"2.x"}},"_links":{"self":{"href":"https://api.github.com/repos/Elgg/Elgg/pulls/9636"},"html":{"href":"https://github.com/Elgg/Elgg/pull/9636"},"issue":{"href":"https://api.github.com/repos/Elgg/Elgg/issues/9636"},"comments":{"href":"https://api.github.com/repos/Elgg/Elgg/issues/9636/comments"},"review_comments":{"href":"https://api.github.com/repos/Elgg/Elgg/pulls/9636/comments"},"review_comment":{"href":"https://api.github.com/repos/Elgg/Elgg/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Elgg/Elgg/pulls/9636/commits"},"statuses":{"href":"https://api.github.com/repos/Elgg/Elgg/statuses/702766c85d2384f9bc59ea2adda7da38a5a72f94"}}}}