ConfigurableAttributeHandler.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\ConfigurableProduct\Model;
  7. class ConfigurableAttributeHandler
  8. {
  9. /**
  10. * Attribute collection factory
  11. *
  12. * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
  13. */
  14. protected $collectionFactory;
  15. /**
  16. * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeColFactory
  17. */
  18. public function __construct(
  19. \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeColFactory
  20. ) {
  21. $this->collectionFactory = $attributeColFactory;
  22. }
  23. /**
  24. * Retrieve list of attributes applicable for configurable product
  25. *
  26. * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
  27. */
  28. public function getApplicableAttributes()
  29. {
  30. /** @var $collection \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection */
  31. $collection = $this->collectionFactory->create();
  32. return $collection->addFieldToFilter(
  33. 'frontend_input',
  34. 'select'
  35. )->addFieldToFilter(
  36. 'is_user_defined',
  37. 1
  38. )->addFieldToFilter(
  39. 'is_global',
  40. \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL
  41. );
  42. }
  43. /**
  44. * @param \Magento\Catalog\Api\Data\ProductAttributeInterface $attribute
  45. * @return bool
  46. */
  47. public function isAttributeApplicable($attribute)
  48. {
  49. $types = [
  50. \Magento\Catalog\Model\Product\Type::TYPE_SIMPLE,
  51. \Magento\Catalog\Model\Product\Type::TYPE_VIRTUAL,
  52. \Magento\ConfigurableProduct\Model\Product\Type\Configurable::TYPE_CODE,
  53. ];
  54. return !$attribute->getApplyTo() || count(array_diff($types, $attribute->getApplyTo())) === 0;
  55. }
  56. }