Top Contributors of the Month

Top Contributors of the Month [Paid] v2.1.2

No permission to buy ($30.00)
were you using the original v2.0.0 ?

No, 2.0.3.

Also, I don't think the trophy points ranking is taking into account cumulative trophy points earned during the selected month.

Screenshot 2025-07-28 at 20-57-37 Top monthly contributors altBoards.webp

There should be a lot more points here.

Also, option tabs are broken. Enable/disable doesn't do anything
 
Last edited:
  1. Setup your cumulative trophy's for this add-on in the User->Trophy->Cumulative
  2. Run the Rebuild Cache -> "Top Contributors"
Also note, turn the caches off under "Advanced settings" for this add-on if you're playing around, and always flush caches under Tools > Rebuild > Flush Caches any time you've had caching enabled.

This add-on purposely caches thing hard and deep, so you need to disable & flush if you're messing about.

Re-enable caches only when you're done editing et cetera.

Trophy points, same as ALL metrics are calculated for the given month only, while "cumulative trophy's" are in fact cumulatie, all other metrics and displays are for the month only. This is intentional to encourage ongoing participation and "contributions" from contributors.
 
Last edited:
  1. Setup your cumulative trophy's for this add-on in the User->Trophy->Cumulative
  2. Run the Rebuild Cache -> "Top Contributors"
Also note, turn the caches off under "Advanced settings" for this add-on if you're play around, and under Tools > Rebuild > Flush the caches when you disable them.

This add-on purposely caches thing hard, so you need to disable & flush if you're messing about. Re-enable caches when you're done.

Okay that seemed to grab the new cumulative trophies. It won't factor in previous cumulative trophies before install, only afterwards?
 
Okay that seemed to grab the new cumulative trophies. It won't factor in previous cumulative trophies before install, only afterwards?
It will run back to the beginning of time to calculate it's own cumulative trophy's. In scoring months from the past, it WILL use all other cumulative trophy's.

This is NOT a leaderboard, it's a monthly thing, so while, for say June 1999, it will look and calculate the trophy points (cumulative + milestone) for May 1999 to score June 1999, when it's looking at July 1999, it only scores for June 1999. Get it?

There's an option to "disallow" including TCM trophy awards in the calculation... to prevent previous month leaders from getting an immediate point harvest on the 1st of the month for the remainder of the month.
 
Regarding a leaderboard... TrophyEssentials (TE) does NOT record any dates for when the cumulative trophy's are awarded. Nothing, nadda.

However, with this addon, cumulative trophy's do now record dates for each cumulative action tracked and when you run the "rebuild for TCM", it'll recalculate the action times for each action so their is a history (note, if you have a large forum you should limit how far back in time it goes).

SO, adding a leaderboard is now possible (by month, annual, etc).
 
Last edited:
Regarding a leaderboard... TrophyEssentials (TE) does NOT record any dates for when the cumulative trophy's are awarded. Nothing, nadda.

However, with this addon, cumulative trophy's do now record dates for each cumulative action tracked... so adding a leaderboard is now possible (by month, annual, etc). With the following caveat: because TE never recorded any dates prior to installing this add-on, any leaderboard would be limited historically to the date this add-on (v2.1.0) was installed + when TE was installed with TCM v2.1.0.

Okay, so to be clear, any cumulative trophy points earned BEFORE this add-on was updated 2.1.0, will not be reflective in the ranking.
 
Okay, so to be clear, any cumulative trophy points earned BEFORE this add-on was updated 2.1.0, will not be reflective in the ranking.
No, I misspoke, I forgot that I made the rebuild recalculate the actions and record a timestamp in a new table for all historical actions.

Yes, all cumulative trophy points are properly accounted for as far back as you go. Based on this setting which defaults to "All Years"

Screenshot 2025-07-28 at 10.32.53 PM.webp

But again, if you have a very large forum, I'd recommend setting that to something reasonable.

Note, this addon does not interfere with cumulative trophy points that already existed, or exist after... the rebuild just rebuilds it's own cumulative trophy's as well as adding an action date for all previous cumulative trophy's (to enable TCM to know what month actions took place in for awarding it's own cumulative trophy's).
 
I appreciate you adding that in. I don't think it's working correctly though, because If I go back a month, it won't update the points on the ranking.

Current month does update though, and I think I found a bug. Every time the cumulative trophy points cache is rebuilt, the trophy points in the rankings goes up by 20, even if the user doesn't have any more points.

Screenshot 2025-07-28 at 21-35-46 Top monthly contributors altBoards.webp
 
Those points have nothing to do with my add-on. That's native XenForo. I don't even think TrophyEssentials updates that. You'll have to check, but it's probably just the historical milestone trophy points stored directly in xf_user.trophy_points field.

