Files
kupshop/bundles/KupShop/BonusProgramBundle/Email/BonusPointsActivatedEmail.php
2025-08-02 16:30:27 +02:00

93 lines
2.5 KiB
PHP

<?php
declare(strict_types=1);
namespace KupShop\BonusProgramBundle\Email;
use KupShop\BonusProgramBundle\Utils\BonusProvider;
use KupShop\KupShopBundle\Email\OrderEmail;
use KupShop\KupShopBundle\Util\Compat\ServiceContainer;
use Symfony\Contracts\Service\Attribute\Required;
class BonusPointsActivatedEmail extends OrderEmail
{
protected static $name = 'Věrnostní program: přičtení bodů';
protected static $type = 'BONUS_POINTS_ACTIVATED';
protected static $priority = 1;
protected $subject = 'Přičtení bodů za objednávku {KOD}';
protected $template = 'email/email_bonus_points_activated.tpl';
protected $defaultEnabled = 'N';
protected BonusProvider $bonusProvider;
private ?int $bonusPoints = null;
public function setBonusPoints(int $bonusPoints): void
{
$this->bonusPoints = $bonusPoints;
}
public static function getPlaceholders()
{
$placeholders = [
'POCET_BODU' => [
'text' => translate('bonusProgramPointsActivated', 'emails'),
],
'PLATNOST_BODU' => [
'text' => translate('bonusProgramNullPoints', 'emails'),
],
'BODY_CELKEM' => [
'text' => translate('bonusProgramPointsRemaining', 'emails'),
],
];
return [self::$type => $placeholders] + (parent::getPlaceholders() ?? []);
}
public function replacePlaceholdersItem($placeholder)
{
switch ($placeholder) {
case 'POCET_BODU':
return $this->bonusPoints;
case 'PLATNOST_BODU':
return \Settings::getDefault()->bonus_program['remove_time'] ?? '';
case 'BODY_CELKEM':
$user = $this->getOrder()?->getUser();
if (!$user) {
return '0';
}
return (string) $this->bonusProvider->getActivePointsAmount($user);
}
return parent::replacePlaceholdersItem($placeholder);
}
public function testEmail(): array
{
$this->setBonusPoints(256);
return parent::testEmail();
}
#[Required]
final public function setBonusProvider(BonusProvider $bonusProvider): void
{
$this->bonusProvider = $bonusProvider;
}
public function __wakeup()
{
parent::__wakeup();
$this->bonusProvider = ServiceContainer::getService(BonusProvider::class);
}
public function __sleep()
{
return array_diff(parent::__sleep(), ['bonusProvider']);
}
}