Skip to content

Instantly share code, notes, and snippets.

@arozellia
Created February 8, 2018 16:06
Show Gist options
  • Save arozellia/8785994e8a802b3f8910a633c8c691ee to your computer and use it in GitHub Desktop.
Save arozellia/8785994e8a802b3f8910a633c8c691ee to your computer and use it in GitHub Desktop.
Create and remove Moodle Users via MySQL Commands
/**
Create user.
Although this is the insert query, it is almost always better to use a web service rather than doing this manually. This way enforces Moodle standards and ensures quality data. Use at your own risk.
Webservice example: https://stackoverflow.com/questions/35881584/using-moodle-create-users-and-enroll-them-in-courses-via-sql
Code typically used: https://github.com/moodle/moodle/blob/a409707794cc6d74063787d27adb42154426c803/user/lib.php#L42
Note: The password is set using MD5, however Moodle dutifully transforms this to a much more secure password on initial login.
See: https://github.com/moodle/moodle/blob/06e3b6d8bab42b8e56d169d006f31f4a15684830/auth/manual/auth.php#L100
See: https://github.com/moodle/moodle/blob/a4f914b54dbafcaf1cc2bf1cce8bde30cc69db57/lib/moodlelib.php#L4575
**/
INSERT INTO mdl_user
(auth,
confirmed,
mnethostid,
email,
username,
password,
lastname,
firstname)
VALUES ('manual',
1,
1,
'manual@example.com',
'manualuser',
MD5('password'),
'lastname',
'firstname');
/**
Force user to change password.
Based on:
Settings from: https://github.com/moodle/moodle/blob/06e3b6d8bab42b8e56d169d006f31f4a15684830/auth/manual/auth.php#L82
Code typically used: https://github.com/moodle/moodle/blob/a4f914b54dbafcaf1cc2bf1cce8bde30cc69db57/lib/moodlelib.php#L1874
**/
INSERT INTO mdl_user_preferences
(
userid,
name,
value
)
SELECT id,
'auth_forcepasswordchange',
1
FROM mdl_user
WHERE username = 'manualuser'
on duplicate KEY
UPDATE value = 1;
/**
Make user an administrator.
Based on: https://github.com/moodle/moodle/blob/06e3b6d8bab42b8e56d169d006f31f4a15684830/admin/roles/admins.php#L85
Read more about MySQL sets: https://dev.mysql.com/doc/refman/5.7/en/set.html
Add/Remove from Set: https://web.archive.org/web/20100412075034/http://www.futhark.ch/mysql/109.html
Note: You will need to purge caches after setting the admin. :: $php admin/cli/purge_caches.php
**/
UPDATE mdl_config c
CROSS JOIN mdl_user u
SET c.value = Concat_ws(',', IF(value = '', NULL, value), u.id)
WHERE u.username = 'manualuser'
AND u.deleted = 0
AND Find_in_set(u.id, c.value) = 0
AND c.name = 'siteadmins';
/**
Remove a user as an admin.
Based on: https://github.com/moodle/moodle/blob/06e3b6d8bab42b8e56d169d006f31f4a15684830/admin/roles/admins.php#L85
Read more about MySQL sets: https://dev.mysql.com/doc/refman/5.7/en/set.html
Add/Remove from Set: https://web.archive.org/web/20100412075034/http://www.futhark.ch/mysql/109.html
**/
UPDATE mdl_config c
CROSS JOIN mdl_user u
SET c.value = Trim(BOTH ',' FROM REPLACE(Concat(',', value, ','),
Concat(',', u.id, ','), ',')
)
WHERE u.username = 'manualuser'
AND Find_in_set(u.id, c.value) <> 0
AND c.name = 'siteadmins';
/**
Flag a user as deleted.
Based on: https://github.com/moodle/moodle/blob/a4f914b54dbafcaf1cc2bf1cce8bde30cc69db57/lib/moodlelib.php#L4004
For full cleanup, run the following script from the command line: moodle/admin/cli/fix_deleted_users.php ( https://github.com/moodle/moodle/blob/5f54a8760f2821c12bd90beaa37b9fa937f101e6/admin/cli/fix_deleted_users.php )
**/
UPDATE mdl_user u
SET u.deleted = 1,
auth = 'nologin'
WHERE u.username = 'manualuser';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment