2025-01-31 18:20:13 +03:00
|
|
|
<?php
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
2020-08-12 14:36:18 +03:00
|
|
|
namespace openvk\VKAPI\Handlers;
|
2025-01-31 18:20:13 +03:00
|
|
|
|
2020-08-12 14:36:18 +03:00
|
|
|
use openvk\Web\Models\Repositories\Users as UsersRepo;
|
|
|
|
|
|
|
|
final class Friends extends VKAPIRequestHandler
|
|
|
|
{
|
2025-01-31 18:20:13 +03:00
|
|
|
public function get(int $user_id = 0, string $fields = "", int $offset = 0, int $count = 100): object
|
|
|
|
{
|
|
|
|
$i = 0;
|
|
|
|
$offset++;
|
|
|
|
$friends = [];
|
|
|
|
|
|
|
|
$users = new UsersRepo();
|
|
|
|
|
|
|
|
$this->requireUser();
|
|
|
|
|
|
|
|
if ($user_id == 0) {
|
|
|
|
$user_id = $this->getUser()->getId();
|
|
|
|
}
|
|
|
|
|
2023-12-02 20:21:16 +03:00
|
|
|
$user = $users->get($user_id);
|
2025-01-31 18:20:13 +03:00
|
|
|
|
|
|
|
if (!$user || $user->isDeleted()) {
|
2023-12-02 20:21:16 +03:00
|
|
|
$this->fail(100, "Invalid user");
|
2025-01-31 18:20:13 +03:00
|
|
|
}
|
2023-12-02 20:21:16 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
if (!$user->getPrivacyPermission("friends.read", $this->getUser())) {
|
2023-12-02 20:21:16 +03:00
|
|
|
$this->fail(15, "Access denied: this user chose to hide his friends.");
|
2025-01-31 18:20:13 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($user->getFriends($offset, $count) as $friend) {
|
2023-12-02 20:21:16 +03:00
|
|
|
$friends[$i] = $friend->getId();
|
|
|
|
$i++;
|
|
|
|
}
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
$response = $friends;
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
$usersApi = new Users($this->getUser());
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
if (!is_null($fields)) {
|
|
|
|
$response = $usersApi->get(implode(',', $friends), $fields, 0, $count);
|
|
|
|
} # FIXME
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
return (object) [
|
|
|
|
"count" => $users->get($user_id)->getFriendsCount(),
|
|
|
|
"items" => $response,
|
|
|
|
];
|
|
|
|
}
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
public function getLists(): object
|
|
|
|
{
|
|
|
|
$this->requireUser();
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
return (object) [
|
|
|
|
"count" => 0,
|
|
|
|
"items" => (array) [],
|
|
|
|
];
|
|
|
|
}
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
public function deleteList(): int
|
|
|
|
{
|
|
|
|
$this->requireUser();
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
return 1;
|
|
|
|
}
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
public function edit(): int
|
|
|
|
{
|
|
|
|
$this->requireUser();
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
return 1;
|
|
|
|
}
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
public function editList(): int
|
|
|
|
{
|
|
|
|
$this->requireUser();
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
return 1;
|
|
|
|
}
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
public function add(string $user_id): int
|
|
|
|
{
|
|
|
|
$this->requireUser();
|
2023-02-08 14:20:50 +03:00
|
|
|
$this->willExecuteWriteAction();
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
$users = new UsersRepo();
|
|
|
|
$user = $users->get(intval($user_id));
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
if (is_null($user)) {
|
|
|
|
$this->fail(177, "Cannot add this user to friends as user not found");
|
|
|
|
} elseif ($user->getId() == $this->getUser()->getId()) {
|
|
|
|
$this->fail(174, "Cannot add user himself as friend");
|
|
|
|
}
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
switch ($user->getSubscriptionStatus($this->getUser())) {
|
|
|
|
case 0:
|
|
|
|
$user->toggleSubscription($this->getUser());
|
|
|
|
return 1;
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
case 1:
|
|
|
|
$user->toggleSubscription($this->getUser());
|
|
|
|
return 2;
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
case 3:
|
|
|
|
return 2;
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
default:
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
public function delete(string $user_id): int
|
|
|
|
{
|
|
|
|
$this->requireUser();
|
|
|
|
$this->willExecuteWriteAction();
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
$users = new UsersRepo();
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
$user = $users->get(intval($user_id));
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
switch ($user->getSubscriptionStatus($this->getUser())) {
|
|
|
|
case 3:
|
|
|
|
$user->toggleSubscription($this->getUser());
|
|
|
|
return 1;
|
2020-11-01 12:17:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
default:
|
|
|
|
$this->fail(15, "Access denied: No friend or friend request found.");
|
|
|
|
}
|
|
|
|
}
|
2022-08-14 12:43:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
public function areFriends(string $user_ids): array
|
|
|
|
{
|
|
|
|
$this->requireUser();
|
2022-09-17 00:05:25 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
$users = new UsersRepo();
|
2022-08-14 12:43:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
$friends = explode(',', $user_ids);
|
2022-08-14 12:43:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
$response = [];
|
2022-08-14 12:43:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
for ($i = 0; $i < sizeof($friends); $i++) {
|
|
|
|
$friend = $users->get(intval($friends[$i]));
|
2022-08-14 12:43:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
$response[] = (object) [
|
|
|
|
"friend_status" => $friend->getSubscriptionStatus($this->getUser()),
|
|
|
|
"user_id" => $friend->getId(),
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
return $response;
|
|
|
|
}
|
2022-08-14 12:43:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
public function getRequests(string $fields = "", int $out = 0, int $offset = 0, int $count = 100, int $extended = 0): object
|
|
|
|
{
|
|
|
|
if ($count >= 1000) {
|
|
|
|
$this->fail(100, "One of the required parameters was not passed or is invalid.");
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->requireUser();
|
|
|
|
|
|
|
|
$i = 0;
|
|
|
|
$offset++;
|
|
|
|
$followers = [];
|
|
|
|
|
|
|
|
if ($out != 0) {
|
|
|
|
foreach ($this->getUser()->getFollowers($offset, $count) as $follower) {
|
|
|
|
$followers[$i] = $follower->getId();
|
|
|
|
$i++;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
foreach ($this->getUser()->getRequests($offset, $count) as $follower) {
|
|
|
|
$followers[$i] = $follower->getId();
|
|
|
|
$i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$response = $followers;
|
|
|
|
$usersApi = new Users($this->getUser());
|
|
|
|
|
|
|
|
$response = $usersApi->get(implode(',', $followers), $fields, 0, $count);
|
|
|
|
|
|
|
|
foreach ($response as $user) {
|
|
|
|
$user->user_id = $user->id;
|
|
|
|
}
|
2022-08-14 12:43:04 +03:00
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
return (object) [
|
|
|
|
"count" => $this->getUser()->getFollowersCount(),
|
|
|
|
"items" => $response,
|
|
|
|
];
|
|
|
|
}
|
2022-08-14 12:43:04 +03:00
|
|
|
}
|