aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/functions_user.php
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@gmx.de>2015-06-04 17:30:09 +0200
committerJoas Schilling <nickvergessen@gmx.de>2015-06-04 17:30:09 +0200
commit9005711ad70148c0ee73f648a96dcc720644e9f9 (patch)
treef9404cf36d5b750bfd4a2a8efa3e2c4068205a35 /phpBB/includes/functions_user.php
parentdb3782e4912e2945a546309dab38a4c00bd0f5c5 (diff)
parentc5178a19b244c15ff0ca5445972c7efc93c54ac4 (diff)
downloadforums-9005711ad70148c0ee73f648a96dcc720644e9f9.tar
forums-9005711ad70148c0ee73f648a96dcc720644e9f9.tar.gz
forums-9005711ad70148c0ee73f648a96dcc720644e9f9.tar.bz2
forums-9005711ad70148c0ee73f648a96dcc720644e9f9.tar.xz
forums-9005711ad70148c0ee73f648a96dcc720644e9f9.zip
Merge pull request #3502 from marc1706/ticket/13564
[ticket/13564] Unlink user accounts upon deleting user
Diffstat (limited to 'phpBB/includes/functions_user.php')
-rw-r--r--phpBB/includes/functions_user.php35
1 files changed, 35 insertions, 0 deletions
diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php
index 9cd662027e..815f07d2e4 100644
--- a/phpBB/includes/functions_user.php
+++ b/phpBB/includes/functions_user.php
@@ -500,6 +500,9 @@ function user_delete($mode, $user_ids, $retain_username = true)
$num_users_delta = 0;
+ // Get auth provider collection in case accounts might need to be unlinked
+ $provider_collection = $phpbb_container->get('auth.provider_collection');
+
// Some things need to be done in the loop (if the query changes based
// on which user is currently being deleted)
$added_guest_posts = 0;
@@ -510,6 +513,38 @@ function user_delete($mode, $user_ids, $retain_username = true)
avatar_delete('user', $user_row);
}
+ // Unlink accounts
+ foreach ($provider_collection as $provider_name => $auth_provider)
+ {
+ $provider_data = $auth_provider->get_auth_link_data($user_id);
+
+ if ($provider_data !== null)
+ {
+ $link_data = array(
+ 'user_id' => $user_id,
+ 'link_method' => 'user_delete',
+ );
+
+ // BLOCK_VARS might contain hidden fields necessary for unlinking accounts
+ if (isset($provider_data['BLOCK_VARS']) && is_array($provider_data['BLOCK_VARS']))
+ {
+ foreach ($provider_data['BLOCK_VARS'] as $provider_service)
+ {
+ if (!array_key_exists('HIDDEN_FIELDS', $provider_service))
+ {
+ $provider_service['HIDDEN_FIELDS'] = array();
+ }
+
+ $auth_provider->unlink_account(array_merge($link_data, $provider_service['HIDDEN_FIELDS']));
+ }
+ }
+ else
+ {
+ $auth_provider->unlink_account($link_data);
+ }
+ }
+ }
+
// Decrement number of users if this user is active
if ($user_row['user_type'] != USER_INACTIVE && $user_row['user_type'] != USER_IGNORE)
{