PDA

View Full Version : Addon not quite working...


dstruct2k
04-12-2009, 09:34 AM
I've done a few mods back before the plugin system... I'm trying my hand at updating a couple hacks but it appears I've made a couple mistakes.

Nothing breaks, but it doesn't work either. I might've picked the wrong hook location, or have some of the code wrong for the new version... Either way, I'd appreciate some help.

This addon is supposed to allow admins to set a list of usergroupids which are randomly picked from when a user registers. So far, all I've had happen is everyone that registers with the addon enabled still goes to usergroup 2. (This doesn't work with email verification, not sure how to tackle that one yet...)

Any pointers? Thanks!


--ATTACHMENT REMOVED, ADDON RELEASED! See this thread. (https://vborg.vbsupport.ru/showthread.php?t=211059)--

TigerC10
04-13-2009, 06:39 AM
I love it when people actually have the code for a mod they're developing. It makes things so much more fun and interesting.

That said, check this out for your Assign Random Usergroup From List plugin at hook register_addmember_process:

if ($vbulletin->options['fpx_rndm_usrgrp_list'] AND !$vbulletin->options['verifyemail']) {
$rndgroups = preg_split("/[\s,]+/", $vbulletin->options['fpx_rndm_usrgrp_list']);

$newusergroupid = $rndgroups[ rand( 0, count($rndgroups)-1 ) ];

$userdata->set('usergroupid', $newusergroupid);
}


Much simpler than your plugin code, should work great for the non-mail verfication boards.

Next, for the mail verification boards...

Hook: register_activate_process

if ($vbulletin->options['fpx_rndm_usrgrp_list']) {
$rndgroups = preg_split("/[\s,]+/", $vbulletin->options['fpx_rndm_usrgrp_list']);

$userinfo['usergroupid'] = $rndgroups[ rand( 0, count($rndgroups)-1 ) ];
}
$vbulletin->userinfo['usergroupid'] = $user['usergroupid'] = $userinfo['usergroupid'];
$userdata->set('usergroupid', $user['usergroupid']);

/*//reset some usergroup/usertitle caches
$getusergroupid = iif($userinfo['displaygroupid'] != $userinfo['usergroupid'], $userinfo['displaygroupid'], $user['usergroupid']);

$user_usergroup =& $vbulletin->usergroupcache["$user[usergroupid]"];
$display_usergroup =& $vbulletin->usergroupcache["$getusergroupid"];

//reset the usertitle
$userdata->set_usertitle(
$user['customtitle'] ? $user['usertitle'] : '',
false,
$display_usergroup,
($user_usergroup['genericpermissions'] & $vbulletin->bf_ugp_genericpermissions['canusecustomtitle']) ? true : false,
($user_usergroup['genericpermissions'] & $vbulletin->bf_ugp_genericpermissions['cancontrolpanel']) ? true : false
);
if ($user['userid'] == $vbulletin->userinfo['userid'])
{
$vbulletin->userinfo['usergroupid'] = $user['usergroupid'];
$vbulletin->userinfo['displaygroupid'] = $user['usergroupid'];
}
*/


The code in the commented section isn't really necessary. The info should be updated when the cron for it runs, then again if you want to include it that's up to you.

dstruct2k
04-13-2009, 06:50 AM
I love it when people actually have the code for a mod they're developing. It makes things so much more fun and interesting.

And I love it when people post such amazingly perfect responses! I'll take a look at where I screwed up, at least I know I was in the right hook location! :) I'm actually really surprised at myself for that, considering last time I wrote an addon, there were no such things as "hooks" and "plugins"... Code works nicely though, thank you.

Edit: I think there's a slight mistake though... if you "count($rndgroups)" when there's 3 groups in the list, you get a result of 3. At that point, you randomly pick between 0-3... But if 3 is picked, there is no $rndgroups[3] to correspond to it. That's why I had a -1 on mine, to drop the count by 1 then randomly pick. Or am I wrong to do that?

TigerC10
04-13-2009, 03:40 PM
Oh, you're absolutely right. That would have happened with anything except a 0 count (but 0 count shouldn't happen since there has to be something in the field list before it does anything). It was late and I was running on only a few hours of sleep - I'm not surprised I forgot the -1.


Although, someone could enter a comma in the admin options field and that would cause things to get messy. You might want to add a regex verification to that field to force a person to enter correct data from the admin side.

EDIT:
I've posted to your thread regarding the setting verification.