31 private $typeProcessor;
36 private $extensionAttributesFactory;
41 private $joinProcessorHelper;
58 $this->typeProcessor = $typeProcessor;
60 $this->joinProcessorHelper = $joinProcessorHelper;
68 $extensibleEntityClass = $extensibleEntityClass ?:
$collection->getItemObjectClass();
69 $joinDirectives = $this->getJoinDirectivesForType($extensibleEntityClass);
73 $joinData = $this->joinProcessorHelper->getJoinDataInterface();
76 ->setReferenceTableAlias($this->getReferenceTableAlias(
$attributeCode))
79 $joinData->setSelectFields(
82 $collection->joinExtensionAttribute($joinData, $this);
102 if (!$this->isExtensibleAttributesImplemented($extensibleEntityClass)) {
107 $joinDirectives = $this->getJoinDirectivesForType($extensibleEntityClass);
110 $this->populateAttributeCodeWithDirective(
115 $extensibleEntityClass
118 if (!empty($extensionData)) {
119 $extensionAttributes = $this->extensionAttributesFactory->create($extensibleEntityClass, $extensionData);
135 private function populateAttributeCodeWithDirective(
140 $extensibleEntityClass
143 $selectFields = $this->joinProcessorHelper
146 foreach ($selectFields as $selectField) {
148 if (isset(
$data[$internalAlias])) {
149 if ($this->typeProcessor->isArrayType($attributeType)) {
150 throw new \LogicException(
152 'Join directives cannot be processed for attribute (%s) of extensible entity (%s),' 153 .
' which has an Array type (%s).',
155 $this->extensionAttributesFactory->getExtensibleInterfaceName($extensibleEntityClass),
159 }
elseif ($this->typeProcessor->isTypeSimple($attributeType)) {
161 unset(
$data[$internalAlias]);
165 $extensionData[
'data'][
$attributeCode] = $this->objectManager->create($attributeType);
169 unset(
$data[$internalAlias]);
183 private function getJoinDirectivesForType($extensibleEntityClass)
185 $extensibleInterfaceName = $this->extensionAttributesFactory
186 ->getExtensibleInterfaceName($extensibleEntityClass);
187 $extensibleInterfaceName = ltrim($extensibleInterfaceName,
'\\');
188 $config = $this->joinProcessorHelper->getConfigData();
189 if (!isset(
$config[$extensibleInterfaceName])) {
193 $typeAttributesConfig =
$config[$extensibleInterfaceName];
194 $joinDirectives = [];
195 foreach ($typeAttributesConfig as
$attributeCode => $attributeConfig) {
202 return $joinDirectives;
211 private function isExtensibleAttributesImplemented($typeName)
214 $this->extensionAttributesFactory->getExtensibleInterfaceName($typeName);
216 }
catch (\LogicException $e) {
__construct(\Magento\Framework\ObjectManagerInterface $objectManager, TypeProcessor $typeProcessor, ExtensionAttributesFactory $extensionAttributesFactory, JoinProcessorHelper $joinProcessorHelper)
elseif(isset( $params[ 'redirect_parent']))
process(DbCollection $collection, $extensibleEntityClass=null)
extractExtensionAttributes($extensibleEntityClass, array $data)
const SELECT_FIELD_SETTER
const EXTENSION_ATTRIBUTES_KEY
const JOIN_REFERENCE_TABLE
const JOIN_REFERENCE_FIELD
const SELECT_FIELD_INTERNAL_ALIAS
$extensionAttributesFactory