And yes, if you run my rebuild and it awards any user the "Top Monthly Postser" milestone trophy (#1, #2 or #3), then yes, that value for the given user will increase.

I'll admit, showing "messages, reactions, points, referrals" is misleading depending what metric you've chosen... but that dislpay shows the same irregardless of the metric chosen.

This add-on isn't really about the "members list" page. I know you're desperate for a "leaderboard" L)
 
Last edited:
I'm sorry but those points ARE the cumulative trophy points + default trophy points.

Screenshot 2025-07-28 at 21-43-33 Trophies awarded to Matthew altBoards.webp
See total trophy points are 807? Same as the above post.
 
Perfect, then if the user gets ether of a TCM Milestone Trophy, or a Cumulative Trophy, the points will be added to that.

Screenshot 2025-07-28 at 10.49.29 PM.webp

Looks like you were a top poster once in a previous month.
 
Perfect, then if the user gets ether of a TCM Milestone Trophy, or a Cumulative Trophy, the points will be added to that.

View attachment 325346

I have no problems with the Top Contributor trophy. Never once brought that up.

I'm talking about the ranking. The ranking is not properly picking up the cumulative trophy points earned from each member.

Screenshot 2025-07-28 at 21-52-52 Top monthly contributors altBoards.webp

I have more trophy points than what is shown on the list during the current month (I counted) and other members have less trophy points than what is shown in the list.
 
I think you're right actuall @Matt C., trophy points seems amiss. I would recommend switching to one of the hybrid methods for now.

Note, the scoring metric, as confusing as it is, is completely unrelated to "cumulative trophy's" and "milestone trophy's".

I'm tempted to remove using "trophy points" as a scoring metric altogether.
 
I have more trophy points than what is shown on the list during the current month (I counted) and other members have less trophy points than what is shown in the list.
I hear you, promise. I think you're right. I think it's a "row multiplication" issue with the trophy points scoring. I'll look at it for a bit, but if no headway I'm heading to bed :)

Switch scoring metrics for now, it'll save you getting frustrated.

I'll let you know when it's resolved.
 
I think i know what the issue is; in order to be highly performant and efficient, I made every single scoring metric sort records and only retrieve up up to a customer set limit set in the options. It works perfectly.

Sadly, for trophy points, every single action from all users needs to be evaluated. Therefore, I really do think I need to remove trophy points as a scoring method entirely. It's just completely inefficient for anything that needs to be duration/time-span based.

But I will see what's possible - hopefully it's workable and can just recommend a longer cache duration or something.
 
Therefore, I really do think I need to remove trophy points as a scoring method entirely. It's just completely inefficient for anything that needs to be duration/time-span based.

That'd be a shame, because that's frankly the only reason I bought your add-on. Hopefully you can get it to work.
 
  • XF\Db\Exception: MySQL statement prepare error [1054]: Unknown column 't.node_id' in 'where clause' in src/XF/Db/AbstractStatement.php at line 230
    1. XF\Db\AbstractStatement->getException() in src/XF/Db/Mysqli/Statement.php at line 207
    2. XF\Db\Mysqli\Statement->getException() in src/XF/Db/Mysqli/Statement.php at line 43
    3. XF\Db\Mysqli\Statement->prepare() in src/XF/Db/Mysqli/Statement.php at line 61
    4. XF\Db\Mysqli\Statement->execute() in src/XF/Db/AbstractAdapter.php at line 96
    5. XF\Db\AbstractAdapter->query() in src/XF/Db/AbstractAdapter.php at line 152
    6. XF\Db\AbstractAdapter->fetchOne() in src/addons/Wutime/TopContributors/Pub/Controller/TopContributors.php at line 82
    7. Wutime\TopContributors\Pub\Controller\TopContributors->actionIndex() in src/XF/Mvc/Dispatcher.php at line 362
    8. XF\Mvc\Dispatcher->dispatchClass() in src/XF/Mvc/Dispatcher.php at line 264
    9. XF\Mvc\Dispatcher->dispatchFromMatch() in src/XF/Mvc/Dispatcher.php at line 121
    10. XF\Mvc\Dispatcher->dispatchLoop() in src/XF/Mvc/Dispatcher.php at line 63
    11. XF\Mvc\Dispatcher->run() in src/XF/App.php at line 2826
    12. XF\App->run() in src/XF.php at line 806
    13. XF::runApp() in index.php at line 23
@ members/wutc/ when Hybrid: Thread Replies Received + Posts Made enabled. Also ignore username function not working either as well as ignore group. Will need to revert.

