vendor/shopware/platform/src/Core/System/CustomField/CustomFieldService.php line 77

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\System\CustomField;
  3. use Doctrine\DBAL\Connection;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Doctrine\FetchModeHelper;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Field\BoolField;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Field\DateTimeField;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Field\Field;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Field\Flag\AllowHtml;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Field\FloatField;
  10. use Shopware\Core\Framework\DataAbstractionLayer\Field\IntField;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Field\JsonField;
  12. use Shopware\Core\Framework\DataAbstractionLayer\Field\LongTextField;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. class CustomFieldService implements EventSubscriberInterface
  15. {
  16.     /**
  17.      * @var string[]|null
  18.      */
  19.     private $customFields;
  20.     /**
  21.      * @var Connection
  22.      */
  23.     private $connection;
  24.     public function __construct(Connection $connection)
  25.     {
  26.         $this->connection $connection;
  27.     }
  28.     public function getCustomField(string $attributeName): ?Field
  29.     {
  30.         $type $this->getCustomFields()[$attributeName] ?? null;
  31.         if (!$type) {
  32.             return null;
  33.         }
  34.         switch ($type) {
  35.             case CustomFieldTypes::INT:
  36.                 return new IntField($attributeName$attributeName);
  37.             case CustomFieldTypes::FLOAT:
  38.                 return new FloatField($attributeName$attributeName);
  39.             case CustomFieldTypes::BOOL:
  40.                 return new BoolField($attributeName$attributeName);
  41.             case CustomFieldTypes::DATETIME:
  42.                 return new DateTimeField($attributeName$attributeName);
  43.             case CustomFieldTypes::TEXT:
  44.                 return new LongTextField($attributeName$attributeName);
  45.             case CustomFieldTypes::HTML:
  46.                 return (new LongTextField($attributeName$attributeName))->addFlags(new AllowHtml());
  47.             case CustomFieldTypes::JSON:
  48.             default:
  49.                 return new JsonField($attributeName$attributeName);
  50.         }
  51.     }
  52.     public static function getSubscribedEvents(): array
  53.     {
  54.         return [
  55.             CustomFieldEvents::CUSTOM_FIELD_DELETED_EVENT => 'invalidateCache',
  56.             CustomFieldEvents::CUSTOM_FIELD_WRITTEN_EVENT => 'invalidateCache',
  57.         ];
  58.     }
  59.     /**
  60.      * @internal
  61.      */
  62.     public function invalidateCache(): void
  63.     {
  64.         $this->customFields null;
  65.     }
  66.     /**
  67.      * @return string[]
  68.      */
  69.     private function getCustomFields(): array
  70.     {
  71.         if ($this->customFields !== null) {
  72.             return $this->customFields;
  73.         }
  74.         $fields $this->connection->fetchAll('SELECT `name`, `type` FROM `custom_field` WHERE `active` = 1');
  75.         $this->customFields FetchModeHelper::keyPair($fields);
  76.         return $this->customFields;
  77.     }
  78. }