2020-06-07 19:04:43 +03:00
|
|
|
<?php declare(strict_types=1);
|
|
|
|
namespace openvk\Web\Models\Entities;
|
2021-12-04 22:46:26 +03:00
|
|
|
use openvk\Web\Models\Repositories\Clubs;
|
|
|
|
use openvk\Web\Models\RowModel;
|
VKAPI: методы для подарков, заметок, статусов, обсуждений и немного для фоток и групп (#876)
* API methods for gifts, notes, statuses
* Some fixes
Строки локализации у gifts.send теперь не костыльные и можно прикрепить до 10 аттачей к посту
* Small imp
Пофиксил пагинацию у заметков и подарок
Перенёс структуру заметок
Добавил аттачи к комментариям
Добавил проверку на удалённость аттача
Ну и пофиксил сортировку заметок
* VKAPI: Some methods for topics and photos
Добавлены методы для обсуждений (addTopic, closeTopic(), createComment(), deleteComment(), deleteTopic(), editTopic(), fixTopic(), getComments(), getTopics(), openTopic(), unfixTopic())
и для фотографий (createAlbum(), editAlbum(), getAlbums(), getAlbumsCount(), getById(), get(), deleteAlbum(), edit(), delete(), deleteComment(), createComment(), getAll(), getComments())
* fixsex
2023-06-13 21:03:43 +03:00
|
|
|
use openvk\Web\Models\Entities\{Note};
|
2020-06-07 19:04:43 +03:00
|
|
|
|
|
|
|
class Comment extends Post
|
|
|
|
{
|
|
|
|
protected $tableName = "comments";
|
|
|
|
protected $upperNodeReferenceColumnName = "owner";
|
|
|
|
|
|
|
|
function getPrettyId(): string
|
|
|
|
{
|
2023-10-03 19:40:13 +03:00
|
|
|
return (string)$this->getRecord()->id;
|
2020-06-07 19:04:43 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function getVirtualId(): int
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
function getTarget(): ?Postable
|
|
|
|
{
|
|
|
|
$entityClassName = $this->getRecord()->model;
|
|
|
|
$repoClassName = str_replace("Entities", "Repositories", $entityClassName) . "s";
|
|
|
|
$entity = (new $repoClassName)->get($this->getRecord()->target);
|
|
|
|
|
|
|
|
return $entity;
|
|
|
|
}
|
2021-12-04 22:46:26 +03:00
|
|
|
|
2024-11-22 19:34:25 +03:00
|
|
|
function getPageURL(): string
|
|
|
|
{
|
|
|
|
return '#';
|
|
|
|
}
|
|
|
|
|
2021-12-04 22:46:26 +03:00
|
|
|
/**
|
|
|
|
* May return fake owner (group), if flags are [1, (*)]
|
|
|
|
*
|
|
|
|
* @param bool $honourFlags - check flags
|
|
|
|
*/
|
|
|
|
function getOwner(bool $honourFlags = true, bool $real = false): RowModel
|
|
|
|
{
|
2021-12-15 01:48:09 +03:00
|
|
|
if($honourFlags && $this->isPostedOnBehalfOfGroup()) {
|
|
|
|
if($this->getTarget() instanceof Post)
|
|
|
|
return (new Clubs)->get(abs($this->getTarget()->getTargetWall()));
|
|
|
|
|
|
|
|
if($this->getTarget() instanceof Topic)
|
|
|
|
return $this->getTarget()->getClub();
|
|
|
|
}
|
2021-12-04 22:46:26 +03:00
|
|
|
|
|
|
|
return parent::getOwner($honourFlags, $real);
|
|
|
|
}
|
2021-12-12 22:47:39 +03:00
|
|
|
|
2024-11-02 16:31:35 +03:00
|
|
|
function canBeDeletedBy(User $user = NULL): bool
|
2021-12-12 22:47:39 +03:00
|
|
|
{
|
2024-11-02 16:31:35 +03:00
|
|
|
if(!$user)
|
|
|
|
return false;
|
|
|
|
|
2021-12-12 22:47:39 +03:00
|
|
|
return $this->getOwner()->getId() == $user->getId() ||
|
|
|
|
$this->getTarget()->getOwner()->getId() == $user->getId() ||
|
2021-12-15 20:00:26 +03:00
|
|
|
$this->getTarget() instanceof Post && $this->getTarget()->getTargetWall() < 0 && (new Clubs)->get(abs($this->getTarget()->getTargetWall()))->canBeModifiedBy($user) ||
|
|
|
|
$this->getTarget() instanceof Topic && $this->getTarget()->canBeModifiedBy($user);
|
2021-12-12 22:47:39 +03:00
|
|
|
}
|
VKAPI: методы для подарков, заметок, статусов, обсуждений и немного для фоток и групп (#876)
* API methods for gifts, notes, statuses
* Some fixes
Строки локализации у gifts.send теперь не костыльные и можно прикрепить до 10 аттачей к посту
* Small imp
Пофиксил пагинацию у заметков и подарок
Перенёс структуру заметок
Добавил аттачи к комментариям
Добавил проверку на удалённость аттача
Ну и пофиксил сортировку заметок
* VKAPI: Some methods for topics and photos
Добавлены методы для обсуждений (addTopic, closeTopic(), createComment(), deleteComment(), deleteTopic(), editTopic(), fixTopic(), getComments(), getTopics(), openTopic(), unfixTopic())
и для фотографий (createAlbum(), editAlbum(), getAlbums(), getAlbumsCount(), getById(), get(), deleteAlbum(), edit(), delete(), deleteComment(), createComment(), getAll(), getComments())
* fixsex
2023-06-13 21:03:43 +03:00
|
|
|
|
|
|
|
function toVkApiStruct(?User $user = NULL, bool $need_likes = false, bool $extended = false, ?Note $note = NULL): object
|
|
|
|
{
|
|
|
|
$res = (object) [];
|
|
|
|
|
|
|
|
$res->id = $this->getId();
|
|
|
|
$res->from_id = $this->getOwner()->getId();
|
|
|
|
$res->date = $this->getPublicationTime()->timestamp();
|
2023-06-22 14:22:07 +03:00
|
|
|
$res->text = $this->getText(false);
|
VKAPI: методы для подарков, заметок, статусов, обсуждений и немного для фоток и групп (#876)
* API methods for gifts, notes, statuses
* Some fixes
Строки локализации у gifts.send теперь не костыльные и можно прикрепить до 10 аттачей к посту
* Small imp
Пофиксил пагинацию у заметков и подарок
Перенёс структуру заметок
Добавил аттачи к комментариям
Добавил проверку на удалённость аттача
Ну и пофиксил сортировку заметок
* VKAPI: Some methods for topics and photos
Добавлены методы для обсуждений (addTopic, closeTopic(), createComment(), deleteComment(), deleteTopic(), editTopic(), fixTopic(), getComments(), getTopics(), openTopic(), unfixTopic())
и для фотографий (createAlbum(), editAlbum(), getAlbums(), getAlbumsCount(), getById(), get(), deleteAlbum(), edit(), delete(), deleteComment(), createComment(), getAll(), getComments())
* fixsex
2023-06-13 21:03:43 +03:00
|
|
|
$res->attachments = [];
|
|
|
|
$res->parents_stack = [];
|
|
|
|
|
|
|
|
if(!is_null($note)) {
|
|
|
|
$res->uid = $this->getOwner()->getId();
|
|
|
|
$res->nid = $note->getId();
|
|
|
|
$res->oid = $note->getOwner()->getId();
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach($this->getChildren() as $attachment) {
|
|
|
|
if($attachment->isDeleted())
|
|
|
|
continue;
|
2023-11-15 11:41:18 +03:00
|
|
|
|
|
|
|
if($attachment instanceof \openvk\Web\Models\Entities\Photo) {
|
|
|
|
$res->attachments[] = $attachment->toVkApiStruct();
|
|
|
|
} else if($attachment instanceof \openvk\Web\Models\Entities\Video) {
|
|
|
|
$res->attachments[] = $attachment->toVkApiStruct($this->getUser());
|
|
|
|
}
|
VKAPI: методы для подарков, заметок, статусов, обсуждений и немного для фоток и групп (#876)
* API methods for gifts, notes, statuses
* Some fixes
Строки локализации у gifts.send теперь не костыльные и можно прикрепить до 10 аттачей к посту
* Small imp
Пофиксил пагинацию у заметков и подарок
Перенёс структуру заметок
Добавил аттачи к комментариям
Добавил проверку на удалённость аттача
Ну и пофиксил сортировку заметок
* VKAPI: Some methods for topics and photos
Добавлены методы для обсуждений (addTopic, closeTopic(), createComment(), deleteComment(), deleteTopic(), editTopic(), fixTopic(), getComments(), getTopics(), openTopic(), unfixTopic())
и для фотографий (createAlbum(), editAlbum(), getAlbums(), getAlbumsCount(), getById(), get(), deleteAlbum(), edit(), delete(), deleteComment(), createComment(), getAll(), getComments())
* fixsex
2023-06-13 21:03:43 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
if($need_likes) {
|
|
|
|
$res->count = $this->getLikesCount();
|
|
|
|
$res->user_likes = (int)$this->hasLikeFrom($user);
|
|
|
|
$res->can_like = 1;
|
|
|
|
}
|
|
|
|
return $res;
|
|
|
|
}
|
2023-08-11 16:43:39 +03:00
|
|
|
|
|
|
|
function getURL(): string
|
|
|
|
{
|
|
|
|
return "/wall" . $this->getTarget()->getPrettyId() . "#_comment" . $this->getId();
|
|
|
|
}
|
2023-12-02 20:21:16 +03:00
|
|
|
|
|
|
|
function canBeViewedBy(?User $user = NULL): bool
|
|
|
|
{
|
|
|
|
if($this->isDeleted() || $this->getTarget()->isDeleted()) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this->getTarget()->canBeViewedBy($user);
|
|
|
|
}
|
api: add some fields and 2 new methods и jsonp
- Изменения коснулись методов account.getProfileInfo, account.getBalance, account.getOvkSettings, gifts.get, gifts.getCategories, groups.get, groups.getById, users.get, wall.get, wall.getById, wall.getComments, wall.getComment.
- Добавлена поддержка JSONP
2024-10-15 20:42:59 +03:00
|
|
|
|
|
|
|
function isFromPostAuthor($target = NULL)
|
|
|
|
{
|
|
|
|
if(!$target)
|
|
|
|
$target = $this->getTarget();
|
|
|
|
|
|
|
|
$target_owner = $target->getOwner();
|
|
|
|
$comment_owner = $this->getOwner();
|
|
|
|
|
|
|
|
if($target_owner->getRealId() === $comment_owner->getRealId())
|
|
|
|
return true;
|
|
|
|
|
|
|
|
# TODO: make it work with signer_id
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
2023-11-14 22:44:39 +03:00
|
|
|
|
|
|
|
function toNotifApiStruct()
|
|
|
|
{
|
|
|
|
$res = (object)[];
|
|
|
|
|
|
|
|
$res->id = $this->getId();
|
|
|
|
$res->owner_id = $this->getOwner()->getId();
|
|
|
|
$res->date = $this->getPublicationTime()->timestamp();
|
|
|
|
$res->text = $this->getText(false);
|
|
|
|
$res->post = NULL; # todo
|
2023-09-14 20:54:22 +03:00
|
|
|
|
2023-11-14 22:44:39 +03:00
|
|
|
return $res;
|
|
|
|
}
|
|
|
|
|
2023-09-14 20:54:22 +03:00
|
|
|
function canBeEditedBy(?User $user = NULL): bool
|
|
|
|
{
|
|
|
|
if(!$user)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return $user->getId() == $this->getOwner(false)->getId();
|
|
|
|
}
|
2024-10-25 16:28:35 +03:00
|
|
|
|
|
|
|
function getTargetURL(): string
|
|
|
|
{
|
|
|
|
$target = $this->getTarget();
|
|
|
|
$target_name = 'wall';
|
|
|
|
|
|
|
|
if(!$target) {
|
|
|
|
return '/404';
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(get_class($target)) {
|
|
|
|
case 'openvk\Web\Models\Entities\Note':
|
|
|
|
$target_name = 'note';
|
|
|
|
break;
|
|
|
|
case 'openvk\Web\Models\Entities\Photo':
|
|
|
|
$target_name = 'photo';
|
|
|
|
break;
|
|
|
|
case 'openvk\Web\Models\Entities\Video':
|
|
|
|
$target_name = 'video';
|
|
|
|
break;
|
|
|
|
case 'openvk\Web\Models\Entities\Topic':
|
|
|
|
$target_name = 'topic';
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $target_name . $target->getPrettyId();
|
|
|
|
}
|
2020-06-07 19:04:43 +03:00
|
|
|
}
|