{"action":"created","comment":{"url":"https://api.github.com/repos/joomla/joomla-cms/pulls/comments/178537956","pull_request_review_id":108607983,"id":178537956,"diff_hunk":"@@ -0,0 +1,306 @@\n+<?php\n+/**\n+ * @package     Joomla.Plugin\n+ * @subpackage  User.privacyconsent\n+ *\n+ * @copyright   Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved.\n+ * @license     GNU General Public License version 2 or later; see LICENSE.txt\n+ */\n+\n+defined('_JEXEC') or die;\n+\n+use Joomla\\Utilities\\ArrayHelper;\n+\n+/**\n+ * An example custom privacyconsent plugin.\n+ *\n+ * @since  __DEPLOY_VERSION__\n+ */\n+class PlgUserPrivacyconsent extends JPlugin\n+{\n+\t/**\n+\t * Load the language file on instantiation.\n+\t *\n+\t * @var    boolean\n+\t * @since  __DEPLOY_VERSION__\n+\t */\n+\tprotected $autoloadLanguage = true;\n+\n+\t/**\n+\t * Application object.\n+\t *\n+\t * @var    JApplicationCms\n+\t * @since  1.0\n+\t */\n+\tprotected $app;\n+\t\n+\t/**\n+\t * Constructor\n+\t *\n+\t * @param   object  &$subject  The object to observe\n+\t * @param   array   $config    An array that holds the plugin configuration\n+\t *\n+\t * @since   __DEPLOY_VERSION__\n+\t */\n+\tpublic function __construct(& $subject, $config)\n+\t{\n+\t\tparent::__construct($subject, $config);\n+\t\tJFormHelper::addFieldPath(__DIR__ . '/field');\n+\t}\n+\n+\t/**\n+\t * Adds additional fields to the user editing form\n+\t *\n+\t * @param   JForm  $form  The form to be altered.\n+\t * @param   mixed  $data  The associated data for the form.\n+\t *\n+\t * @return  boolean\n+\t *\n+\t * @since   __DEPLOY_VERSION__\n+\t */\n+\tpublic function onContentPrepareForm($form, $data)\n+\t{\n+\t\tif (!($form instanceof JForm))\n+\t\t{\n+\t\t\t$this->_subject->setError('JERROR_NOT_A_FORM');\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t// Check we are manipulating a valid form - we do not display this in the admin users form.\n+\t\t$name = $form->getName();\n+\n+\t\tif (!in_array($name, array('com_admin.profile', 'com_users.profile', 'com_users.registration')))\n+\t\t{\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t// Add the registration fields to the form.\n+\t\tJForm::addFormPath(__DIR__ . '/privacyconsent');\n+\t\t$form->loadFile('privacyconsent');\n+\n+\t\t$fields = array(\n+\t\t\t'privacy',\n+\t\t);\n+\n+\t\t$privacyarticle = $this->params->get('privacy_article');\n+\n+\t\t// Push the privacy article ID into the privacy field.\n+\t\t$form->setFieldAttribute('privacy', 'article', $privacyarticle, 'privacyconsent');\n+\t}\n+\n+\t/**\n+\t * Method is called before user data is stored in the database\n+\t *\n+\t * @param   array    $user   Holds the old user data.\n+\t * @param   boolean  $isNew  True if a new user is stored.\n+\t * @param   array    $data   Holds the new user data.\n+\t *\n+\t * @return  boolean\n+\t *\n+\t * @since   __DEPLOY_VERSION__\n+\t * @throws  InvalidArgumentException on missing required data.\n+\t */\n+\tpublic function onUserBeforeSave($user, $isNew, $data)\n+\t{\n+\t\t// Check that the privacy is checked if required ie only in registration from frontend.\n+\t\t$task       \t= JFactory::getApplication()->input->getCmd('task');\n+\t\t$option     \t= JFactory::getApplication()->input->getCmd('option');\n+\t\t$privacyarticle = $this->params->get('privacy_article');\n+\n+\t\tif ($this->app->isClient('site') && (!$data['privacyconsent']['privacy']))\n+\t\t{\n+\t\t\tthrow new InvalidArgumentException(JText::_('PLG_USER_PRIVACY_FIELD_ERROR'));\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t/**\n+\t * Saves user privacy confirmation and note\n+\t *\n+\t * @param   array    $data    entered user data\n+\t * @param   boolean  $isNew   true if this is a new user\n+\t * @param   boolean  $result  true if saving the user worked\n+\t * @param   string   $error   error message\n+\t *\n+\t * @return  boolean\n+\t */\n+\tpublic function onUserAfterSave($data, $isNew, $result, $error)\n+\t{\n+\t\t// Only create an entry on front-end user creation/update\n+\t\tif ($this->app->isClient('administrator'))\n+\t\t{\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t// Get the user's ID\n+\t\t$userId = ArrayHelper::getValue($data, 'id', 0, 'int');\n+\n+\t\t// Get the user's IP address\n+\t\t$ip = $this->app->input->server->get('REMOTE_ADDR');\n+\n+\t\t// Get the user agent string\n+\t\t$user_agent = $_SERVER['HTTP_USER_AGENT'];\n+\n+\t\t// Get the date in DB format\n+\t\t$now = JFactory::getDate()->toSql();\n+\n+\t\t// Create the user note\n+\t\t$userNote = (object) array(\n+\t\t\t'user_id'         => $userId,\n+\t\t\t'catid'           => 0,\n+\t\t\t'subject'         => JText::_('PLG_USER_PRIVACY_SUBJECT'),\n+\t\t\t'body'            => JText::sprintf('PLG_USER_PRIVACY_BODY', $ip, $user_agent),\n+\t\t\t'state'           => 1,\n+\t\t\t'created_user_id' => 42,\n+\t\t\t'created_time'    => $now\n+\t\t);\n+\n+\t\ttry\n+\t\t{\n+\t\t\t$result = JFactory::getDbo()->insertObject('#__user_notes', $userNote);\n+\t\t}\n+\t\tcatch (Exception $e)\n+\t\t{\n+\t\t\t// Do nothing if the save fails\n+\t\t}\n+\n+\t\t// Create the consent confirmation\n+\t\t$confirm = (object) array(\n+\t\t\t'user_id'\t=> $userId,\n+\t\t\t'profile_key'\t=> 'consent',\n+\t\t\t'profile_value'\t=> 1\n+\t\t);\n+\n+\t\ttry\n+\t\t{\n+\t\t\t$result = JFactory::getDbo()->insertObject('#__user_profiles', $confirm);\n+\t\t}\n+\t\tcatch (Exception $e)\n+\n+\t\t{\n+\t\t\t// Do nothing if the save fails\n+\t\t}\n+\t\treturn true;\n+\t}\n+\n+\t/**\n+\t * Remove all user privacy consent information for the given user ID\n+\t *\n+\t * Method is called after user data is deleted from the database\n+\t *\n+\t * @param   array    $user     Holds the user data\n+\t * @param   boolean  $success  True if user was succesfully stored in the database\n+\t * @param   string   $msg      Message\n+\t *\n+\t * @return  boolean\n+\t */\n+\tpublic function onUserAfterDelete($user, $success, $msg)\n+\t{\n+\t\tif (!$success)\n+\t\t{\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$userId = ArrayHelper::getValue($user, 'id', 0, 'int');\n+\n+\t\tif ($userId)\n+\t\t{\n+\t\t\t// Remove any user notes\n+\t\t\ttry\n+\t\t\t{\n+\t\t\t\t$db = JFactory::getDbo();\n+\t\t\t\t$db->setQuery(\n+\t\t\t\t\t'DELETE FROM #__user_notes WHERE user_id = ' . $userId\n+\t\t\t\t);\n+\n+\t\t\t\t$db->execute();\n+\t\t\t}\n+\t\t\tcatch (Exception $e)\n+\t\t\t{\n+\t\t\t\t$this->_subject->setError($e->getMessage());\n+\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t// Remove any user profile fields\n+\t\t\ttry\n+\t\t\t{\n+\t\t\t\t$db = JFactory::getDbo();\n+\t\t\t\t$db->setQuery(\n+\t\t\t\t\t'DELETE FROM #__user_profiles WHERE user_id = ' . $userId\n+\t\t\t\t);\n+\n+\t\t\t\t$db->execute();\n+\t\t\t}\n+\t\t\tcatch (Exception $e)\n+\t\t\t{\n+\t\t\t\t$this->_subject->setError($e->getMessage());\n+\n+\t\t\t\treturn false;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t/**\n+\t * Check if a user has already consented when they login.\n+\t * If not will load the edit profile\n+\t *\n+\t * @param   array  $options  Array holding options\n+\t *\n+\t * @return  boolean  True on success\n+\t *\n+\t * @since   1.0\n+\t */\n+\tpublic function onUserAfterLogin($options)\n+\t{\n+\t\t// Run this in frontend only\n+\t\tif ($this->app->isClient('administrator'))\n+\t\t{\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$userId = JFactory::getUser()->id;\n+\t\t$db = JFactory::getDbo();\n+\n+\t\t$query = $db->getQuery(true)\n+\t\t\t->select('1')\n+\t\t\t->from($db->qn('#__user_profiles'))\n+\t\t\t->where($db->qn('user_id') . ' = ' . (int) $userId)\n+\t\t\t->where($db->qn('profile_key') . ' = ' . $db->q('consent'));\n+\t\t$db->setQuery($query);\n+\n+\t\t$consent = $db->loadObjectList();\n+\n+\t\tif (count($consent) != 0)\n+\t\t{\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t// If the count of $consent is 0 then redirect to com_users profile edit\n+\t\t$this->app->enqueueMessage($this->getRedirectMessage(), 'notice');\n+\t\t$this->app->redirect(\\JRoute::_('index.php?option=com_users&view=profile&layout=edit', false));\n+\t}\n+\n+\t/**\n+\t * Returns the configured redirect message and falls back to the default version.\n+\t *\n+\t * @return  string  redirect message\n+\t *\n+\t * @since   1.0\n+\t */\n+\n+\tprivate function getRedirectMessage()\n+\t{\n+\t\t$messageOnRedirect = trim($this->params->get('messageOnRedirect', ''));\n+\t\tif (empty($messageOnRedirect))","path":"plugins/user/privacyconsent/privacyconsent.php","position":299,"original_position":299,"commit_id":"31a19c0171e6069c07eb39b31d151837ba521743","original_commit_id":"31a19c0171e6069c07eb39b31d151837ba521743","user":{"login":"Quy","id":368084,"avatar_url":"https://avatars2.githubusercontent.com/u/368084?v=4","gravatar_id":"","url":"https://api.github.com/users/Quy","html_url":"https://github.com/Quy","followers_url":"https://api.github.com/users/Quy/followers","following_url":"https://api.github.com/users/Quy/following{/other_user}","gists_url":"https://api.github.com/users/Quy/gists{/gist_id}","starred_url":"https://api.github.com/users/Quy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Quy/subscriptions","organizations_url":"https://api.github.com/users/Quy/orgs","repos_url":"https://api.github.com/users/Quy/repos","events_url":"https://api.github.com/users/Quy/events{/privacy}","received_events_url":"https://api.github.com/users/Quy/received_events","type":"User","site_admin":false},"body":"Add blank line above line 299.","created_at":"2018-04-02T12:49:48Z","updated_at":"2018-04-02T12:49:48Z","html_url":"https://github.com/joomla/joomla-cms/pull/20051#discussion_r178537956","pull_request_url":"https://api.github.com/repos/joomla/joomla-cms/pulls/20051","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/joomla/joomla-cms/pulls/comments/178537956"},"html":{"href":"https://github.com/joomla/joomla-cms/pull/20051#discussion_r178537956"},"pull_request":{"href":"https://api.github.com/repos/joomla/joomla-cms/pulls/20051"}}},"pull_request":{"url":"https://api.github.com/repos/joomla/joomla-cms/pulls/20051","id":178745290,"html_url":"https://github.com/joomla/joomla-cms/pull/20051","diff_url":"https://github.com/joomla/joomla-cms/pull/20051.diff","patch_url":"https://github.com/joomla/joomla-cms/pull/20051.patch","issue_url":"https://api.github.com/repos/joomla/joomla-cms/issues/20051","number":20051,"state":"open","locked":false,"title":"[3.9][New Feature] Privacy Policy plugin","user":{"login":"brianteeman","id":1296369,"avatar_url":"https://avatars3.githubusercontent.com/u/1296369?v=4","gravatar_id":"","url":"https://api.github.com/users/brianteeman","html_url":"https://github.com/brianteeman","followers_url":"https://api.github.com/users/brianteeman/followers","following_url":"https://api.github.com/users/brianteeman/following{/other_user}","gists_url":"https://api.github.com/users/brianteeman/gists{/gist_id}","starred_url":"https://api.github.com/users/brianteeman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brianteeman/subscriptions","organizations_url":"https://api.github.com/users/brianteeman/orgs","repos_url":"https://api.github.com/users/brianteeman/repos","events_url":"https://api.github.com/users/brianteeman/events{/privacy}","received_events_url":"https://api.github.com/users/brianteeman/received_events","type":"User","site_admin":false},"body":"This plugin is based on three separate plugins and fields that I made for a non-profit site I manage. @zero-24 helped with some things.\r\n\r\nThis is now integrated as one single plugin\r\n\r\n### Summary of Changes\r\nThe GDPR regulations apply to users of any web site from he EU. Similar regulations exist in Australia and elsewhere.\r\n\r\nThis plugin will enable site owners to comply with many of the aims of the GDPR - by gaining the consent of their users to store personal information.\r\n\r\nIt does not do any form of deletion - that is far too complex an issue for any single plugin to achieve and the rules on deletion are not universal due to individual state laws on data retention for tax and legal purposes.\r\n\r\nWhen enabled the plugin adds a new required field (Privacy Policy) to the user registration form. This field can optionally have a link to the full privacy article on the site AND this can be associated with the privacy article in other languages.\r\n\r\nIn addition a Short Summary of the Privacy policy is displayed on the form and if not created in the config a default will be used. (not implemented yet). This satisfies another GDPR requirement\r\n\r\nWhen a user registers they cannot complete the registration unless they agree to the privacy policy. This field is set to No by default and cannot be changed. This satisfies another GDPR requirement\r\n\r\nWhen they register a note is created in the user_notes table to show when they gave consent - this satisfies another GDPR requirement.\r\n\r\nAny existing user who tries to login will be redirected to the edit profile page so that they can consent before continuing. The message displayed on redirect can be customised in the options or a default will be used.\r\n\r\nThe consent field does not appear in the admin user screens as you cannot consent for anyone else. This satisfies another GDPR requirement. But it does appear on your own profile page.\r\n\r\nFinally a post installation message has been included.\r\n\r\n### Testing Instructions\r\nApply the patch and do a discover OR download joomla from here https://github.com/brianteeman/joomla-cms/archive/privacy.zip\r\n\r\n\r\n### Notes\r\n**Pull requests appreciated to polish this\r\nPull requests appreciated to display the short summary on the registration form\r\nMake @dgt41 happy with a bootstrap.modal\r\nBetter method for getting IP address**\r\n","created_at":"2018-04-01T20:09:06Z","updated_at":"2018-04-02T12:49:48Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fe32ab5661fa9b1ce309cd9c3521494fd12de669","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":198658453,"url":"https://api.github.com/repos/joomla/joomla-cms/labels/Language%20Change","name":"Language Change","color":"eb6420","default":false},{"id":32136390,"url":"https://api.github.com/repos/joomla/joomla-cms/labels/New%20Feature","name":"New Feature","color":"e102d8","default":false},{"id":60721348,"url":"https://api.github.com/repos/joomla/joomla-cms/labels/PR-staging","name":"PR-staging","color":"c7def8","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/joomla/joomla-cms/pulls/20051/commits","review_comments_url":"https://api.github.com/repos/joomla/joomla-cms/pulls/20051/comments","review_comment_url":"https://api.github.com/repos/joomla/joomla-cms/pulls/comments{/number}","comments_url":"https://api.github.com/repos/joomla/joomla-cms/issues/20051/comments","statuses_url":"https://api.github.com/repos/joomla/joomla-cms/statuses/31a19c0171e6069c07eb39b31d151837ba521743","head":{"label":"brianteeman:privacy","ref":"privacy","sha":"31a19c0171e6069c07eb39b31d151837ba521743","user":{"login":"brianteeman","id":1296369,"avatar_url":"https://avatars3.githubusercontent.com/u/1296369?v=4","gravatar_id":"","url":"https://api.github.com/users/brianteeman","html_url":"https://github.com/brianteeman","followers_url":"https://api.github.com/users/brianteeman/followers","following_url":"https://api.github.com/users/brianteeman/following{/other_user}","gists_url":"https://api.github.com/users/brianteeman/gists{/gist_id}","starred_url":"https://api.github.com/users/brianteeman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brianteeman/subscriptions","organizations_url":"https://api.github.com/users/brianteeman/orgs","repos_url":"https://api.github.com/users/brianteeman/repos","events_url":"https://api.github.com/users/brianteeman/events{/privacy}","received_events_url":"https://api.github.com/users/brianteeman/received_events","type":"User","site_admin":false},"repo":{"id":76056079,"name":"joomla-cms","full_name":"brianteeman/joomla-cms","owner":{"login":"brianteeman","id":1296369,"avatar_url":"https://avatars3.githubusercontent.com/u/1296369?v=4","gravatar_id":"","url":"https://api.github.com/users/brianteeman","html_url":"https://github.com/brianteeman","followers_url":"https://api.github.com/users/brianteeman/followers","following_url":"https://api.github.com/users/brianteeman/following{/other_user}","gists_url":"https://api.github.com/users/brianteeman/gists{/gist_id}","starred_url":"https://api.github.com/users/brianteeman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brianteeman/subscriptions","organizations_url":"https://api.github.com/users/brianteeman/orgs","repos_url":"https://api.github.com/users/brianteeman/repos","events_url":"https://api.github.com/users/brianteeman/events{/privacy}","received_events_url":"https://api.github.com/users/brianteeman/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/brianteeman/joomla-cms","description":"DEV attachments field for Joomla custom fields","fork":true,"url":"https://api.github.com/repos/brianteeman/joomla-cms","forks_url":"https://api.github.com/repos/brianteeman/joomla-cms/forks","keys_url":"https://api.github.com/repos/brianteeman/joomla-cms/keys{/key_id}","collaborators_url":"https://api.github.com/repos/brianteeman/joomla-cms/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/brianteeman/joomla-cms/teams","hooks_url":"https://api.github.com/repos/brianteeman/joomla-cms/hooks","issue_events_url":"https://api.github.com/repos/brianteeman/joomla-cms/issues/events{/number}","events_url":"https://api.github.com/repos/brianteeman/joomla-cms/events","assignees_url":"https://api.github.com/repos/brianteeman/joomla-cms/assignees{/user}","branches_url":"https://api.github.com/repos/brianteeman/joomla-cms/branches{/branch}","tags_url":"https://api.github.com/repos/brianteeman/joomla-cms/tags","blobs_url":"https://api.github.com/repos/brianteeman/joomla-cms/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/brianteeman/joomla-cms/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/brianteeman/joomla-cms/git/refs{/sha}","trees_url":"https://api.github.com/repos/brianteeman/joomla-cms/git/trees{/sha}","statuses_url":"https://api.github.com/repos/brianteeman/joomla-cms/statuses/{sha}","languages_url":"https://api.github.com/repos/brianteeman/joomla-cms/languages","stargazers_url":"https://api.github.com/repos/brianteeman/joomla-cms/stargazers","contributors_url":"https://api.github.com/repos/brianteeman/joomla-cms/contributors","subscribers_url":"https://api.github.com/repos/brianteeman/joomla-cms/subscribers","subscription_url":"https://api.github.com/repos/brianteeman/joomla-cms/subscription","commits_url":"https://api.github.com/repos/brianteeman/joomla-cms/commits{/sha}","git_commits_url":"https://api.github.com/repos/brianteeman/joomla-cms/git/commits{/sha}","comments_url":"https://api.github.com/repos/brianteeman/joomla-cms/comments{/number}","issue_comment_url":"https://api.github.com/repos/brianteeman/joomla-cms/issues/comments{/number}","contents_url":"https://api.github.com/repos/brianteeman/joomla-cms/contents/{+path}","compare_url":"https://api.github.com/repos/brianteeman/joomla-cms/compare/{base}...{head}","merges_url":"https://api.github.com/repos/brianteeman/joomla-cms/merges","archive_url":"https://api.github.com/repos/brianteeman/joomla-cms/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/brianteeman/joomla-cms/downloads","issues_url":"https://api.github.com/repos/brianteeman/joomla-cms/issues{/number}","pulls_url":"https://api.github.com/repos/brianteeman/joomla-cms/pulls{/number}","milestones_url":"https://api.github.com/repos/brianteeman/joomla-cms/milestones{/number}","notifications_url":"https://api.github.com/repos/brianteeman/joomla-cms/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/brianteeman/joomla-cms/labels{/name}","releases_url":"https://api.github.com/repos/brianteeman/joomla-cms/releases{/id}","deployments_url":"https://api.github.com/repos/brianteeman/joomla-cms/deployments","created_at":"2016-12-09T17:27:35Z","updated_at":"2017-03-27T16:53:19Z","pushed_at":"2018-04-02T10:10:54Z","git_url":"git://github.com/brianteeman/joomla-cms.git","ssh_url":"git@github.com:brianteeman/joomla-cms.git","clone_url":"https://github.com/brianteeman/joomla-cms.git","svn_url":"https://github.com/brianteeman/joomla-cms","homepage":"https://brian.teeman.net","size":227928,"stargazers_count":0,"watchers_count":0,"language":"PHP","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"gpl-2.0","name":"GNU General Public License v2.0","spdx_id":"GPL-2.0","url":"https://api.github.com/licenses/gpl-2.0"},"forks":0,"open_issues":1,"watchers":0,"default_branch":"staging"}},"base":{"label":"joomla:staging","ref":"staging","sha":"55da14e20bfa252d6438e891a7bd4c09a2e120e1","user":{"login":"joomla","id":751633,"avatar_url":"https://avatars3.githubusercontent.com/u/751633?v=4","gravatar_id":"","url":"https://api.github.com/users/joomla","html_url":"https://github.com/joomla","followers_url":"https://api.github.com/users/joomla/followers","following_url":"https://api.github.com/users/joomla/following{/other_user}","gists_url":"https://api.github.com/users/joomla/gists{/gist_id}","starred_url":"https://api.github.com/users/joomla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joomla/subscriptions","organizations_url":"https://api.github.com/users/joomla/orgs","repos_url":"https://api.github.com/users/joomla/repos","events_url":"https://api.github.com/users/joomla/events{/privacy}","received_events_url":"https://api.github.com/users/joomla/received_events","type":"Organization","site_admin":false},"repo":{"id":2464908,"name":"joomla-cms","full_name":"joomla/joomla-cms","owner":{"login":"joomla","id":751633,"avatar_url":"https://avatars3.githubusercontent.com/u/751633?v=4","gravatar_id":"","url":"https://api.github.com/users/joomla","html_url":"https://github.com/joomla","followers_url":"https://api.github.com/users/joomla/followers","following_url":"https://api.github.com/users/joomla/following{/other_user}","gists_url":"https://api.github.com/users/joomla/gists{/gist_id}","starred_url":"https://api.github.com/users/joomla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joomla/subscriptions","organizations_url":"https://api.github.com/users/joomla/orgs","repos_url":"https://api.github.com/users/joomla/repos","events_url":"https://api.github.com/users/joomla/events{/privacy}","received_events_url":"https://api.github.com/users/joomla/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/joomla/joomla-cms","description":"Home of the Joomla! Content Management System","fork":false,"url":"https://api.github.com/repos/joomla/joomla-cms","forks_url":"https://api.github.com/repos/joomla/joomla-cms/forks","keys_url":"https://api.github.com/repos/joomla/joomla-cms/keys{/key_id}","collaborators_url":"https://api.github.com/repos/joomla/joomla-cms/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/joomla/joomla-cms/teams","hooks_url":"https://api.github.com/repos/joomla/joomla-cms/hooks","issue_events_url":"https://api.github.com/repos/joomla/joomla-cms/issues/events{/number}","events_url":"https://api.github.com/repos/joomla/joomla-cms/events","assignees_url":"https://api.github.com/repos/joomla/joomla-cms/assignees{/user}","branches_url":"https://api.github.com/repos/joomla/joomla-cms/branches{/branch}","tags_url":"https://api.github.com/repos/joomla/joomla-cms/tags","blobs_url":"https://api.github.com/repos/joomla/joomla-cms/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/joomla/joomla-cms/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/joomla/joomla-cms/git/refs{/sha}","trees_url":"https://api.github.com/repos/joomla/joomla-cms/git/trees{/sha}","statuses_url":"https://api.github.com/repos/joomla/joomla-cms/statuses/{sha}","languages_url":"https://api.github.com/repos/joomla/joomla-cms/languages","stargazers_url":"https://api.github.com/repos/joomla/joomla-cms/stargazers","contributors_url":"https://api.github.com/repos/joomla/joomla-cms/contributors","subscribers_url":"https://api.github.com/repos/joomla/joomla-cms/subscribers","subscription_url":"https://api.github.com/repos/joomla/joomla-cms/subscription","commits_url":"https://api.github.com/repos/joomla/joomla-cms/commits{/sha}","git_commits_url":"https://api.github.com/repos/joomla/joomla-cms/git/commits{/sha}","comments_url":"https://api.github.com/repos/joomla/joomla-cms/comments{/number}","issue_comment_url":"https://api.github.com/repos/joomla/joomla-cms/issues/comments{/number}","contents_url":"https://api.github.com/repos/joomla/joomla-cms/contents/{+path}","compare_url":"https://api.github.com/repos/joomla/joomla-cms/compare/{base}...{head}","merges_url":"https://api.github.com/repos/joomla/joomla-cms/merges","archive_url":"https://api.github.com/repos/joomla/joomla-cms/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/joomla/joomla-cms/downloads","issues_url":"https://api.github.com/repos/joomla/joomla-cms/issues{/number}","pulls_url":"https://api.github.com/repos/joomla/joomla-cms/pulls{/number}","milestones_url":"https://api.github.com/repos/joomla/joomla-cms/milestones{/number}","notifications_url":"https://api.github.com/repos/joomla/joomla-cms/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/joomla/joomla-cms/labels{/name}","releases_url":"https://api.github.com/repos/joomla/joomla-cms/releases{/id}","deployments_url":"https://api.github.com/repos/joomla/joomla-cms/deployments","created_at":"2011-09-27T02:07:38Z","updated_at":"2018-04-01T20:38:27Z","pushed_at":"2018-04-02T12:43:49Z","git_url":"git://github.com/joomla/joomla-cms.git","ssh_url":"git@github.com:joomla/joomla-cms.git","clone_url":"https://github.com/joomla/joomla-cms.git","svn_url":"https://github.com/joomla/joomla-cms","homepage":"https://www.joomla.org","size":227647,"stargazers_count":2694,"watchers_count":2694,"language":"PHP","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2671,"mirror_url":null,"archived":false,"open_issues_count":859,"license":{"key":"gpl-2.0","name":"GNU General Public License v2.0","spdx_id":"GPL-2.0","url":"https://api.github.com/licenses/gpl-2.0"},"forks":2671,"open_issues":859,"watchers":2694,"default_branch":"staging"}},"_links":{"self":{"href":"https://api.github.com/repos/joomla/joomla-cms/pulls/20051"},"html":{"href":"https://github.com/joomla/joomla-cms/pull/20051"},"issue":{"href":"https://api.github.com/repos/joomla/joomla-cms/issues/20051"},"comments":{"href":"https://api.github.com/repos/joomla/joomla-cms/issues/20051/comments"},"review_comments":{"href":"https://api.github.com/repos/joomla/joomla-cms/pulls/20051/comments"},"review_comment":{"href":"https://api.github.com/repos/joomla/joomla-cms/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/joomla/joomla-cms/pulls/20051/commits"},"statuses":{"href":"https://api.github.com/repos/joomla/joomla-cms/statuses/31a19c0171e6069c07eb39b31d151837ba521743"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"Quy"}}