PDA

View Full Version : Counting users posts in particular forum?


Simon Lloyd
01-31-2009, 09:23 PM
Hi all, i have an add on by Bananalive (easy forms), this add on posts the contents of a form to a particular forum, the post shows it was posted by the user but it doesnt add to the post count, however, is it possible to count the posts in that forum per user and show the count in the users info in postbit?

So for arguments sake, you would have Username then under that age....etc then Top Tip Count xx (Top Tips is the forum that users will have submitted the form), i'm no coder but quite capable of doing as instructed, i have made some template changes myself with no problem but nothing very special.

Any ideas?

Lynne
01-31-2009, 09:30 PM
I did that on my site. I added a couple of columns to the user table for the counts to go in and then created a plugin (newthread_post_complete) so if they posted in xx forum, it increased this new column number. I never really finished it to delete threads if the thread is deleted, so I made a quick php script to run as a cron when I feel like it to do a recount.

Simon Lloyd
01-31-2009, 10:06 PM
I did that on my site. I added a couple of columns to the user table for the counts to go in and then created a plugin (newthread_post_complete) so if they posted in xx forum, it increased this new column number. I never really finished it to delete threads if the thread is deleted, so I made a quick php script to run as a cron when I feel like it to do a recount.
Lynne, thanks for the response, i know i have a couple of hundred posts but they were either asking questions or answering something i actually knew about!

Could you possibly give me a blow by blow on how to?, i am very capable of doing as instructed but need some help on how.

--------------- Added 1233446955 at 1233446955 ---------------

EDIT: The posts won't be deleted (or at least they shouldn't) the forum is purely to recieve the form, members only have viewing rights to the forum nothing else.

Lynne
01-31-2009, 11:08 PM
Um, yikes! I posted the wrong response in this thread. That was meant to go into another thread. Sometimes I just CANNOT multitask!!!

OK, let's see.... I keep count for two different reasons, one in forum a&b, another in forum c&d. I added two columns to the user table - ttdtrader_s and ttdtrader_v - int(10), unsigned, not null, default 0. Then created a plugin at newthread_post_complete with the following code:
if (in_array($foruminfo['forumid'], array(a,b))) {
$db->query_write("UPDATE user SET ttdtrader_s = ttdtrader_s + 1 WHERE userid=" . $vbulletin->userinfo['userid']);
}
if (in_array($foruminfo['forumid'], array(c,d))) {
$db->query_write("UPDATE user SET ttdtrader_v = ttdtrader_v + 1 WHERE userid=" . $vbulletin->userinfo['userid']);
}

To initially do the count, I ran a couple of queries - I actually wrote them into a Scheduled Task so I can run it easily:

$vbulletin->db->query("
UPDATE " . TABLE_PREFIX . "user
SET user.ttdtrader_s = (SELECT count(*) FROM " . TABLE_PREFIX . "thread WHERE thread.postuserid = user.userid AND forumid IN ('a','b') AND sticky=0)"
);
$vbulletin->db->query("
UPDATE " . TABLE_PREFIX . "user
SET user.ttdtrader_v = (SELECT count(*) FROM " . TABLE_PREFIX . "thread WHERE thread.postuserid = user.userid AND forumid IN ('c','d') AND sticky=0)"
);

Simon Lloyd
02-01-2009, 12:22 AM
Lynne, thanks for sticking with this!, i created a table using:
CREATE TABLE ctoptip (count INT(10) UNSIGNED NOT NULL);
INSERT INTO ctoptip SET count = 0;and created aplugin as instructed withif (in_array($foruminfo['forumid'], array(52))) {
$db->query_write("UPDATE user SET ctoptip = ctoptip + 1 WHERE userid=" . $vbulletin->userinfo['userid']);
}
where can i put the rest so that it updates in the postbit for the user everytime the create the post via the form?

Lynne
02-01-2009, 02:20 AM
I did NOT create a new table, I just added two new columns to the user table so the variables would be available to me whenever the userinfo was grabbed. You can do it your way, but you will have to make sure to modify the queries where needed to get the variables you want (like in the postbit you are talking about).

Simon Lloyd
02-01-2009, 09:09 AM
Ok, i deleted that new table and added to the vb_user table (when setting up vbulletin i chose vb as the prefix for the database) could you tell me where i need to put the next section of code in order for it to show in the Postbit and always update when they fill that form in? ( i know its only half of the next section of code as i am only working with one forum id52)

Lynne
02-01-2009, 03:16 PM
Say your new column is called "simon1", it will be available as $post[simon1] in the postbit templates. What I did is create a new template (I had a few lines for mine), say postbit_simon with the new values in there:

<if condition="$post['simon1']>= '1'">$post[simon1] Threads in Simon's forum<br /></if>Then I created a plugin using postbit_display_start to insert that line using a template hook:

eval('$template_hook[postbit_userinfo_right] .= " ' . fetch_template('postbit_simon1') . '";');If you only have the one line in the template, you can probably just do it directly in that plugin:

