Exemplo n.º 1
0
 /**
  * @param string $datagridName
  * @param array  $datagridDefinition
  * @param bool   $recursion
  *
  * @return array
  */
 public function resolve($datagridName, $datagridDefinition, $recursion = false)
 {
     foreach ($datagridDefinition as $key => $val) {
         if (is_array($val)) {
             $this->parentNode = $val;
             $datagridDefinition[$key] = $this->resolve($datagridName, $val, true);
             continue;
         }
         $val = $this->resolveSystemCall($datagridName, $key, $val);
         if (!$recursion && self::KEY_EXTENDS === $key) {
             // get parent grid definition, resolved
             $definition = $this->container->get('oro_datagrid.datagrid.manager')->getConfigurationForGrid($val);
             // merge them and remove extend directive
             $datagridDefinition = ArrayUtil::arrayMergeRecursiveDistinct($definition->toArray(), $datagridDefinition);
             unset($datagridDefinition['extends']);
             $datagridDefinition[self::KEY_EXTENDED_FROM] = isset($datagridDefinition[self::KEY_EXTENDED_FROM]) ? $datagridDefinition[self::KEY_EXTENDED_FROM] : [];
             $datagridDefinition[self::KEY_EXTENDED_FROM][] = $val;
             // run resolve again on merged grid definition
             $datagridDefinition = $this->resolve($val, $datagridDefinition);
             // break current loop cause we've just extended grid definition
             break;
         }
         $datagridDefinition[$key] = $val;
     }
     return $datagridDefinition;
 }
Exemplo n.º 2
0
 /**
  * Collect datagrid configurations files and pass them to the configuration provider
  *
  * @param ContainerBuilder $container
  */
 protected function registerConfigFiles(ContainerBuilder $container)
 {
     if ($container->hasDefinition(self::PROVIDER_SERVICE_ID)) {
         $config = [];
         $configLoader = new CumulativeConfigLoader('oro_datagrid', new YamlCumulativeFileLoader('Resources/config/datagrid.yml'));
         $resources = $configLoader->load($container);
         foreach ($resources as $resource) {
             if (isset($resource->data[self::ROOT_PARAMETER]) && is_array($resource->data[self::ROOT_PARAMETER])) {
                 $config = ArrayUtil::arrayMergeRecursiveDistinct($config, $resource->data[self::ROOT_PARAMETER]);
             }
         }
         $configProviderDef = $container->getDefinition(self::PROVIDER_SERVICE_ID);
         $configProviderDef->replaceArgument(0, $config);
     }
 }
 /**
  * @param DatagridConfiguration $configuration
  * @param string                $gridName
  *
  * @return DatagridConfiguration
  */
 public function extendConfiguration(DatagridConfiguration $configuration, $gridName)
 {
     $gridConfiguration = $this->configurationProvider->getConfiguration($gridName);
     $basicAlias = $configuration->offsetGetByPath('[source][query][from][0][alias]');
     foreach ($this->pathsToFix as $path) {
         $forFix = $gridConfiguration->offsetGetByPath($path);
         if ($forFix) {
             $gridConfiguration->offsetSetByPath($path, $this->fixMixinAlias($basicAlias, $forFix));
         }
     }
     $scopes = array_diff(array_keys($gridConfiguration->getIterator()->getArrayCopy()), ['name']);
     foreach ($scopes as $scope) {
         $path = sprintf('[%s]', $scope);
         $additionalParams = $gridConfiguration->offsetGetByPath($path);
         $baseParams = $configuration->offsetGetByPath($path, []);
         if (!is_array($additionalParams) || !is_array($baseParams)) {
             continue;
         }
         $configuration->offsetSetByPath($path, ArrayUtil::arrayMergeRecursiveDistinct($baseParams, $additionalParams));
     }
     return $configuration;
 }
Exemplo n.º 4
0
 /**
  * Goes across bundles and collects configurations
  *
  * @return array
  */
 public function collectConfigs()
 {
     if (!$this->collectedConfig) {
         $config = $this->container->getParameter('oro_require_js');
         $bundles = $this->container->getParameter('kernel.bundles');
         foreach ($bundles as $bundle) {
             $reflection = new \ReflectionClass($bundle);
             if (is_file($file = dirname($reflection->getFilename()) . '/Resources/config/requirejs.yml')) {
                 $requirejs = Yaml::parse(realpath($file));
                 $config = ArrayUtil::arrayMergeRecursiveDistinct($config, $requirejs);
             }
         }
         $this->collectedConfig = $config;
     }
     return $this->collectedConfig;
 }
Exemplo n.º 5
0
 /**
  * @dataProvider mergeDataProvider
  *
  * @param array $expected
  * @param array $first
  * @param array $second
  */
 public function testArrayMergeRecursiveDistinct(array $expected, array $first, array $second)
 {
     $this->assertEquals($expected, ArrayUtil::arrayMergeRecursiveDistinct($first, $second));
 }
Exemplo n.º 6
0
 /**
  * Recursively merge arrays.
  *
  * Merge two arrays as array_merge_recursive do, but instead of converting values to arrays when keys are same
  * replaces value from first array with value from second
  *
  * @param array $first
  * @param array $second
  * @return array
  *
  * @deprecated since 1.9. Use Oro\Component\PhpUtils\ArrayUtil::arrayMergeRecursiveDistinct instead
  */
 public static function arrayMergeRecursiveDistinct(array $first, array $second)
 {
     return ArrayUtil::arrayMergeRecursiveDistinct($first, $second);
 }
Exemplo n.º 7
0
 /**
  * Merge configuration into one config
  *
  * @param ContainerBuilder $container
  * @param string $name
  * @param array $config
  *
  * @throws \RuntimeException
  */
 private function mergeConfigIntoOne(ContainerBuilder $container, $name, array $config = [])
 {
     if (!$container instanceof ExtendedContainerBuilder) {
         throw new \RuntimeException(sprintf('%s is expected to be passed into OroPlatformExtension', 'Oro\\Component\\DependencyInjection\\ExtendedContainerBuilder'));
     }
     $originalConfig = $container->getExtensionConfig($name);
     if (!count($originalConfig)) {
         $originalConfig[] = array();
     }
     $mergedConfig = ArrayUtil::arrayMergeRecursiveDistinct($originalConfig[0], $config);
     $originalConfig[0] = $mergedConfig;
     $container->setExtensionConfig($name, $originalConfig);
 }