From 59554172d610d0ae43a8ed8bbb89896823b4a23f Mon Sep 17 00:00:00 2001 From: lalka2018 <99399973+lalka2016@users.noreply.github.com> Date: Thu, 22 Jun 2023 14:22:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B2=D0=B8=D0=B4=D0=B5=D0=BE=20=D1=81=20YouTub?= =?UTF-8?q?e=20=D0=B2=20API=20=D0=B8=20=D1=84=D0=B8=D0=BA=D1=81=20board.ph?= =?UTF-8?q?p=20(#905)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VKAPI/Handlers/Board.php | 12 ++++++---- Web/Models/Entities/Comment.php | 2 +- Web/Models/Entities/Topic.php | 42 +++++++++++++++++++++++++++++++++ Web/Models/Entities/Video.php | 8 ++++--- 4 files changed, 55 insertions(+), 9 deletions(-) diff --git a/VKAPI/Handlers/Board.php b/VKAPI/Handlers/Board.php index 3a441275..5a4b87ef 100644 --- a/VKAPI/Handlers/Board.php +++ b/VKAPI/Handlers/Board.php @@ -291,7 +291,7 @@ final class Board extends VKAPIRequestHandler $topic = (new TopicsRepo)->getTopicById($group_id, $topic_id); - if(!$topic || !$topic->getClub() || $topic->isDeleted() || !$topic->getClub()->canBeModifiedBy($this->getUser())) { + if(!$topic || !$topic->getClub() || $topic->isDeleted()) { $this->fail(5, "Invalid topic"); } @@ -325,6 +325,7 @@ final class Board extends VKAPIRequestHandler $arr = []; $club = (new ClubsRepo)->get($group_id); + $topics = array_slice(iterator_to_array((new TopicsRepo)->getClubTopics($club, 1, $count + $offset)), $offset); $arr["count"] = (new TopicsRepo)->getClubTopicsCount($club); $arr["items"] = []; @@ -335,7 +336,7 @@ final class Board extends VKAPIRequestHandler if(empty($topic_ids)) { foreach($topics as $topic) { if($topic->isDeleted()) continue; - $arr["items"][] = $topic->toVkApiStruct($preview, $preview_length); + $arr["items"][] = $topic->toVkApiStruct($preview, $preview_length > 1 ? $preview_length : 90); } } else { $topics = explode(',', $topic_ids); @@ -343,8 +344,9 @@ final class Board extends VKAPIRequestHandler foreach($topics as $topic) { $id = explode("_", $topic); $topicy = (new TopicsRepo)->getTopicById((int)$id[0], (int)$id[1]); - if($topicy) { - $arr["items"] = $topicy->toVkApiStruct(); + + if($topicy && !$topicy->isDeleted()) { + $arr["items"][] = $topicy->toVkApiStruct($preview, $preview_length > 1 ? $preview_length : 90); } } } @@ -406,7 +408,7 @@ final class Board extends VKAPIRequestHandler $res->id = $comment->getId(); $res->from_id = $comment->getOwner()->getId(); $res->date = $comment->getPublicationTime()->timestamp(); - $res->text = $comment->getText(); + $res->text = $comment->getText(false); $res->attachments = []; $res->likes = []; if($need_likes) { diff --git a/Web/Models/Entities/Comment.php b/Web/Models/Entities/Comment.php index bd833a82..7c6222e4 100644 --- a/Web/Models/Entities/Comment.php +++ b/Web/Models/Entities/Comment.php @@ -61,7 +61,7 @@ class Comment extends Post $res->id = $this->getId(); $res->from_id = $this->getOwner()->getId(); $res->date = $this->getPublicationTime()->timestamp(); - $res->text = $this->getText(); + $res->text = $this->getText(false); $res->attachments = []; $res->parents_stack = []; diff --git a/Web/Models/Entities/Topic.php b/Web/Models/Entities/Topic.php index 89b3cb39..d4257816 100644 --- a/Web/Models/Entities/Topic.php +++ b/Web/Models/Entities/Topic.php @@ -68,6 +68,12 @@ class Topic extends Postable return isset($array[0]) ? $array[0] : NULL; } + function getFirstComment(): ?Comment + { + $array = iterator_to_array($this->getComments(1)); + return $array[0] ?? NULL; + } + function getUpdateTime(): DateTime { $lastComment = $this->getLastComment(); @@ -83,4 +89,40 @@ class Topic extends Postable $this->unwire(); $this->save(); } + + function toVkApiStruct(int $preview = 0, int $preview_length = 90): object + { + $res = (object)[]; + + $res->id = $this->getId(); + $res->title = $this->getTitle(); + $res->created = $this->getPublicationTime()->timestamp(); + + if($this->getOwner() instanceof User) { + $res->created_by = $this->getOwner()->getId(); + } else { + $res->created_by = $this->getOwner()->getId() * -1; + } + + $res->updated = $this->getUpdateTime()->timestamp(); + + if($this->getLastComment()) { + if($this->getLastComment()->getOwner() instanceof User) { + $res->updated_by = $this->getLastComment()->getOwner()->getId(); + } else { + $res->updated_by = $this->getLastComment()->getOwner()->getId() * -1; + } + } + + $res->is_closed = (int)$this->isClosed(); + $res->is_fixed = (int)$this->isPinned(); + $res->comments = $this->getCommentsCount(); + + if($preview == 1) { + $res->first_comment = $this->getFirstComment() ? ovk_proc_strtr($this->getFirstComment()->getText(false), $preview_length) : NULL; + $res->last_comment = $this->getLastComment() ? ovk_proc_strtr($this->getLastComment()->getText(false), $preview_length) : NULL; + } + + return $res; + } } diff --git a/Web/Models/Entities/Video.php b/Web/Models/Entities/Video.php index 4c652fdd..cef48e27 100644 --- a/Web/Models/Entities/Video.php +++ b/Web/Models/Entities/Video.php @@ -117,6 +117,7 @@ class Video extends Media function getApiStructure(): object { + $fromYoutube = $this->getType() == Video::TYPE_EMBED; return (object)[ "type" => "video", "video" => [ @@ -145,10 +146,11 @@ class Video extends Media "user_id" => $this->getOwner()->getId(), "title" => $this->getName(), "is_favorite" => false, - "player" => $this->getURL(), - "files" => [ + "player" => !$fromYoutube ? $this->getURL() : $this->getVideoDriver()->getURL(), + "files" => !$fromYoutube ? [ "mp4_480" => $this->getURL() - ], + ] : NULL, + "platform" => $fromYoutube ? "youtube" : NULL, "added" => 0, "repeat" => 0, "type" => "video",