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
|
|
|
|
|
2023-11-14 22:44:39 +03:00
|
|
|
|
use openvk\Web\Models\Entities\{User, Report};
|
2020-08-12 14:36:18 +03:00
|
|
|
|
use openvk\Web\Models\Repositories\Users as UsersRepo;
|
2023-11-22 11:31:26 +03:00
|
|
|
|
use openvk\Web\Models\Repositories\{Photos, Clubs, Albums, Videos, Notes, Audios};
|
2023-11-14 22:44:39 +03:00
|
|
|
|
use openvk\Web\Models\Repositories\Reports;
|
2020-08-12 14:36:18 +03:00
|
|
|
|
|
|
|
|
|
final class Users extends VKAPIRequestHandler
|
|
|
|
|
{
|
2025-01-31 18:20:13 +03:00
|
|
|
|
public function get(string $user_ids = "0", string $fields = "", int $offset = 0, int $count = 100, User $authuser = null /* костыль(( */): array
|
2020-08-12 14:36:18 +03:00
|
|
|
|
{
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if ($authuser == null) {
|
|
|
|
|
$authuser = $this->getUser();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$users = new UsersRepo();
|
|
|
|
|
if ($user_ids == "0") {
|
|
|
|
|
if (!$authuser) {
|
|
|
|
|
return [];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$user_ids = (string) $authuser->getId();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2022-07-22 13:23:36 +03:00
|
|
|
|
$usrs = explode(',', $user_ids);
|
2025-01-31 18:20:13 +03:00
|
|
|
|
$response = [];
|
2020-08-12 14:36:18 +03:00
|
|
|
|
|
|
|
|
|
$ic = sizeof($usrs);
|
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if (sizeof($usrs) > $count) {
|
|
|
|
|
$ic = $count;
|
|
|
|
|
}
|
2020-08-12 14:36:18 +03:00
|
|
|
|
|
|
|
|
|
$usrs = array_slice($usrs, $offset * $count);
|
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
for ($i = 0; $i < $ic; $i++) {
|
|
|
|
|
if ($usrs[$i] != 0) {
|
|
|
|
|
$usr = $users->get((int) $usrs[$i]);
|
|
|
|
|
if (is_null($usr) || $usr->isDeleted()) {
|
|
|
|
|
$response[$i] = (object) [
|
|
|
|
|
"id" => (int) $usrs[$i],
|
|
|
|
|
"first_name" => "DELETED",
|
|
|
|
|
"last_name" => "",
|
|
|
|
|
"deactivated" => "deleted",
|
|
|
|
|
];
|
|
|
|
|
} elseif ($usr->isBanned()) {
|
|
|
|
|
$response[$i] = (object) [
|
|
|
|
|
"id" => $usr->getId(),
|
|
|
|
|
"first_name" => $usr->getFirstName(true),
|
|
|
|
|
"last_name" => $usr->getLastName(true),
|
|
|
|
|
"deactivated" => "banned",
|
|
|
|
|
"ban_reason" => $usr->getBanReason(),
|
|
|
|
|
];
|
|
|
|
|
} elseif ($usrs[$i] == null) {
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
$response[$i] = (object) [
|
|
|
|
|
"id" => $usr->getId(),
|
|
|
|
|
"first_name" => $usr->getFirstName(true),
|
|
|
|
|
"last_name" => $usr->getLastName(true),
|
|
|
|
|
"is_closed" => $usr->isClosed(),
|
|
|
|
|
"can_access_closed" => (bool) $usr->canBeViewedBy($this->getUser()),
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
$flds = explode(',', $fields);
|
|
|
|
|
$canView = $usr->canBeViewedBy($this->getUser());
|
|
|
|
|
foreach ($flds as $field) {
|
|
|
|
|
switch ($field) {
|
|
|
|
|
case "verified":
|
|
|
|
|
$response[$i]->verified = intval($usr->isVerified());
|
|
|
|
|
break;
|
|
|
|
|
case "sex":
|
|
|
|
|
$response[$i]->sex = $usr->isFemale() ? 1 : ($usr->isNeutral() ? 0 : 2);
|
|
|
|
|
break;
|
|
|
|
|
case "has_photo":
|
|
|
|
|
$response[$i]->has_photo = is_null($usr->getAvatarPhoto()) ? 0 : 1;
|
|
|
|
|
break;
|
|
|
|
|
case "photo_max_orig":
|
|
|
|
|
$response[$i]->photo_max_orig = $usr->getAvatarURL();
|
|
|
|
|
break;
|
|
|
|
|
case "photo_max":
|
|
|
|
|
$response[$i]->photo_max = $usr->getAvatarURL("original");
|
|
|
|
|
break;
|
|
|
|
|
case "photo_50":
|
|
|
|
|
$response[$i]->photo_50 = $usr->getAvatarURL();
|
|
|
|
|
break;
|
|
|
|
|
case "photo_100":
|
|
|
|
|
$response[$i]->photo_100 = $usr->getAvatarURL("tiny");
|
|
|
|
|
break;
|
|
|
|
|
case "photo_200":
|
|
|
|
|
$response[$i]->photo_200 = $usr->getAvatarURL("normal");
|
|
|
|
|
break;
|
|
|
|
|
case "photo_200_orig": # вообще не ебу к чему эта строка ну пусть будет кек
|
|
|
|
|
$response[$i]->photo_200_orig = $usr->getAvatarURL("normal");
|
|
|
|
|
break;
|
|
|
|
|
case "photo_400_orig":
|
|
|
|
|
$response[$i]->photo_400_orig = $usr->getAvatarURL("normal");
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
# Она хочет быть выебанной видя матан
|
|
|
|
|
# Покайфу когда ты Виет а вокруг лишь дискриминант
|
|
|
|
|
|
|
|
|
|
# ору а когда я это успел написать
|
|
|
|
|
# вова кстати не матерись в коде мамка же спалит азщазаззазщазазаззазазазх
|
|
|
|
|
case "status":
|
|
|
|
|
if ($usr->getStatus() != null) {
|
|
|
|
|
$response[$i]->status = $usr->getStatus();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$audioStatus = $usr->getCurrentAudioStatus();
|
|
|
|
|
|
|
|
|
|
if ($audioStatus) {
|
|
|
|
|
$response[$i]->status_audio = $audioStatus->toVkApiStruct();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case "screen_name":
|
|
|
|
|
if ($usr->getShortCode() != null) {
|
|
|
|
|
$response[$i]->screen_name = $usr->getShortCode();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "friend_status":
|
|
|
|
|
switch ($usr->getSubscriptionStatus($authuser)) {
|
|
|
|
|
case 3:
|
|
|
|
|
# NOTICE falling through
|
|
|
|
|
case 0:
|
|
|
|
|
$response[$i]->friend_status = $usr->getSubscriptionStatus($authuser);
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
$response[$i]->friend_status = 2;
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
$response[$i]->friend_status = 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "last_seen":
|
|
|
|
|
if ($usr->onlineStatus() == 0) {
|
|
|
|
|
$platform = $usr->getOnlinePlatform(true);
|
|
|
|
|
switch ($platform) {
|
|
|
|
|
case 'iphone':
|
|
|
|
|
$platform = 2;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 'android':
|
|
|
|
|
$platform = 4;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case null:
|
|
|
|
|
$platform = 7;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
$platform = 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->last_seen = (object) [
|
|
|
|
|
"platform" => $platform,
|
|
|
|
|
"time" => $usr->getOnline()->timestamp(),
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
// no break
|
|
|
|
|
case "music":
|
|
|
|
|
if (!$canView) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->music = $usr->getFavoriteMusic();
|
|
|
|
|
break;
|
|
|
|
|
case "movies":
|
|
|
|
|
if (!$canView) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->movies = $usr->getFavoriteFilms();
|
|
|
|
|
break;
|
|
|
|
|
case "tv":
|
|
|
|
|
if (!$canView) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->tv = $usr->getFavoriteShows();
|
|
|
|
|
break;
|
|
|
|
|
case "books":
|
|
|
|
|
if (!$canView) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->books = $usr->getFavoriteBooks();
|
|
|
|
|
break;
|
|
|
|
|
case "city":
|
|
|
|
|
if (!$canView) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->city = $usr->getCity();
|
|
|
|
|
break;
|
|
|
|
|
case "interests":
|
|
|
|
|
if (!$canView) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->interests = $usr->getInterests();
|
|
|
|
|
break;
|
|
|
|
|
case "quotes":
|
|
|
|
|
if (!$canView) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->quotes = $usr->getFavoriteQuote();
|
|
|
|
|
break;
|
|
|
|
|
case "games":
|
|
|
|
|
if (!$canView) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->games = $usr->getFavoriteGames();
|
|
|
|
|
break;
|
|
|
|
|
case "email":
|
|
|
|
|
if (!$canView) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->email = $usr->getContactEmail();
|
|
|
|
|
break;
|
|
|
|
|
case "telegram":
|
|
|
|
|
if (!$canView) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->telegram = $usr->getTelegram();
|
|
|
|
|
break;
|
|
|
|
|
case "about":
|
|
|
|
|
if (!$canView) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->about = $usr->getDescription();
|
|
|
|
|
break;
|
|
|
|
|
case "rating":
|
|
|
|
|
if (!$canView) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->rating = $usr->getRating();
|
|
|
|
|
break;
|
|
|
|
|
case "counters":
|
|
|
|
|
$response[$i]->counters = (object) [
|
|
|
|
|
"friends_count" => $usr->getFriendsCount(),
|
|
|
|
|
"photos_count" => (new Photos())->getUserPhotosCount($usr),
|
|
|
|
|
"videos_count" => (new Videos())->getUserVideosCount($usr),
|
|
|
|
|
"audios_count" => (new Audios())->getUserCollectionSize($usr),
|
|
|
|
|
"notes_count" => (new Notes())->getUserNotesCount($usr),
|
|
|
|
|
];
|
|
|
|
|
break;
|
|
|
|
|
case "correct_counters":
|
|
|
|
|
$response[$i]->counters = (object) [
|
|
|
|
|
"friends" => $usr->getFriendsCount(),
|
|
|
|
|
"photos" => (new Photos())->getUserPhotosCount($usr),
|
|
|
|
|
"videos" => (new Videos())->getUserVideosCount($usr),
|
|
|
|
|
"audios" => (new Audios())->getUserCollectionSize($usr),
|
|
|
|
|
"notes" => (new Notes())->getUserNotesCount($usr),
|
|
|
|
|
"groups" => $usr->getClubCount(),
|
|
|
|
|
"online_friends" => $usr->getFriendsOnlineCount(),
|
|
|
|
|
];
|
|
|
|
|
break;
|
2024-03-27 23:38:35 +03:00
|
|
|
|
case "guid":
|
|
|
|
|
$response[$i]->guid = $usr->getChandlerGUID();
|
|
|
|
|
break;
|
2025-01-31 18:20:13 +03:00
|
|
|
|
case 'background':
|
|
|
|
|
$backgrounds = $usr->getBackDropPictureURLs();
|
|
|
|
|
$response[$i]->background = $backgrounds;
|
|
|
|
|
break;
|
|
|
|
|
case 'reg_date':
|
|
|
|
|
if (!$canView) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->reg_date = $usr->getRegistrationTime()->timestamp();
|
|
|
|
|
break;
|
|
|
|
|
case 'is_dead':
|
|
|
|
|
$response[$i]->is_dead = $usr->isDead();
|
|
|
|
|
break;
|
|
|
|
|
case 'nickname':
|
|
|
|
|
$response[$i]->nickname = $usr->getPseudo();
|
|
|
|
|
break;
|
|
|
|
|
case 'blacklisted_by_me':
|
|
|
|
|
if (!$authuser) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->blacklisted_by_me = (int) $usr->isBlacklistedBy($this->getUser());
|
|
|
|
|
break;
|
|
|
|
|
case 'blacklisted':
|
|
|
|
|
if (!$authuser) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->blacklisted = (int) $this->getUser()->isBlacklistedBy($usr);
|
|
|
|
|
break;
|
|
|
|
|
case "custom_fields":
|
|
|
|
|
if (sizeof($usrs) > 1) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$c_fields = \openvk\Web\Models\Entities\UserInfoEntities\AdditionalField::getByOwner($usr->getId());
|
|
|
|
|
$append_array = [];
|
|
|
|
|
foreach ($c_fields as $c_field) {
|
|
|
|
|
$append_array[] = $c_field->toVkApiStruct();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$response[$i]->custom_fields = $append_array;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($usr->getOnline()->timestamp() + 300 > time()) {
|
|
|
|
|
$response[$i]->online = 1;
|
|
|
|
|
} else {
|
|
|
|
|
$response[$i]->online = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-08-12 14:36:18 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $response;
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
public function getFollowers(int $user_id, string $fields = "", int $offset = 0, int $count = 100): object
|
2020-08-12 14:36:18 +03:00
|
|
|
|
{
|
|
|
|
|
$offset++;
|
|
|
|
|
$followers = [];
|
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
$users = new UsersRepo();
|
2020-08-12 14:36:18 +03:00
|
|
|
|
|
|
|
|
|
$this->requireUser();
|
2025-01-31 18:20:13 +03:00
|
|
|
|
|
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(14, "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->canBeViewedBy($this->getUser())) {
|
2023-12-02 20:21:16 +03:00
|
|
|
|
$this->fail(15, "Access denied");
|
2025-01-31 18:20:13 +03:00
|
|
|
|
}
|
2023-12-02 20:21:16 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
foreach ($users->get($user_id)->getFollowers($offset, $count) as $follower) {
|
2020-08-12 14:36:18 +03:00
|
|
|
|
$followers[] = $follower->getId();
|
2025-01-31 18:20:13 +03:00
|
|
|
|
}
|
2020-08-12 14:36:18 +03:00
|
|
|
|
|
|
|
|
|
$response = $followers;
|
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if (!is_null($fields)) {
|
|
|
|
|
$response = $this->get(implode(',', $followers), $fields, 0, $count);
|
|
|
|
|
}
|
2020-08-12 14:36:18 +03:00
|
|
|
|
|
|
|
|
|
return (object) [
|
|
|
|
|
"count" => $users->get($user_id)->getFollowersCount(),
|
2025-01-31 18:20:13 +03:00
|
|
|
|
"items" => $response,
|
2020-08-12 14:36:18 +03:00
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
public function search(
|
|
|
|
|
string $q,
|
|
|
|
|
string $fields = "",
|
|
|
|
|
int $offset = 0,
|
|
|
|
|
int $count = 100,
|
|
|
|
|
string $city = "",
|
|
|
|
|
string $hometown = "",
|
|
|
|
|
int $sex = 3,
|
|
|
|
|
int $status = 0, # marital_status
|
|
|
|
|
bool $online = false,
|
|
|
|
|
# non standart params:
|
|
|
|
|
int $sort = 0,
|
|
|
|
|
int $polit_views = 0,
|
|
|
|
|
string $fav_music = "",
|
|
|
|
|
string $fav_films = "",
|
|
|
|
|
string $fav_shows = "",
|
|
|
|
|
string $fav_books = ""
|
|
|
|
|
) {
|
|
|
|
|
if ($count > 100) {
|
2024-10-25 16:28:35 +03:00
|
|
|
|
$this->fail(100, "One of the parameters specified was missing or invalid: count should be less or equal to 100");
|
|
|
|
|
}
|
2023-06-10 18:54:02 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
$users = new UsersRepo();
|
2024-10-25 16:28:35 +03:00
|
|
|
|
$output_sort = ['type' => 'id', 'invert' => false];
|
2025-01-31 18:20:13 +03:00
|
|
|
|
$output_params = [
|
|
|
|
|
"ignore_private" => true,
|
|
|
|
|
];
|
2023-06-10 18:54:02 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
switch ($sort) {
|
|
|
|
|
default:
|
2023-06-10 18:54:02 +03:00
|
|
|
|
case 0:
|
2024-10-25 16:28:35 +03:00
|
|
|
|
$output_sort = ['type' => 'id', 'invert' => false];
|
2023-06-10 18:54:02 +03:00
|
|
|
|
break;
|
|
|
|
|
case 1:
|
2024-10-25 16:28:35 +03:00
|
|
|
|
$output_sort = ['type' => 'id', 'invert' => true];
|
2023-06-10 18:54:02 +03:00
|
|
|
|
break;
|
|
|
|
|
case 4:
|
2025-01-31 18:20:13 +03:00
|
|
|
|
$output_sort = ['type' => 'rating', 'invert' => false];
|
2024-10-25 16:28:35 +03:00
|
|
|
|
break;
|
|
|
|
|
}
|
2023-06-10 18:54:02 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if (!empty($city)) {
|
2024-10-25 16:28:35 +03:00
|
|
|
|
$output_params['city'] = $city;
|
2025-01-31 18:20:13 +03:00
|
|
|
|
}
|
2023-06-10 18:54:02 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if (!empty($hometown)) {
|
2024-10-25 16:28:35 +03:00
|
|
|
|
$output_params['hometown'] = $hometown;
|
2025-01-31 18:20:13 +03:00
|
|
|
|
}
|
2023-06-10 18:54:02 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if ($sex != 3) {
|
|
|
|
|
$output_params['gender'] = $sex;
|
|
|
|
|
}
|
2023-06-10 18:54:02 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if ($status != 0) {
|
2024-10-25 16:28:35 +03:00
|
|
|
|
$output_params['marital_status'] = $status;
|
2025-01-31 18:20:13 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($polit_views != 0) {
|
|
|
|
|
$output_params['polit_views'] = $polit_views;
|
|
|
|
|
}
|
2023-06-10 18:54:02 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if (!empty($interests)) {
|
2024-10-25 16:28:35 +03:00
|
|
|
|
$output_params['interests'] = $interests;
|
2025-01-31 18:20:13 +03:00
|
|
|
|
}
|
2023-06-10 18:54:02 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if (!empty($fav_music)) {
|
2024-10-25 16:28:35 +03:00
|
|
|
|
$output_params['fav_music'] = $fav_music;
|
2025-01-31 18:20:13 +03:00
|
|
|
|
}
|
2024-10-25 16:28:35 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if (!empty($fav_films)) {
|
2024-10-25 16:28:35 +03:00
|
|
|
|
$output_params['fav_films'] = $fav_films;
|
2025-01-31 18:20:13 +03:00
|
|
|
|
}
|
2023-06-10 18:54:02 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if (!empty($fav_shows)) {
|
2024-10-25 16:28:35 +03:00
|
|
|
|
$output_params['fav_shows'] = $fav_shows;
|
2025-01-31 18:20:13 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!empty($fav_books)) {
|
2024-10-25 16:28:35 +03:00
|
|
|
|
$output_params['fav_books'] = $fav_books;
|
2025-01-31 18:20:13 +03:00
|
|
|
|
}
|
2020-08-12 14:36:18 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if ($online) {
|
2024-10-25 16:28:35 +03:00
|
|
|
|
$output_params['is_online'] = 1;
|
2025-01-31 18:20:13 +03:00
|
|
|
|
}
|
2024-10-25 16:28:35 +03:00
|
|
|
|
|
|
|
|
|
$array = [];
|
|
|
|
|
$find = $users->find($q, $output_params, $output_sort);
|
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
foreach ($find->offsetLimit($offset, $count) as $user) {
|
2020-08-12 14:36:18 +03:00
|
|
|
|
$array[] = $user->getId();
|
2025-01-31 18:20:13 +03:00
|
|
|
|
}
|
2020-08-12 14:36:18 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if (!$array || sizeof($array) < 1) {
|
2024-10-25 16:28:35 +03:00
|
|
|
|
return (object) [
|
|
|
|
|
"count" => 0,
|
|
|
|
|
"items" => [],
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-21 22:13:09 +03:00
|
|
|
|
return (object) [
|
2024-10-25 16:28:35 +03:00
|
|
|
|
"count" => $find->size(),
|
2025-01-31 18:20:13 +03:00
|
|
|
|
"items" => $this->get(implode(',', $array), $fields),
|
2020-08-12 14:36:18 +03:00
|
|
|
|
];
|
|
|
|
|
}
|
2023-11-14 22:44:39 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
public function report(int $user_id, string $type = "spam", string $comment = "")
|
|
|
|
|
{
|
|
|
|
|
$this->requireUser();
|
|
|
|
|
$this->willExecuteWriteAction();
|
2023-11-14 22:44:39 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if ($user_id == $this->getUser()->getId()) {
|
|
|
|
|
$this->fail(12, "Can't report yourself.");
|
|
|
|
|
}
|
2023-11-14 22:44:39 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
if (sizeof(iterator_to_array((new Reports())->getDuplicates("user", $user_id, null, $this->getUser()->getId()))) > 0) {
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
2023-11-14 22:44:39 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
$report = new Report();
|
|
|
|
|
$report->setUser_id($this->getUser()->getId());
|
|
|
|
|
$report->setTarget_id($user_id);
|
|
|
|
|
$report->setType("user");
|
|
|
|
|
$report->setReason($comment);
|
|
|
|
|
$report->setCreated(time());
|
|
|
|
|
$report->save();
|
2023-11-14 22:44:39 +03:00
|
|
|
|
|
2025-01-31 18:20:13 +03:00
|
|
|
|
return 1;
|
|
|
|
|
}
|
2020-08-12 14:36:18 +03:00
|
|
|
|
}
|