mirror of
https://github.com/openvk/openvk
synced 2024-11-14 11:09:12 +03:00
Refactor albums
This commit is contained in:
parent
1e5f3f395b
commit
1d46bbb6d6
1 changed files with 21 additions and 82 deletions
|
@ -1,48 +1,30 @@
|
||||||
<?php declare(strict_types=1);
|
<?php declare(strict_types=1);
|
||||||
namespace openvk\Web\Models\Entities;
|
namespace openvk\Web\Models\Entities;
|
||||||
use openvk\Web\Util\DateTime;
|
|
||||||
use openvk\Web\Models\RowModel;
|
|
||||||
use openvk\Web\Models\Repositories\Photos;
|
use openvk\Web\Models\Repositories\Photos;
|
||||||
use openvk\Web\Models\Repositories\Clubs;
|
|
||||||
use openvk\Web\Models\Repositories\Users;
|
|
||||||
use Chandler\Database\DatabaseConnection;
|
|
||||||
|
|
||||||
class Album extends RowModel
|
class Album extends MediaCollection
|
||||||
{
|
{
|
||||||
const SPECIAL_AVATARS = 16;
|
const SPECIAL_AVATARS = 16;
|
||||||
const SPECIAL_WALL = 32;
|
const SPECIAL_WALL = 32;
|
||||||
|
|
||||||
protected $tableName = "albums";
|
protected $tableName = "albums";
|
||||||
|
protected $relTableName = "album_relations";
|
||||||
|
protected $entityTableName = "photos";
|
||||||
|
protected $entityClassName = 'openvk\Web\Models\Entities\Photo';
|
||||||
|
|
||||||
function getOwner(): RowModel
|
protected $specialNames = [
|
||||||
{
|
16 => "_avatar_album",
|
||||||
$oid = $this->getRecord()->owner;
|
32 => "_wall_album",
|
||||||
if($oid > 0)
|
64 => "_saved_photos_album",
|
||||||
return (new Users)->get($oid);
|
];
|
||||||
else
|
|
||||||
return (new Clubs)->get($oid * -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPrettyId(): string
|
function getCoverURL(): ?string
|
||||||
{
|
{
|
||||||
return $this->getRecord()->owner . "_" . $this->getRecord()->id;
|
$coverPhoto = $this->getCoverPhoto();
|
||||||
}
|
if(!$coverPhoto)
|
||||||
|
return "/assets/packages/static/openvk/img/camera_200.png";
|
||||||
|
|
||||||
function getName(): string
|
return $coverPhoto->getURL();
|
||||||
{
|
|
||||||
switch($this->getRecord()->special_type) {
|
|
||||||
case Album::SPECIAL_AVATARS:
|
|
||||||
return "Изображения со страницы";
|
|
||||||
case Album::SPECIAL_WALL:
|
|
||||||
return "Изображения со стены";
|
|
||||||
default:
|
|
||||||
return $this->getRecord()->name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getDescription(): ?string
|
|
||||||
{
|
|
||||||
return $this->getRecord()->description;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getCoverPhoto(): ?Photo
|
function getCoverPhoto(): ?Photo
|
||||||
|
@ -62,69 +44,26 @@ class Album extends RowModel
|
||||||
|
|
||||||
function getPhotos(int $page = 1, ?int $perPage = NULL): \Traversable
|
function getPhotos(int $page = 1, ?int $perPage = NULL): \Traversable
|
||||||
{
|
{
|
||||||
$perPage = $perPage ?? OPENVK_DEFAULT_PER_PAGE;
|
return $this->fetch($page, $perPage);
|
||||||
|
|
||||||
foreach($this->getRecord()->related("album_relations.album")->page($page, $perPage)->order("photo ASC") as $rel) {
|
|
||||||
$photo = $rel->ref("photos", "photo");
|
|
||||||
if(!$photo) continue;
|
|
||||||
|
|
||||||
yield new Photo($photo);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPhotosCount(): int
|
function getPhotosCount(): int
|
||||||
{
|
{
|
||||||
return sizeof($this->getRecord()->related("album_relations.album"));
|
return $this->size();
|
||||||
}
|
|
||||||
|
|
||||||
function getCreationTime(): DateTime
|
|
||||||
{
|
|
||||||
return new DateTime($this->getRecord()->created);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPublicationTime(): DateTime
|
|
||||||
{
|
|
||||||
return $this->getCreationTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
function getEditTime(): ?DateTime
|
|
||||||
{
|
|
||||||
$edited = $this->getRecord()->edited;
|
|
||||||
if(is_null($edited)) return NULL;
|
|
||||||
|
|
||||||
return new DateTime($edited);
|
|
||||||
}
|
|
||||||
|
|
||||||
function isCreatedBySystem(): bool
|
|
||||||
{
|
|
||||||
return $this->getRecord()->special_type !== 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function addPhoto(Photo $photo): void
|
function addPhoto(Photo $photo): void
|
||||||
{
|
{
|
||||||
DatabaseConnection::i()->getContext()->table("album_relations")->insert([
|
$this->add($photo);
|
||||||
"album" => $this->getRecord()->id,
|
|
||||||
"photo" => $photo->getId(),
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function removePhoto(Photo $photo): void
|
function removePhoto(Photo $photo): void
|
||||||
{
|
{
|
||||||
DatabaseConnection::i()->getContext()->table("album_relations")->where([
|
$this->remove($photo);
|
||||||
"album" => $this->getRecord()->id,
|
|
||||||
"photo" => $photo->getId(),
|
|
||||||
])->delete();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function hasPhoto(Photo $photo): bool
|
function hasPhoto(Photo $photo): bool
|
||||||
{
|
{
|
||||||
$rel = DatabaseConnection::i()->getContext()->table("album_relations")->where([
|
return $this->has($photo);
|
||||||
"album" => $this->getRecord()->id,
|
|
||||||
"photo" => $photo->getId(),
|
|
||||||
])->fetch();
|
|
||||||
|
|
||||||
return !is_null($rel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
use Traits\TOwnable;
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue