requireUser(); return (object) [ "first_name" => $this->getUser()->getFirstName(), "id" => $this->getUser()->getId(), "last_name" => $this->getUser()->getLastName(), "home_town" => $this->getUser()->getHometown(), "status" => $this->getUser()->getStatus(), "bdate" => is_null($this->getUser()->getBirthday()) ? '01.01.1970' : $this->getUser()->getBirthday()->format('%e.%m.%Y'), "bdate_visibility" => $this->getUser()->getBirthdayPrivacy(), "phone" => "+420 ** *** 228", # TODO "relation" => $this->getUser()->getMaritalStatus(), "sex" => $this->getUser()->isFemale() ? 1 : 2 ]; } function getInfo(): object { $this->requireUser(); return (object) [ "2fa_required" => $this->getUser()->is2faEnabled() ? 1 : 0, "country" => "CZ", # TODO "eu_user" => false, # TODO "https_required" => 1, "intro" => 0, "community_comments" => false, "is_live_streaming_enabled" => false, "is_new_live_streaming_enabled" => false, "lang" => 1, "no_wall_replies" => 0, "own_posts_default" => 0 ]; } function setOnline(): int { $this->requireUser(); $this->getUser()->setOnline(time()); $this->getUser()->save(); return 1; } function setOffline(): object { $this->requireUser(); # Цiй метод є заглушка return 1; } function getAppPermissions(): int { return 9355263; } function getCounters(string $filter = ""): object { return (object) [ "friends" => $this->getUser()->getFollowersCount(), "notifications" => $this->getUser()->getNotificationsCount(), "messages" => $this->getUser()->getUnreadMessagesCount() ]; # TODO: Filter } function saveProfileInfo(string $first_name = "", string $last_name = "", string $screen_name = "", int $sex = -1, int $relation = -1, string $bdate = "", int $bdate_visibility = -1, string $home_town = "", string $status = ""): object { $this->requireUser(); $user = $this->getUser(); $output = [ "changed" => 0, ]; if(!empty($first_name) || !empty($last_name)) { $output["name_request"] = [ "id" => random_int(1, 2048), # For compatibility with original VK API "status" => "success", "first_name" => !empty($first_name) ? $first_name : $user->getFirstName(), "last_name" => !empty($last_name) ? $last_name : $user->getLastName(), ]; try { if(!empty($first_name)) $user->setFirst_name($first_name); if(!empty($last_name)) $user->setLast_Name($last_name); } catch (InvalidUserNameException $e) { $output["name_request"]["status"] = "declined"; return (object) $output; } } if(!empty($screen_name)) if (!$user->setShortCode($screen_name)) $this->fail(1260, "Invalid screen name"); # For compatibility with original VK API if($sex > 0) $user->setSex($sex == 1 ? 1 : 0); if($relation > -1) $user->setMarital_Status($relation); if(!empty($bdate)) { $birthday = strtotime($bdate); if (!is_int($birthday)) $this->fail(100, "invalid value of bdate."); $user->setBirthday($birthday); } # For compatibility with original VK API switch($bdate_visibility) { case 0: $this->fail(946, "Hiding date of birth is not implemented."); break; case 1: $user->setBirthday_privacy(0); break; case 2: $user->setBirthday_privacy(1); } if(!empty($home_town)) $user->setHometown($home_town); if(!empty($status)) $user->setStatus($status); if($sex > 0 || $relation > -1 || $bdate_visibility > 1 || !empty("$first_name$last_name$screen_name$bdate$home_town$status")) { $output["changed"] = 1; $user->save(); } return (object) $output; } }