Update signature of UserGroupsChanged to match documentation
authorUmherirrender <umherirrender_de.wp@web.de>
Sun, 17 Sep 2017 09:09:53 +0000 (11:09 +0200)
committerUmherirrender <umherirrender_de.wp@web.de>
Tue, 19 Sep 2017 17:31:26 +0000 (19:31 +0200)
UserGroupsChanged is called in Special:UserRights with seven args
The caller in User.php only has five

Change-Id: I221da323c79bb8da0113533d01b429249d15e7de

includes/auth/AuthManagerAuthPlugin.php
includes/user/User.php

index 8845858..9a1e445 100644 (file)
@@ -152,8 +152,9 @@ class AuthManagerAuthPlugin extends \AuthPlugin {
        }
 
        public function updateExternalDBGroups( $user, $addgroups, $delgroups = [] ) {
-               \Hooks::run( 'UserGroupsChanged', [ $user, $addgroups, $delgroups ] );
-               return true;
+               throw new \BadMethodCallException(
+                       'Update of user groups via AuthPlugin is not supported with AuthManager.'
+               );
        }
 
        public function canCreateAccounts() {
index 6115144..1c894a0 100644 (file)
@@ -1462,15 +1462,17 @@ class User implements IDBAccessObject {
                }
 
                $oldGroups = $this->getGroups(); // previous groups
+               $oldUGMs = $this->getGroupMemberships();
                foreach ( $toPromote as $group ) {
                        $this->addGroup( $group );
                }
+               $newGroups = array_merge( $oldGroups, $toPromote ); // all groups
+               $newUGMs = $this->getGroupMemberships();
+
                // update groups in external authentication database
-               Hooks::run( 'UserGroupsChanged', [ $this, $toPromote, [], false, false ] );
+               Hooks::run( 'UserGroupsChanged', [ $this, $toPromote, [], false, false, $oldUGMs, $newUGMs ] );
                AuthManager::callLegacyAuthPlugin( 'updateExternalDBGroups', [ $this, $toPromote ] );
 
-               $newGroups = array_merge( $oldGroups, $toPromote ); // all groups
-
                $logEntry = new ManualLogEntry( 'rights', 'autopromote' );
                $logEntry->setPerformer( $this );
                $logEntry->setTarget( $this->getUserPage() );