function rac_update_8101 in Role Access Control 8.2
Update configuration around updated reference provider settings.
File
- ./
rac.install, line 33 - Implements hook_install()
Code
function rac_update_8101($sandbox) {
// Enable the new sub module.
\Drupal::service('module_installer')
->install([
'rac_relations',
]);
$consumers = Drupal::service('entity_type.manager')
->getStorage('access_consumer')
->loadMultiple();
$rac_unpublished = \Drupal::config("rac.settings")
->get('update_unpublished');
foreach ($consumers as $consumer) {
$provider_ids = $consumer
->getProviders();
if (in_array('rac', $provider_ids)) {
if (!in_array('rac_relations', $provider_ids)) {
$provider_ids = $provider_ids + [
'rac_relations' => 'rac_relations',
];
$consumer
->setProviders($provider_ids);
}
$rac_config = $consumer
->getProviderConfig('rac');
$rac_relations_config = $consumer
->getProviderConfig('rac_relations') ?: [];
$fields = array_keys($rac_config['enabled_fields']);
foreach ($fields as $field_name) {
$rac_config['enabled_fields'][$field_name] = [];
// Setup the new operation grants system.
$rac_config['enabled_fields'][$field_name]['grants'] = [
'view' => 'view',
];
$rac_config['enabled_fields'][$field_name]['unpublished'] = FALSE;
$rac_relations_config['enabled_fields'][$field_name]['grants'] = [
'view' => 'view',
'update' => 'update',
];
// Move the old rac delete grant.
if (isset($rac_config['enabled_fields']['grant_delete']) && $rac_config['enabled_fields']['grant_delete']) {
$rac_relations_config['enabled_fields'][$field_name]['grants']['delete'] = 'delete';
}
if (is_array($rac_config['enabled_fields'])) {
unset($rac_config['enabled_fields']['grant_delete']);
}
// Move the global unpublished setting the the new field.
$rac_relations_config['enabled_fields'][$field_name]['unpublished'] = $rac_unpublished;
}
$consumer
->setProviderConfig('rac', $rac_config);
$consumer
->setProviderConfig('rac_relations', $rac_relations_config);
$consumer
->save();
}
}
}