{"action":"created","comment":{"url":"https://api.github.com/repos/yiisoft/yii2/pulls/comments/40601865","id":40601865,"diff_hunk":"@@ -0,0 +1,534 @@\n+<?php\n+/**\n+ * @link http://www.yiiframework.com/\n+ * @copyright Copyright (c) 2008 Yii Software LLC\n+ * @license http://www.yiiframework.com/license/\n+ */\n+\n+namespace yii\\validators;\n+\n+use Yii;\n+use yii\\base\\InvalidConfigException;\n+use yii\\helpers\\Html;\n+use yii\\helpers\\Json;\n+use yii\\web\\JsExpression;\n+\n+/**\n+ * IpValidator validates that the attribute value is a valid IPv4/IPv6 address or subnet.\n+ * May change attribute's value if normalization is enabled.\n+ *\n+ * @property boolean|string negationChar whether address may have a negation character at the beginning\n+ *   string - character passed will be used. May be a regular expression\n+ *   true - character from [[DEFAULT_NEGATION_CHAR]] will be used. Default is ```!```\n+ *   false  - negation is not allowed\n+ * @author SilverFire <d.naumenko.a@gmail.com>\n+ * @since 2.0.5\n+ */\n+class IpValidator extends Validator\n+{\n+    /**\n+     * @const integer the length of IPv6 address in bits\n+     */\n+    const IPV6_ADDRESS_LENGTH = 128;\n+\n+    /**\n+     * @const integer the length of IPv4 address in bits\n+     */\n+    const IPV4_ADDRESS_LENGTH = 32;\n+\n+    /**\n+     * @const integer is used to change check order by [[isAllowed]]\n+     * @see isAllowed()\n+     * @see order\n+     */\n+    const ORDER_ALLOW_DENY = 0;\n+\n+    /**\n+     * @const integer is used to change check order by [[isAllowed]]\n+     * @see isAllowed()\n+     * @see order\n+     */\n+    const ORDER_DENY_ALLOW = 1;\n+\n+    /**\n+     * @const string default negation char when [[negationChar]] is set to `true`\n+     * @see negationChar\n+     */\n+    const DEFAULT_NEGATION_CHAR = '!';\n+\n+    /**\n+     * @var boolean whether support of IPv6 addresses is enabled\n+     */\n+    public $ipv6 = true;\n+\n+    /**\n+     * @var boolean whether support of IPv4 addresses is enabled\n+     */\n+    public $ipv4 = true;\n+\n+    /**\n+     * @var boolean whether the address can be a CIDR subnet\n+     *    true - the subnet is required\n+     *   false - the address can not have the subnet\n+     *    null - ths subnet is optional\n+     */\n+    public $subnet = false;\n+\n+    /**\n+     * @var boolean whether to add the prefix with the smallest length (32 for IPv4 and 128 for IPv6)\n+     * to an address without it.\n+     * Works only when attribute [[subnet]] is not false.\n+     * Example: `10.0.1.5` will normalized to `10.0.1.5/32`, `2008:db0::1` will be normalized to `2008:db0::1/128`\n+     * @see subnet\n+     */\n+    public $normalize = false;\n+\n+    /**\n+     * @var string|boolean\n+     * @see negationChar\n+     */\n+    public $_negationChar = false;\n+\n+    /**\n+     * @var boolean whether to expand an IPv6 address to the full notation format\n+     */\n+    public $expandIPv6 = false;\n+\n+    /**\n+     * The property is used by [[isAllowed]] method to determine the order of checks\n+     * of the IP address according to [[deny]] and [[allow]] lists.\n+     *\n+     * When [[order]] is [[ORDER_ALLOW_DENY]] - first all the [[allow]] will be checked, and at least one must\n+     * match or the validation will fail. Then all the [[deny]] are checked, if one of them\n+     * matched the validation will fail.\n+     * At last, if address is not on the [[allow]] nor on the [[deny]] the validation will also fail.\n+     *\n+     * When [[order]] is [[ORDER_DENY_ALLOW]] - method [[isAllowed]] checks all the [[deny]] and the [[allow]].\n+     * If the value is on the [[deny]] the validation will fail, unless it is also present on the [[allow]].\n+     * If it is not found on any of the lists the validation will be passed.\n+     *\n+     * Tip: it is useful to use [[ORDER_ALLOW_DENY]], when it is necessary to deny a less specific subnet and\n+     * to allow a more specific one. The example below will result in passing `192.168.1.1`,\n+     * but `192.168.2.1` will be denied:\n+     *\n+     * ```\n+     * [\n+     *      'deny' => ['192.168.0.0/16'],\n+     *      'allow' => ['192.168.1.0/24']\n+     * ]\n+     * ```\n+     *\n+     * @var int the order of ranges rules. Used by [[isAllowed]]\n+     * @see isAllowed()\n+     */\n+    public $order = self::ORDER_DENY_ALLOW;\n+\n+    /**\n+     * @var string|array IPv4 or IPv6 ranges that are allowed to use. For example:\n+     *\n+     * ```\n+     * ['10.0.0.0/8', '192.168.1.1', '2001:ab::/64', '2001:ac::2:1']\n+     * ```\n+     *\n+     * @see isAllowed()\n+     */\n+    public $allow;\n+\n+    /**\n+     * @var string|array IPv4 or IPv6 ranges that are prohibited to use. For example:\n+     *\n+     * ```\n+     * ['10.0.0.0/24', '192.168.2.1', '2001:ab::/32', '2001:ac::1:2']\n+     * ```\n+     *\n+     * @see isAllowed()\n+     */\n+    public $deny;\n+\n+    /**\n+     * @var string Regexp-pattern to validate IPv4 address\n+     */\n+    public $ipv4Pattern = '/^(?:(?:2(?:[0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9])\\.){3}(?:(?:2([0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9]))$/';\n+\n+    /**\n+     * @var string Regexp-pattern to validate IPv6 address\n+     */\n+    public $ipv6Pattern = '/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/';\n+\n+    /**\n+     * @var string user-defined error message is used when validation fails due to the disabled IPv6 validation\n+     */\n+    public $ipv6NotAllowed = \"{attribute} must not be an IPv6 address\";","path":"framework/validators/IpValidator.php","position":161,"original_position":161,"commit_id":"695894cf3f3aaefac446799f93d426d36dce54d5","original_commit_id":"695894cf3f3aaefac446799f93d426d36dce54d5","user":{"login":"samdark","id":47294,"avatar_url":"https://avatars.githubusercontent.com/u/47294?v=3","gravatar_id":"","url":"https://api.github.com/users/samdark","html_url":"https://github.com/samdark","followers_url":"https://api.github.com/users/samdark/followers","following_url":"https://api.github.com/users/samdark/following{/other_user}","gists_url":"https://api.github.com/users/samdark/gists{/gist_id}","starred_url":"https://api.github.com/users/samdark/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/samdark/subscriptions","organizations_url":"https://api.github.com/users/samdark/orgs","repos_url":"https://api.github.com/users/samdark/repos","events_url":"https://api.github.com/users/samdark/events{/privacy}","received_events_url":"https://api.github.com/users/samdark/received_events","type":"User","site_admin":false},"body":"It's better to use `'` where possible.","created_at":"2015-09-28T20:34:57Z","updated_at":"2015-09-28T20:34:57Z","html_url":"https://github.com/yiisoft/yii2/pull/7693#discussion_r40601865","pull_request_url":"https://api.github.com/repos/yiisoft/yii2/pulls/7693","_links":{"self":{"href":"https://api.github.com/repos/yiisoft/yii2/pulls/comments/40601865"},"html":{"href":"https://github.com/yiisoft/yii2/pull/7693#discussion_r40601865"},"pull_request":{"href":"https://api.github.com/repos/yiisoft/yii2/pulls/7693"}}},"pull_request":{"url":"https://api.github.com/repos/yiisoft/yii2/pulls/7693","id":31048480,"html_url":"https://github.com/yiisoft/yii2/pull/7693","diff_url":"https://github.com/yiisoft/yii2/pull/7693.diff","patch_url":"https://github.com/yiisoft/yii2/pull/7693.patch","issue_url":"https://api.github.com/repos/yiisoft/yii2/issues/7693","number":7693,"state":"open","locked":false,"title":"Added IpValidator","user":{"login":"SilverFire","id":4499203,"avatar_url":"https://avatars.githubusercontent.com/u/4499203?v=3","gravatar_id":"","url":"https://api.github.com/users/SilverFire","html_url":"https://github.com/SilverFire","followers_url":"https://api.github.com/users/SilverFire/followers","following_url":"https://api.github.com/users/SilverFire/following{/other_user}","gists_url":"https://api.github.com/users/SilverFire/gists{/gist_id}","starred_url":"https://api.github.com/users/SilverFire/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SilverFire/subscriptions","organizations_url":"https://api.github.com/users/SilverFire/orgs","repos_url":"https://api.github.com/users/SilverFire/repos","events_url":"https://api.github.com/users/SilverFire/events{/privacy}","received_events_url":"https://api.github.com/users/SilverFire/received_events","type":"User","site_admin":false},"body":"PR after changes in https://github.com/yiisoft/yii2/pull/7667","created_at":"2015-03-12T15:45:26Z","updated_at":"2015-09-28T20:34:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2a50490b98798e3503fdc76ad057c912ab7e561c","assignee":{"login":"samdark","id":47294,"avatar_url":"https://avatars.githubusercontent.com/u/47294?v=3","gravatar_id":"","url":"https://api.github.com/users/samdark","html_url":"https://github.com/samdark","followers_url":"https://api.github.com/users/samdark/followers","following_url":"https://api.github.com/users/samdark/following{/other_user}","gists_url":"https://api.github.com/users/samdark/gists{/gist_id}","starred_url":"https://api.github.com/users/samdark/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/samdark/subscriptions","organizations_url":"https://api.github.com/users/samdark/orgs","repos_url":"https://api.github.com/users/samdark/repos","events_url":"https://api.github.com/users/samdark/events{/privacy}","received_events_url":"https://api.github.com/users/samdark/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/yiisoft/yii2/milestones/14","html_url":"https://github.com/yiisoft/yii2/milestones/2.0.7","labels_url":"https://api.github.com/repos/yiisoft/yii2/milestones/14/labels","id":1107394,"number":14,"title":"2.0.7","description":"","creator":{"login":"cebe","id":189796,"avatar_url":"https://avatars.githubusercontent.com/u/189796?v=3","gravatar_id":"","url":"https://api.github.com/users/cebe","html_url":"https://github.com/cebe","followers_url":"https://api.github.com/users/cebe/followers","following_url":"https://api.github.com/users/cebe/following{/other_user}","gists_url":"https://api.github.com/users/cebe/gists{/gist_id}","starred_url":"https://api.github.com/users/cebe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cebe/subscriptions","organizations_url":"https://api.github.com/users/cebe/orgs","repos_url":"https://api.github.com/users/cebe/repos","events_url":"https://api.github.com/users/cebe/events{/privacy}","received_events_url":"https://api.github.com/users/cebe/received_events","type":"User","site_admin":false},"open_issues":95,"closed_issues":61,"state":"open","created_at":"2015-05-12T19:21:21Z","updated_at":"2015-09-28T20:29:34Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/yiisoft/yii2/pulls/7693/commits","review_comments_url":"https://api.github.com/repos/yiisoft/yii2/pulls/7693/comments","review_comment_url":"https://api.github.com/repos/yiisoft/yii2/pulls/comments{/number}","comments_url":"https://api.github.com/repos/yiisoft/yii2/issues/7693/comments","statuses_url":"https://api.github.com/repos/yiisoft/yii2/statuses/695894cf3f3aaefac446799f93d426d36dce54d5","head":{"label":"SilverFire:ip-validator","ref":"ip-validator","sha":"695894cf3f3aaefac446799f93d426d36dce54d5","user":{"login":"SilverFire","id":4499203,"avatar_url":"https://avatars.githubusercontent.com/u/4499203?v=3","gravatar_id":"","url":"https://api.github.com/users/SilverFire","html_url":"https://github.com/SilverFire","followers_url":"https://api.github.com/users/SilverFire/followers","following_url":"https://api.github.com/users/SilverFire/following{/other_user}","gists_url":"https://api.github.com/users/SilverFire/gists{/gist_id}","starred_url":"https://api.github.com/users/SilverFire/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SilverFire/subscriptions","organizations_url":"https://api.github.com/users/SilverFire/orgs","repos_url":"https://api.github.com/users/SilverFire/repos","events_url":"https://api.github.com/users/SilverFire/events{/privacy}","received_events_url":"https://api.github.com/users/SilverFire/received_events","type":"User","site_admin":false},"repo":{"id":31335145,"name":"yii2","full_name":"SilverFire/yii2","owner":{"login":"SilverFire","id":4499203,"avatar_url":"https://avatars.githubusercontent.com/u/4499203?v=3","gravatar_id":"","url":"https://api.github.com/users/SilverFire","html_url":"https://github.com/SilverFire","followers_url":"https://api.github.com/users/SilverFire/followers","following_url":"https://api.github.com/users/SilverFire/following{/other_user}","gists_url":"https://api.github.com/users/SilverFire/gists{/gist_id}","starred_url":"https://api.github.com/users/SilverFire/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SilverFire/subscriptions","organizations_url":"https://api.github.com/users/SilverFire/orgs","repos_url":"https://api.github.com/users/SilverFire/repos","events_url":"https://api.github.com/users/SilverFire/events{/privacy}","received_events_url":"https://api.github.com/users/SilverFire/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/SilverFire/yii2","description":"Yii 2 framework main development repo","fork":true,"url":"https://api.github.com/repos/SilverFire/yii2","forks_url":"https://api.github.com/repos/SilverFire/yii2/forks","keys_url":"https://api.github.com/repos/SilverFire/yii2/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SilverFire/yii2/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SilverFire/yii2/teams","hooks_url":"https://api.github.com/repos/SilverFire/yii2/hooks","issue_events_url":"https://api.github.com/repos/SilverFire/yii2/issues/events{/number}","events_url":"https://api.github.com/repos/SilverFire/yii2/events","assignees_url":"https://api.github.com/repos/SilverFire/yii2/assignees{/user}","branches_url":"https://api.github.com/repos/SilverFire/yii2/branches{/branch}","tags_url":"https://api.github.com/repos/SilverFire/yii2/tags","blobs_url":"https://api.github.com/repos/SilverFire/yii2/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SilverFire/yii2/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SilverFire/yii2/git/refs{/sha}","trees_url":"https://api.github.com/repos/SilverFire/yii2/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SilverFire/yii2/statuses/{sha}","languages_url":"https://api.github.com/repos/SilverFire/yii2/languages","stargazers_url":"https://api.github.com/repos/SilverFire/yii2/stargazers","contributors_url":"https://api.github.com/repos/SilverFire/yii2/contributors","subscribers_url":"https://api.github.com/repos/SilverFire/yii2/subscribers","subscription_url":"https://api.github.com/repos/SilverFire/yii2/subscription","commits_url":"https://api.github.com/repos/SilverFire/yii2/commits{/sha}","git_commits_url":"https://api.github.com/repos/SilverFire/yii2/git/commits{/sha}","comments_url":"https://api.github.com/repos/SilverFire/yii2/comments{/number}","issue_comment_url":"https://api.github.com/repos/SilverFire/yii2/issues/comments{/number}","contents_url":"https://api.github.com/repos/SilverFire/yii2/contents/{+path}","compare_url":"https://api.github.com/repos/SilverFire/yii2/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SilverFire/yii2/merges","archive_url":"https://api.github.com/repos/SilverFire/yii2/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SilverFire/yii2/downloads","issues_url":"https://api.github.com/repos/SilverFire/yii2/issues{/number}","pulls_url":"https://api.github.com/repos/SilverFire/yii2/pulls{/number}","milestones_url":"https://api.github.com/repos/SilverFire/yii2/milestones{/number}","notifications_url":"https://api.github.com/repos/SilverFire/yii2/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SilverFire/yii2/labels{/name}","releases_url":"https://api.github.com/repos/SilverFire/yii2/releases{/id}","created_at":"2015-02-25T20:50:16Z","updated_at":"2015-02-25T20:50:19Z","pushed_at":"2015-08-28T11:28:53Z","git_url":"git://github.com/SilverFire/yii2.git","ssh_url":"git@github.com:SilverFire/yii2.git","clone_url":"https://github.com/SilverFire/yii2.git","svn_url":"https://github.com/SilverFire/yii2","homepage":"http://www.yiiframework.com","size":35658,"stargazers_count":0,"watchers_count":0,"language":"PHP","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"yiisoft:master","ref":"master","sha":"71b728225b321a9d699fc7b19a8eaa4ace7c7490","user":{"login":"yiisoft","id":993323,"avatar_url":"https://avatars.githubusercontent.com/u/993323?v=3","gravatar_id":"","url":"https://api.github.com/users/yiisoft","html_url":"https://github.com/yiisoft","followers_url":"https://api.github.com/users/yiisoft/followers","following_url":"https://api.github.com/users/yiisoft/following{/other_user}","gists_url":"https://api.github.com/users/yiisoft/gists{/gist_id}","starred_url":"https://api.github.com/users/yiisoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yiisoft/subscriptions","organizations_url":"https://api.github.com/users/yiisoft/orgs","repos_url":"https://api.github.com/users/yiisoft/repos","events_url":"https://api.github.com/users/yiisoft/events{/privacy}","received_events_url":"https://api.github.com/users/yiisoft/received_events","type":"Organization","site_admin":false},"repo":{"id":3431193,"name":"yii2","full_name":"yiisoft/yii2","owner":{"login":"yiisoft","id":993323,"avatar_url":"https://avatars.githubusercontent.com/u/993323?v=3","gravatar_id":"","url":"https://api.github.com/users/yiisoft","html_url":"https://github.com/yiisoft","followers_url":"https://api.github.com/users/yiisoft/followers","following_url":"https://api.github.com/users/yiisoft/following{/other_user}","gists_url":"https://api.github.com/users/yiisoft/gists{/gist_id}","starred_url":"https://api.github.com/users/yiisoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yiisoft/subscriptions","organizations_url":"https://api.github.com/users/yiisoft/orgs","repos_url":"https://api.github.com/users/yiisoft/repos","events_url":"https://api.github.com/users/yiisoft/events{/privacy}","received_events_url":"https://api.github.com/users/yiisoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/yiisoft/yii2","description":"Yii 2 framework main development repo","fork":false,"url":"https://api.github.com/repos/yiisoft/yii2","forks_url":"https://api.github.com/repos/yiisoft/yii2/forks","keys_url":"https://api.github.com/repos/yiisoft/yii2/keys{/key_id}","collaborators_url":"https://api.github.com/repos/yiisoft/yii2/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/yiisoft/yii2/teams","hooks_url":"https://api.github.com/repos/yiisoft/yii2/hooks","issue_events_url":"https://api.github.com/repos/yiisoft/yii2/issues/events{/number}","events_url":"https://api.github.com/repos/yiisoft/yii2/events","assignees_url":"https://api.github.com/repos/yiisoft/yii2/assignees{/user}","branches_url":"https://api.github.com/repos/yiisoft/yii2/branches{/branch}","tags_url":"https://api.github.com/repos/yiisoft/yii2/tags","blobs_url":"https://api.github.com/repos/yiisoft/yii2/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/yiisoft/yii2/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/yiisoft/yii2/git/refs{/sha}","trees_url":"https://api.github.com/repos/yiisoft/yii2/git/trees{/sha}","statuses_url":"https://api.github.com/repos/yiisoft/yii2/statuses/{sha}","languages_url":"https://api.github.com/repos/yiisoft/yii2/languages","stargazers_url":"https://api.github.com/repos/yiisoft/yii2/stargazers","contributors_url":"https://api.github.com/repos/yiisoft/yii2/contributors","subscribers_url":"https://api.github.com/repos/yiisoft/yii2/subscribers","subscription_url":"https://api.github.com/repos/yiisoft/yii2/subscription","commits_url":"https://api.github.com/repos/yiisoft/yii2/commits{/sha}","git_commits_url":"https://api.github.com/repos/yiisoft/yii2/git/commits{/sha}","comments_url":"https://api.github.com/repos/yiisoft/yii2/comments{/number}","issue_comment_url":"https://api.github.com/repos/yiisoft/yii2/issues/comments{/number}","contents_url":"https://api.github.com/repos/yiisoft/yii2/contents/{+path}","compare_url":"https://api.github.com/repos/yiisoft/yii2/compare/{base}...{head}","merges_url":"https://api.github.com/repos/yiisoft/yii2/merges","archive_url":"https://api.github.com/repos/yiisoft/yii2/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/yiisoft/yii2/downloads","issues_url":"https://api.github.com/repos/yiisoft/yii2/issues{/number}","pulls_url":"https://api.github.com/repos/yiisoft/yii2/pulls{/number}","milestones_url":"https://api.github.com/repos/yiisoft/yii2/milestones{/number}","notifications_url":"https://api.github.com/repos/yiisoft/yii2/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/yiisoft/yii2/labels{/name}","releases_url":"https://api.github.com/repos/yiisoft/yii2/releases{/id}","created_at":"2012-02-13T15:32:36Z","updated_at":"2015-09-28T20:04:04Z","pushed_at":"2015-09-28T20:23:34Z","git_url":"git://github.com/yiisoft/yii2.git","ssh_url":"git@github.com:yiisoft/yii2.git","clone_url":"https://github.com/yiisoft/yii2.git","svn_url":"https://github.com/yiisoft/yii2","homepage":"http://www.yiiframework.com","size":94360,"stargazers_count":6713,"watchers_count":6713,"language":"PHP","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3903,"mirror_url":null,"open_issues_count":1059,"forks":3903,"open_issues":1059,"watchers":6713,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/yiisoft/yii2/pulls/7693"},"html":{"href":"https://github.com/yiisoft/yii2/pull/7693"},"issue":{"href":"https://api.github.com/repos/yiisoft/yii2/issues/7693"},"comments":{"href":"https://api.github.com/repos/yiisoft/yii2/issues/7693/comments"},"review_comments":{"href":"https://api.github.com/repos/yiisoft/yii2/pulls/7693/comments"},"review_comment":{"href":"https://api.github.com/repos/yiisoft/yii2/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/yiisoft/yii2/pulls/7693/commits"},"statuses":{"href":"https://api.github.com/repos/yiisoft/yii2/statuses/695894cf3f3aaefac446799f93d426d36dce54d5"}}}}