Skip to content
Snippets Groups Projects
Commit 87932fe1 authored by catch's avatar catch
Browse files

Issue #3319845 by alexpott, larowlan, catch:...

Issue #3319845 by alexpott, larowlan, catch: user_post_update_update_migrated_roles_followup() needs to be a hook_update_N
parent 35f991a5
No related branches found
No related tags found
36 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!4289Issue #1344552 by marcingy, Niklas Fiekas, Ravi.J, aleevas, Eduardo Morales...,!4114Issue #2707291: Disable body-level scrolling when a dialog is open as a modal,!4100Issue #3249600: Add support for PHP 8.1 Enums as allowed values for list_* data types,!3630Issue #2815301 by Chi, DanielVeza, kostyashupenko, smustgrave: Allow to create...,!3600Issue #3344629: Passing null to parameter #1 ($haystack) of type string is deprecated,!3291Issue #3336463: Rewrite rules for gzipped CSS and JavaScript aggregates never match,!3102Issue #3164428 by DonAtt, longwave, sahil.goyal, Anchal_gupta, alexpott: Use...,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2074Issue #2707689: NodeForm::actions() checks for delete access on new entities,!2062Issue #3246454: Add weekly granularity to views date sort,!1591Issue #3199697: Add JSON:API Translation experimental module,!1484Exposed filters get values from URL when Ajax is on,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1254Issue #3238915: Refactor (if feasible) uses of the jQuery ready function to use VanillaJS,!1162Issue #3100350: Unable to save '/' root path alias,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!957Added throwing of InvalidPluginDefinitionException from getDefinition().,!925Issue #2339235: Remove taxonomy hard dependency on node module,!877Issue #2708101: Default value for link text is not saved,!873Issue #2875228: Site install not using batch API service,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links,!844Resolve #3036010 "Updaters",!712Issue #2909128: Autocomplete intermittent on Chrome Android,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.,!30Issue #3182188: Updates composer usage to point at ./vendor/bin/composer
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
use Drupal\user\Entity\Role; use Drupal\user\Entity\Role;
/** /**
* Tests user_post_update_update_roles_followup() upgrade path. * Tests user_update_10000() upgrade path.
* *
* @group Update * @group Update
* @group legacy * @group legacy
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
* Install, update and uninstall functions for the user module. * Install, update and uninstall functions for the user module.
*/ */
use Drupal\Core\StringTranslation\PluralTranslatableMarkup;
/** /**
* Implements hook_schema(). * Implements hook_schema().
*/ */
...@@ -97,3 +99,40 @@ function user_install() { ...@@ -97,3 +99,40 @@ function user_install() {
function user_update_last_removed() { function user_update_last_removed() {
return 9301; return 9301;
} }
/**
* Remove non-existent permissions created by migrations.
*/
function user_update_10000() {
$cleaned_roles = [];
$existing_permissions = array_keys(\Drupal::service('user.permissions')
->getPermissions());
$config_factory = \Drupal::configFactory();
$role_ids = $config_factory->listAll('user.role.');
foreach ($role_ids as $role_id) {
$role_config = $config_factory->getEditable($role_id);
$removed_permissions = array_diff($role_config->get('permissions'), $existing_permissions);
if (!empty($removed_permissions)) {
$cleaned_roles[] = $role_config->get('label');
\Drupal::logger('update')->notice(
'The role %role has had the following non-existent permission(s) removed: %permissions.',
[
'%role' => $role_config->get('label'),
'%permissions' => implode(', ', $removed_permissions),
]
);
$permissions = array_intersect($role_config->get('permissions'), $existing_permissions);
$role_config->set('permissions', $permissions);
$role_config->save();
}
}
if (!empty($cleaned_roles)) {
return new PluralTranslatableMarkup(
count($cleaned_roles),
'The role %role_list has had non-existent permissions removed. Check the logs for details.',
'The roles %role_list have had non-existent permissions removed. Check the logs for details.',
['%role_list' => implode(', ', $cleaned_roles)]
);
}
}
...@@ -5,10 +5,6 @@ ...@@ -5,10 +5,6 @@
* Post update functions for User module. * Post update functions for User module.
*/ */
use Drupal\Core\Config\Entity\ConfigEntityUpdater;
use Drupal\Core\StringTranslation\PluralTranslatableMarkup;
use Drupal\user\Entity\Role;
/** /**
* Implements hook_removed_post_updates(). * Implements hook_removed_post_updates().
*/ */
...@@ -18,39 +14,3 @@ function user_removed_post_updates() { ...@@ -18,39 +14,3 @@ function user_removed_post_updates() {
'user_post_update_update_roles' => '10.0.0', 'user_post_update_update_roles' => '10.0.0',
]; ];
} }
/**
* Remove non-existent permissions created by migrations.
*/
function user_post_update_update_migrated_roles_followup(&$sandbox = NULL) {
$cleaned_roles = [];
$existing_permissions = array_keys(\Drupal::service('user.permissions')
->getPermissions());
\Drupal::classResolver(ConfigEntityUpdater::class)
->update($sandbox, 'user_role', function (Role $role) use ($existing_permissions, &$cleaned_roles) {
$removed_permissions = array_diff($role->getPermissions(), $existing_permissions);
if (!empty($removed_permissions)) {
$cleaned_roles[] = $role->label();
\Drupal::logger('update')->notice(
'The role %role has had the following non-existent permission(s) removed: %permissions.',
[
'%role' => $role->label(),
'%permissions' => implode(', ', $removed_permissions),
]
);
$permissions = array_intersect($role->getPermissions(), $existing_permissions);
$role->set('permissions', $permissions);
return TRUE;
}
});
if (!empty($cleaned_roles)) {
return new PluralTranslatableMarkup(
count($cleaned_roles),
'The role %role_list has had non-existent permissions removed. Check the logs for details.',
'The roles %role_list have had non-existent permissions removed. Check the logs for details.',
['%role_list' => implode(', ', $cleaned_roles)]
);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment