diff --git a/.idea/deployment.xml b/.idea/deployment.xml new file mode 100644 index 00000000..dc2a86a5 --- /dev/null +++ b/.idea/deployment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 00000000..30bab2ab --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/VKAPI/Handlers/Users.php b/VKAPI/Handlers/Users.php index 6185a250..e9e33c3e 100644 --- a/VKAPI/Handlers/Users.php +++ b/VKAPI/Handlers/Users.php @@ -52,7 +52,7 @@ final class Users extends VKAPIRequestHandler $response[$i]->verified = intval($usr->isVerified()); break; case "sex": - $response[$i]->sex = $usr->isFemale() ? 1 : 2; + $response[$i]->sex = $usr->getGender(); break; case "has_photo": $response[$i]->has_photo = is_null($usr->getAvatarPhoto()) ? 0 : 1; diff --git a/Web/Models/Entities/User.php b/Web/Models/Entities/User.php index b7516c90..92c91e3a 100644 --- a/Web/Models/Entities/User.php +++ b/Web/Models/Entities/User.php @@ -726,7 +726,25 @@ class User extends RowModel function isFemale(): bool { - return (bool) $this->getRecord()->sex; + return (bool) $this->getRawGender() == "female"; + } + + function getGender(): string + { + $gender = $this->getRecord()->gender; + + if(in_array($gender, ["female", "male", "non-binary"])) return tr($gender); + else return $gender ?? "Не указан"; + } + + function getRawGender(): ?string + { + return $this->getRecord()->gender; + } + + function hasOtherGenderString(): bool + { + return !in_array($this->getRecord()->gender, ["female", "male", "non-binary", NULL]); } function isVerified(): bool diff --git a/Web/Presenters/AuthPresenter.php b/Web/Presenters/AuthPresenter.php index bb9d7272..799250f0 100644 --- a/Web/Presenters/AuthPresenter.php +++ b/Web/Presenters/AuthPresenter.php @@ -91,7 +91,10 @@ final class AuthPresenter extends OpenVKPresenter $user = new User; $user->setFirst_Name($this->postParam("first_name")); $user->setLast_Name($this->postParam("last_name")); - $user->setSex((int)($this->postParam("sex") === "female")); + + if ($this->postParam("sex") != "null") + $user->setGender((int)($this->postParam("sex") === "female")); + $user->setEmail($this->postParam("email")); $user->setSince(date("Y-m-d H:i:s")); $user->setRegistering_Ip(CONNECTING_IP); diff --git a/Web/Presenters/UserPresenter.php b/Web/Presenters/UserPresenter.php index 3acabc84..f1cab162 100644 --- a/Web/Presenters/UserPresenter.php +++ b/Web/Presenters/UserPresenter.php @@ -165,9 +165,17 @@ final class UserPresenter extends OpenVKPresenter if ($this->postParam("politViews") <= 9 && $this->postParam("politViews") >= 0) $user->setPolit_Views($this->postParam("politViews")); - if ($this->postParam("gender") <= 1 && $this->postParam("gender") >= 0) - $user->setSex($this->postParam("gender")); - + if ($this->postParam("gender")) + if($this->postParam("gender") == "hide") + $user->setGender(NULL); + elseif($this->postParam("gender") == "other") + if($this->postParam("other-gender-string")) + $user->setGender($this->postParam("other-gender-string")); + else + $user->setGender(NULL); + else + $user->setGender($this->postParam("gender")); + if(!empty($this->postParam("phone")) && $this->postParam("phone") !== $user->getPhone()) { if(!OPENVK_ROOT_CONF["openvk"]["credentials"]["smsc"]["enable"]) $this->flashFail("err", tr("error_segmentation"), "котлетки"); diff --git a/Web/Presenters/templates/Auth/Register.xml b/Web/Presenters/templates/Auth/Register.xml index 16532cb1..abf85b91 100644 --- a/Web/Presenters/templates/Auth/Register.xml +++ b/Web/Presenters/templates/Auth/Register.xml @@ -49,8 +49,9 @@ {var $femalePreferred = OPENVK_ROOT_CONF["openvk"]["preferences"]["femaleGenderPriority"]} diff --git a/Web/Presenters/templates/User/Edit.xml b/Web/Presenters/templates/User/Edit.xml index 96152132..b493121a 100644 --- a/Web/Presenters/templates/User/Edit.xml +++ b/Web/Presenters/templates/User/Edit.xml @@ -133,11 +133,23 @@ {_gender}: + - + + + + + + diff --git a/Web/Presenters/templates/User/View.xml b/Web/Presenters/templates/User/View.xml index fb38133d..571575a0 100644 --- a/Web/Presenters/templates/User/View.xml +++ b/Web/Presenters/templates/User/View.xml @@ -382,7 +382,7 @@ {_gender}: - {$user->isFemale() ? tr("female") : tr("male")} + {$user->getGender()} {_relationship}: diff --git a/install/sqls/00032-other-gender-options.sql b/install/sqls/00032-other-gender-options.sql new file mode 100644 index 00000000..5014c153 --- /dev/null +++ b/install/sqls/00032-other-gender-options.sql @@ -0,0 +1,2 @@ +ALTER TABLE `profiles` DROP `sex`; +ALTER TABLE `profiles` ADD `gender` VARCHAR(50) NULL DEFAULT NULL AFTER `left_menu`; diff --git a/locales/en.strings b/locales/en.strings index f5259312..ec5b35ac 100644 --- a/locales/en.strings +++ b/locales/en.strings @@ -72,6 +72,10 @@ "gender" = "Gender"; "male" = "male"; "female" = "female"; +"non-binary" = "non-binary"; +"other" = "other"; +"other_gender_placeholder" = "I refer to myself as..."; +"hidden" = "not specified"; "description" = "Description"; "save" = "Save"; "main_information" = "Main information"; @@ -1226,3 +1230,5 @@ "undergoing_section_maintenance" = "Unfortunately, the $1 section is temporarily unavailable. We are already working on troubleshooting. Please try to come back later."; "topics" = "Topics"; + +"not_specified" = "Not specified"; diff --git a/locales/ru.strings b/locales/ru.strings index 82956b45..268617a4 100644 --- a/locales/ru.strings +++ b/locales/ru.strings @@ -71,6 +71,10 @@ "gender" = "Пол"; "male" = "мужской"; "female" = "женский"; +"non-binary" = "небинарный"; +"other" = "другой"; +"other_gender_placeholder" = "Я идентифицирую себя как..."; +"hidden" = "не указан"; "description" = "Описание"; "save" = "Сохранить"; "main_information" = "Основная информация"; @@ -1284,3 +1288,5 @@ "undergoing_section_maintenance" = "К сожалению, раздел $1 временно недоступен. Мы уже работаем над устранением неисправностей. Пожалуйста, попробуйте зайти позже."; "topics" = "Темы"; + +"not_specified" = "Не указан";