/** * @param Integration $integration * * @return ChannelObjectBuilder */ public function createBuilderForIntegration(Integration $integration) { $channel = new Channel(); $settingsProvider = $this->settingsProvider; $type = $this->getChannelTypeForIntegration($this->settingsProvider, $integration->getType()); $connectors = $integration->getConnectors(); $entities = array_filter($settingsProvider->getEntitiesByChannelType($type), function ($entityName) use($settingsProvider, &$connectors) { $connector = $settingsProvider->getIntegrationConnectorName($entityName); $key = array_search($connector, $connectors); $enabled = $key !== false; if ($enabled) { unset($connectors[$key]); } return $enabled; }); // disable connectors without correspondent entity $connectors = array_diff($integration->getConnectors(), $connectors); $identity = $settingsProvider->getCustomerIdentityFromConfig($type); if (!in_array($identity, $entities, true)) { array_unshift($entities, $identity); $connector = $settingsProvider->getIntegrationConnectorName($identity); if (false !== $connector) { array_unshift($connectors, $connector); } } $integration->setEditMode(Integration::EDIT_MODE_DISALLOW); $integration->setConnectors($connectors); $builder = new ChannelObjectBuilder($this->registry->getManager(), $this->settingsProvider, $channel); $builder->setChannelType($type)->setEntities($entities); return $builder; }