openvk/Web/Models/Entities/Post.php
Alma Armas fc9df5624b Add NSFW CW back
Co-authored-by: Celestine <34442450+rem-pai@users.noreply.github.com>
2021-01-07 16:19:36 +00:00

103 lines
2.7 KiB
PHP

<?php declare(strict_types=1);
namespace openvk\Web\Models\Entities;
use openvk\Web\Models\Repositories\Clubs;
use openvk\Web\Models\RowModel;
class Post extends Postable
{
protected $tableName = "posts";
protected $upperNodeReferenceColumnName = "wall";
/**
* May return fake owner (group), if flags are [1, (*)]
*
* @param bool $honourFlags - check flags
*/
function getOwner(bool $honourFlags = true): RowModel
{
if($honourFlags && ( ($this->getRecord()->flags & 0b10000000) > 0 )) {
if($this->getRecord()->wall < 0)
return (new Clubs)->get(abs($this->getRecord()->wall));
}
return parent::getOwner();
}
function getPrettyId(): string
{
return $this->getRecord()->wall . "_" . $this->getVirtualId();
}
function getTargetWall(): int
{
return $this->getRecord()->wall;
}
function getRepostCount(): int
{
return sizeof(
$this->getRecord()
->related("attachments.attachable_id")
->where("attachable_type", get_class($this))
);
}
function isAd(): bool
{
return (bool) $this->getRecord()->ad;
}
function isPostedOnBehalfOfGroup(): bool
{
return ($this->getRecord()->flags & 0b10000000) > 0;
}
function isSigned(): bool
{
return ($this->getRecord()->flags & 0b01000000) > 0;
}
function isExplicit(): bool
{
return (bool) $this->getRecord()->nsfw;
}
function isDeleted(): bool
{
return (bool) $this->getRecord()->deleted;
}
function getOwnerPost(): int
{
return $this->getRecord()->owner;
}
function canBeDeletedBy(User $user): bool
{
if($this->getTargetWall() < 0)
$cDel = (new Clubs)->get(abs($this->getTargetWall()))->canBeModifiedBy($user);
else
$cDel = $this->getTargetWall() === $user->getId();
return $this->getOwnerPost() === $user->getId() || $cDel;
}
function setContent(string $content): void
{
if(ctype_space($content))
throw new \LengthException("Content length must be at least 1 character (not counting whitespaces).");
else if(iconv_strlen($content) > OPENVK_ROOT_CONF["openvk"]["preferences"]["wall"]["postSizes"]["maxSize"])
throw new \LengthException("Content is too large.");
$this->stateChanges("content", $content);
}
function deletePost(): void
{
$this->setDeleted(1);
$this->unwire();
$this->save();
}
use Traits\TRichText;
}