Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
  #1  
Old 02-24-2010, 02:10 PM
Sarcoth Sarcoth is offline
 
Join Date: Mar 2006
Location: Huntsville
Posts: 521
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Special Query (WHERE)

I'm trying to get my query to only pull usergroups that have been selected. This isn't a permission to view thing, it is more like choosing which usergroups will be displayed.

Here is my current query:
PHP Code:
$users $db->query_read_slave("
    SELECT user.*, usergroup.usergroupid, usergroup.title, user.options, usertextfield.*, userfield.*,
    IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid
    FROM " 
TABLE_PREFIX "usergroup AS usergroup
    LEFT JOIN " 
TABLE_PREFIX "user AS user ON(user.usergroupid = usergroup.usergroupid OR FIND_IN_SET(usergroup.usergroupid, user.membergroupids))
    LEFT JOIN " 
TABLE_PREFIX "userfield AS userfield ON(userfield.userid = user.userid)
    LEFT JOIN " 
TABLE_PREFIX "customprofilepic AS customprofilepic ON (user.userid = customprofilepic.userid)
    LEFT JOIN " 
TABLE_PREFIX "usertextfield AS usertextfield ON(usertextfield.userid=user.userid)
    WHERE (usergroup.showrosteraddpermissions = 1)
"
); 
This works great, but it requires that I add a column to the usergroup table and then I have to go into each usergroup via the admincp and select YES if I want them to be added to the query. It can be a bit tiresome doing it that way.

What I'd like to do is to set up a option menu for my mod and just type in the usergroups I want to be allowed in the query. Here is what I have in my product.xml file:

Code:
	<settinggroup name="showroster" displayorder="65535">
		<setting varname="showroster_displayed_groups" displayorder="10">
			<datatype>free</datatype>
			<defaultvalue><![CDATA[19,13,24,20,17,18]]></defaultvalue>
		</setting>
	</settinggroup>
I also have the correct phrasetype's in there as well and this is appearing in the options menu when the xml is installed. The only problem is that I can't figure out what to do with my query so that only the usergroups in the showroster_displayed_groups appear in the query.

I've tried a lot of different idea's, but it always ends in a database error. Does anyone have any thoughts on what I could do. Even a small suggestion in the right direction would be appreciated.

Thank you for your time.
Reply With Quote
  #2  
Old 02-25-2010, 06:08 PM
Sarcoth Sarcoth is offline
 
Join Date: Mar 2006
Location: Huntsville
Posts: 521
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

So, here is what I am thinking. I added the following to my .php code.

PHP Code:
$displaygroups = array();
$displaygroups explode(','$vbulletin->options['showroster_display_groups']);
$users $db->query_read_slave("
    SELECT user.*, usergroup.usergroupid, usergroup.title, user.options, usertextfield.*, userfield.*,
    IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid
    FROM " 
TABLE_PREFIX "usergroup AS usergroup
    LEFT JOIN " 
TABLE_PREFIX "user AS user ON(user.usergroupid = usergroup.usergroupid OR FIND_IN_SET(usergroup.usergroupid, user.membergroupids))
    LEFT JOIN " 
TABLE_PREFIX "userfield AS userfield ON(userfield.userid = user.userid)
    LEFT JOIN " 
TABLE_PREFIX "customprofilepic AS customprofilepic ON (user.userid = customprofilepic.userid)
    LEFT JOIN " 
TABLE_PREFIX "usertextfield AS usertextfield ON(usertextfield.userid=user.userid)
    WHERE (user.usergroupid IN 
$displaygroups)
"
); 
Obviously, that isn't working since $displaygroups isn't working in the query because it is an array. I'll keep researching and trying to figure something out. Hopefully someone will see my error here.

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

Okay, I just got another idea.

How about I create a new table called showroster and a field named displaygroups. How can I take the comma seperated numbers from my $vbulletin->options['showroster_display_groups'] field (from the options menu) and dump them into that table and field?

I think if I get that far, I could add a WHERE to the query to compare that with the user.usergroupid.

Perhaps: WHERE (user.usergroupid = showroster.displaygroups)

?
Reply With Quote
  #3  
Old 02-26-2010, 08:20 PM
Sarcoth Sarcoth is offline
 
Join Date: Mar 2006
Location: Huntsville
Posts: 521
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I'm having way too much difficulty getting the query to work the way I want it...so how about I try another route.

I have the setting variable "showroster_displayed_groups" in my options menu. It has the default values of 19,13,24,20,17,18. Would the following code (which I posted above) read them into an array like I think it should?

PHP Code:
$displaygroups explode(','$vbulletin->options['showroster_display_groups']); 
If so, since userinfo['usergroupid'] is a working array variable on my page, could I use a foreach control to pull out each number from my $displaygroups array and compare it to the userinfo['usergroupid']?

How could I write the foreach control to do that?
Reply With Quote
  #4  
Old 03-18-2010, 08:10 PM
Sarcoth Sarcoth is offline
 
Join Date: Mar 2006
Location: Huntsville
Posts: 521
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Well, apparently it is difficult to get help on this sort of thing, but I think I finally figured it out.

This probably wasn't the best way to do it, but I tried it so many different ways I don't know what else I could have done.

I have a setting called showroster_display_groups which is a comma separated ID list. The admin enters the usergroupid's that they want to appear on my roster in the Settings page.

I added this to my showroster.php (custom) file:
PHP Code:
$displaygroups = array();
$displaygroups explode(','$vbulletin->options['showroster_display_groups']); 
Further down in the file, there is the query. Since I couldn't figure a way to get the WHERE to work, I removed it. That opened my roster up to including every usergroup.

A few lines below the query, I have a while statement that pulls the data to use from the query (at least that is what I think it does).

I added this at the start of the while statement:
PHP Code:
foreach ($displaygroups AS $mygroups) {
    if (
$mygroups == $userinfo['usergroupid']) { 
I closed that at the end with two brackets and BINGO. It finally worked.

I can now remove my bitfield.xml file from my mod and focus on using the single .php file for my mod.

Next I need to figure out how to pull variables from my custom php file and use it in plugins. If anyone has any suggestions on that, please see my other thread.

https://vborg.vbsupport.ru/showthread.php?t=236314
Reply With Quote
Reply

Thread Tools
Display Modes

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:16 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.03672 seconds
  • Memory Usage 2,205KB
  • Queries Executed 11 (?)
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
  • (5)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (4)post_thanks_box
  • (4)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (4)post_thanks_postbit_info
  • (4)postbit
  • (4)postbit_onlinestatus
  • (4)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_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