mirror of
https://github.com/openvk/openvk
synced 2024-12-23 17:12:01 +03:00
43 lines
1.5 KiB
PHP
43 lines
1.5 KiB
PHP
|
<?php declare(strict_types=1);
|
||
|
namespace openvk\VKAPI\Handlers;
|
||
|
use openvk\Web\Models\Entities\User;
|
||
|
use openvk\Web\Models\Entities\Post;
|
||
|
use openvk\Web\Models\Entities\Postable;
|
||
|
use Chandler\Database\DatabaseConnection;
|
||
|
use openvk\Web\Models\Repositories\Posts as PostsRepo;
|
||
|
use openvk\VKAPI\Handlers\Wall;
|
||
|
|
||
|
final class Newsfeed extends VKAPIRequestHandler
|
||
|
{
|
||
|
function get(string $fields = "", int $start_from = 0, int $offset = 0, int $count = 30, int $extended = 0)
|
||
|
{
|
||
|
$this->requireUser();
|
||
|
|
||
|
if($offset != 0) $start_from = $offset;
|
||
|
|
||
|
$id = $this->getUser()->getId();
|
||
|
$subs = DatabaseConnection::i()
|
||
|
->getContext()
|
||
|
->table("subscriptions")
|
||
|
->where("follower", $id);
|
||
|
$ids = array_map(function($rel) {
|
||
|
return $rel->target * ($rel->model === "openvk\Web\Models\Entities\User" ? 1 : -1);
|
||
|
}, iterator_to_array($subs));
|
||
|
$ids[] = $this->getUser()->getId();
|
||
|
|
||
|
$posts = DatabaseConnection::i()
|
||
|
->getContext()
|
||
|
->table("posts")
|
||
|
->select("id")
|
||
|
->where("wall IN (?)", $ids)
|
||
|
->where("deleted", 0)
|
||
|
->order("created DESC");
|
||
|
|
||
|
$rposts = [];
|
||
|
foreach($posts->page((int) ($offset + 1), $count) as $post)
|
||
|
$rposts[] = (new PostsRepo)->get($post->id)->getPrettyId();
|
||
|
|
||
|
return (new Wall)->getById(implode(',', $rposts), $extended, $fields, $this->getUser());
|
||
|
}
|
||
|
}
|