first commit

This commit is contained in:
2025-08-02 16:30:27 +02:00
commit 23646bfcee
14851 changed files with 1750626 additions and 0 deletions

View File

@@ -0,0 +1,85 @@
<?php
namespace KupShop\BonusProgramBundle\Actions\Frontend;
use KupShop\BonusProgramBundle\Utils\BonusProvider;
use KupShop\KupShopBundle\Context\UserContext;
use KupShop\KupShopBundle\Util\Compat\ServiceContainer;
use KupShop\KupShopBundle\Util\Contexts;
use KupShop\OrderDiscountBundle\Actions\Frontend\AbstractHandler;
class BonusProgramHandler extends AbstractHandler
{
protected $template = 'order_discount/actions/bonus_program.tpl';
protected BonusProvider $bonusProvider;
public $templateSize = 'half';
/** @required */
public function setBonusProvider(BonusProvider $bonusProvider)
{
$this->bonusProvider = $bonusProvider;
return $this;
}
public function handleData($data): array
{
$data = parent::handleData($data);
$bonus_points = intval($data['bonus_points'] ?? 0);
if ($bonus_points <= 0) {
return [];
}
/** @var UserContext $userContext */
$userContext = ServiceContainer::getService(UserContext::class);
$activePoints = $this->bonusProvider->getActivePointsAmount($userContext->getActive());
$maxActivePoints = max($activePoints - $this->getUsedBonusPoints(), 0);
$bonus_points = min([$bonus_points, $maxActivePoints]);
return ['bonus_points' => $bonus_points];
}
public function getVars(): array
{
$vars = parent::getVars();
$user = Contexts::get(UserContext::class)->getActive();
$activePoints = $user ? $this->bonusProvider->getActivePointsAmount($user) : 0;
$vars['activePoints'] = $activePoints;
$bonus_points = intval($vars['frontend_data']['bonus_points'] ?? 0);
if ($bonus_points > 0) {
$maxActivePoints = max($activePoints - $this->getUsedBonusPoints(), 0);
$bonus_points = min([$bonus_points, $maxActivePoints]);
$vars['bonus_points'] = $bonus_points;
$vars['frontend_data']['bonus_points'] = $bonus_points;
}
return $vars;
}
public function getUsedBonusPoints(): int
{
$used_bonus_points = 0;
foreach (getVal('action_handler', null, []) as $id => $handler) {
if ($id != $this->getActionId()) {
$used_bonus_points += intval($handler['bonus_points'] ?? 0);
}
}
return $used_bonus_points;
}
public function __sleep()
{
$vars = array_keys(get_object_vars($this));
return array_diff($vars, ['bonusProvider']);
}
public function __wakeup()
{
// Povolené použití ServiceContainer, protože DI v deserializaci nejde
$this->setBonusProvider(ServiceContainer::getService(BonusProvider::class));
}
}