entity_hierarchy-8.x-2.24/modules/entity_hierarchy_workbench_access/entity_hierarchy_workbench_access.module
modules/entity_hierarchy_workbench_access/entity_hierarchy_workbench_access.module
<?php
/**
* @file
* Main module functions.
*/
use Drupal\Core\Config\Config;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\workbench_access\Entity\AccessSchemeInterface;
/**
* Implements hook_entity_bundle_field_info_alter().
*/
function entity_hierarchy_workbench_access_entity_bundle_field_info_alter(&$fields, EntityTypeInterface $entity_type, $bundle) {
$schemes = array_filter(\Drupal::entityTypeManager()->getStorage('access_scheme')->loadMultiple(), function (AccessSchemeInterface $scheme) {
return strpos($scheme->getAccessScheme()->getPluginId(), 'entity_hierarchy') === 0;
});
/** @var \Drupal\workbench_access\Entity\AccessSchemeInterface $scheme */
foreach ($schemes as $scheme) {
$accessPlugin = $scheme->getAccessScheme();
$definition = $accessPlugin->getPluginDefinition();
if ($entity_type->id() !== $definition['entity']) {
continue;
}
$configuration = $accessPlugin->getConfiguration();
if (!in_array($bundle, $configuration['bundles'], TRUE)) {
continue;
}
if (!isset($fields[$definition['field_name']])) {
continue;
}
$fields[$definition['field_name']]->addConstraint('ValidHierarchySection');
}
}
/**
* Implements hook_workbench_access_scheme_update_alter().
*/
function entity_hierarchy_workbench_access_workbench_access_scheme_update_alter(array &$settings, Config $config) {
if (strpos($config->get('scheme'), 'entity_hierarchy') !== 0) {
return;
}
$settings['boolean_fields'] = $config->get('parents');
$settings['bundles'] = array_keys($config->get('fields')['node']);
}
