/** * Validate configs nad fill default values * * @param DatagridConfiguration $config */ public function processConfigs(DatagridConfiguration $config) { $configItems = $config->offsetGetOr(Configuration::BASE_CONFIG_KEY, []); $configuration = new Configuration(Configuration::BASE_CONFIG_KEY); $normalizedConfigItems = $this->validateConfiguration($configuration, [Configuration::BASE_CONFIG_KEY => $configItems]); $isGranted = $this->securityFacade->isGranted('EDIT', 'entity:' . $configItems['entity_name']); //according to ACL disable inline editing for the whole grid if (!$isGranted) { $normalizedConfigItems[Configuration::CONFIG_KEY_ENABLE] = false; } // replace config values by normalized, extra keys passed directly $resultConfigItems = array_replace_recursive($configItems, $normalizedConfigItems); if (is_null($resultConfigItems['save_api_accessor']['default_route_parameters']['className'])) { $resultConfigItems['save_api_accessor']['default_route_parameters']['className'] = $this->entityClassNameHelper->getUrlSafeClassName($configItems['entity_name']); } $config->offsetSet(Configuration::BASE_CONFIG_KEY, $resultConfigItems); //add inline editing where it is possible, do not use ACL, because additional parameters for columns needed $columns = $config->offsetGetOr(FormatterConfiguration::COLUMNS_KEY, []); $blackList = $configuration->getBlackList(); foreach ($columns as $columnName => &$column) { if (!in_array($columnName, $blackList)) { $newColumn = $this->guesser->getColumnOptions($columnName, $configItems['entity_name'], $column); //frontend type key must not be replaced with default value $typeKey = PropertyInterface::FRONTEND_TYPE_KEY; if (!empty($newColumn[$typeKey])) { $column[$typeKey] = $newColumn[$typeKey]; } $column = array_replace_recursive($newColumn, $column); } } $config->offsetSet(FormatterConfiguration::COLUMNS_KEY, $columns); }
/** * {@inheritdoc} */ public function configure(DatagridConfiguration $configuration) { $attributes = $configuration->offsetGet(self::SOURCE_KEY)[self::USEABLE_ATTRIBUTES_KEY]; $attributes = $attributes === null ? [] : $attributes; $displayedFilters = []; foreach ($attributes as $attributeCode => $attribute) { if (!$attribute['useableAsGridFilter']) { continue; } $attributeType = $attribute['attributeType']; $attributeTypeConf = $this->registry->getConfiguration($attributeType); if (!$attributeTypeConf || !isset($attributeTypeConf['filter'])) { throw new \LogicException(sprintf('Attribute type %s must be configured to allow grid filter on attribute %s', $attributeType, $attributeCode)); } $filterConfig = $attributeTypeConf['filter']; $filterConfig = $filterConfig + [ProductFilterUtility::DATA_NAME_KEY => $attributeCode, 'label' => $attribute['label'], 'enabled' => AttributeTypes::IDENTIFIER === $attributeType, 'order' => $attribute['sortOrder'], 'group' => $attribute['group'], 'groupOrder' => $attribute['groupOrder']]; if (AttributeTypes::METRIC === $attributeType) { $filterConfig['family'] = $attribute['metricFamily']; } $displayedFilters[$attributeCode] = $filterConfig; } $this->sortFilters($displayedFilters); $filters = $configuration->offsetGet(FilterConfiguration::FILTERS_KEY); foreach ($displayedFilters as $attributeCode => $filterConfig) { $filters['columns'][$attributeCode] = $filterConfig; } $configuration->offsetSet(FilterConfiguration::FILTERS_KEY, $filters); }
/** * Validate configs nad fill default values * * @param DatagridConfiguration $config */ public function processConfigs(DatagridConfiguration $config) { $columns = $config->offsetGetOr(Configuration::COLUMNS_KEY, []); $properties = $config->offsetGetOr(Configuration::PROPERTIES_KEY, []); // validate extension configuration and normalize by setting default values $columnsNormalized = $this->validateConfigurationByType($columns, Configuration::COLUMNS_KEY); $propertiesNormalized = $this->validateConfigurationByType($properties, Configuration::PROPERTIES_KEY); // replace config values by normalized, extra keys passed directly $config->offsetSet(Configuration::COLUMNS_KEY, array_replace_recursive($columns, $columnsNormalized))->offsetSet(Configuration::PROPERTIES_KEY, array_replace_recursive($properties, $propertiesNormalized)); }
function it_configures_datagrid_filters(DatagridConfiguration $configuration, $registry) { $attributes = ['sku' => ['code' => 'sku', 'label' => 'Sku', 'useableAsGridFilter' => 1, 'attributeType' => 'pim_catalog_identifier', 'sortOrder' => 1, 'group' => 'General', 'groupOrder' => 1], 'name' => ['code' => 'name', 'label' => 'Name', 'useableAsGridFilter' => 1, 'attributeType' => 'pim_catalog_text', 'sortOrder' => 2, 'group' => 'General', 'groupOrder' => 1]]; $attributesConf = [ContextConfigurator::USEABLE_ATTRIBUTES_KEY => $attributes]; $configuration->offsetGet(ContextConfigurator::SOURCE_KEY)->willReturn($attributesConf); $configuration->offsetGet(FilterConfiguration::FILTERS_KEY)->willReturn([]); $registry->getConfiguration('pim_catalog_identifier')->willReturn(['filter' => ['identifier_config']]); $registry->getConfiguration('pim_catalog_text')->willReturn(['filter' => ['text_config']]); $expectedConf = ['sku' => [0 => 'identifier_config', 'data_name' => 'sku', 'label' => 'Sku', 'enabled' => true, 'order' => 1, 'group' => 'General', 'groupOrder' => 1], 'name' => [0 => 'text_config', 'data_name' => 'name', 'label' => 'Name', 'enabled' => false, 'order' => 2, 'group' => 'General', 'groupOrder' => 1]]; $configuration->offsetSet(FilterConfiguration::FILTERS_KEY, ['columns' => $expectedConf])->shouldBeCalled(); $this->configure($configuration); }
/** * @param DatagridConfiguration $config * @param $itemType */ protected function addEntityConfigProperties(DatagridConfiguration $config, $itemType) { // configure properties from config providers $properties = $config->offsetGetOr(Configuration::PROPERTIES_KEY, []); $columns = $config->offsetGetByPath(self::PATH_COLUMNS, []); $actions = []; $providers = $this->configManager->getProviders(); foreach ($providers as $provider) { $gridActions = $provider->getPropertyConfig()->getGridActions($itemType); if (!empty($gridActions)) { $this->prepareProperties($gridActions, $columns, $properties, $actions); } } if (count($actions)) { $config->offsetSet(ActionExtension::ACTION_CONFIGURATION_KEY, $this->getActionConfigurationClosure($actions)); } $config->offsetSet(Configuration::PROPERTIES_KEY, $properties); }
/** * @param DatagridConfiguration $config * @param $itemType */ protected function addEntityConfigProperties(DatagridConfiguration $config, $itemType) { // configure properties from config providers $properties = $config->offsetGetOr(Configuration::PROPERTIES_KEY, []); $filters = []; $actions = []; $providers = $this->configManager->getProviders(); foreach ($providers as $provider) { $gridActions = $provider->getPropertyConfig()->getGridActions($itemType); $this->prepareProperties($gridActions, $properties, $actions, $filters); // TODO: check if this neccessary for field config grid if (static::GRID_NAME == 'entityconfig-grid' && $provider->getPropertyConfig()->getUpdateActionFilter()) { $filters['update'] = $provider->getPropertyConfig()->getUpdateActionFilter(); } } if (count($filters)) { $config->offsetSet(ActionExtension::ACTION_CONFIGURATION_KEY, $this->getActionConfigurationClosure($filters, $actions)); } $config->offsetSet(Configuration::PROPERTIES_KEY, $properties); }