fix bug with friends method when you can add non-existing or deleted users and yourself

This commit is contained in:
veselcraft 2020-11-01 04:17:04 -05:00
parent 1e5e9d7080
commit 991e377e16

View file

@ -6,149 +6,155 @@ use openvk\Web\Models\Repositories\Users as UsersRepo;
final class Friends extends VKAPIRequestHandler final class Friends extends VKAPIRequestHandler
{ {
function get(int $user_id, string $fields = "", int $offset = 0, int $count = 100): object function get(int $user_id, string $fields = "", int $offset = 0, int $count = 100): object
{ {
$i = 0; $i = 0;
$offset++; $offset++;
$friends = []; $friends = [];
$users = new UsersRepo; $users = new UsersRepo;
$this->requireUser(); $this->requireUser();
foreach ($users->get($user_id)->getFriends($offset, $count) as $friend) { foreach ($users->get($user_id)->getFriends($offset, $count) as $friend) {
$friends[$i] = $friend->getId(); $friends[$i] = $friend->getId();
$i++; $i++;
} }
$response = $friends; $response = $friends;
$usersApi = new Users($this->getUser()); $usersApi = new Users($this->getUser());
if (!is_null($fields)) { if (!is_null($fields)) {
$response = $usersApi->get(implode(',', $friends), $fields, 0, $count, true); // FIXME $response = $usersApi->get(implode(',', $friends), $fields, 0, $count, true); // FIXME
} }
return (object) [ return (object) [
"count" => $users->get($user_id)->getFriendsCount(), "count" => $users->get($user_id)->getFriendsCount(),
"items" => $response "items" => $response
]; ];
} }
function getLists(): object function getLists(): object
{ {
$this->requireUser(); $this->requireUser();
return (object) [ return (object) [
"count" => 0, "count" => 0,
"items" => (array)[] "items" => (array)[]
]; ];
} }
function deleteList(): int function deleteList(): int
{ {
$this->requireUser(); $this->requireUser();
return 1; return 1;
} }
function edit(): int function edit(): int
{ {
$this->requireUser(); $this->requireUser();
return 1; return 1;
} }
function editList(): int function editList(): int
{ {
$this->requireUser(); $this->requireUser();
return 1; return 1;
} }
function add(string $user_id): int function add(string $user_id): int
{ {
$this->requireUser(); $this->requireUser();
$users = new UsersRepo; $users = new UsersRepo;
$user = $users->get(intval($user_id)); $user = $users->get(intval($user_id));
switch ($user->getSubscriptionStatus($this->getUser())) { if(is_null($user)){
case 0: $this->fail(177, "Cannot add this user to friends as user not found");
$user->toggleSubscription($this->getUser()); } else if($user->getId() == $this->getUser()->getId()) {
return 1; $this->fail(174, "Cannot add user himself as friend");
break; }
case 1: switch ($user->getSubscriptionStatus($this->getUser())) {
$user->toggleSubscription($this->getUser()); case 0:
return 2; $user->toggleSubscription($this->getUser());
break; return 1;
break;
case 3: case 1:
return 2; $user->toggleSubscription($this->getUser());
break; return 2;
break;
default: case 3:
return 1; return 2;
break; break;
}
}
function delete(string $user_id): int default:
{ return 1;
$this->requireUser(); break;
}
}
$users = new UsersRepo; function delete(string $user_id): int
{
$this->requireUser();
$user = $users->get(intval($user_id)); $users = new UsersRepo;
switch ($user->getSubscriptionStatus($this->getUser())) { $user = $users->get(intval($user_id));
case 3:
$user->toggleSubscription($this->getUser());
return 1;
break;
default: switch ($user->getSubscriptionStatus($this->getUser())) {
fail(15, "Access denied: No friend or friend request found."); case 3:
break; $user->toggleSubscription($this->getUser());
} return 1;
} break;
function areFriends(string $user_ids): array default:
{ fail(15, "Access denied: No friend or friend request found.");
$this->requireUser(); break;
}
}
$users = new UsersRepo; function areFriends(string $user_ids): array
{
$this->requireUser();
$friends = explode(',', $user_ids); $users = new UsersRepo;
$response = []; $friends = explode(',', $user_ids);
for ($i=0; $i < sizeof($friends); $i++) { $response = [];
$friend = $users->get(intval($friends[$i]));
$status = 0; for ($i=0; $i < sizeof($friends); $i++) {
switch ($friend->getSubscriptionStatus($this->getUser())) { $friend = $users->get(intval($friends[$i]));
case 3:
case 0:
$status = $friend->getSubscriptionStatus($this->getUser());
break;
case 1: $status = 0;
$status = 2; switch ($friend->getSubscriptionStatus($this->getUser())) {
break; case 3:
case 0:
$status = $friend->getSubscriptionStatus($this->getUser());
break;
case 2: case 1:
$status = 1; $status = 2;
break; break;
}
$response[] = (object)[ case 2:
"friend_status" => $friend->getSubscriptionStatus($this->getUser()), $status = 1;
"user_id" => $friend->getId() break;
]; }
}
return $response; $response[] = (object)[
} "friend_status" => $friend->getSubscriptionStatus($this->getUser()),
"user_id" => $friend->getId()
];
}
return $response;
}
} }