/** * Add dynamic fields * * @param BuildBefore $event * @param string|null $alias * @param string|null $itemType * @param bool $dynamicFirst flag if true - dynamic columns will be placed before static, false - after */ public function doBuildBefore(BuildBefore $event, $alias = null, $itemType = null, $dynamicFirst = true) { $config = $event->getConfig(); // get dynamic columns and merge them with static columns from configuration $additionalColumnSettings = $this->getDynamicFields($alias, $itemType); $filtersSorters = $this->getDynamicSortersAndFilters($additionalColumnSettings); $additionalColumnSettings = ['columns' => $additionalColumnSettings, 'sorters' => $filtersSorters['sorters'], 'filters' => $filtersSorters['filters']]; $additionalColumnSettings = $this->datagridResolver->resolve($config->getName(), $additionalColumnSettings); foreach (['columns', 'sorters', 'filters'] as $itemName) { $path = '[' . $itemName . ']'; // get already defined items $items = $config->offsetGetByPath($path, []); // merge additional items with existing if ($dynamicFirst) { $items = array_merge_recursive($additionalColumnSettings[$itemName], $items); } else { $items = array_merge_recursive($items, $additionalColumnSettings[$itemName]); } // set new item set with dynamic columns/sorters/filters $config->offsetSetByPath($path, $items); } // add/configure entity config properties $this->addEntityConfigProperties($config, $itemType); // add/configure entity config actions $actions = $config->offsetGetByPath(self::PATH_ACTIONS, []); $this->prepareRowActions($actions, $itemType); $config->offsetSetByPath(self::PATH_ACTIONS, $actions); }
/** * Assert definition empty */ public function testResolveEmpty() { $definition = []; $gridDefinition = $this->resolver->resolve('test', $definition); $this->assertEmpty($gridDefinition); $definition = ['filters' => ['entityName' => ['choices' => 'test-not-valid']]]; $gridDefinition = $this->resolver->resolve('test', $definition); $this->assertEquals($definition, $gridDefinition); }
/** * {@inheritDoc} */ public function getConfiguration($gridName) { if (!isset($this->rawConfiguration[$gridName])) { throw new RuntimeException(sprintf('A configuration for "%s" datagrid was not found.', $gridName)); } if (!isset($this->processedConfiguration[$gridName])) { $config = $this->resolver->resolve($gridName, $this->rawConfiguration[$gridName]); $this->processedConfiguration[$gridName] = $config; } return DatagridConfiguration::createNamed($gridName, $this->processedConfiguration[$gridName]); }
/** * Assert definition escaped */ public function testResolveEscaped() { $gridName = 'test'; $gridDefinition = ['filters' => ['entityName' => ['choices_builder' => 'test\\@email.com']]]; $gridDefinition = $this->resolver->resolve($gridName, $gridDefinition); $this->assertEquals('*****@*****.**', $gridDefinition['filters']['entityName']['choices_builder']); }