You are here

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();
    }
  }
}