2021-12-15 01:27:17 +03:00
|
|
|
<?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
|
|
|
|
{
|
2021-12-15 02:29:41 +03:00
|
|
|
return $this->getOwner(false)->getId() === $user->getId() || $this->getClub()->canBeModifiedBy($user);
|
2021-12-15 01:27:17 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
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();
|
|
|
|
}
|
|
|
|
}
|