{"action":"created","comment":{"url":"https://api.github.com/repos/Wikia/app/pulls/comments/41016921","id":41016921,"diff_hunk":"@@ -0,0 +1,324 @@\n+<?php\n+\n+namespace Wikia\\ContentReview;\n+\n+use Wikia\\ContentReview\\Models\\ReviewModel;\n+\n+class ContentReviewStatusesService extends \\WikiaService {\n+\n+\tconst \tSTATUS_NONE = 'none',\n+\t\t\tSTATUS_LIVE = 'live',\n+\t\t\tSTATUS_AWAITING = 'awaiting',\n+\t\t\tSTATUS_REJECTED = 'rejected',\n+\t\t\tSTATUS_APPROVED = 'approved',\n+\t\t\tSTATUS_UNSUBMITTED = 'unsubmitted';\n+\n+\tconst\tCONTENT_REVIEW_STATUSES_MEMC_KEY = 'content-review-statuses',\n+\t\t\tCONTENT_REVIEW_STATUSES_MEMV_VERSION = '1.02';\n+\n+\t/**\n+\t * Gets revisions statuses for all JS pages on given wiki\n+\t *\n+\t * @param int $wikiId\n+\t * @return bool|array\n+\t */\n+\tpublic function getJsPagesStatuses( $wikiId ) {\n+\t\t$jsPages = \\WikiaDataAccess::cache(\n+\t\t\t$this->getJsPagesMemcKey(),\n+\t\t\t259200, // 3 * 24 * 60 * 60\n+\t\t\tfunction() use( $wikiId ) {\n+\t\t\t\t$helper = new Helper();\n+\t\t\t\t$jsPages = $helper->getJsPages();\n+\n+\t\t\t\t$reviewModel = new Models\\ReviewModel();\n+\t\t\t\t$statuses = $reviewModel->getPagesStatuses( $wikiId );\n+\n+\t\t\t\t$jsPages = $this->prepareData( $jsPages, $statuses );\n+\n+\t\t\t\treturn $jsPages;\n+\t\t\t}\n+\t\t);\n+\n+\t\treturn $jsPages;\n+\t}\n+\n+\t/**\n+\t * Gets revision statuses for given JS page\n+\t *\n+\t * @param int $wikiId\n+\t * @param int $pageId\n+\t * @return array\n+\t */\n+\tpublic function getJsPageStatus( $wikiId, $pageId ) {\n+\t\t$jsPage = [];\n+\n+\t\t$jsPages = $this->getJsPagesStatuses( $wikiId );\n+\n+\t\tif ( isset( $jsPages[$pageId] ) ) {\n+\t\t\t$jsPage = $jsPages[$pageId];\n+\t\t}\n+\n+\t\treturn $jsPage;\n+\t}\n+\n+\t/**\n+\t * Prepares data about revision statuses\n+\t *\n+\t * @param array $jsPages contains basic information about page like id, title, last revision and last touched\n+\t * @param array $statuses contains data about all js pages revisions on which any of review action\n+\t *\t\t\t\twas taken (submit to review, start review, reject or approve).\n+\t *\t\t\t\t[IMPORTANT] Revisions are grouped by page id and ordered from latest action to oldest.\n+\t *\t\t\t\tie. [\n+\t * \t\t\t\t\t...\n+\t * \t\t\t\t\tpageId => [\n+\t * \t\t\t\t\t\t[submited to review] => revision #112 -> latest\n+\t *\t\t\t\t\t\t[rejected] => revision #109\n+\t *\t\t\t\t\t\t[approved] => revision #100 - oldest\n+\t * \t\t\t\t\t],\n+\t * \t\t\t\t\t...\n+\t *\t\t\t\t]\n+\t * @return array\n+\t */\n+\tpublic function prepareData( $jsPages, $statuses ) {\n+\t\tforeach ( $jsPages as $pageId => &$page ) {\n+\t\t\t$page = $this->preparePageStatuses( $pageId, $page, $statuses );\n+\t\t}\n+\n+\t\treturn $jsPages;\n+\t}\n+\n+\t/**\n+\t * Compares and prepare information about statuses for each of revisions for given page\n+\t * @see prepareData\n+\t *\n+\t * @param int $pageId\n+\t * @param array $page\n+\t * @param array $statuses\n+\t * @return array\n+\t * @throws \\MWException (Title::newFromText)\n+\t */\n+\tpublic function preparePageStatuses( $pageId, $page, $statuses ) {\n+\t\t$liveRevisionId = 0;\n+\t\t$title = \\Title::newFromText( $page['page_title'], NS_MEDIAWIKI );\n+\n+\t\t$page += $this->initPageData( $title );\n+\n+\t\tif ( isset( $statuses[$pageId] ) ) {\n+\t\t\t$liveRevisionId = $this->getLiveRevision( $statuses[$pageId] );\n+\n+\t\t\tforeach( $statuses[$pageId] as $status => $revisionId ) {\n+\t\t\t\t// Check revisions which are waiting for review or in review process\n+\t\t\t\t// In these states revision can be only in \"latest revision\" section\n+\t\t\t\tif ( Helper::isStatusAwaiting( $status ) && empty( $page['latestRevision']['revisionId'] ) ) {\n+\t\t\t\t\t$page['latestRevision'] = $this->prepareRevisionData(\n+\t\t\t\t\t\t$title,\n+\t\t\t\t\t\tself::STATUS_AWAITING,\n+\t\t\t\t\t\t$revisionId,\n+\t\t\t\t\t\t$liveRevisionId\n+\t\t\t\t\t);\n+\t\t\t\t\t// Check revisions for which review process is completed\n+\t\t\t\t} elseif ( Helper::isStatusCompleted( $status ) ) {\n+\t\t\t\t\t$statusKey = $this->getStatusKey( $status );\n+\n+\t\t\t\t\t// Prepare data for last reviewed revision (can be approved or rejected)\n+\t\t\t\t\tif ( empty( $page['latestReviewed']['revisionId'] ) ) {\n+\t\t\t\t\t\t$page['latestReviewed'] = $this->prepareRevisionData(\n+\t\t\t\t\t\t\t$title,\n+\t\t\t\t\t\t\t$statusKey,\n+\t\t\t\t\t\t\t$revisionId,\n+\t\t\t\t\t\t\t$liveRevisionId\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t// If revision is approved it means it's live\n+\t\t\t\t\tif ( $statusKey === self::STATUS_APPROVED ) {\n+\t\t\t\t\t\t$statusKey = self::STATUS_LIVE;\n+\n+\t\t\t\t\t\t// Prepare data for live revision\n+\t\t\t\t\t\t$page['liveRevision'] = $this->prepareRevisionData(\n+\t\t\t\t\t\t\t$title,\n+\t\t\t\t\t\t\t$statusKey,\n+\t\t\t\t\t\t\t$revisionId,\n+\t\t\t\t\t\t\t$liveRevisionId\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t// Prepare data for latest revision section\n+\t\t\t\t\tif ( empty( $page['latestRevision']['revisionId'] ) ) {\n+\t\t\t\t\t\t$page['latestRevision'] =  $this->prepareRevisionData(\n+\t\t\t\t\t\t\t$title,\n+\t\t\t\t\t\t\t$statusKey,\n+\t\t\t\t\t\t\t$revisionId,\n+\t\t\t\t\t\t\t$liveRevisionId\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$latestRevisionId = isset( $page['latestRevision']['revisionId'] ) ? $page['latestRevision']['revisionId'] : 0;\n+\n+\t\t// If latest revision is not equal last touched revision it means that must be submited for review\n+\t\tif ( $page['page_latest'] != $latestRevisionId ) {\n+\t\t\t$page['latestRevision'] = $this->prepareRevisionData(\n+\t\t\t\t$title,\n+\t\t\t\tself::STATUS_UNSUBMITTED,\n+\t\t\t\t$page['page_latest'],\n+\t\t\t\t$liveRevisionId\n+\t\t\t);\n+\n+\t\t\tif ( $title->userCan( 'edit' ) ) {\n+\t\t\t\t$page['submit'] = true;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $page;\n+\t}\n+\n+\t/**\n+\t * Returns status key based on status\n+\t *\n+\t * @param int $status\n+\t * @return string\n+\t */\n+\tpublic function getStatusKey( $status = 0 ) {\n+\t\tswitch ( $status ) {\n+\t\t\tcase 1:\n+\t\t\tcase 2: $statusKey = self::STATUS_AWAITING; break;\n+\t\t\tcase 3:\n+\t\t\tcase 5: $statusKey = self::STATUS_APPROVED; break;\n+\t\t\tcase 4: $statusKey = self::STATUS_REJECTED; break;\n+\t\t\tdefault: $statusKey = self::STATUS_NONE;\n+\t\t}\n+\n+\t\treturn $statusKey;\n+\t}\n+\n+\t/**\n+\t * Gets live revision id\n+\t *\n+\t * Live revision is revision which was last approved or auto approved\n+\t * Returns 0 if there is no live revision\n+\t *\n+\t * @param array $pageStatuses\n+\t * @return int\n+\t */\n+\tpublic function getLiveRevision( $pageStatuses ) {\n+\t\tif ( isset( $pageStatuses[ReviewModel::CONTENT_REVIEW_STATUS_APPROVED] ) ) {\n+\t\t\treturn $pageStatuses[ReviewModel::CONTENT_REVIEW_STATUS_APPROVED];\n+\t\t}\n+\n+\t\tif ( isset( $pageStatuses[ReviewModel::CONTENT_REVIEW_STATUS_AUTOAPPROVED] ) ) {\n+\t\t\treturn $pageStatuses[ReviewModel::CONTENT_REVIEW_STATUS_AUTOAPPROVED];\n+\t\t}\n+\n+\t\treturn 0;\n+\t}\n+\n+\t/**\n+\t * Prepares params for diff revision link\n+\t *\n+\t * @param int $revisionId\n+\t * @param int $liveRevisionId\n+\t * @return array\n+\t */\n+\tpublic function prepareRevisionLinkParams( $revisionId, $liveRevisionId = 0 ) {\n+\t\t$params = [];\n+\n+\t\tif ( !empty( $liveRevisionId ) ) {\n+\t\t\t$params['oldid'] = $liveRevisionId;\n+\n+\t\t\tif ( $revisionId !== $liveRevisionId ) {\n+\t\t\t\t$params['diff'] = $revisionId;\n+\t\t\t}\n+\t\t} else {\n+\t\t\t$params['oldid'] = $revisionId;\n+\t\t}\n+\n+\t\treturn $params;\n+\t}\n+\n+\tpublic static function purgeJsPagesCache() {\n+\t\t\\WikiaDataAccess::cachePurge( self::getJsPagesMemcKey() );\n+\t}\n+\n+\tprotected function initPageData( \\Title $title ) {\n+\t\t$statusNoneMsg = $this->getStatusMessage();\n+\n+\t\treturn [\n+\t\t\t'pageLink' => $this->createPageLink( $title ),\n+\t\t\t'pageName' => $title->getFullText(),\n+\t\t\t'latestRevision' => [\n+\t\t\t\t'statusKey' => self::STATUS_NONE,\n+\t\t\t\t'message' => $statusNoneMsg\n+\t\t\t],\n+\t\t\t'latestReviewed' => [\n+\t\t\t\t'statusKey' => self::STATUS_NONE,\n+\t\t\t\t'message' => $statusNoneMsg\n+\t\t\t],\n+\t\t\t'liveRevision' => [\n+\t\t\t\t'statusKey' => self::STATUS_NONE,\n+\t\t\t\t'message' => $statusNoneMsg\n+\t\t\t]\n+\t\t];\n+\t}\n+\n+\t/**\n+\t * Prepares data for given revision\n+\t *\n+\t * @param \\Title $title\n+\t * @param string $statusKey\n+\t * @param int $revisionId\n+\t * @param int $liveRevisionId\n+\t * @return array\n+\t */\n+\tprivate function prepareRevisionData( \\Title $title, $statusKey, $revisionId, $liveRevisionId = 0 ) {\n+\t\t$data = [\n+\t\t\t'revisionId' => $revisionId,\n+\t\t\t'statusKey' => $statusKey,\n+\t\t\t'message' => $this->getStatusMessage( $statusKey ),\n+\t\t\t'diffLink' => '',\n+\t\t\t'reasonLink' => ''\n+\t\t];\n+\n+\t\tif ( !empty( $revisionId ) ) {\n+\t\t\t$data['diffLink'] = $this->createRevisionLink( $title, $revisionId, $liveRevisionId );\n+\t\t\tif ( $statusKey === self::STATUS_REJECTED ) {\n+\t\t\t\t$data['reasonLink'] = $this->createRevisionTalkpageLink( $title );\n+\t\t\t}\n+\t\t} elseif ( !empty( $liveRevisionId ) ) {\n+\t\t\t$data['diffLink'] = $this->createRevisionLink( $title, $liveRevisionId );\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+\n+\tpublic function createPageLink( \\Title $title ) {\n+\t\treturn \\HTML::element( 'a', [ 'href' => $title->getFullURL() ], $title->getText() );","path":"extensions/wikia/ContentReview/services/ContentReviewStatusesService.class.php","position":297,"original_position":297,"commit_id":"ec0bdc1a4b21d727444896c848ff64f232d402f8","original_commit_id":"ec0bdc1a4b21d727444896c848ff64f232d402f8","user":{"login":"Grunny","id":230630,"avatar_url":"https://avatars.githubusercontent.com/u/230630?v=3","gravatar_id":"","url":"https://api.github.com/users/Grunny","html_url":"https://github.com/Grunny","followers_url":"https://api.github.com/users/Grunny/followers","following_url":"https://api.github.com/users/Grunny/following{/other_user}","gists_url":"https://api.github.com/users/Grunny/gists{/gist_id}","starred_url":"https://api.github.com/users/Grunny/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Grunny/subscriptions","organizations_url":"https://api.github.com/users/Grunny/orgs","repos_url":"https://api.github.com/users/Grunny/repos","events_url":"https://api.github.com/users/Grunny/events{/privacy}","received_events_url":"https://api.github.com/users/Grunny/received_events","type":"User","site_admin":false},"body":"This will cause a fatal error:\r\n`PHP Fatal error:  Class 'HTML' not found in extensions/wikia/ContentReview/services/ContentReviewStatusesService.class.php on line 297`\r\n\r\nThe class name is `Html` and our autoloader is case-sensitive, so same issue could happen in the other uses of the `Html` class below","created_at":"2015-10-02T12:42:17Z","updated_at":"2015-10-02T12:42:17Z","html_url":"https://github.com/Wikia/app/pull/8660#discussion_r41016921","pull_request_url":"https://api.github.com/repos/Wikia/app/pulls/8660","_links":{"self":{"href":"https://api.github.com/repos/Wikia/app/pulls/comments/41016921"},"html":{"href":"https://github.com/Wikia/app/pull/8660#discussion_r41016921"},"pull_request":{"href":"https://api.github.com/repos/Wikia/app/pulls/8660"}}},"pull_request":{"url":"https://api.github.com/repos/Wikia/app/pulls/8660","id":46527404,"html_url":"https://github.com/Wikia/app/pull/8660","diff_url":"https://github.com/Wikia/app/pull/8660.diff","patch_url":"https://github.com/Wikia/app/pull/8660.patch","issue_url":"https://api.github.com/repos/Wikia/app/issues/8660","number":8660,"state":"open","locked":false,"title":"CE-2724: Prepare Special:JsPages code","user":{"login":"lukaszkonieczny","id":3470655,"avatar_url":"https://avatars.githubusercontent.com/u/3470655?v=3","gravatar_id":"","url":"https://api.github.com/users/lukaszkonieczny","html_url":"https://github.com/lukaszkonieczny","followers_url":"https://api.github.com/users/lukaszkonieczny/followers","following_url":"https://api.github.com/users/lukaszkonieczny/following{/other_user}","gists_url":"https://api.github.com/users/lukaszkonieczny/gists{/gist_id}","starred_url":"https://api.github.com/users/lukaszkonieczny/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukaszkonieczny/subscriptions","organizations_url":"https://api.github.com/users/lukaszkonieczny/orgs","repos_url":"https://api.github.com/users/lukaszkonieczny/repos","events_url":"https://api.github.com/users/lukaszkonieczny/events{/privacy}","received_events_url":"https://api.github.com/users/lukaszkonieczny/received_events","type":"User","site_admin":false},"body":"We create new Special:JsPages. This page consist list of all js pages on given wiki with their review statuses (latest revision, latest reviewed and live revision).\r\n\r\nWhile this data is now used in two different places, we introduce ```ContentReviewStatusesService``` which now is also used in content review module in right rail. This required some code refactoring.\r\n\r\nTo simplify and do not duplicate work part of (or even all) CE-2621 was also done. So permissions to enable test mode changed. From now all logged in users are able to run wiki in test mode. They also will see content review module. To submit revision for review still appropriate rights are required.","created_at":"2015-10-01T14:05:02Z","updated_at":"2015-10-02T12:42:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7f61c0848656b2938598ed73a2bf456432a00012","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/Wikia/app/pulls/8660/commits","review_comments_url":"https://api.github.com/repos/Wikia/app/pulls/8660/comments","review_comment_url":"https://api.github.com/repos/Wikia/app/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Wikia/app/issues/8660/comments","statuses_url":"https://api.github.com/repos/Wikia/app/statuses/ec0bdc1a4b21d727444896c848ff64f232d402f8","head":{"label":"Wikia:CE-2724","ref":"CE-2724","sha":"ec0bdc1a4b21d727444896c848ff64f232d402f8","user":{"login":"Wikia","id":1171011,"avatar_url":"https://avatars.githubusercontent.com/u/1171011?v=3","gravatar_id":"","url":"https://api.github.com/users/Wikia","html_url":"https://github.com/Wikia","followers_url":"https://api.github.com/users/Wikia/followers","following_url":"https://api.github.com/users/Wikia/following{/other_user}","gists_url":"https://api.github.com/users/Wikia/gists{/gist_id}","starred_url":"https://api.github.com/users/Wikia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Wikia/subscriptions","organizations_url":"https://api.github.com/users/Wikia/orgs","repos_url":"https://api.github.com/users/Wikia/repos","events_url":"https://api.github.com/users/Wikia/events{/privacy}","received_events_url":"https://api.github.com/users/Wikia/received_events","type":"Organization","site_admin":false},"repo":{"id":5532313,"name":"app","full_name":"Wikia/app","owner":{"login":"Wikia","id":1171011,"avatar_url":"https://avatars.githubusercontent.com/u/1171011?v=3","gravatar_id":"","url":"https://api.github.com/users/Wikia","html_url":"https://github.com/Wikia","followers_url":"https://api.github.com/users/Wikia/followers","following_url":"https://api.github.com/users/Wikia/following{/other_user}","gists_url":"https://api.github.com/users/Wikia/gists{/gist_id}","starred_url":"https://api.github.com/users/Wikia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Wikia/subscriptions","organizations_url":"https://api.github.com/users/Wikia/orgs","repos_url":"https://api.github.com/users/Wikia/repos","events_url":"https://api.github.com/users/Wikia/events{/privacy}","received_events_url":"https://api.github.com/users/Wikia/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Wikia/app","description":"Wikia Application Code","fork":false,"url":"https://api.github.com/repos/Wikia/app","forks_url":"https://api.github.com/repos/Wikia/app/forks","keys_url":"https://api.github.com/repos/Wikia/app/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Wikia/app/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Wikia/app/teams","hooks_url":"https://api.github.com/repos/Wikia/app/hooks","issue_events_url":"https://api.github.com/repos/Wikia/app/issues/events{/number}","events_url":"https://api.github.com/repos/Wikia/app/events","assignees_url":"https://api.github.com/repos/Wikia/app/assignees{/user}","branches_url":"https://api.github.com/repos/Wikia/app/branches{/branch}","tags_url":"https://api.github.com/repos/Wikia/app/tags","blobs_url":"https://api.github.com/repos/Wikia/app/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Wikia/app/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Wikia/app/git/refs{/sha}","trees_url":"https://api.github.com/repos/Wikia/app/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Wikia/app/statuses/{sha}","languages_url":"https://api.github.com/repos/Wikia/app/languages","stargazers_url":"https://api.github.com/repos/Wikia/app/stargazers","contributors_url":"https://api.github.com/repos/Wikia/app/contributors","subscribers_url":"https://api.github.com/repos/Wikia/app/subscribers","subscription_url":"https://api.github.com/repos/Wikia/app/subscription","commits_url":"https://api.github.com/repos/Wikia/app/commits{/sha}","git_commits_url":"https://api.github.com/repos/Wikia/app/git/commits{/sha}","comments_url":"https://api.github.com/repos/Wikia/app/comments{/number}","issue_comment_url":"https://api.github.com/repos/Wikia/app/issues/comments{/number}","contents_url":"https://api.github.com/repos/Wikia/app/contents/{+path}","compare_url":"https://api.github.com/repos/Wikia/app/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Wikia/app/merges","archive_url":"https://api.github.com/repos/Wikia/app/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Wikia/app/downloads","issues_url":"https://api.github.com/repos/Wikia/app/issues{/number}","pulls_url":"https://api.github.com/repos/Wikia/app/pulls{/number}","milestones_url":"https://api.github.com/repos/Wikia/app/milestones{/number}","notifications_url":"https://api.github.com/repos/Wikia/app/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Wikia/app/labels{/name}","releases_url":"https://api.github.com/repos/Wikia/app/releases{/id}","created_at":"2012-08-23T20:55:58Z","updated_at":"2015-09-18T18:30:30Z","pushed_at":"2015-10-02T12:38:47Z","git_url":"git://github.com/Wikia/app.git","ssh_url":"git@github.com:Wikia/app.git","clone_url":"https://github.com/Wikia/app.git","svn_url":"https://github.com/Wikia/app","homepage":"http://dev.wikia.com","size":1491659,"stargazers_count":87,"watchers_count":87,"language":"PHP","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":69,"mirror_url":null,"open_issues_count":65,"forks":69,"open_issues":65,"watchers":87,"default_branch":"dev"}},"base":{"label":"Wikia:dev","ref":"dev","sha":"c221115947d92b1bbba5d9ba8b36a079b9ff0e5a","user":{"login":"Wikia","id":1171011,"avatar_url":"https://avatars.githubusercontent.com/u/1171011?v=3","gravatar_id":"","url":"https://api.github.com/users/Wikia","html_url":"https://github.com/Wikia","followers_url":"https://api.github.com/users/Wikia/followers","following_url":"https://api.github.com/users/Wikia/following{/other_user}","gists_url":"https://api.github.com/users/Wikia/gists{/gist_id}","starred_url":"https://api.github.com/users/Wikia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Wikia/subscriptions","organizations_url":"https://api.github.com/users/Wikia/orgs","repos_url":"https://api.github.com/users/Wikia/repos","events_url":"https://api.github.com/users/Wikia/events{/privacy}","received_events_url":"https://api.github.com/users/Wikia/received_events","type":"Organization","site_admin":false},"repo":{"id":5532313,"name":"app","full_name":"Wikia/app","owner":{"login":"Wikia","id":1171011,"avatar_url":"https://avatars.githubusercontent.com/u/1171011?v=3","gravatar_id":"","url":"https://api.github.com/users/Wikia","html_url":"https://github.com/Wikia","followers_url":"https://api.github.com/users/Wikia/followers","following_url":"https://api.github.com/users/Wikia/following{/other_user}","gists_url":"https://api.github.com/users/Wikia/gists{/gist_id}","starred_url":"https://api.github.com/users/Wikia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Wikia/subscriptions","organizations_url":"https://api.github.com/users/Wikia/orgs","repos_url":"https://api.github.com/users/Wikia/repos","events_url":"https://api.github.com/users/Wikia/events{/privacy}","received_events_url":"https://api.github.com/users/Wikia/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Wikia/app","description":"Wikia Application Code","fork":false,"url":"https://api.github.com/repos/Wikia/app","forks_url":"https://api.github.com/repos/Wikia/app/forks","keys_url":"https://api.github.com/repos/Wikia/app/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Wikia/app/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Wikia/app/teams","hooks_url":"https://api.github.com/repos/Wikia/app/hooks","issue_events_url":"https://api.github.com/repos/Wikia/app/issues/events{/number}","events_url":"https://api.github.com/repos/Wikia/app/events","assignees_url":"https://api.github.com/repos/Wikia/app/assignees{/user}","branches_url":"https://api.github.com/repos/Wikia/app/branches{/branch}","tags_url":"https://api.github.com/repos/Wikia/app/tags","blobs_url":"https://api.github.com/repos/Wikia/app/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Wikia/app/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Wikia/app/git/refs{/sha}","trees_url":"https://api.github.com/repos/Wikia/app/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Wikia/app/statuses/{sha}","languages_url":"https://api.github.com/repos/Wikia/app/languages","stargazers_url":"https://api.github.com/repos/Wikia/app/stargazers","contributors_url":"https://api.github.com/repos/Wikia/app/contributors","subscribers_url":"https://api.github.com/repos/Wikia/app/subscribers","subscription_url":"https://api.github.com/repos/Wikia/app/subscription","commits_url":"https://api.github.com/repos/Wikia/app/commits{/sha}","git_commits_url":"https://api.github.com/repos/Wikia/app/git/commits{/sha}","comments_url":"https://api.github.com/repos/Wikia/app/comments{/number}","issue_comment_url":"https://api.github.com/repos/Wikia/app/issues/comments{/number}","contents_url":"https://api.github.com/repos/Wikia/app/contents/{+path}","compare_url":"https://api.github.com/repos/Wikia/app/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Wikia/app/merges","archive_url":"https://api.github.com/repos/Wikia/app/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Wikia/app/downloads","issues_url":"https://api.github.com/repos/Wikia/app/issues{/number}","pulls_url":"https://api.github.com/repos/Wikia/app/pulls{/number}","milestones_url":"https://api.github.com/repos/Wikia/app/milestones{/number}","notifications_url":"https://api.github.com/repos/Wikia/app/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Wikia/app/labels{/name}","releases_url":"https://api.github.com/repos/Wikia/app/releases{/id}","created_at":"2012-08-23T20:55:58Z","updated_at":"2015-09-18T18:30:30Z","pushed_at":"2015-10-02T12:38:47Z","git_url":"git://github.com/Wikia/app.git","ssh_url":"git@github.com:Wikia/app.git","clone_url":"https://github.com/Wikia/app.git","svn_url":"https://github.com/Wikia/app","homepage":"http://dev.wikia.com","size":1491659,"stargazers_count":87,"watchers_count":87,"language":"PHP","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":69,"mirror_url":null,"open_issues_count":65,"forks":69,"open_issues":65,"watchers":87,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/Wikia/app/pulls/8660"},"html":{"href":"https://github.com/Wikia/app/pull/8660"},"issue":{"href":"https://api.github.com/repos/Wikia/app/issues/8660"},"comments":{"href":"https://api.github.com/repos/Wikia/app/issues/8660/comments"},"review_comments":{"href":"https://api.github.com/repos/Wikia/app/pulls/8660/comments"},"review_comment":{"href":"https://api.github.com/repos/Wikia/app/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Wikia/app/pulls/8660/commits"},"statuses":{"href":"https://api.github.com/repos/Wikia/app/statuses/ec0bdc1a4b21d727444896c848ff64f232d402f8"}}}}