custom/plugins/DmagUploadCustomImage/src/DmagUploadCustomImage.php line 16

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Dmag\DmagUploadCustomImage;
  3. use Shopware\Core\Framework\Context;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\IdSearchResult;
  8. use Shopware\Core\Framework\Plugin;
  9. use Shopware\Core\Framework\Plugin\Context\ActivateContext;
  10. use Shopware\Core\Framework\Plugin\Context\DeactivateContext;
  11. use Shopware\Core\Framework\Uuid\Uuid;
  12. use Shopware\Core\System\CustomField\CustomFieldTypes;
  13. class DmagUploadCustomImage extends Plugin
  14. {
  15.     public function activate(ActivateContext $activateContext): void
  16.     {
  17.         ########################################
  18.         #### Create necessary custom fields ####
  19.         ########################################
  20.         //Return if the custom_field allready exists.
  21.         if($this->getExistingUuidForCustomField('dmag_upload_custom_images_is_active') != null) return;
  22.         $customFieldSetRepository $this->container->get('custom_field_set.repository');
  23.         $customFieldSetRepository->create([
  24.             [
  25.                 'name' => 'dmag_upload_custom_images',
  26.                 'config' => [
  27.                     'label' => [
  28.                         'de-DE' => 'Kundendefiniertes Bild hochladen',
  29.                         'en-GB' => 'Upload custom Images'
  30.                     ]
  31.                 ],
  32.                 'customFields' => [
  33.                     [
  34.                         'name' => 'dmag_upload_custom_images_is_active',
  35.                         'type' => CustomFieldTypes::SWITCH,
  36.                         'config' => [
  37.                             'label' => [
  38.                                 'de-DE' => 'Aktivieren',
  39.                                 'en-GB' => 'Activate'
  40.                             ],
  41.                             'customFieldPosition' => 1
  42.                         ]
  43.                     ],
  44.                     [
  45.                         'name' => 'dmag_upload_custom_images_frame',
  46.                         'type' => CustomFieldTypes::MEDIA,
  47.                         'config' => [
  48.                             "customFieldType" => CustomFieldTypes::MEDIA,
  49.                             'label' => [
  50.                                 'de-DE' => 'Rahmen',
  51.                                 'en-GB' => 'Frame'
  52.                             ],
  53.                             'placeholder' => [
  54.                                 'de-DE' => 'Bitte einen Rahmen auswählen',
  55.                                 'en-GB' => 'Please choose a frame'
  56.                             ],
  57.                             'customFieldPosition' => 2,
  58.                             "componentName" => "sw-media-field"
  59.                         ]
  60.                     ],
  61.                     [
  62.                         'name' => 'dmag_upload_custom_images_placeholder',
  63.                         'type' => CustomFieldTypes::MEDIA,
  64.                         'config' => [
  65.                             "customFieldType" => CustomFieldTypes::MEDIA,
  66.                             'label' => [
  67.                                 'de-DE' => 'Platzhalter',
  68.                                 'en-GB' => 'Placeholder'
  69.                             ],
  70.                             'placeholder' => [
  71.                                 'de-DE' => 'Bitte einen Platzhalter auswählen',
  72.                                 'en-GB' => 'Please choose a Placeholder'
  73.                             ],
  74.                             'customFieldPosition' => 3,
  75.                             "componentName" => "sw-media-field"
  76.                         ]
  77.                     ]
  78.                 ],
  79.                 'relations' => [
  80.                     [
  81.                         'id' => Uuid::randomHex(),
  82.                         'entityName' => 'product'
  83.                     ]
  84.                 ],
  85.                 
  86.             ]
  87.         ], $activateContext->getContext());    
  88.     }
  89.     public function deactivate(DeactivateContext $deactivateContext): void
  90.     {
  91.         $this->removeCustomField($deactivateContext);
  92.     }
  93.     ###############################
  94.     #######     Helpers     #######
  95.     ###############################
  96.     /**
  97.      * Get uuid from custom_field if allrady exists.
  98.      */
  99.     private function getExistingUuidForCustomField($name){
  100.         $customFieldRepository $this->container->get('custom_field.repository');
  101.         $context Context::createDefaultContext();
  102.         $criteria = new Criteria();
  103.         $criteria->addFilter(new EqualsFilter('name'$name));
  104.         $customField $customFieldRepository->search($criteria$context)->first();
  105.         if ($customField !== null) {
  106.             return $customField->getId();
  107.         }
  108.         return null;
  109.     }
  110.     
  111.     /**
  112.      * Delete a Custom-Field-Set.
  113.      */
  114.     private function removeCustomField(DeactivateContext $deactivateContext){
  115.         $customFieldSetRepository $this->container->get('custom_field_set.repository');
  116.         $fieldIds $this->customFieldsExist($deactivateContext->getContext(),'dmag_upload_custom_images');
  117.         if ($fieldIds) {
  118.             $customFieldSetRepository->delete(array_values($fieldIds->getData()), $deactivateContext->getContext());
  119.         }
  120.     }
  121.     /**
  122.      * Check if an Custom-Field-Set exists and return its ID in case available.
  123.      */
  124.     private function customFieldsExist(Context $context,string $customFieldName): ?IdSearchResult{
  125.         $customFieldSetRepository $this->container->get('custom_field_set.repository');
  126.         $criteria = new Criteria();
  127.         $criteria->addFilter(new EqualsAnyFilter('name', [$customFieldName]));
  128.         $ids $customFieldSetRepository->searchIds($criteria$context);
  129.         return $ids->getTotal() > $ids null;
  130.     }
  131. }