Пример #1
0
 /**
  * @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;
 }