vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB4 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=252)
-   -   How to set user to multiple secondary usergroups (https://vborg.vbsupport.ru/showthread.php?t=239877)

Bobbo 04-05-2010 08:54 PM

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.

reddyink 05-23-2011 07:24 PM

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

Thanks for sharing.

Sarteck 05-23-2011 10:52 PM

@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(); 


Bobbo 05-24-2011 12:40 PM

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 :)

Sarcoth 03-07-2014 07:21 PM

@Sarteck - Thank you. Good information.


All times are GMT. The time now is 02:55 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.01143 seconds
  • Memory Usage 1,733KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_code_printable
  • (1)bbcode_php_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (5)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete