You are here

function workbench_access_post_update_section_user_association in Workbench Access 8

Transform existing user data to new storage.

File

./workbench_access.post_update.php, line 146
Contains post update hooks.

Code

function workbench_access_post_update_section_user_association(&$sandbox) {
  $schemes = \Drupal::entityTypeManager()
    ->getStorage('access_scheme')
    ->loadMultiple();
  $storage = \Drupal::service('workbench_access.user_section_storage');
  $user_storage = \Drupal::entityTypeManager()
    ->getStorage('user');
  if (!isset($sandbox['ids'])) {
    $sandbox['ids'] = $user_storage
      ->getQuery()
      ->exists(WorkbenchAccessManagerInterface::FIELD_NAME)
      ->execute();
    $sandbox['count'] = count($sandbox['ids']);
  }
  foreach (array_splice($sandbox['ids'], 0, 50) as $id) {
    $user = $user_storage
      ->load($id);
    $existing = array_column($user
      ->get(WorkbenchAccessManagerInterface::FIELD_NAME)
      ->getValue(), 'value');
    foreach ($schemes as $scheme_id => $scheme) {
      $add_sections = [];
      foreach ($existing as $item) {
        $split = explode(':', $item);
        if ($split[0] == $scheme_id) {
          $add_sections[] = $split[1];
        }
      }
    }
    $storage
      ->addUser($scheme, $user, $add_sections);
  }
  $sandbox['#finished'] = empty($sandbox['ids']) ? 1 : ($sandbox['count'] - count($sandbox['ids'])) / $sandbox['count'];
  return t('Updated user assigments');
}