- <?php declare(strict_types=1);
- namespace Shopware\Administration\System\SalesChannel\Subscriber;
- use Shopware\Core\Framework\Context;
- use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
- use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityDeletedEvent;
- use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
- use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
- use Shopware\Core\Framework\Log\Package;
- use Shopware\Core\System\User\Aggregate\UserConfig\UserConfigCollection;
- use Symfony\Component\EventDispatcher\EventSubscriberInterface;
- /**
-  * @deprecated tag:v6.5.0 - reason:becomes-internal - EventSubscribers will become internal in v6.5.0
-  */
- #[Package('system-settings')]
- class SalesChannelUserConfigSubscriber implements EventSubscriberInterface
- {
-     public const CONFIG_KEY = 'sales-channel-favorites';
-     private EntityRepositoryInterface $userConfigRepository;
-     /**
-      * @internal
-      */
-     public function __construct(EntityRepositoryInterface $userConfigRepository)
-     {
-         $this->userConfigRepository = $userConfigRepository;
-     }
-     public static function getSubscribedEvents(): array
-     {
-         return [
-             'sales_channel.deleted' => 'onSalesChannelDeleted',
-         ];
-     }
-     public function onSalesChannelDeleted(EntityDeletedEvent $deletedEvent): void
-     {
-         $context = $deletedEvent->getContext();
-         $deletedSalesChannelIds = $deletedEvent->getIds();
-         $writeUserConfigs = [];
-         foreach ($this->getAllFavoriteUserConfigs($context) as $userConfigEntity) {
-             $salesChannelIds = $userConfigEntity->getValue();
-             if ($salesChannelIds === null) {
-                 continue;
-             }
-             // Find matching IDs
-             $matchingIds = array_intersect($deletedSalesChannelIds, $salesChannelIds);
-             if (!$matchingIds) {
-                 continue;
-             }
-             // Removes the IDs from $matchingIds from the array
-             $newUserConfigArray = array_diff($salesChannelIds, $matchingIds);
-             $writeUserConfigs[] = [
-                 'id' => $userConfigEntity->getId(),
-                 'value' => array_values($newUserConfigArray),
-             ];
-         }
-         $this->userConfigRepository->upsert($writeUserConfigs, $context);
-     }
-     private function getAllFavoriteUserConfigs(Context $context): UserConfigCollection
-     {
-         $criteria = new Criteria();
-         $criteria->addFilter(new EqualsFilter('key', self::CONFIG_KEY));
-         /** @var UserConfigCollection $result */
-         $result = $this->userConfigRepository->search($criteria, $context)->getEntities();
-         return $result;
-     }
- }
-