Code:
[HEADING=2]Stack trace[/HEADING]
SELECT COUNT(*) AS total
                FROM (
                    SELECT sub.user_id, (sub.thread_count * 2 + sub.post_count * 1) AS points_value
                    FROM (SELECT p.user_id, COUNT(DISTINCT p.thread_id) AS thread_count, COUNT(p.post_id) AS post_count FROM xf_post p WHERE p.message_state = 'visible' AND p.post_date >= 1751328000 AND p.post_date < 1753878546 AND EXISTS (SELECT 1 FROM xf_thread t WHERE t.thread_id = p.thread_id AND t.discussion_state = 'visible' AND t.post_date >= 1751328000 AND t.post_date < 1753878546) GROUP BY p.user_id) sub
                    INNER JOIN xf_user u ON (sub.user_id = u.user_id) WHERE u.user_state = 'valid' AND u.is_banned = 0 AND t.node_id NOT IN ('71', '597', '599', '598', '621', '600', '289', '61', '442', '313', '649', '21', '83', '166') AND u.user_id NOT IN (2000163981) GROUP BY sub.user_id HAVING points_value > 0 ORDER BY points_value DESC, sub.user_id DESC LIMIT 200
                ) AS limited_users
------------

#0 src/XF/Db/Mysqli/Statement.php(207): XF\Db\AbstractStatement->getException('MySQL statement...', 1054, '42S22')
#1 src/XF/Db/Mysqli/Statement.php(43): XF\Db\Mysqli\Statement->getException('MySQL statement...', 1054, '42S22')
#2 src/XF/Db/Mysqli/Statement.php(61): XF\Db\Mysqli\Statement->prepare()
#3 src/XF/Db/AbstractAdapter.php(96): XF\Db\Mysqli\Statement->execute()
#4 src/XF/Db/AbstractAdapter.php(152): XF\Db\AbstractAdapter->query('SELECT COUNT(*)...', Array)
#5 src/addons/Wutime/TopContributors/Pub/Controller/TopContributors.php(82): XF\Db\AbstractAdapter->fetchOne('SELECT COUNT(*)...')
#6 src/XF/Mvc/Dispatcher.php(362): Wutime\TopContributors\Pub\Controller\TopContributors->actionIndex(Object(XF\Mvc\ParameterBag))
#7 src/XF/Mvc/Dispatcher.php(264): XF\Mvc\Dispatcher->dispatchClass('Wutime\\TopContr...', 'Index', Object(XF\Mvc\RouteMatch), Object(Wutime\TopContributors\Pub\Controller\TopContributors), NULL)
#8 src/XF/Mvc/Dispatcher.php(121): XF\Mvc\Dispatcher->dispatchFromMatch(Object(XF\Mvc\RouteMatch), Object(Wutime\TopContributors\Pub\Controller\TopContributors), NULL)
#9 src/XF/Mvc/Dispatcher.php(63): XF\Mvc\Dispatcher->dispatchLoop(Object(XF\Mvc\RouteMatch))
#10 src/XF/App.php(2826): XF\Mvc\Dispatcher->run()
#11 src/XF.php(806): XF\App->run()
#12 index.php(23): XF::runApp('XF\\Pub\\App')
#13 {main}
 
Last edited:
Wutime updated Top Contributors of the Month with a new update entry:

v2.1.1

  • New: All scoring metrics are now "build your own", just like subway toppings
  • New: Metric for "reactions given" and "reactions received"
  • New: All metrics now have independent weights
  • New: Metric for "milestone trophies"
  • New: Thread replies received can be limited to only replies received from threads created within the month
  • Update: Removed "Trophy points" option as a scoring metric (read the discussion thread for the reasoning behind this change)
  • Optimization...

Read the rest of this update entry...
 
Hey, wanted to let you know that after a good nights sleep and some careful consideration I've decided:
  • Scoring metric "Trophy points" will be removed from the add-on until such time that the Trophy Essential add-on supports an "award date" of its own
The add-on will continue to support Trophy Essentials (TE) in the sense that Top Contributors of the Month (TCM) will still support contributor trophies to be awarded as both Milestone trophies and Cumulative trophies.

I realize that probably, TE will never have a date associated with the individual actions, and for good reason. It would add a significant amount of storage, increasing over time. It would require a row in the database for every single action taking place, with a row for every reaction, like given, post made, thread created, as they occur. Each action would require a timestamp, instead of a simple column being incremented (the method used currently).

For the reason above, TE will likely never support an award date for cumulative trophies. Therefore TCM cannot support "trophy points" in a leaderboard fashion for anything other than milestone trophies, which makes the scoring metric "trophy points" too limited to consider using as a scoring metric alone.

Given TE is used on large forums, their decision to omit an award date makes sense; the storage requirements over time would be too significant.

However, given the above limitation I have made the entire "scoring metric" a choose your own adventure as shown in the v2.1.1 screenshot of options below:

Screenshot 2025-07-30 at 9.31.21 PM.webp
 
Back
Top Bottom