Manual:migrateUserGroup.php

From MediaWiki.org
Jump to: navigation, search

Other languages:
Deutsch • ‎English • ‎español • ‎suomi • ‎français • ‎italiano • ‎日本語 • ‎Nederlands • ‎polski • ‎português • ‎português do Brasil

Details[edit]

migrateUserGroup.php file is a maintenance script to re-assign all users from an old group to a new one. This script is e.g. helpful after you renamed a user group in LocalSettings.php and you want the users, who were member of that group before, to stay in it also after the renaming. Another usecase is when you want to remove a group from all members.

Should a member of the old group also already be a member of the new group, the script takes care to remove the old group from his user account.

Only works on explicit user groups, meaning on those groups, which are actually stored in the user_groupsManual:user_groups table table inside the database. Does not work with implicit groups like "*" or "user", which are not stored in the table. This means the script currently cannot be used to e.g. add all users from the "user" group to another group.

Usage[edit]

Option/Parameter Description
--oldgroup Old user group key. This is the old group name as it had been used in $wgGroupPermissions.
--newgroup New user group key. The new group name.

Example[edit]

You had a group called "ninja" with some group rights set up, e.g. $wgGroupPermissions['ninja']['block'] = true;. Now you want to move all users from that group to the group named "peaceful-ninja":

$  php ./maintenance/migrateUserGroup.php 'ninja' 'peaceful-ninja'

Doing users 1 to 200

Done! 2 users in group 'ninja' are now in 'peaceful-ninja' instead.

Obtaining 'Lost' Keys[edit]

If you don't know the names of old groups that are preventing users from joining a renamed group, you can see all assigned groups by looking into the database table user_groups in your database. The column ug_group will contain the user group key of the group, which a user is member of.

A bit more advanced would be to use DISTINCT in the SQL query like so:

SELECT DISTINCT `ug_group` FROM `user_groups`;

That will show you a list of all different values in that column - meaning: Each group, which is assigned to at least one user, will only be listed once, no matter how many different members it actually has.