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 06-09-2011, 09:31 PM
TalkVirginia's Avatar
TalkVirginia TalkVirginia is offline
 
Join Date: Oct 2008
Location: Virginia
Posts: 545
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Custom Form filter

I have a custom form that I want to use with an mod I'm working on and I'm trying to dynamically build an SQL statement depending on the selections made in the form. Does vbulletin have anything already built-in? What would be the best way to do this?

PHP Code:
    print_form_header('show_inactivemembers''show''false''true''cpform''90%');
    
print_table_header('Inactive Members Viewer');
    
print_select_row('Entries per page''perpage'$perpage15);
    
print_description_row('Inactivity Grace Period'02'thead');  
    
print_input_row("Show member inactivity greater than or equal to (days)""graceperiod");
    
print_description_row('Email Frequency'02'thead');
    
print_input_row("Show members who have not received an email in (days)""emailfreq");
    
print_description_row('Usergroups to monitor'02'thead');  
    
print_membergroup_row("Usergroups""membergroups"1);
    
print_description_row('Excluded UserIds'02'thead');  
    
print_input_row("<div>List the userids that you do not wish to send reminder email to here. <br/>
    Separate Userids with a comma.  i.e. 1,2,3,4</div>"
"excludeduserids");
    
print_description_row('Include users who can receive email from the Administrator'02'thead');  
    
print_yes_no_row("Include members who can receive email from administrator.""canreceivemailfromadmin"'0');
    
print_description_row('Include users who have opted out'02'thead');  
    
print_yes_no_row("Include members who have opted out""includeoptouts"'0');
    
print_submit_row"Submit");
    
print_table_footer(); 
Attached Images
File Type: png customfilter.png (49.8 KB, 0 views)
Reply With Quote
  #2  
Old 06-09-2011, 09:48 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Well, I don't know if it's the best way, but if you look at admin/user.php in the section that starts with "if ($_REQUEST['do'] == 'find')", it's doing something similar in that there are a lot of possible fields you can fill in to search by. It calls fetch_user_search_sql() which is in adminfunctions_user.php, but it just pretty much goes through checkng all the options and adding to the sql as necessary.
Reply With Quote
  #3  
Old 06-10-2011, 05:01 AM
TalkVirginia's Avatar
TalkVirginia TalkVirginia is offline
 
Join Date: Oct 2008
Location: Virginia
Posts: 545
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by kh99 View Post
Well, I don't know if it's the best way, but if you look at admin/user.php in the section that starts with "if ($_REQUEST['do'] == 'find')", it's doing something similar in that there are a lot of possible fields you can fill in to search by. It calls fetch_user_search_sql() which is in adminfunctions_user.php, but it just pretty much goes through checkng all the options and adding to the sql as necessary.
Thanks for the idea! That worked nicely.

Here's a short exerp of what I did:

PHP Code:

if ($_REQUEST['do'] == 'show')
{
    
$graceperiod $vbulletin->input->clean_gpc'p''graceperiod'TYPE_STR);
    
$emailfreq $vbulletin->input->clean_gpc'r''emailfreq'TYPE_STR );
    
$temp_grouplist $vbulletin->input->clean_gpc'r''membergroups'TYPE_ARRAY);
    
$temp_grouplist implode(',',$temp_grouplist);
    
$usergroups str_replace(",","','"trim($temp_grouplist));
    
$excludeduserids str_replace(",","','"trim($vbulletin->input->clean_gpc'r''excludedUserIds'TYPE_STR)));
    
$canreceivemailfromadmin $vbulletin->input->clean_gpc'r''canreceivemailfromadmin'TYPE_BOOL );
    
$includeoptouts $vbulletin->input->clean_gpc'r''includeoptouts'TYPE_BOOL );

    
$vbulletin->input->clean_array_gpc('r', array(
        
'perpage' => TYPE_INT,
          
'page'    => TYPE_INT
    
));

    if (empty(
$vbulletin->GPC['perpage']))
    {
        
$vbulletin->GPC['perpage'] = 15;
    }

    
$condition "1=1 ";
    
$condition .= iif(!empty($graceperiod), " AND TIMESTAMPDIFF(DAY, FROM_UNIXTIME(lastactivity), FROM_UNIXTIME(UNIX_TIMESTAMP())) >= "$graceperiod " ");
    
$condition .= iif(!empty($emailfreq), " AND TIMESTAMPDIFF(DAY, FROM_UNIXTIME(rmEmailDate), FROM_UNIXTIME(UNIX_TIMESTAMP())) >= "$emailfreq " ");
    
$condition .= iif(!empty($usergroups), " AND usergroupid IN ('" $usergroups "') ");
    
$condition .= iif(!empty($excludeduserids), " AND userid NOT IN ('" $excludeduserids "') ");
    
$condition .= iif($canreceivemailfromadmin"AND options & 16 ");
    
$condition .= iif($includeoptouts" AND rmoptout = 1 "); 
EDIT: One thing I'm running into now though is that if there is more than one page, my form values don't follow through from page to page and I loose my condition for my query.
Reply With Quote
  #4  
Old 06-10-2011, 06:33 AM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by TalkVirginia View Post
EDIT: One thing I'm running into now though is that if there is more than one page, my form values don't follow through from page to page and I loose my condition for my query.
I think the other adminCP pages call construct_hidden_code() (in adminfunctions.php) to add fields to a list (that's kept in a global var). Then those fields will be output as <input type="hidden"... when print_submit_row() is called. That way those values will come back when the form on the second page is submitted.
Reply With Quote
  #5  
Old 06-10-2011, 08:50 AM
TalkVirginia's Avatar
TalkVirginia TalkVirginia is offline
 
Join Date: Oct 2008
Location: Virginia
Posts: 545
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by kh99 View Post
I think the other adminCP pages call construct_hidden_code() (in adminfunctions.php) to add fields to a list (that's kept in a global var). Then those fields will be output as <input type="hidden"... when print_submit_row() is called. That way those values will come back when the form on the second page is submitted.
When I add the construct_hidden_fields it doesn't work. Nothing gets passed.
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 04:01 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.08497 seconds
  • Memory Usage 2,260KB
  • Queries Executed 14 (?)
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
  • (2)bbcode_php
  • (3)bbcode_quote
  • (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
  • (1)postbit_attachment
  • (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_attachment
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete