<?php
declare(strict_types=1);
namespace VioCustomerDocs;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\FetchMode;
use Shopware\Core\Content\Media\Aggregate\MediaDefaultFolder\MediaDefaultFolderDefinition;
use Shopware\Core\Content\Media\Aggregate\MediaFolder\MediaFolderDefinition;
use Shopware\Core\Content\Media\Aggregate\MediaFolderConfiguration\MediaFolderConfigurationDefinition;
use Shopware\Core\Framework\Plugin;
use Shopware\Core\Framework\Plugin\Context\UninstallContext;
use VioCustomerDocs\Entities\CustomerDocumentDefinition;
class VioCustomerDocs extends Plugin
{
public function uninstall(UninstallContext $uninstallContext): void
{
parent::uninstall($uninstallContext);
if ($uninstallContext->keepUserData()) {
return;
}
$connection = $this->container->get(Connection::class);
if (!empty($connection)) {
$connection->executeStatement('DROP TABLE IF EXISTS vio_customer_document');
$this->removeFolders($connection);
}
}
private function removeFolders(Connection $connection): void
{
/** @var int $defaultFolderId */
$defaultFolderId = $connection->createQueryBuilder()
->select('id')
->from(MediaDefaultFolderDefinition::ENTITY_NAME)
->where('entity = :entity')
->setParameter('entity', CustomerDocumentDefinition::ENTITY_NAME)
->execute()
->fetchColumn();
if (empty($defaultFolderId)) {
return;
}
$folder = $connection->createQueryBuilder()
->select('id', 'media_folder_configuration_id')
->from(MediaFolderDefinition::ENTITY_NAME)
->where('default_folder_id = :folderId')
->setParameter('folderId', $defaultFolderId)
->execute()
->fetch(FetchMode::ASSOCIATIVE);
if (empty($folder)) {
return;
}
// drop Folder
$connection->createQueryBuilder()
->delete(MediaFolderDefinition::ENTITY_NAME)
->where('id = :folderId')
->setParameter('folderId', $folder['id'])
->execute();
// drop Configuration
$connection->createQueryBuilder()
->delete(MediaFolderConfigurationDefinition::ENTITY_NAME)
->where('id = :configId')
->setParameter('configId', $folder['media_folder_configuration_id'])
->execute();
// drop the default folder
$connection->createQueryBuilder()
->delete(MediaDefaultFolderDefinition::ENTITY_NAME)
->where('id = :folderId')
->setParameter('folderId', $defaultFolderId)
->execute();
}
}