PDA

View Full Version : Exclude Users Posts in Some Forums from Stats?


HeyMe
09-19-2009, 01:44 PM
Hello,

1st even if I mentioning a mod here, I don't think this issue belongs to mod support because there's nothing wrong with the mod.

I wanted the Top Posters stats in "Cyb's Advanced Stats" to show total posts excluding those made in the "Forums excluded from stats".

So with my very limited knowledge in PHP/mySQL, I opened the XML file & tried some things.

1st I found lines like these:
$cybexclfids = ','.$vbulletin->options['cybtopstats_excl_forums'];
$cybexclforums_topforums = "AND thread.forumid NOT IN($cybexclfids)";


I tried to add a variable like $cybexclforums_topforums called $cybexclforums_toppost & added it here:
if ($cybstats_posters_tcenabled)
{
$get_stats_posters = $vbulletin->db->query_read("
SELECT COUNT(post.postid) AS posts, post.userid, post.dateline, user.usergroupid, user.displaygroupid, user.username
FROM " . TABLE_PREFIX . "post AS post
LEFT JOIN " . TABLE_PREFIX . "user AS user ON (post.userid = user.userid)
LEFT JOIN " . TABLE_PREFIX . "thread AS thread ON (thread.threadid = post.threadid)
LEFT JOIN " . TABLE_PREFIX . "forum AS forum ON (forum.forumid = thread.forumid)
WHERE user.userid > 0 AND posts > 0 AND post.visible= 1 AND (forum.options & 4096) $cybexclforums_toppost $cybexclgroups $cybtopstats_timecut_toppost
GROUP BY post.userid
ORDER BY posts DESC
LIMIT 0, $resultsnr
");
}


I tried also to edit my $cybexclforums_toppost value, replacing thread.forumid with post.forumid then forumid , but it doesn't seem to work.


Any enlightenment? :)

Lynne
09-19-2009, 01:55 PM
You said you tried to add a variable "like $cybexclforums_topforums called $cybexclforums_toppost" but then you never posted what that variable looked like. And when you said it doesn't seem to work, what is the result? What makes you think it isn't working?

And, if you are doing this on your test site (which you should be), then turn on debug mode and take a look at the query and see if it's correct.

HeyMe
09-19-2009, 02:26 PM
Hi Lynne :)

Like $cybexclforums_topforums means it has the same value, then I tried replacing thread.forumid with post.forumid then forumid, I tried these 3 versions:
$cybexclforums_toppost = "AND thread.forumid NOT IN($cybexclfids)";
$cybexclforums_toppost = "AND post.forumid NOT IN($cybexclfids)";
$cybexclforums_toppost = "AND forumid NOT IN($cybexclfids)";


How I know it doesn't work? Because in the Top Posters stats I see that users still have all their posts counted.

The trick worked though with the "Top Thread Starters" stats.

Lynne
09-19-2009, 03:23 PM
There is no such thing as post.forumid and forumid is ambiguous cuz there is a thread.forumid and a forum.forumid. It seems to me that thread.forumid is the correct variable. What are you trying to grab that is different than what he is doing?

HeyMe
09-19-2009, 03:52 PM
Thanks for your time :)

The query I posted above seems to grab posts counts from users to rank them in the "Top Posters" stats, I wanted to exclude posts in some forums from the count so I added that $cybexclforums_toppost to the query in this line:
WHERE user.userid > 0 AND posts > 0 AND post.visible= 1 AND (forum.options & 4096) $cybexclforums_toppost $cybexclgroups $cybtopstats_timecut_toppost


I added similar variable to the query that works with the "Top Thread Starters" stats, now I see that threads made by users in the excluded forums are deducted from the count. But posts are still all counted :o

BtW I did try debug mode, I couldn't see the query for some reason, but I know it works as "Top Posters" are displayed, it just doesn't work as I want it to..

Lynne
09-19-2009, 04:19 PM
Queries are not my strong point, but I think what you may need to do is change the JOIN and exclude threads in that forum there. I really don't know exactly, sorry. (It's what I would try anyway.)

HeyMe
09-19-2009, 07:28 PM
Thanks again :)

I think I did it, I just hope my hack doesn't have some nasty side effects :D

There's a place where it was saying $cybstats_posters_tcenabled = false; I changed false to true & it seems to work :)