function _potx_process_module_schemas in Translation template extractor 8
Same name and namespace in other branches
- 7.3 potx.inc \_potx_process_module_schemas()
Recursively process and merge the schema required for parsing shipped config.
Handles module dependencies, and config optional dependencies.
Parameters
array $module_list: The list of modules that their schema should be processed.
1 call to _potx_process_module_schemas()
- _potx_parse_shipped_configuration in ./
potx.inc - Parse shipped configuration for translatables. Drupal 8+.
File
- ./
potx.inc, line 2911 - Extraction API used by the web and command line interface.
Code
function _potx_process_module_schemas(array $module_list) {
global $_potx_module_metadata;
global $_potx_processed_modules;
global $_potx_module_schema;
global $_potx_callbacks;
// Remove modules that have already been processed.
$module_list = array_diff($module_list, $_potx_processed_modules);
if (count($module_list) == 0) {
return;
}
// Mark as processed early, to prevent a loop while traversing dependency
// graph.
$_potx_processed_modules = array_merge($_potx_processed_modules, $module_list);
$dependencies = [];
// Gather list of all dependencies for the current $module_list.
foreach ($module_list as $module_name) {
// If the module is directly available from the initial given path, their
// metadata is already available.
if (isset($_potx_module_metadata[$module_name])) {
if (!empty($_potx_module_metadata[$module_name]['dependencies'])) {
$dependencies = array_merge($dependencies, $_potx_module_metadata[$module_name]['dependencies']);
}
}
else {
// Try to load the module metadata from the globally available modules
// (e.g. drupal install directory in local potx, database in l10n_server)
if ($_potx_callbacks['load_module_metadata']($module_name)) {
$dependencies = array_merge($dependencies, $_potx_module_metadata[$module_name]['dependencies']);
}
}
}
if (!empty($dependencies)) {
// Process schema for dependencies first.
_potx_process_module_schemas($dependencies);
}
// If the schema for a module is already available, merge it.
foreach ($module_list as $module_name) {
$module_schema = $_potx_callbacks['schema_load']($module_name);
// If the module is not in the current parsed project, and its config
// schema can be found in the database.
if (!isset($_potx_module_metadata[$module_name]['config']['schema']) && $module_schema !== NULL) {
// If its config schema isn't empty.
if (!empty($module_schema['types'])) {
_potx_merge_processed_schema($module_schema);
}
// Remove from list of unprocessed modules.
unset($module_list[array_search($module_name, $module_list)]);
}
}
foreach ($module_list as $module_name) {
if (!empty($_potx_module_metadata[$module_name]['config']['schema'])) {
$_potx_module_schema = [
'translatables' => [],
'types' => [],
'mappings' => [],
'contexts' => [],
];
foreach ($_potx_module_metadata[$module_name]['config']['schema'] as $file_paths) {
$yaml = _potx_parse_yaml($file_paths[1]);
if ($yaml === NULL) {
continue;
}
foreach ($yaml as $key => $element) {
_potx_process_config_schema($key, $element);
}
}
$_potx_callbacks['schema_store']($module_name);
}
}
}