<?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; }