<?php declare(strict_types=1); namespace openvk\Web\Models\Entities; use openvk\Web\Models\RowModel; use openvk\Web\Models\Repositories\Clubs; use openvk\Web\Util\DateTime; class Topic extends Postable { protected $tableName = "topics"; protected $upperNodeReferenceColumnName = "group"; /** * May return fake owner (group), if flags are [1, (*)] * * @param bool $honourFlags - check flags */ function getOwner(bool $honourFlags = true, bool $real = false): RowModel { if($honourFlags && $this->isPostedOnBehalfOfGroup()) return $this->getClub(); return parent::getOwner($real); } function getClub(): Club { return (new Clubs)->get($this->getRecord()->group); } function getTitle(): string { return $this->getRecord()->title; } function isClosed(): bool { return (bool) $this->getRecord()->closed; } function isPinned(): bool { return (bool) $this->getRecord()->pinned; } function getPrettyId(): string { return $this->getRecord()->group . "_" . $this->getVirtualId(); } function isPostedOnBehalfOfGroup(): bool { return ($this->getRecord()->flags & 0b10000000) > 0; } function isDeleted(): bool { return (bool) $this->getRecord()->deleted; } function canBeModifiedBy(User $user): bool { return $this->getOwner(false)->getId() === $user->getId() || $this->getClub()->canBeModifiedBy($user); } function getLastComment(): ?Comment { $array = iterator_to_array($this->getLastComments(1)); return isset($array[0]) ? $array[0] : NULL; } function getUpdateTime(): DateTime { $lastComment = $this->getLastComment(); if(!is_null($lastComment)) return $lastComment->getPublicationTime(); else return $this->getEditTime() ?? $this->getPublicationTime(); } function deleteTopic(): void { $this->setDeleted(1); $this->unwire(); $this->save(); } }