if ($post[simon1] >= '1') {
eval('$template_hook[postbit_userinfo_right] .= "$post[simon1] Threads in Simon\'s forum<br />";');
}(NOT tested, but it's something like that. html must be escaped properly if using that method.)

If you use that method, don't forget to also cache the template. (Well, you don't have to, but it's good practice.)

Simon Lloyd
02-01-2009, 04:57 PM
Lynne, thanks again for the help, i can't get it to work, i added a column called ctoptip i created a template like you said (called postbit_ctoptip) and the new plugin but it shows nothing?

Its getting frustrating now, like i said i'm no coder!

--------------- Added 1233515657 at 1233515657 ---------------

I made a post directly in the forum and got a db error user doesn't exist

Lynne
02-01-2009, 05:22 PM
user doesn't exist? But there is nothing in there to do with the user. What was the exact error? And what is the exact code/template code your are using?

Simon Lloyd
02-01-2009, 06:56 PM
Oki'll explain everyting i have done:
opened AdminMyPhp then my db, selected vb_user and added ctoptip to it with the settings you gave, i then created a plugin as follows with newthread_post_complete as the hookif (in_array($foruminfo['forumid'], array('52'))) {
$db->query_write("UPDATE user SET ctoptip = ctoptip + 1 WHERE userid=" . $vbulletin->userinfo['userid']);
} i then created a template called postbit_ctoptip<if condition="$post['ctoptip']>= '1'">$post[ctoptip] Top Tips<br /></if>i then created another plugin with postbit_display_start as the hookeval('$template_hook[postbit_userinfo_right] .= " ' . fetch_template('postbit_ctoptip') . '";');i then used this in my postbitMy Top Tip Count: $post[ctoptip]making a post via a form to the forum (id 52) does not produce an error nor does it increase the counter, making a post direct gave a db error as shown belowDatabase error in vBulletin 3.8.1:

Invalid SQL:
UPDATE user SET ctoptip = ctoptip + 1 WHERE userid=1;

MySQL Error : Table 'thexxxx_CCxxxx.user' doesn't exist
Error Number : 1146
Request Date : Sunday, February 1st 2009 @ 07:11:35 PM
Error Date : Sunday, February 1st 2009 @ 07:11:35 PM
Script : http://www.thecodecage.com/forumz/newthread.php?do=postthread&f=52
Referrer : http://www.thecodecage.com/forumz/newthread.php?do=newthread&f=52
IP Address : xx.xxx.xxx.xx
Username : Simon Lloyd
Classname : vB_Database
MySQL Version : 5.0.67-communityThe manual post posted ok, So i'm not sure what to do now?

--------------- Added 1233523473 at 1233523473 ---------------

could it be because userid 1 is an uneditable user?, it still doesn't explain no increments for the posts by form to the top tips forum (id 52).

Lynne
02-01-2009, 08:34 PM
Ah, I don't use table prefixes, thus my query did not contain the table prefix. You need to change user to vb_user for your site.

Do you have the hook newthread_post_complete in your form? If not, you either need to add it (find it in the vb code and paste it when something similar is happening in your form code) or you need to add the code you put in the plugin directly into your form code.

Simon Lloyd
02-01-2009, 08:37 PM
Ah, I don't use table prefixes, thus my query did not contain the table prefix. You need to change user to vb_user for your site.

Do you have the hook newthread_post_complete in your form? If not, you either need to add it (find it in the vb code and paste it when something similar is happening in your form code) or you need to add the code you put in the plugin directly into your form code.
Thanks once again!, you saidor you need to add the code you put in the plugin directly into your form codewhich one of the plugins that i created?

Lynne
02-01-2009, 08:42 PM
The one with the update query that uses the newthread_post_complete hook location. That is the one that isn't getting run because you don't have the hook location in your form.

Simon Lloyd
02-01-2009, 08:51 PM
As for user i don't have user so cannot change is it for vb_user.....think i'm in over my head with this!

Lynne
02-01-2009, 09:38 PM
I'm talking about in the query:
UPDATE user SET ctoptip = ctoptip + 1To:UPDATE vb_user SET ctoptip = ctoptip + 1

Simon Lloyd
02-02-2009, 06:09 AM
I'm talking about in the query:
UPDATE user SET ctoptip = ctoptip + 1To:UPDATE vb_user SET ctoptip = ctoptip + 1Ah!, thanks, see told you i'm no coder!, i'm going to get in touch with Bananalive (hopefully) to see about adding the hook to his form code.

Thanks for all your help!

--------------- Added 1233573825 at 1233573825 ---------------

BTW, changing the prefix worked for direct posts, it counts them and displays in the postbit, but the form delivery does not until i can get some help with where and how to deliver the hook location in the form code.

Lynne
02-02-2009, 03:21 PM
You just need to add the hook location into your form. I've got it in my form (I didn't use a modification from here - I wrote my own). Just look at where it is in the current vb code and see if you have some similar code in your form and just add it in the same place.

Simon Lloyd
02-02-2009, 03:29 PM
You just need to add the hook location into your form. I've got it in my form (I didn't use a modification from here - I wrote my own). Just look at where it is in the current vb code and see if you have some similar code in your form and just add it in the same place.Lynne, thanks, the mod from Bananlive already has a couple of boxes when you create your form to add your plugin or hook code to it, so your code put in the box for befroe_submit worked like a charm, although i have found now that i will need to have some code that deletes from the count as i have had my first occurrence of that, editing the database regularly will be a definate no no!

Lynne
02-02-2009, 04:00 PM
I run the queries I posted to get the initial count every night as a cron job (scheduled task) since I haven't written a plugin for deleted threads either.