/** * Checks the TypedConfigManager has a valid schema for the configuration. * * @param \Drupal\Core\Config\TypedConfigManagerInterface $typed_config * The TypedConfigManager. * @param string $config_name * The configuration name. * @param array $config_data * The configuration data, assumed to be data for a top-level config object. * * @return array|bool * FALSE if no schema found. List of errors if any found. TRUE if fully * valid. */ public function checkConfigSchema(TypedConfigManagerInterface $typed_config, $config_name, $config_data) { // We'd like to verify that the top-level type is either config_base, // config_entity, or a derivative. The only thing we can really test though // is that the schema supports having langcode in it. So add 'langcode' to // the data if it doesn't already exist. if (!isset($config_data['langcode'])) { $config_data['langcode'] = 'en'; } $this->configName = $config_name; if (!$typed_config->hasConfigSchema($config_name)) { return FALSE; } $definition = $typed_config->getDefinition($config_name); $data_definition = $typed_config->buildDataDefinition($definition, $config_data); $this->schema = $typed_config->create($data_definition, $config_data); $errors = array(); foreach ($config_data as $key => $value) { $errors = array_merge($errors, $this->checkValue($key, $value)); } if (empty($errors)) { return TRUE; } return $errors; }
/** * Gets the schema wrapper for the whole configuration object. * * The schema wrapper is dependent on the configuration name and the whole * data structure, so if the name or the data changes in any way, the wrapper * should be reset. * * @return \Drupal\Core\Config\Schema\Element */ protected function getSchemaWrapper() { if (!isset($this->schemaWrapper)) { $definition = $this->typedConfigManager->getDefinition($this->name); $data_definition = $this->typedConfigManager->buildDataDefinition($definition, $this->data); $this->schemaWrapper = $this->typedConfigManager->create($data_definition, $this->data); } return $this->schemaWrapper; }
/** * Validates the config against the schema. * * @param array $config * The configuration data. * * @throws \Exception * If the configuration doesn't validate. */ protected function validate(array $config) { $this->configName = 'display_variant.plugin.panels_variant'; $definition = $this->typedConfigManager->getDefinition($this->configName); $data_definition = $this->typedConfigManager->buildDataDefinition($definition, $config); $this->schema = $this->typedConfigManager->create($data_definition, $config); $errors = array(); foreach ($config as $key => $value) { $errors = array_merge($errors, $this->checkValue($key, $value)); } if (!empty($errors)) { $error_list = []; foreach ($errors as $key => $error) { $error_list[] = $key . ': ' . $error; } throw new \Exception("Config for Panels display doesn't validate: " . implode(', ', $error_list)); } }
/** * Gets array of translated strings for Locale translatable configuration. * * @param string $name * Configuration object name. * * @return array * Array of Locale translatable elements of the default configuration in * $name. */ public function getTranslatableDefaultConfig($name) { if ($this->isSupported($name)) { // Create typed configuration wrapper based on install storage data. $data = $this->defaultConfigStorage->read($name); $type_definition = $this->typedConfigManager->getDefinition($name); $data_definition = $this->typedConfigManager->buildDataDefinition($type_definition, $data); $typed_config = $this->typedConfigManager->create($data_definition, $data); if ($typed_config instanceof TraversableTypedDataInterface) { return $this->getTranslatableData($typed_config); } } return array(); }
/** * Gets locale wrapper with typed configuration data. * * @param string $name * Configuration object name. * * @return \Drupal\locale\LocaleTypedConfig * Locale-wrapped configuration element. */ public function get($name) { // Read default and current configuration data. $default = $this->installStorage->read($name); $updated = $this->configStorage->read($name); // We get only the data that didn't change from default. $data = $this->compareConfigData($default, $updated); $definition = $this->typedConfigManager->getDefinition($name); $data_definition = $this->typedConfigManager->buildDataDefinition($definition, $data); // Unless the configuration has a explicit language code we assume English. $langcode = isset($default['langcode']) ? $default['langcode'] : 'en'; $wrapper = new LocaleTypedConfig($data_definition, $name, $langcode, $this, $this->typedConfigManager); $wrapper->setValue($data); return $wrapper; }
/** * Checks the TypedConfigManager has a valid schema for the configuration. * * @param \Drupal\Core\Config\TypedConfigManagerInterface $typed_config * The TypedConfigManager. * @param string $config_name * The configuration name. * @param array $config_data * The configuration data. * * @return array|bool * FALSE if no schema found. List of errors if any found. TRUE if fully * valid. */ public function checkConfigSchema(TypedConfigManagerInterface $typed_config, $config_name, $config_data) { $this->configName = $config_name; if (!$typed_config->hasConfigSchema($config_name)) { return FALSE; } $definition = $typed_config->getDefinition($config_name); $data_definition = $typed_config->buildDataDefinition($definition, $config_data); $this->schema = $typed_config->create($data_definition, $config_data); $errors = array(); foreach ($config_data as $key => $value) { $errors = array_merge($errors, $this->checkValue($key, $value)); } if (empty($errors)) { return TRUE; } return $errors; }
/** * {@inheritdoc} */ public function loadSchema() { $fields = $this->typedConfig->getDefinition('domain.record.*'); return isset($fields['mapping']) ? $fields['mapping'] : array(); }
/** * Provides definition of a configuration. * * @param string $plugin_id * A string plugin ID. * * @return mixed|void */ public function getDefinition($plugin_id, $exception_on_invalid = TRUE) { return $this->typedConfigManager->getDefinition($plugin_id, $exception_on_invalid); }