The Arcive of Official vBulletin Modifications Site.It is not a VB3 engine, just a parsed copy! |
|
#1
|
|||
|
|||
How To Select Member Groups At Registration
Hi,
I have a vBulletin forum that requires users to register. At this point they receive the registration email & click on it's link. Then they must wait until they are Moderated in order to be allowed to post. I want to provide all users with certain forums. I.e. Communal forums for all. Depending on choices made at registration I wish to restrict access to other forums. E.g. Group A will have access to Forum A (but not Forums B & C) etc. Note: The 2 drop down lists for "Groups" both have the same contents - it just allows people to join 2 different groups out of the list). I have edited the "register" template to add in 2 drop down boxes. The choice being the groups the new registrant may be in. I have added a "plugin" to the "register_addmember_process" hook. Code:
if (is_numeric($_REQUEST['group1']) && ($_REQUEST['group1']>8)) { $membergroupids = $_REQUEST['group1']; } else { $membergroupids = ''; } if (is_numeric($_REQUEST['group2']) && ($_REQUEST['group2']>8)) { if ($membergroupids != $_REQUEST['group2']) { if ($membergroupids != '') { $membergroupids .= ','; } $membergroupids .= $_REQUEST['group2']; } } $userdata->set('membergroupids', $membergroupids); - The correct groups are entered into "membergroupids" in the DB. - "usergroupid" is still set to 3. However, the problem I have is that these members are now able to post even though they have not clicked on the email link or been moderated as members. Any ideas on how to either fix this solution or another approach to fixing this issue? I have proved this by adding a test user who is able to post. If I then remove the list of groups from "membergroupids" in the database, he is suddenly unable to post until he has clicked the link in the registration email & been moderated. TIA for any fixes / explanations / advice / etc. |
#2
|
||||
|
||||
It is because users are put into the "awaiting confirmation" usergroup on registration. You are effectively putting them into another usergroup. A "yes" always overrides a "no" (in vBulletin).
What you should do is to only change the member group as they activate their account, not as they register. |
#3
|
|||
|
|||
Thanks for the reply.
So, when the "membergroupids" field is blank it means "awaiting confirmation"? I notice that "usergroupids" is set to 3 & stays that way. If so, can you give me any pointers as to how to transfer the data from the initial registration form to a hook in the code after moderation / email confirmation is complete? It seems to me that this would be an impossibility unless I create a DB table & store the data in there at registration time & then use a hook at some point in the manual moderation process (haven't looked that far into the code yet) that populates "membergroupids" from my DB table? What do you think? Thanks again for your input so far & any future advice. |
#4
|
||||
|
||||
Quote:
Create a new profile field which can only be changed at registration. Then when the user activates, check with this field that you have created. |
#5
|
|||
|
|||
Thanks for the reply.
Quote:
Quote:
The only alternative I have worked out is to add code (there are no hooks) to usercp.php?do=domoderate. I.e. Store the chosen groups into a seperate DB table at registration. Then read this data in "domoderate" & populate "groupmemberids". Of course this does mean that any upgrades to the site will need "usercp.php" editing. |
#6
|
||||
|
||||
Quote:
I don't think you understand. You are creating a profile field to check upon activation. At activated, you sort into your usergroups. |
#7
|
|||
|
|||
Quote:
Quote:
Quote:
I'm going to have a look through the code now to see if I can find a hook at some point. If so, I think what I need to do is create a plugin that takes the contents of the profile field & adds the corresponding groups to "membergroupids" as appropriate. Am I on the right track now? Thanks for all your help so far. --------------- Added [DATE]1214513317[/DATE] at [TIME]1214513317[/TIME] --------------- It seems that the best place to add the code to set "membergroupids" is in: /admincp/user.php?do=domoderated at about this point in the code: $userdata->set('usergroupid', 2); However I see no hooks that I can use for a plugin. Should I just add the code to user.php or am I missing what you mean by "activation"? I will have a look through the ACP to see if there are any "activation" options in there. --------------- Added [DATE]1214533841[/DATE] at [TIME]1214533841[/TIME] --------------- SOLUTION: 1) In ACP/User Profile Fields/Add New User Profile Field Add the new field by completing the form. 2) In ACP/Plugins & Products/Add New Plugin Add a new plugin. This is the code I used: $tradegroup = $db->query_first('SELECT field7 FROM userfield WHERE userid=\''.$userinfo['userid'].'\''); $groupnum = $db->query_first('SELECT usergroupid FROM usergroup WHERE title=\''.$tradegroup['field7'].'\''); $userdata->set('membergroupids', $groupnum); Change mentions of field7 to whatever the field number is that you set up in step 1. The hook is: register_activate_process --------------- Added [DATE]1214534002[/DATE] at [TIME]1214534002[/TIME] --------------- NOTES: In case someone has searched & found the above soloution, this is still not perfect: 1) The dropdown list from step 1 is not auto-populated with additional member groups that may be created in the future. 2) I don't think there will ever be entries in "membergroupids" but if there is then the above code will overwrite them rather than add to them. --------------- Added [DATE]1214534136[/DATE] at [TIME]1214534136[/TIME] --------------- Finally, thanks for all your help, pointers & explanations "Dismounted". --------------- Added [DATE]1214534432[/DATE] at [TIME]1214534432[/TIME] --------------- Spoke too soon, the hook is wrong, users can post before they are moderated. I think I have now officially lost the will to live with this. --------------- Added [DATE]1214535946[/DATE] at [TIME]1214535946[/TIME] --------------- --------------- Added [DATE]1214536511[/DATE] at [TIME]1214536511[/TIME] --------------- Changed the code slightly & added to admincp/user.php in do="domoderate": $tradegroup = $db->query_first('SELECT field7 FROM userfield WHERE userid=\''.$user['userid'].'\''); $groupnum = $db->query_first('SELECT usergroupid FROM usergroup WHERE title=\''.$tradegroup['field7'].'\''); $userdata->set('membergroupids', $groupnum); All working now, although this is not a good way of doing it as vbulletin upgrades may fail as I've edited the code directly rather than using a hook with plugin code. |
|
|
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
More Information | |
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|