openvk/Web/Models/Entities/GiftCategory.php

156 lines
4.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php declare(strict_types=1);
namespace openvk\Web\Models\Entities;
use Chandler\Database\DatabaseConnection as DB;
use openvk\Web\Models\Repositories\Gifts;
use openvk\Web\Models\RowModel;
use Transliterator;
class GiftCategory extends RowModel
{
protected $tableName = "gift_categories";
private function getLocalization(string $language): object
{
return $this->getRecord()
->related("gift_categories_locales.category")
->where("language", $language);
}
private function createLocalizationIfNotExists(string $language): void
{
if(!is_null($this->getLocalization($language)->fetch()))
return;
DB::i()->getContext()->table("gift_categories_locales")->insert([
"category" => $this->getId(),
"language" => $language,
"name" => "Sample Text",
"description" => "Sample Text",
]);
}
function getSlug(): string
{
return str_replace("ʹ", "-", Transliterator::createFromRules(
":: Any-Latin;"
. ":: NFD;"
. ":: [:Nonspacing Mark:] Remove;"
. ":: NFC;"
. ":: [:Punctuation:] Remove;"
. ":: Lower();"
. "[:Separator:] > '-'"
)->transliterate($this->getName()));
}
function getThumbnailURL(): string
{
$primeGift = iterator_to_array($this->getGifts(1, 1))[0];
$serverUrl = ovk_scheme(true) . $_SERVER["SERVER_NAME"];
if(!$primeGift)
return "$serverUrl/assets/packages/static/openvk/img/camera_200.png";
return $primeGift->getImage(Gift::IMAGE_URL);
}
function getName(string $language = "_", bool $returnNull = false): ?string
{
$loc = $this->getLocalization($language)->fetch();
if(!$loc) {
if($returnNull)
return NULL;
return $language === "_" ? "Unlocalized" : $this->getName();
}
return $loc->name;
}
function getDescription(string $language = "_", bool $returnNull = false): ?string
{
$loc = $this->getLocalization($language)->fetch();
if(!$loc) {
if($returnNull)
return NULL;
return $language === "_" ? "Unlocalized" : $this->getDescription();
}
return $loc->description;
}
function getGifts(int $page = -1, ?int $perPage = NULL, &$count = nullptr): \Traversable
{
$gifts = $this->getRecord()->related("gift_relations.category");
if($page !== -1) {
$count = $gifts->count();
$gifts = $gifts->page($page, $perPage ?? OPENVK_DEFAULT_PER_PAGE);
}
foreach($gifts as $rel)
yield (new Gifts)->get($rel->gift);
}
function isMagical(): bool
{
return !is_null($this->getRecord()->autoquery);
}
function hasGift(Gift $gift): bool
{
$rels = $this->getRecord()->related("gift_relations.category");
return $rels->where("gift", $gift->getId())->count() > 0;
}
function addGift(Gift $gift): void
{
if($this->hasGift($gift))
return;
DB::i()->getContext()->table("gift_relations")->insert([
"category" => $this->getId(),
"gift" => $gift->getId(),
]);
}
function removeGift(Gift $gift): void
{
if(!$this->hasGift($gift))
return;
DB::i()->getContext()->table("gift_relations")->where([
"category" => $this->getId(),
"gift" => $gift->getId(),
])->delete();
}
function setName(string $language, string $name): void
{
$this->createLocalizationIfNotExists($language);
$this->getLocalization($language)->update([
"name" => $name,
]);
}
function setDescription(string $language, string $description): void
{
$this->createLocalizationIfNotExists($language);
$this->getLocalization($language)->update([
"description" => $description,
]);
}
function setAutoQuery(?array $query = NULL): void
{
if(is_null($query)) {
$this->stateChanges("autoquery", NULL);
return;
}
$allowedColumns = ["price", "usages"];
if(array_diff_key($query, array_flip($allowedColumns)))
throw new \LogicException("Invalid query");
$this->stateChanges("autoquery", serialize($query));
}
}