Have rewritten to deal with membergroup numbers comprised of any number of digits. The key was, indeed, to deal with them as an array.
Tested with 3.5.4 - performance with other flavors unknown.
To use you'll need:
1) A custom field in your user profile, into which the user can place the required password.
2) A custom $vbphrase in which to store the required password value
Enter the appropriate values for your forum into the first three variables in the script below, then install the script via vB 3.5's Plug-in Manager. Tie to the 'global_start' hook. At each login, the script will check the user's profile for the membergroup password, then add or remove the user from the membergroup as appropriate. Note that this does not act instantaneously upon entry of the password in the profile, but requires a new login for this to take effect.
PHP Code:
// Add or remove user from secondary usergroup
// according to Pwd value in user's profile
global $vbulletin;
// Enter values for your forum in the 3 strings below
$org_mg = 'XX'; // target membergroup # as string
$org_pwfield = 'fieldX'; // custom field# in profile as string
$org_pwphrase = 'org_member_password'; // vbphrase name containing pwd
// You don't need to touch anything below here
$org_userid = ($vbulletin->userinfo['userid']); // userid of user
$org_mglist = (''.$vbulletin->userinfo['membergroupids']); // current membergroups string
$org_mgarr = explode(',' , $org_mglist); // convert membergroups to array
$org_inmg = (in_array($org_mg, $org_mgarr)); // user in target membergroup (true/false)
$org_haspwd = ($vbulletin->userinfo[$org_pwfield] == $vbphrase[$org_pwphrase]); // User
// has correct password in profile (T/F)
$org_doupdate = false;
if ($org_haspwd && !$org_ingrp) // Has password, not in membergroup
{
if ($org_mglist != '') // if mglist already populated
{
$org_comma = ','; // we'll need a comma
}
$org_newmg = ($org_mglist . $org_comma . $org_mg); // add group to string
$org_mglist = $org_newmg;
$org_doupdate = true; // set toggle to update database
}
else
{
if (!$org_haspwd && $org_ingrp) // No password, but is in membergroup
{
foreach ($org_arr as $value) // go thru array
{
if ($value == $org_mg) // find target membergroup
{
$org_arr[$iii] = ''; // set to null
}
$iii++;
}
$org_newmg = implode(',' , $arr); // convert array to string
$org_mglist = str_replace(',,' , ',', $org_newmg); // remove double comma
$org_doupdate = true; // set toggle to update database
}
}
if ($org_doupdate)
{
$updatefields = $vbulletin->db->query("
UPDATE user
SET membergroupids='$org_mglist'
WHERE userid=$org_userid
");
}