Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 04-05-2010, 08:54 PM
Bobbo Bobbo is offline
 
Join Date: Feb 2003
Posts: 47
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default How to set user to multiple secondary usergroups

I'm working on a plugin where I hook in at register_addmember_process and query against an external datasource.

Based on the results of the query, I need to add the user to multiple secondary usergroups.

I can add them to a single secondary usergroup like this, where X is the usergroup.

Code:
 $userdata->set('membergroupids', X);
What I need to do is be able to add them to usergroups X, Y, and Z, etc...


I'm not quite sure logically how to make this work. If anyone has any tips it would be greatly apprecaited.

Regards,

Bobbo

--------------- Added [DATE]1270569683[/DATE] at [TIME]1270569683[/TIME] ---------------

Nevermind, I figured it out.

I needed to implode my array result first and ensure the values were comma separated before I set the membergroupids.
Reply With Quote
  #2  
Old 05-23-2011, 07:24 PM
reddyink reddyink is offline
 
Join Date: Aug 2007
Posts: 236
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Can you please post how you did this. I am trying to do the same and not able to accomplish.

Thanks for sharing.
Reply With Quote
  #3  
Old 05-23-2011, 10:52 PM
Sarteck's Avatar
Sarteck Sarteck is offline
 
Join Date: Mar 2008
Posts: 304
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

@reddyink, Well, it might not be the way you are SUPPOSED to do it, but this is how I do it in a lot of my modifications:

PHP Code:
// initialize data manger
require_once(DIR '/includes/class_dm.php');
require_once(
DIR '/includes/class_dm_user.php');
require_once(
DIR '/includes/functions_ranks.php');
$userdm =& datamanager_init('User'$vbulletinERRTYPE_CP);

// Get User Info
$user fetch_userinfo($userid);

// Get current User Groups
$groups $user['membergroupids'];

// If the member is NOT part of the groups you want to add, then add those values to $groups
if (!in_array($new_group_1$groups)) {$groups[] = $new_group_1;}
if (!
in_array($new_group_2$groups)) {$groups[] = $new_group_2;}
if (!
in_array($new_group_3$groups)) {$groups[] = $new_group_3;}

// Set the user data to a datamanager
$userdm->set_existing($user);

// If the new groups could change the user's "rank" somehow, be sure to get the user's new "rank" (have to set the new groups to the $user info first)
$user['membergroupids'] = implode(',',$groups);
$userrank =& fetch_rank($user);

// Set the new user groups
$userdm->set('membergroupids'$user['membergroupids']);

// Set the user rank, if applicable
$userdm->setr('rank'$userrank);

// Save the data
$userdm->save(); 
Reply With Quote
  #4  
Old 05-24-2011, 12:40 PM
Bobbo Bobbo is offline
 
Join Date: Feb 2003
Posts: 47
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Sarteck's method probably works.

My code is pretty unique, so I'm not sure it makes sense to post it all here. I've integrated vBulletin with our CRM system. Only authorized customers can register and use our site.

I ended up building several plugins. One includes logic that dips into a MS SQL data base and checks to see what active service contracts our customers have. Depending on their contracts, they get assigned to various secondary usergroups.

Since they could have contracts for multiple products (and would need to be assigned to multiple usergroups), I create an array and then populate it in a do while loop.

So for example, $mygroup=array();

Then in the while loop based on my query results, I add the secondary usergroup to the array with $mygroup[] = 'x'; (where x is the usergroup id)

Once the while loop is completed, I convert the array to a normal string with a comma between each of the values with: $mydata = implode(",", $mygroup);

And then finally, I write the data to the table with $userdata->set('membergroupids', $mydata);



The extent of your specific code will really depend on what you are trying to accomplish. For example, what I do as described above is really for when the customer first registers and is hooked at register_activate_process. I have a different plugin that hooks at other locations that does current real time validation. So basically, if a service contract expires in our CRM system, when they use the site, their usergroup permissions get removed in real time. The code in this plugin removes the expiring usergroup id from an array and writes it back to the vBulletin database. There are also checks upon login, etc...

Hope that at least helps a little and gets you thinking.

B
Reply With Quote
  #5  
Old 03-07-2014, 07:21 PM
Sarcoth Sarcoth is offline
 
Join Date: Mar 2006
Location: Huntsville
Posts: 521
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

@Sarteck - Thank you. Good information.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 11:39 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.03815 seconds
  • Memory Usage 2,213KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)bbcode_code
  • (1)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (5)post_thanks_box
  • (5)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (5)post_thanks_postbit_info
  • (5)postbit
  • (5)postbit_onlinestatus
  • (5)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete