custom/plugins/KsAttachments/src/KsAttachments.php line 13

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Ks\Attachments;
  3. use Shopware\Core\Framework\Plugin;
  4. use Doctrine\DBAL\Connection;
  5. use Shopware\Core\Framework\Context;
  6. use Shopware\Core\Framework\Plugin\Context\InstallContext;
  7. use Shopware\Core\Framework\Plugin\Context\UninstallContext;
  8. use Ks\Attachments\Core\Content\Attachments\AttachmentsDefinition;
  9. use Shopware\Core\Framework\Uuid\Uuid;
  10. class KsAttachments extends Plugin
  11. {
  12.     public const ATTACHMENT_MEDIAFOLDER_NAME 'Product Attachment Media';
  13.     public function install(InstallContext $context): void
  14.     {
  15.         $this->createMediaThumbnailSize($context->getContext());
  16.         $this->createMediaFolder($context->getContext());
  17.     }
  18.     public function uninstall(UninstallContext $context): void
  19.     {
  20.         parent::uninstall($context);
  21.         if ($context->keepUserData()) {
  22.             return;
  23.         }
  24.         $connection $this->container->get(Connection::class);
  25.         $connection->executeUpdate('DROP TABLE IF EXISTS `ks_attachment_customer`');
  26.         $connection->executeUpdate('DROP TABLE IF EXISTS `ks_attachment_translation`');
  27.         $connection->executeUpdate('DROP TABLE IF EXISTS `ks_attachment`');
  28.         $this->removeMediaFolder($context->getContext());
  29.     }
  30.     private function removeMediaFolder(Context $context): void
  31.     {
  32.         $connection $this->container->get(Connection::class);
  33.         try {
  34.             $defaultFolderId $connection->fetchColumn('SELECT HEX(id) FROM media_default_folder WHERE entity = ?', [
  35.                 AttachmentsDefinition::ENTITY_NAME
  36.             ]);
  37.             if(!$defaultFolderId) return;
  38.             $defaultConfigurationId $connection->fetchColumn('SELECT HEX(media_folder_configuration_id) FROM media_folder WHERE HEX(default_folder_id) = ?', [
  39.                 $defaultFolderId
  40.             ]);
  41.             if(!$defaultConfigurationId) return;
  42.             $connection->executeUpdate('DELETE FROM `media_folder_configuration` WHERE HEX(id) = ?', [
  43.                 $defaultConfigurationId
  44.             ]);
  45.             $connection->executeUpdate('DELETE FROM `media_folder` WHERE HEX(default_folder_id) = ?', [
  46.                 $defaultFolderId
  47.             ]);
  48.             $connection->executeUpdate('DELETE FROM `media_default_folder` WHERE entity = ?', [
  49.                 AttachmentsDefinition::ENTITY_NAME
  50.             ]);
  51.         }
  52.         catch (\Exception $e) {
  53.             echo $e->getMessage();
  54.         }
  55.     }
  56.     private function createMediaThumbnailSize(Context $context): void
  57.     {
  58.         try {
  59.             $connection $this->container->get(Connection::class);
  60.             $mediaThumbnailSizeId Uuid::randomHex();
  61.             $repo $this->container->get('media_thumbnail_size.repository');
  62.             $repo->upsert([
  63.                 [
  64.                     'id'               => $mediaThumbnailSizeId,
  65.                     'width'            => 30,
  66.                     'height'           => 30
  67.                 ]
  68.             ], $context);
  69.         } catch (\Exception $e) {
  70.             echo $e->getMessage();
  71.         }
  72.     }
  73.     private function createMediaFolder(Context $context): void
  74.     {
  75.         try {
  76.             $connection $this->container->get(Connection::class);
  77.             $mediaFolderId Uuid::randomHex();
  78.             $thumbnailIds $connection->fetchAll('SELECT LOWER(HEX(id)) AS id from `media_thumbnail_size` WHERE width in (30)');
  79.             $repo $this->container->get('media_default_folder.repository');
  80.             $repo->upsert([
  81.                 [
  82.                     'id'                => $mediaFolderId,
  83.                     'entity'            => AttachmentsDefinition::ENTITY_NAME,
  84.                     'associationFields' => ['media'],
  85.                     'folder'            => [
  86.                         'name'                   => self::ATTACHMENT_MEDIAFOLDER_NAME,
  87.                         'useParentConfiguration' => false,
  88.                         'configuration'          => [
  89.                             'createThumbnails'    => true,
  90.                             'mediaThumbnailSizes' => $thumbnailIds
  91.                         ]
  92.                     ]
  93.                 ]
  94.             ], $context);
  95.         } catch (\Exception $e) {
  96.             echo $e->getMessage();
  97.         }
  98.     }
  99. }