getRecord()->id; } public function getStatus(): int { return $this->getRecord()->status; } public function getContentType(): string { return $this->getRecord()->type; } public function getReason(): string { return $this->getRecord()->reason; } public function getTime(): DateTime { return new DateTime($this->getRecord()->date); } public function isDeleted(): bool { if ($this->getRecord()->deleted === 0) { return false; } elseif ($this->getRecord()->deleted === 1) { return true; } } public function authorId(): int { return $this->getRecord()->user_id; } public function getUser(): User { return (new Users())->get((int) $this->getRecord()->user_id); } public function getContentId(): int { return (int) $this->getRecord()->target_id; } public function getContentObject() { if ($this->getContentType() == "post") { return (new Posts())->get($this->getContentId()); } elseif ($this->getContentType() == "photo") { return (new Photos())->get($this->getContentId()); } elseif ($this->getContentType() == "video") { return (new Videos())->get($this->getContentId()); } elseif ($this->getContentType() == "group") { return (new Clubs())->get($this->getContentId()); } elseif ($this->getContentType() == "comment") { return (new Comments())->get($this->getContentId()); } elseif ($this->getContentType() == "note") { return (new Notes())->get($this->getContentId()); } elseif ($this->getContentType() == "app") { return (new Applications())->get($this->getContentId()); } elseif ($this->getContentType() == "user") { return (new Users())->get($this->getContentId()); } elseif ($this->getContentType() == "audio") { return (new Audios())->get($this->getContentId()); } elseif ($this->getContentType() == "doc") { return (new Documents())->get($this->getContentId()); } else { return null; } } public function getAuthor(): RowModel { return $this->getContentObject()->getOwner(); } public function getReportAuthor(): User { return (new Users())->get($this->getRecord()->user_id); } public function banUser($initiator) { $reason = $this->getContentType() !== "user" ? ("**content-" . $this->getContentType() . "-" . $this->getContentId() . "**") : ("Подозрительная активность"); $this->getAuthor()->ban($reason, false, time() + $this->getAuthor()->getNewBanTime(), $initiator); } public function deleteContent() { if ($this->getContentType() !== "user") { $pubTime = $this->getContentObject()->getPublicationTime(); if (method_exists($this->getContentObject(), "getName")) { $name = $this->getContentObject()->getName(); $placeholder = "$pubTime ($name)"; } else { $placeholder = "$pubTime"; } if ($this->getAuthor() instanceof Club) { $name = $this->getAuthor()->getName(); $this->getAuthor()->getOwner()->adminNotify("Ваш контент, который опубликовали $placeholder в созданной вами группе \"$name\" был удалён модераторами инстанса. За повторные или серьёзные нарушения группу могут заблокировать."); } else { $this->getAuthor()->adminNotify("Ваш контент, который вы опубликовали $placeholder был удалён модераторами инстанса. За повторные или серьёзные нарушения вас могут заблокировать."); } $this->getContentObject()->delete($this->getContentType() !== "app"); } $this->delete(); } public function getDuplicates(): \Traversable { return (new Reports())->getDuplicates($this->getContentType(), $this->getContentId(), $this->getId()); } public function getDuplicatesCount(): int { return count(iterator_to_array($this->getDuplicates())); } public function hasDuplicates(): bool { return $this->getDuplicatesCount() > 0; } public function getContentName(): string { $content_object = $this->getContentObject(); if (!$content_object) { return 'unknown'; } if (method_exists($content_object, "getCanonicalName")) { return $content_object->getCanonicalName(); } return $this->getContentType() . " #" . $this->getContentId(); } public function delete(bool $softly = true): void { if ($this->hasDuplicates()) { foreach ($this->getDuplicates() as $duplicate) { $duplicate->setDeleted(1); $duplicate->save(); } } $this->setDeleted(1); $this->save(); } }