From 8f437755160aa29990b593bfe7322a8b3815c4c8 Mon Sep 17 00:00:00 2001 From: Andreas Heigl Date: Sun, 15 Sep 2019 18:48:44 +0200 Subject: [PATCH 1/8] Replace get/setSex with get/setGender As explained in #94 it's a good idea to use gender instead of sex. To not break BC the get/setSex are still available but are marked as deprecated. The current functionality works as before. In addition to that it is possible to set `other` as gender and the default now is to return `unknown` instead of NULL. --- src/Common/Entity/User.php | 47 ++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/src/Common/Entity/User.php b/src/Common/Entity/User.php index fdbd38d35..7f2aa5633 100755 --- a/src/Common/Entity/User.php +++ b/src/Common/Entity/User.php @@ -8,8 +8,10 @@ class User extends \stdClass { - const SEX_MALE = 'male'; - const SEX_FEMALE = 'female'; + const GENDER_MALE = 'male'; + const GENDER_FEMALE = 'female'; + const GENDER_OTHER = 'other'; + const GENDER_UNKNOWN = 'unknown'; /** * @var string @@ -47,11 +49,11 @@ class User extends \stdClass public $username; /** - * Should be female or male + * One of the GENDER_-constants * - * @var string|null + * @var string */ - protected $sex; + protected $gender = GENDER_UNKNOWN; /** * @var string|null @@ -80,22 +82,43 @@ public function setBirthday(?\DateTime $birthday): void } /** - * @return string|null + * @return string */ - public function getSex(): ?string + public function getGender(): string { - return $this->sex; + return $this->gender; } /** * @param string $sex */ - public function setSex(string $sex): void + public function setGender(string $gender): void { - if ($sex !== self::SEX_MALE && $sex !== self::SEX_FEMALE) { - throw new \InvalidArgumentException('Argument $sex is not valid'); + $genders = [ + GENDER_OTHER, + GENDER_MALE, + GENDER_FEMALE, + ]; + if (! $gender in_array($genders)) { + throw new \InvalidArgumentException('Argument $gender is not valid'); } - $this->sex = $sex; + $this->gender = $gender; + } + + /** + * @deprecated use `getGender` instead + */ + public function getSex() : string + { + return $this->getGender(); + } + + /** + * @deprecated Use setGender instead + */ + public function setSex(string $sex) : void + { + $this->setGender($sex); } } From c6f183f3217ec304424f4526ada883ddbc89586e Mon Sep 17 00:00:00 2001 From: Andreas Heigl Date: Sun, 15 Sep 2019 18:55:40 +0200 Subject: [PATCH 2/8] Fix bugs Such things happen when you try to code in github... --- src/Common/Entity/User.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Common/Entity/User.php b/src/Common/Entity/User.php index 7f2aa5633..48e1a45a6 100755 --- a/src/Common/Entity/User.php +++ b/src/Common/Entity/User.php @@ -53,7 +53,7 @@ class User extends \stdClass * * @var string */ - protected $gender = GENDER_UNKNOWN; + protected $gender = self::GENDER_UNKNOWN; /** * @var string|null @@ -95,11 +95,11 @@ public function getGender(): string public function setGender(string $gender): void { $genders = [ - GENDER_OTHER, - GENDER_MALE, - GENDER_FEMALE, + self::GENDER_OTHER, + self::GENDER_MALE, + self::GENDER_FEMALE, ]; - if (! $gender in_array($genders)) { + if (! in_array($gender, $genders)) { throw new \InvalidArgumentException('Argument $gender is not valid'); } From 8b9b122de98d6430fd71b87b5129a6234270f7ee Mon Sep 17 00:00:00 2001 From: Andreas Heigl Date: Sun, 15 Sep 2019 19:01:38 +0200 Subject: [PATCH 3/8] Reinstantiate the SEX_* constants As they are already used removing them is a BC break that we do not want! --- src/Common/Entity/User.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Common/Entity/User.php b/src/Common/Entity/User.php index 48e1a45a6..daf279b07 100755 --- a/src/Common/Entity/User.php +++ b/src/Common/Entity/User.php @@ -8,6 +8,16 @@ class User extends \stdClass { + /** + * @deprecated Use GENDER_MALE instead! + */ + const SEX_MALE = 'male'; + + /** + * @deprecated Use GENDER_FEMALE instead! + */ + const SEX_FEMALE = 'female'; + const GENDER_MALE = 'male'; const GENDER_FEMALE = 'female'; const GENDER_OTHER = 'other'; From 3c2950eae296a296ea671a6169188d4b9da9c853 Mon Sep 17 00:00:00 2001 From: Andreas Heigl Date: Sun, 15 Sep 2019 19:12:31 +0200 Subject: [PATCH 4/8] raise deprecation error when set/getSex is called --- src/Common/Entity/User.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Common/Entity/User.php b/src/Common/Entity/User.php index daf279b07..0f4df17a4 100755 --- a/src/Common/Entity/User.php +++ b/src/Common/Entity/User.php @@ -121,6 +121,7 @@ public function setGender(string $gender): void */ public function getSex() : string { + trigger_error('getSex is deprecated. Use getGender instead', E_USER_DEPRECATED); return $this->getGender(); } @@ -129,6 +130,7 @@ public function getSex() : string */ public function setSex(string $sex) : void { + trigger_error('setSex is deprecated. Use setGender instead', E_USER_DEPRECATED); $this->setGender($sex); } } From 7985cb77449f984b8507c5bdac429da4a77979ce Mon Sep 17 00:00:00 2001 From: Andreas Heigl Date: Sun, 15 Sep 2019 19:15:36 +0200 Subject: [PATCH 5/8] trigger error when deprecated constants are used --- src/Common/Entity/User.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Common/Entity/User.php b/src/Common/Entity/User.php index 0f4df17a4..9eb0f3e9a 100755 --- a/src/Common/Entity/User.php +++ b/src/Common/Entity/User.php @@ -11,12 +11,12 @@ class User extends \stdClass /** * @deprecated Use GENDER_MALE instead! */ - const SEX_MALE = 'male'; + const SEX_MALE = 'male_deprecated'; /** * @deprecated Use GENDER_FEMALE instead! */ - const SEX_FEMALE = 'female'; + const SEX_FEMALE = 'female_deprecated'; const GENDER_MALE = 'male'; const GENDER_FEMALE = 'female'; @@ -104,6 +104,16 @@ public function getGender(): string */ public function setGender(string $gender): void { + if ($gender === self::SEX_MALE) { + trigger_error ('the constant SEX_MALE is deprecated. use GENDER_MALE instead', E_USER_DEPRECATED); + $gender = self::GENDER_MALE; + } + + if ($gender === self::SEX_FEMALE) { + trigger_error ('the constant SEX_FEMALE is deprecated. use GENDER_FEMALE instead', E_USER_DEPRECATED); + $gender = self::GENDER_FEMALE; + } + $genders = [ self::GENDER_OTHER, self::GENDER_MALE, From 7bb7cc3222d05fcf3655f384f4504aecb00d5367 Mon Sep 17 00:00:00 2001 From: Andreas Heigl Date: Sun, 15 Sep 2019 20:26:39 +0200 Subject: [PATCH 6/8] Remove calls to deprecated functions This removes the calls to get/setSex with the appropriate get/setGender calls. Tests are now again passing --- src/OAuth2/Provider/Facebook.php | 13 ++++++++++++- src/OAuth2/Provider/Google.php | 2 +- src/OAuth2/Provider/MailRu.php | 2 +- src/OAuth2/Provider/Meetup.php | 2 +- src/OAuth2/Provider/Vk.php | 2 +- src/OpenIDConnect/Provider/Google.php | 2 +- tests/Test/Common/ArrayHydratorTest.php | 4 ++-- tests/Test/OAuth2/Provider/VkTest.php | 2 +- 8 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/OAuth2/Provider/Facebook.php b/src/OAuth2/Provider/Facebook.php index 566c8d4c4..14fe5ddf0 100644 --- a/src/OAuth2/Provider/Facebook.php +++ b/src/OAuth2/Provider/Facebook.php @@ -60,7 +60,18 @@ public function getIdentity(AccessTokenInterface $accessToken) 'last_name' => 'lastname', 'email' => 'email', 'gender' => static function ($value, User $user) { - $user->setSex($value === 1 ? User::SEX_FEMALE : User::SEX_MALE); + switch ($value) { + case 'male': + $gender = User::GENDER_MALE; + break; + case 'female': + $gender = User::GENDER_FEMALE; + break; + default: + $gender = User::GENDER_OTHER; + break; + } + $user->setGender($gender); }, 'link' => 'url', 'locale' => 'locale', diff --git a/src/OAuth2/Provider/Google.php b/src/OAuth2/Provider/Google.php index a52201338..3c8703d9f 100644 --- a/src/OAuth2/Provider/Google.php +++ b/src/OAuth2/Provider/Google.php @@ -84,7 +84,7 @@ public function getIdentity(AccessTokenInterface $accessToken) 'verified_email' => 'emailVerified', 'name' => 'fullname', 'gender' => static function ($value, User $user) { - $user->setSex($value); + $user->setGender($value); }, 'picture' => 'pictureURL' ]); diff --git a/src/OAuth2/Provider/MailRu.php b/src/OAuth2/Provider/MailRu.php index c6e2ac18b..fcacd03a1 100644 --- a/src/OAuth2/Provider/MailRu.php +++ b/src/OAuth2/Provider/MailRu.php @@ -121,7 +121,7 @@ public function getIdentity(AccessTokenInterface $accessToken) 'nick' => 'username', 'pic_big' => 'pictureURL', 'sex' => static function ($value, User $user) { - $user->setSex($value === 1 ? User::SEX_FEMALE : User::SEX_MALE); + $user->setGender($value === 1 ? User::GENDER_FEMALE : User::GENDER_MALE); } ]); diff --git a/src/OAuth2/Provider/Meetup.php b/src/OAuth2/Provider/Meetup.php index e1df7a8a8..ba3b2eb55 100644 --- a/src/OAuth2/Provider/Meetup.php +++ b/src/OAuth2/Provider/Meetup.php @@ -72,7 +72,7 @@ public function getIdentity(AccessTokenInterface $accessToken) 'username' => 'name', 'fullname' => 'name', 'sex' => static function ($value, User $user) { - $user->setSex($value); + $user->setGender($value); }, 'photo.photo_link' => 'pictureURL' ]); diff --git a/src/OAuth2/Provider/Vk.php b/src/OAuth2/Provider/Vk.php index 654616cfa..0f4d14864 100644 --- a/src/OAuth2/Provider/Vk.php +++ b/src/OAuth2/Provider/Vk.php @@ -84,7 +84,7 @@ public function getIdentity(AccessTokenInterface $accessToken) ); }, 'sex' => static function ($value, User $user) { - $user->setSex($value === 1 ? User::SEX_FEMALE : User::SEX_MALE); + $user->setGender($value === 1 ? User::GENDER_FEMALE : User::GENDER_MALE); }, 'screen_name' => 'username', 'photo_max_orig' => 'pictureURL', diff --git a/src/OpenIDConnect/Provider/Google.php b/src/OpenIDConnect/Provider/Google.php index fb4636f71..bb8c6302c 100644 --- a/src/OpenIDConnect/Provider/Google.php +++ b/src/OpenIDConnect/Provider/Google.php @@ -72,7 +72,7 @@ public function getIdentity(AccessTokenInterface $accessToken) 'verified_email' => 'emailVerified', 'name' => 'fullname', 'gender' => static function ($value, User $user) { - $user->setSex($value); + $user->setGender($value); }, ]); diff --git a/tests/Test/Common/ArrayHydratorTest.php b/tests/Test/Common/ArrayHydratorTest.php index aa0f966c5..0530b978e 100644 --- a/tests/Test/Common/ArrayHydratorTest.php +++ b/tests/Test/Common/ArrayHydratorTest.php @@ -16,7 +16,7 @@ public function testHydrationSuccess() $hydrator = new ArrayHydrator([ 'firstname' => 'firstname', 'sex' => static function ($value, User $user) { - $user->setSex($value); + $user->setGender($value); }, 'image.picture' => 'pictureURL', ]); @@ -32,6 +32,6 @@ public function testHydrationSuccess() parent::assertEquals($expectedFirstName, $user->firstname); parent::assertEquals($expectedPictureUrl, $user->pictureURL); - parent::assertEquals($expectedSex, $user->getSex()); + parent::assertEquals($expectedSex, $user->getGender()); } } diff --git a/tests/Test/OAuth2/Provider/VkTest.php b/tests/Test/OAuth2/Provider/VkTest.php index 92a255050..58eabf273 100644 --- a/tests/Test/OAuth2/Provider/VkTest.php +++ b/tests/Test/OAuth2/Provider/VkTest.php @@ -48,7 +48,7 @@ public function testGetIdentitySuccess() parent::assertSame($expectedId, $result->id); parent::assertSame($expectedFirstname, $result->firstname); parent::assertSame($expectedLastname, $result->lastname); - parent::assertSame('female', $result->getSex()); + parent::assertSame('female', $result->getGender()); } /** From cf0bb7308b2d9005cc9f1777e3fdc20d7402c3e1 Mon Sep 17 00:00:00 2001 From: Andreas Heigl Date: Sun, 15 Sep 2019 20:40:04 +0200 Subject: [PATCH 7/8] Fix CS-issues --- src/Common/Entity/User.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Common/Entity/User.php b/src/Common/Entity/User.php index 9eb0f3e9a..1b6cc84f5 100755 --- a/src/Common/Entity/User.php +++ b/src/Common/Entity/User.php @@ -105,12 +105,12 @@ public function getGender(): string public function setGender(string $gender): void { if ($gender === self::SEX_MALE) { - trigger_error ('the constant SEX_MALE is deprecated. use GENDER_MALE instead', E_USER_DEPRECATED); + trigger_error('the constant SEX_MALE is deprecated. use GENDER_MALE instead', E_USER_DEPRECATED); $gender = self::GENDER_MALE; } if ($gender === self::SEX_FEMALE) { - trigger_error ('the constant SEX_FEMALE is deprecated. use GENDER_FEMALE instead', E_USER_DEPRECATED); + trigger_error('the constant SEX_FEMALE is deprecated. use GENDER_FEMALE instead', E_USER_DEPRECATED); $gender = self::GENDER_FEMALE; } From 59da662de1fe5a92792ab1920969228d5723d5d9 Mon Sep 17 00:00:00 2001 From: Andreas Heigl Date: Sun, 15 Sep 2019 20:53:26 +0200 Subject: [PATCH 8/8] Remove unnecessary docblock The removed docBlock contains redundant information and was therefore removed --- src/Common/Entity/User.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Common/Entity/User.php b/src/Common/Entity/User.php index 1b6cc84f5..7f82b5fe9 100755 --- a/src/Common/Entity/User.php +++ b/src/Common/Entity/User.php @@ -99,9 +99,6 @@ public function getGender(): string return $this->gender; } - /** - * @param string $sex - */ public function setGender(string $gender): void { if ($gender === self::SEX_MALE) {