vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB4 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=252)
-   -   Custom Form filter (https://vborg.vbsupport.ru/showthread.php?t=264968)

TalkVirginia 06-09-2011 09:31 PM

Custom Form filter
 
1 Attachment(s)
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(); 


kh99 06-09-2011 09:48 PM

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.

TalkVirginia 06-10-2011 05:01 AM

Quote:

Originally Posted by kh99 (Post 2205596)
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.
:(

kh99 06-10-2011 06:33 AM

Quote:

Originally Posted by TalkVirginia (Post 2205706)
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.

TalkVirginia 06-10-2011 08:50 AM

Quote:

Originally Posted by kh99 (Post 2205715)
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.


All times are GMT. The time now is 02:29 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.03148 seconds
  • Memory Usage 1,764KB
  • 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
  • (2)bbcode_php_printable
  • (3)bbcode_quote_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