View Full Version : Batch deleting Users: How to?
Adan0s
01-08-2011, 06:37 PM
Hey,
I recently scanned my userdatabase for mailadresses known used by spammers. I ended up with like 500 accounts.
Now I want to delete those accs, but I certainly don't want to do it for each one of them via the adminpanel.
I could of course just delete those users from the users-table but there is a huge load if information split over dozens of tables of an user (see class_dm_user.php function delete).
Unfortunately I don't really know how to build the object which is then passed to that function. So, if someone please could point me how to build the array and use that function, so I can delete those 500 datazombies?
thank you.
Retal
01-18-2011, 05:36 PM
Hey there,
if you haven't solved it yet, I took this out of the admincp/user.php, section "kill", so this is the official process
$info = fetch_userinfo($vbulletin->GPC['userid']);
if (!$info)
{
print_stop_message('invalid_user_specified');
}
if ($vbulletin->GPC['transfer_groups'])
{
// fetch groupmember info for groups that the deleted user has ownership of
$sgmember_query = $vbulletin->db->query("
SELECT socialgroup.groupid AS sgroupid, sgmember.*
FROM " . TABLE_PREFIX . "socialgroup AS socialgroup
LEFT JOIN " . TABLE_PREFIX . "socialgroupmember AS sgmember
ON sgmember.groupid = socialgroup.groupid
AND sgmember.userid = " . $vbulletin->userinfo['userid'] . "
WHERE creatoruserid = " . $vbulletin->GPC['userid'] . "
");
if ($vbulletin->db->num_rows($sgmember_query))
{
while ($sgmember = $vbulletin->db->fetch_array($sgmember_query))
{
// ensure the current user is a full member of the group
if ($sgmember['type'] != 'member')
{
$socialgroupmemberdm = datamanager_init('SocialGroupMember', $vbulletin);
if ($sgmember['userid'])
{
$socialgroupmemberdm->set_existing($sgmember);
}
$socialgroupmemberdm->set('userid', $vbulletin->userinfo['userid']);
$socialgroupmemberdm->set('groupid', $sgmember['sgroupid']);
$socialgroupmemberdm->set('dateline', TIMENOW);
$socialgroupmemberdm->set('type', 'member');
$socialgroupmemberdm->save();
}
}
$vbulletin->db->free_result($sgmember_query);
// transfer all of the groups to the current user
$vbulletin->db->query_write("
UPDATE " . TABLE_PREFIX . "socialgroup
SET creatoruserid = " . $vbulletin->userinfo['userid'] . ",
transferowner = 0
WHERE creatoruserid = " . $vbulletin->GPC['userid'] . "
");
}
}
$userdm =& datamanager_init('User', $vbulletin, ERRTYPE_CP);
$userdm->set_existing($info);
$userdm->delete();
unset($userdm);
Adan0s
01-19-2011, 01:58 PM
Thanks, but I already solved it.
For the people who are interested in it:
<?php
error_reporting(E_ALL & ~E_NOTICE);
require_once('./global.php');
require_once('/includes/adminfunctions_profilefield.php');
require_once('/includes/adminfunctions_user.php');
$ids = array(1234,1235);
foreach($ids as $id)
{
$info = fetch_userinfo($id);
if (!$info)
{
echo $id.'fail<br />';
}
else
{
$userdm =& datamanager_init('User', $vbulletin, ERRTYPE_CP);
$userdm->set_existing($info);
$userdm->delete();
unset($userdm);
echo $id.'okay<br />';
}
unset($info);
}
?>
This deletes the member and all information connected to it. The posts and threads are still there, but those are simple to delete by two sql statements.
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, vBulletin Solutions Inc.