<?php
namespace App\EventSubscriber;
use App\Entity\Card;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class EasyAdminSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
BeforeEntityPersistedEvent::class => ['beforeEntityPersistedEvent'],
BeforeEntityUpdatedEvent::class => ['beforeEntityUpdatedEvent'],
];
}
public function beforeEntityPersistedEvent(BeforeEntityPersistedEvent $event)
{
$entity = $event->getEntityInstance();
if ($entity instanceof Card) {
$this->updateEnergyConsumptions($entity);
}
}
public function beforeEntityUpdatedEvent(BeforeEntityUpdatedEvent $event)
{
$entity = $event->getEntityInstance();
if ($entity instanceof Card) {
$this->updateEnergyConsumptions($entity);
}
}
public function updateEnergyConsumptions(Card $entity)
{
$query = [];
try {
parse_str(parse_url(urldecode($entity->getUrl()), PHP_URL_QUERY), $query);
} catch (\Exception $e) {
}
foreach ($entity->getCardCurrencies() as $cardCurrency) {
if($cardCurrency->getEnergyConsumption() === null && ($q = $cardCurrency->getCurrency()->getExtra('algo'))) {
$pKey = $q.'_p';
if(isset($query['factor'][$pKey])) {
$cardCurrency->setEnergyConsumption($query['factor'][$pKey]);
}
}
}
}
}