jesus likes pie
07-29-2008, 09:51 PM
I nearly got this to work perfectly but there's a problem driving me NUTS:
Here's the plugin code (hook: profile_updateprofile)
$user = $db->query_first("
SELECT field5
FROM " . TABLE_PREFIX . "userfield
WHERE userid = " . $vbulletin->userinfo['userid'] . "
");
if ($user['field5'] == 'Windows Vista Ultimate')
{
$membergroupids = $userdata->fetch_field('membergroupids');
if ($membergroupids != "")
{
$membergroupids = str_replace(", 10", "", $membergroupids);
$membergroupids = str_replace("10", "", $membergroupids);
$membergroupids = $membergroupids . ", 9";
}
else
{
$membergroupids = '9';
}
$userdata->set('membergroupids', $membergroupids);
}
else // ($user['field5'] == 'Windows Vista Home Premium')
{
{
$membergroupids = $userdata->fetch_field('membergroupids');
if ($membergroupids != "")
{
$membergroupids = str_replace(", 9", "", $membergroupids);
$membergroupids = str_replace("9", "", $membergroupids);
$membergroupids = $membergroupids . ", 10";
}
else
{
$membergroupids = '10';
}
$userdata->set('membergroupids', $membergroupids);
}
}
Goal: There is a field I have for Operating System selection. It's a single selection dropdown (field5). Depending on what the user selects I want to move them into a specific secondary usergroup. They should not be able to be in 2 OS usergroups at the same time so if they switch the OS selection the code is supposed to remove all instances of the other OS-related usergroup IDs and then it updates with the new usergroup ID.
The current code is of course incomplete. I only have 2 selections because I was testing if it would work as designed so far. And it's nearly there.
The problem:
I select one of the options (let's say windows ultimate) and click update --> it will correctly modify the database. So far so good. However, if I go back and change from ultimate to home premium then the databse will not be altered. I cannot understand WHY this happens. Now here's the kicker: if I go back to edit my profile, the field IS set to home premium, so without touching anything and then clicking update THEN the database will get modified to reflect the usergroup changes.
Effectively you need to update your profile twice for it to work. No idea why.
And it gets a bit stranger...
If you only update once (so the databse has not changed yet in regards to the usergroup) and then return to the field selection but switch back to Ultimate and click update, the databse SHOULD not get modified since you put the field selection to correspond with what the databse is showing. HOWEVER...it DOES get modified and you get put into the home premium usergroup when it should be in the ultimate usergroup. And then it gets really confused because it now switched the IDs which correspond to the usergroups and furthermore it no longer requires that you update twice in order for it to modify the database usergroup records.
So once vB reverses the code to make ultimate updates give out the home premium usergroup (and vice verca) it no longer needs you to update twice.
Any ideas on WHY this is happening???
--------------- Added 1217395058 at 1217395058 ---------------
bump..
Here's the plugin code (hook: profile_updateprofile)
$user = $db->query_first("
SELECT field5
FROM " . TABLE_PREFIX . "userfield
WHERE userid = " . $vbulletin->userinfo['userid'] . "
");
if ($user['field5'] == 'Windows Vista Ultimate')
{
$membergroupids = $userdata->fetch_field('membergroupids');
if ($membergroupids != "")
{
$membergroupids = str_replace(", 10", "", $membergroupids);
$membergroupids = str_replace("10", "", $membergroupids);
$membergroupids = $membergroupids . ", 9";
}
else
{
$membergroupids = '9';
}
$userdata->set('membergroupids', $membergroupids);
}
else // ($user['field5'] == 'Windows Vista Home Premium')
{
{
$membergroupids = $userdata->fetch_field('membergroupids');
if ($membergroupids != "")
{
$membergroupids = str_replace(", 9", "", $membergroupids);
$membergroupids = str_replace("9", "", $membergroupids);
$membergroupids = $membergroupids . ", 10";
}
else
{
$membergroupids = '10';
}
$userdata->set('membergroupids', $membergroupids);
}
}
Goal: There is a field I have for Operating System selection. It's a single selection dropdown (field5). Depending on what the user selects I want to move them into a specific secondary usergroup. They should not be able to be in 2 OS usergroups at the same time so if they switch the OS selection the code is supposed to remove all instances of the other OS-related usergroup IDs and then it updates with the new usergroup ID.
The current code is of course incomplete. I only have 2 selections because I was testing if it would work as designed so far. And it's nearly there.
The problem:
I select one of the options (let's say windows ultimate) and click update --> it will correctly modify the database. So far so good. However, if I go back and change from ultimate to home premium then the databse will not be altered. I cannot understand WHY this happens. Now here's the kicker: if I go back to edit my profile, the field IS set to home premium, so without touching anything and then clicking update THEN the database will get modified to reflect the usergroup changes.
Effectively you need to update your profile twice for it to work. No idea why.
And it gets a bit stranger...
If you only update once (so the databse has not changed yet in regards to the usergroup) and then return to the field selection but switch back to Ultimate and click update, the databse SHOULD not get modified since you put the field selection to correspond with what the databse is showing. HOWEVER...it DOES get modified and you get put into the home premium usergroup when it should be in the ultimate usergroup. And then it gets really confused because it now switched the IDs which correspond to the usergroups and furthermore it no longer requires that you update twice in order for it to modify the database usergroup records.
So once vB reverses the code to make ultimate updates give out the home premium usergroup (and vice verca) it no longer needs you to update twice.
Any ideas on WHY this is happening???
--------------- Added 1217395058 at 1217395058 ---------------
bump..