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 12-15-2015, 04:02 AM
Chris.08i Chris.08i is offline
 
Join Date: Oct 2008
Posts: 30
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Accessing the Infraction Table

Hello again,

I'm doing more work on my forums and I'm looking to do something related to the infraction table.

I have already created a new column in my user table, and I plan to have the value as either 0 or 1. A 0 would mean that the user has not received a permanent infraction (never expiring) in the past year, and a 1 would mean the opposite.

I am unsure how I would go about tackling this task.

Help is appreciated! Thank you!
Reply With Quote
  #2  
Old 12-15-2015, 04:39 AM
MarkFL's Avatar
MarkFL MarkFL is offline
 
Join Date: Feb 2014
Location: St. Augustine, FL
Posts: 3,853
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Let's assume you have the userid stored in $userid (and the name of your new column is "new_column), then you could use the queries:

PHP Code:
$pinfract_this_year $vbulletin->db->query_first("
    SELECT COUNT(*) AS infract_count
    FROM " 
TABLE_PREFIX "infraction AS infraction
    WHERE userid = " 
$userid "
    AND dateline >= " 
. (TIMENOW 365*86400) . "
    AND expires = 0
"
);

if (
$pinfract_this_year['infract_count'])
{
    
c_value 1;
}
else
{
    
c_value 0;
}

$vbulletin->db->query_write(
    UPDATE " 
TABLE_PREFIX "user
        SET new_column = " 
$c_value "
        WHERE userid = " 
$userid
); 
Reply With Quote
  #3  
Old 12-15-2015, 05:07 AM
Chris.08i Chris.08i is offline
 
Join Date: Oct 2008
Posts: 30
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thank you so much for your quick reply.

I was hoping to implement this as a cron job, which I can then use whatever the cron job returns in my plugin.

As far as I know, you can't use userid's in a cron job?

Edit: I was doing some thinking, and would it be able to actually count the number of permanent infractions a user has that were issued within the past year and set it in the new column?
Reply With Quote
  #4  
Old 12-15-2015, 05:22 AM
MarkFL's Avatar
MarkFL MarkFL is offline
 
Join Date: Feb 2014
Location: St. Augustine, FL
Posts: 3,853
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Chris.08i View Post
Thank you so much for your quick reply.

I was hoping to implement this as a cron job, which I can then use whatever the cron job returns in my plugin.

As far as I know, you can't use userid's in a cron job?
Well, what you could do is query the infraction table to get all users who have been issued a permanent infraction during the last year (then build a comma-delimited list of userids), and then query the user table to set the users in the list you built with the value of 1 in the new column and all others are set to 0.

If that sounds good, I will see if I can construct the correct code for that.
Reply With Quote
  #5  
Old 12-15-2015, 05:32 AM
Chris.08i Chris.08i is offline
 
Join Date: Oct 2008
Posts: 30
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by MarkFL View Post
Well, what you could do is query the infraction table to get all users who have been issued a permanent infraction during the last year (then build a comma-delimited list of userids), and then query the user table to set the users in the list you built with the value of 1 in the new column and all others are set to 0.

If that sounds good, I will see if I can construct the correct code for that.
I did some Google, and I read your previous post.

I came up with this, but I don't know if it is correct for starters, nor how to use the comma-delimited output with the second query.

I also want to now count the number of permanent infractions the user has had in the past year and set it in the new column in the user table.

PHP Code:
$pinfracted $vbulletin->db->query_first("
    SELECT CONCAT(userid, ',') AS puserid
    FROM " 
TABLE_PREFIX "infraction AS infraction
    AND dateline >= " 
. (TIMENOW 365*86400) . "
    AND expires = 0
"
);
    
$pinfract_this_year $vbulletin->db->query_first("
    SELECT COUNT(*) AS infract_count
    FROM " 
TABLE_PREFIX "infraction AS infraction
    WHERE userid = " 
.  $pinfracted['puserid'] . "
    AND dateline >= " 
. (TIMENOW 365*86400) . "
    AND expires = 0
"
);

$vbulletin->db->query_write(
    UPDATE " 
TABLE_PREFIX "user
        SET new_column = " 
$pinfract_this_year['infract_count'] . "
        WHERE userid = " 
$userid
); 
I'm sorry if none of what I said makes any sense, and I wholly appreciate you taking your time to help me!
Reply With Quote
  #6  
Old 12-15-2015, 05:53 AM
MarkFL's Avatar
MarkFL MarkFL is offline
 
Join Date: Feb 2014
Location: St. Augustine, FL
Posts: 3,853
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Okay, this is what I had in mind:

PHP Code:
$pinfract_this_year $vbulletin->db->query_read("
    SELECT infraction.*
    FROM " 
TABLE_PREFIX "infraction AS infraction
    WHERE dateline >= " 
. (TIMENOW 365*86400) . "
    AND expires = 0
"
);

$userlist '';
while (
$infract $vbulletin->db->fetch_array($pinfract_this_year))
{
    
$userlist .= ($infract['userid'] . ',');
}
$userlist rtrim($userlist',');

$vbulletin->db->query_write(
    UPDATE " 
TABLE_PREFIX "user
        SET new_column = CASE
            WHEN userid IN (" 
$userlist ") THEN 1
            ELSE 0
        END
"
); 
edit: I just now saw you posted "I also want to now count the number of permanent infractions the user has had in the past year and set it in the new column in the user table." That will require some recoding, which I will have to put off for now as it's getting late.

edit 2: I corrected a small typo in the code.
Reply With Quote
  #7  
Old 12-15-2015, 05:55 AM
Chris.08i Chris.08i is offline
 
Join Date: Oct 2008
Posts: 30
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by MarkFL View Post
Okay, this is what I had in mind:

PHP Code:
$pinfract_this_year $vbulletin->db->query_read("
    SELECT infraction.*
    FROM " 
TABLE_PREFIX "infraction AS infraction
    WHERE dateline >= " 
. (TIMENOW 365*86400) . "
    AND expires = 0
"
);
$user_list '';
while (
$infract $vbulletin->db->fetch_array($pinfract_this_year))
{
    
$userlist .= ($infract['userid'] . ',');
}

$userlist rtrim($userlist',');

$vbulletin->db->query_write(
    UPDATE " 
TABLE_PREFIX "user
        SET new_column = CASE
            WHEN userid IN (" 
$userlist ") THEN 1
            ELSE 0
        END
"
); 
Yours looks a lot simpler than mine, and it makes sense because I can follow it through haha.

Is it possible to write the count rather than the 1 and 0?
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 01:24 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.04359 seconds
  • Memory Usage 2,263KB
  • 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
  • (4)bbcode_php
  • (3)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (7)post_thanks_box
  • (7)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (7)post_thanks_postbit_info
  • (7)postbit
  • (7)postbit_onlinestatus
  • (7)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