namespace Lc\SovBundle\Component; | namespace Lc\SovBundle\Component; | ||||
use Doctrine\ORM\EntityManagerInterface; | use Doctrine\ORM\EntityManagerInterface; | ||||
use Lc\SovBundle\Doctrine\Extension\BlameableInterface; | |||||
use Lc\SovBundle\Doctrine\Extension\DevAliasInterface; | |||||
use Lc\SovBundle\Doctrine\Extension\SeoInterface; | |||||
use Lc\SovBundle\Doctrine\Extension\SortableInterface; | |||||
use Lc\SovBundle\Doctrine\Extension\TimestampableInterface; | |||||
use Lc\SovBundle\Event\EntityComponentEvent; | use Lc\SovBundle\Event\EntityComponentEvent; | ||||
use Lc\SovBundle\Model\File\FileInterface; | use Lc\SovBundle\Model\File\FileInterface; | ||||
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; | use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; | ||||
$newEntity = clone $entity; | $newEntity = clone $entity; | ||||
$classMetadata = $this->entityManager->getClassMetadata(get_class($newEntity)); | $classMetadata = $this->entityManager->getClassMetadata(get_class($newEntity)); | ||||
//Dupplication de l'image ou du fichier lier | |||||
foreach ($classMetadata->getAssociationMappings() as $associationMapping){ | foreach ($classMetadata->getAssociationMappings() as $associationMapping){ | ||||
if(in_array(FileInterface::class, class_implements($associationMapping['targetEntity']))){ | if(in_array(FileInterface::class, class_implements($associationMapping['targetEntity']))){ | ||||
$methodGet = 'get'.ucfirst($associationMapping['fieldName']); | $methodGet = 'get'.ucfirst($associationMapping['fieldName']); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | |||||
if($newEntity instanceof DevAliasInterface){ | |||||
$newEntity->setDevAlias(null); | |||||
} | |||||
if($newEntity instanceof SeoInterface) { | |||||
$newEntity->setOldUrls(array()); | |||||
} | } | ||||
//TODO dispatch event duplicate | |||||
/* if ($newEntity instanceof ProductFamilyInterface) { | |||||
// @TODO : à adapter | |||||
//$newEntity = $this->productFamilyUtils->processBeforePersistProductFamily($newEntity, false, true); | |||||
if($newEntity instanceof BlameableInterface) { | |||||
$newEntity->setUpdatedBy(null); | |||||
$newEntity->setCreatedBy(null); | |||||
} | } | ||||
*/ | |||||
$this->entityManager->create($newEntity); | |||||
if($newEntity instanceof TimestampableInterface) { | |||||
$newEntity->setUpdatedAt(new \DateTime()); | |||||
$newEntity->setCreatedAt(new \DateTime()); | |||||
} | |||||
$this->entityManager->create($newEntity); | |||||
$this->eventDispatcher->dispatch(new EntityComponentEvent($newEntity), EntityComponentEvent::DUPLICATE_EVENT); | $this->eventDispatcher->dispatch(new EntityComponentEvent($newEntity), EntityComponentEvent::DUPLICATE_EVENT); | ||||
return $newEntity; | return $newEntity; |
$this->overrideGlobalActions($responseParameters->get('global_actions')); | $this->overrideGlobalActions($responseParameters->get('global_actions')); | ||||
} | } | ||||
if ($responseParameters->get('entities')) { | if ($responseParameters->get('entities')) { | ||||
$this->overrideEntitiesActions($responseParameters->get('entities')); | |||||
$this->overrideEntitiesActions($responseParameters->get('entities'), $responseParameters->get('pageName')); | |||||
} | } | ||||
if (Crud::PAGE_INDEX === $responseParameters->get('pageName')) { | if (Crud::PAGE_INDEX === $responseParameters->get('pageName')) { | ||||
$responseParameters->set('fields', $this->configureFields('index')); | $responseParameters->set('fields', $this->configureFields('index')); | ||||
return $this->getEntityFqcn(); | return $this->getEntityFqcn(); | ||||
} | } | ||||
public function overrideEntitiesActions(?EntityCollection $entities): void | |||||
public function overrideEntitiesActions(?EntityCollection $entities, string $pageName): void | |||||
{ | { | ||||
} | } | ||||
return $switchAction; | return $switchAction; | ||||
} | } | ||||
public function overrideEntitiesActions(?EntityCollection $entities): void | |||||
public function overrideEntitiesActions(?EntityCollection $entities, string $pageName): void | |||||
{ | { | ||||
parent::overrideEntitiesActions($entities); // TODO: Change the autogenerated stub | |||||
parent::overrideEntitiesActions($entities, $pageName); // TODO: Change the autogenerated stub | |||||
foreach ($entities as $entity) { | foreach ($entities as $entity) { | ||||
foreach ($entity->getActions() as $action) { | foreach ($entity->getActions() as $action) { | ||||
if ($action->getName() == ActionDefinition::SWITCH_USER) { | if ($action->getName() == ActionDefinition::SWITCH_USER) { |
return $this; | return $this; | ||||
}*/ | }*/ | ||||
// @TODO : créer un addOrderBy et un orderBy | |||||
public function orderBy(string $field, string $sort = 'ASC'): self | public function orderBy(string $field, string $sort = 'ASC'): self | ||||
{ | { | ||||
if (strpos($field, '.')!==false) { | if (strpos($field, '.')!==false) { |
{% do form.settings.setRendered %} | {% do form.settings.setRendered %} | ||||
{{ form_end(form) }} | {{ form_end(form) }} | ||||
{% endblock %} | {% endblock %} | ||||
{% endembed %} | {% endembed %} |
namespace Lc\SovBundle\Twig; | namespace Lc\SovBundle\Twig; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext; | use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext; | ||||
use Lc\CaracoleBundle\Model\Section\SectionInterface; | |||||
use Lc\SovBundle\Model\Site\SiteInterface; | |||||
use Lc\SovBundle\Repository\Reminder\ReminderStoreInterface; | use Lc\SovBundle\Repository\Reminder\ReminderStoreInterface; | ||||
use Lc\SovBundle\Solver\Setting\SettingSolver; | |||||
use Symfony\Component\Security\Core\Security; | use Symfony\Component\Security\Core\Security; | ||||
use Twig\Extension\AbstractExtension; | use Twig\Extension\AbstractExtension; | ||||
use Twig\TwigFunction; | use Twig\TwigFunction; | ||||
{ | { | ||||
protected Security $security; | protected Security $security; | ||||
protected ReminderStoreInterface $reminderStore; | protected ReminderStoreInterface $reminderStore; | ||||
protected SettingSolver $settingSolver; | |||||
public function __construct( | public function __construct( | ||||
Security $security, | Security $security, | ||||
ReminderStoreInterface $reminderStore | |||||
ReminderStoreInterface $reminderStore, | |||||
SettingSolver $settingSolver | |||||
) { | ) { | ||||
$this->security = $security; | $this->security = $security; | ||||
$this->reminderStore = $reminderStore; | $this->reminderStore = $reminderStore; | ||||
$this->settingSolver = $settingSolver; | |||||
} | } | ||||
public function getFunctions() | public function getFunctions() | ||||
{ | { | ||||
return [ | return [ | ||||
new TwigFunction('sov_reminders', [$this, 'getReminders']), | new TwigFunction('sov_reminders', [$this, 'getReminders']), | ||||
new TwigFunction('site_setting', [$this, 'getSiteSetting']), | |||||
]; | ]; | ||||
} | } | ||||
return []; | return []; | ||||
} | } | ||||
public function getSiteSetting(SiteInterface $site, string $settingName): ?string | |||||
{ | |||||
return $this->settingSolver->getSettingValue($site, $settingName); | |||||
} | |||||
public function getReminders($params) | public function getReminders($params) | ||||
{ | { | ||||
// @TODO : à faire | // @TODO : à faire |
new TwigFilter('sov_cache', [$this, 'sovCache']), | new TwigFilter('sov_cache', [$this, 'sovCache']), | ||||
new TwigFilter('slugify', [$this, 'slugify']), | new TwigFilter('slugify', [$this, 'slugify']), | ||||
new TwigFilter('md5', [$this, 'md5']), | new TwigFilter('md5', [$this, 'md5']), | ||||
new TwigFilter('rot13', [$this, 'rot13']), | |||||
]; | ]; | ||||
} | } | ||||
public function rot13(string $string): string | |||||
{ | |||||
return str_rot13($string); | |||||
} | |||||
public function isInstanceOf(EntityInterface $entity, string $interfaceName) | public function isInstanceOf(EntityInterface $entity, string $interfaceName) | ||||
{ | { | ||||
$reflection = new \ReflectionClass($entity); | $reflection = new \ReflectionClass($entity); |