<?php
declare(strict_types=1);
namespace App\Base\EventSubscriber;
use Pimcore\Event\DataObjectEvents;
use Pimcore\Event\Model\ElementEventInterface;
use Pimcore\Model\DataObject\AlbumCover;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\User\UserInterface;
class DataObjectSubscriber implements EventSubscriberInterface
{
/** @var TokenStorageInterface */
private TokenStorageInterface $tokenStorage;
public function __construct(
TokenStorageInterface $tokenStorage
) {
$this->tokenStorage = $tokenStorage;
}
public static function getSubscribedEvents()
{
return [
DataObjectEvents::PRE_ADD => 'onPreAdd',
];
}
public function onPreAdd(ElementEventInterface $e)
{
$user = $this->tokenStorage->getToken()->getUser();
if ($user instanceof UserInterface) {
$user = $user->getUser();
$object = $e->getElement();
if (!$user->isAdmin() && $object->getType() !== 'folder') {
$object->setGeneratedKey();
$object->setParentByOwner($user->getId());
$object->setAssetsParentByOwner($user->getId());
//todo быстрое решение. Подмена пути хранения файла (нужно заменять __tmp)
if ($object->getName() !== null && strpos($object->getName(), '/') !== false) {
[$typeFile, $arFilename] = explode('/', $object->getName());
$object->setName($arFilename);
}
if ($object instanceof AlbumCover) {
$object->setCoverType(['user']);
}
}
}
}
}