Skip to content
Snippets Groups Projects
Commit 93273c42 authored by Bojan Bogdanovic's avatar Bojan Bogdanovic
Browse files

Issue #3321070: Replace entity saves in hook_update with database queries

parent d6a4c5ac
No related branches found
No related tags found
1 merge request!73Issue #3321070: Replace entity saves in hook_update with database queries
......@@ -6,7 +6,7 @@
"lcobucci/jwt": "^4",
"league/oauth2-server": "^8.3",
"steverhoades/oauth2-openid-connect-server": "^2.4",
"drupal/consumers": "^1.14",
"drupal/consumers": "^1.15",
"php": ">=7.4"
},
"require-dev": {
......
......@@ -248,45 +248,54 @@ function simple_oauth_update_8604() {
$config = \Drupal::configFactory()->get('simple_oauth.settings');
$database = \Drupal::database();
$roles_ids = $database->select('consumer__roles', 'r')
->fields('r', ['entity_id', 'roles_target_id'])
$role_values = $database->select('consumer__roles', 'r')
->fields('r', ['entity_id', 'roles_target_id', 'langcode', 'delta', 'roles_target_id'])
->execute()
->fetchAllKeyed();
->fetchAll();
$scopes = [];
foreach ($role_values as $role_value) {
/** @var \Drupal\user\RoleInterface $role */
$role = \Drupal::entityTypeManager()->getStorage('user_role')->load($role_value->roles_target_id);
// Scope doesn't exist, so we need to create one.
if (!isset($scopes[$role->id()])) {
$scope = Oauth2Scope::create([
'name' => $role->id(),
'description' => $role->label(),
'grant_types' => [
'authorization_code' => ['status' => TRUE],
'client_credentials' => ['status' => TRUE],
'refresh_token' => ['status' => TRUE],
],
'granularity' => Oauth2ScopeInterface::GRANULARITY_ROLE,
'role' => $role->id(),
]);
$scope->save();
$scopes[$role->id()] = $scope;
}
$insert_query = $database->insert('consumer__scopes')
->fields(['bundle', 'deleted', 'entity_id', 'revision_id', 'langcode', 'delta', 'scopes_scope_id']);
$insert_query->values(['consumer', 0, $role_value->entity_id, $role_value->entity_id, $role_value->langcode, $role_value->delta, $role->id()]);
$insert_query->execute();
}
foreach ($consumers as $consumer) {
$scopes_to_reference = [];
foreach ($roles_ids as $entity_id => $role_id) {
if ($entity_id !== (int) $consumer->id()) {
continue;
}
/** @var \Drupal\user\RoleInterface $role */
$role = \Drupal::entityTypeManager()->getStorage('user_role')->load($role_id);
if (!isset($scopes[$role->id()])) {
$scope = Oauth2Scope::create([
'name' => $role->id(),
'description' => $role->label(),
'grant_types' => [
'authorization_code' => ['status' => TRUE],
'client_credentials' => ['status' => TRUE],
'refresh_token' => ['status' => TRUE],
],
'granularity' => Oauth2ScopeInterface::GRANULARITY_ROLE,
'role' => $role->id(),
]);
$scope->save();
$scopes[$role->id()] = $scope;
}
$scopes_to_reference[] = $scopes[$role->id()]->id();
foreach ($grant_types as $delta => $grant_type) {
$insert_query = $database->insert('consumer__grant_types')
->fields(['bundle', 'deleted', 'entity_id', 'revision_id', 'langcode', 'delta', 'grant_types_value']);
$insert_query->values(['consumer', 0, $consumer->id(), $consumer->id(), $consumer->language()->getId(), $delta, $grant_type]);
$insert_query->execute();
}
$consumer
->set('scopes', $scopes_to_reference)
->set('grant_types', $grant_types)
->set('remember_approval', (bool) $config->get('remember_clients'))
->set('access_token_expiration', $config->get('access_token_expiration'))
->set('refresh_token_expiration', $config->get('refresh_token_expiration'))
->save();
$database->update('consumer_field_data')
->fields([
'remember_approval' => (int) $config->get('remember_clients'),
'access_token_expiration' => (int) $config->get('access_token_expiration'),
'refresh_token_expiration' => (int) $config->get('refresh_token_expiration'),
])
->condition('id', $consumer->id())
->execute();
}
// Remove roles field.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment