vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB3 General Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=111)
-   -   How to update User Titles and Ranks automatically? (https://vborg.vbsupport.ru/showthread.php?t=237133)

xash 02-28-2010 09:04 PM

How to update User Titles and Ranks automatically?
 
Ranks are not updating automatically for my users. Is there a way to automatically update user titles and ranks? I don't want to manually run Admin CP > Maintenance > Update Counters > Update User Titles and Ranks each time.

Does anyone know if this can be run as a cron job or any mod that does this?

I'm currently using vB 3.7.3. Do other versions of vBulletin have the capability to run this automatically? How about vB 3.8.4 or vB 4.0.2?

I searched both vBulletin.com and vBulletin.org, but the only responses to "ranks are not updating" seem to be "then run Admin CP > Maintenance > Update Counters > Update User Titles and Ranks". I'm looking for a way to do this automatically.

Thanks.

Marco van Herwaarden 03-01-2010 07:59 AM

Do any of your Scheduled Tasks run?

xash 03-01-2010 08:15 AM

Marco, thanks for your response.

Yes, schedule tasks do run, but I don't believe any of them updates counters. The schedule tasks that currently run include promotions.php, threadviews.php, subscriptions.php, etc.

What did you have in mind?

--------------- Added [DATE]1267438686[/DATE] at [TIME]1267438686[/TIME] ---------------

ETA: If you know of a PHP script that can do this (update titles and ranks), please let me know and I'll add a new scheduled task using the script.

Marco van Herwaarden 03-01-2010 08:18 AM

Then they should be updated automatically.

To troubleshoot this, please remove any hacks and disable your plugins, then see if you still have this problem.
Note: To temporarily disable the plugin system, edit config.php and add this line right under <?php

define('DISABLE_HOOKS', true);

If so, reupload all the original vB non-image files (except install.php). Make sure you upload these in ASCII format and overwrite the ones on the server.

xash 03-01-2010 08:21 AM

Quote:

Originally Posted by Marco van Herwaarden (Post 1994329)
Then they should be updated automatically.

None of the scheduled task scripts updates counters. Do you know which .php script updates User Titles and Ranks?

Marco van Herwaarden 03-01-2010 08:32 AM

promotion.php for sure does update ranks.

xash 03-01-2010 09:08 AM

Aah, I see what you mean now. It makes sense that promotion.php should update ranks. Here's the thing though, I'm using Ranks differently.

Users subscribe to a Rank, by purchasing a Paid Subscription.
The subscription script adds them to a new rank (through the use of an additional user group), e.g. Paid Rank
When they purchase the Paid Rank subscription, they are automatically given the rank of Paid Rank and their new Rank is displayed correctly.
However - and here's where I'm facing the issue - when their subscription period ends, the rank is not removed. Their profile and posts still show Paid Rank. promotions.php does not update (remove) users from Paid Rank after expiry of their Paid Rank subscription.

What works for now is either:

a. Manually go to Admin CP, user's profile, and just hit save, or
b. Manually run "Update user titles and ranks"

I'm looking for a script that can essentially automatically do what "Update User Titles and Ranks" does, and run it every night, instead of running it manually.

The obvious response is: "You're doing it wrong, you should be using User Titles for this". But I need to use Ranks for this, because users are essentially purchasing Custom Titles using a Paid Subscription, and their original User Title is becoming their new Rank, so basically someone who is:

Username
Premium Member

can buy a Paid Subscription for Custom Title and become:

Username
Custom Title
Premium Member

(where Premium Member is the Rank)

So, my question is: Is there a script that does what "Update User Titles and Ranks" does? Or is there another approach that can solve this issue?

Thanks.

Marco van Herwaarden 03-01-2010 09:37 AM

You're doing it wrong, you should be using User Titles for this. ;)

But i have just tested the following:
- Created 2 ranks.
-- 1 active for the 'Registered users' usergroup, minimum posts set to 1. ("Reg Rank")
-- 1 active only for the 'Moderators' usergroup (only do this on a test forum :D), minimum posts =1 ("Mod Rank")
- Created test user with 2 threads
- While test user still in Registered Users usergroup, he is showing the "Reg Rank"
- Created a subscription that will change the usergroup of the user to Moderator (again, only do this on a test board).
- Added the user manually to the subscription from the AdminCP.
- His userrank now changed to "Mod Rank". No need to update counters or anything.

So most likely you have a modification installed that is interfering with the normal behaviour.

xash 03-01-2010 10:22 AM

Quote:

Originally Posted by Marco van Herwaarden (Post 1994366)
You're doing it wrong, you should be using User Titles for this.

:D

Quote:

Added the user manually to the subscription from the AdminCP.
- His userrank now changed to "Mod Rank". No need to update counters or anything.
Great. You're close, but you've only done the first half.

Now, go to the user profile (in Admin CP) of the test user that moved from rank "Reg Rank" to "Mod Rank", and edit the active Paid Subscription for this user. Set it to Active: No and click Save. (Edited To Add: This simulates expiry of Paid Subscription)

This should make the user go back from Mod Rank to Reg Rank, correct? But this doesn't get updated. You can confirm this by doing the above with your test user and looking at the user's profile (regular view from forum). Note that you will still see Mod Rank displayed for your test user.

But if you go back to the test user's profile in Admin CP and just click Save, the test user's rank will now show as Reg Rank (you can again confirm by looking at the regular forum view of the user's profile). This is a manual update to the rank. I want to automate this.

You can repeat the test by:

Setting the subscription back to Active: Yes (check rank, it should be Mod Rank)
Then setting the subscription to Active: No (check rank, it should be Reg Rank but it is still Mod Rank)
Now just go back to the user's profile (Admin CP view) and click Save (check rank, it now correctly updates to Reg Rank)
Repeat if necessary to check again. Same thing happens each time.

Thanks for your efforts. Let me know if you get any ideas after you test the above.

Marco van Herwaarden 03-01-2010 10:45 AM

Quote:

Now, go to the user profile (in Admin CP) of the test user that moved from rank "Reg Rank" to "Mod Rank", and edit the active Paid Subscription for this user. Set it to Active: No and click Save. (Edited To Add: This simulates expiry of Paid Subscription)
How do you edit/disable a paid subscription from the user profile in the AdminCP, there is no option for that.

I have just again tested this, and when i enable the subscription the usergroup and rank are updated, if i disable the paid subscription, both the usergroup and rank revert back.

PS Did you set these ranks to act only on a specific usergroup or did you leave it to all usergroups?

xash 03-01-2010 09:57 PM

Quote:

Originally Posted by Marco van Herwaarden (Post 1994394)
How do you edit/disable a paid subscription from the user profile in the AdminCP, there is no option for that.

In the user profile, on the right side, it shows "Paid Subscriptions" below the "Usergroup Options" widget and above the "Reputation" widget. You can Edit and set subscriptions Active: No (to disable) or Active: Yes (to enable). I'm using vB 3.7.3.

Quote:

I have just again tested this, and when i enable the subscription the usergroup and rank are updated, if i disable the paid subscription, both the usergroup and rank revert back.
I'm using an additional (not primary) usergroup to set ranks. On subscription, the user gets added to an additional usergroup which gives them the rank (as set in Rank Manager). On subscription end, they get removed from the additional usergroup (note that they remain in the same primary usergroup).

What's probably happening in your case is that a move to a different primary usergroup is causing the refresh. Try it with an additonal usergroup instead and see if it updates.

Quote:

PS Did you set these ranks to act only on a specific usergroup or did you leave it to all usergroups?
Only on a specific usergroup, and within that only users from that usergroup who purchase a "Paid Rank" subscription. I know, it's complicated. But that's why I'm posting here to get help :)

Thanks a lot for your efforts, Marco. Appreciate you testing it out.

See Post #4 in this thread:

https://vborg.vbsupport.ru/showthread.php?t=130545

I'm looking for a .php script like that that I could run as a scheduled task. Preferably with options to limit the updates to a specific usergroup, rather than all members.

Marco van Herwaarden 03-02-2010 08:52 AM

Quote:

Originally Posted by xash (Post 1994774)
In the user profile, on the right side, it shows "Paid Subscriptions" below the "Usergroup Options" widget and above the "Reputation" widget. You can Edit and set subscriptions Active: No (to disable) or Active: Yes (to enable). I'm using vB 3.7.3.

I forget that there was also this option on the User page in the AdminCP, but that is the same as from the Subscription Manager.

I have tested it again now on a clean 3.7.3 testboard, and it is still working as expected. I also tested it now with a secondary usergroup in teh subscription and still working as expected. So my guess is that 1 of your modifications is causing the problem.

xash 03-02-2010 09:45 AM

Quote:

Originally Posted by Marco van Herwaarden (Post 1995098)
I have tested it again now on a clean 3.7.3 testboard, and it is still working as expected. I also tested it now with a secondary usergroup in teh subscription and still working as expected.

Thanks for the excellent support, Marco. It's great to know that it works as expected on your 3.7.3 test server.

Quote:

So my guess is that 1 of your modifications is causing the problem.
I have only one plugin (no other hacks, template edits or anything else) installed. I disabled plugins/hooks, but I still see the same behavior on my board.

I just tested it with Primary vs. Secondary Usergroups. In the case of the Primary Usergroup, it works fine and updates the rank even at the end of the subscription (when the user is moved back to the original primary usergroup). In the case of the Secondary Usergroup, it doesn't update the rank on the user's profile page (regular forum view). I have to manually Save the user profile (in Admin CP) to refresh the rank display on the user's profile page (regular forum view).

I guess there's nothing more you can do to help at this point. You've already tested it out for me, and it works on your test server. It must be something else conflicting on my server, but I guess I'll just use the manual route or try to use a Primary group move to refresh the rank.

Thanks a lot again for all your help!

Marco van Herwaarden 03-02-2010 10:07 AM

If you have a test installation on your server, then you may PM me the details and amdin login and i will have a look for you.

If you are sure that this is not caused by a modification, then you can also choose to open a support ticket.

BadgerDog 10-15-2010 07:51 PM

Quote:

Originally Posted by xash (Post 1995118)
I have to manually Save the user profile (in Admin CP) to refresh the rank display on the user's profile page (regular forum view).

Sorry for bumping an OLD thread, but I've had the same problem running v4.04pl1. This problem has existed since at least v3.6 that I can remember.

I either have to SAVE the user record in AdminCP or run the "update user titles and ranks" manually to get the rank graphic for the member to begin appearing in any of his posts (postbit_legacy).

It's also messed up in reverse. If a user's subscription expires, vBulletin correctly changes the usergroup, but the rank graphic associated with the expired usergroup continues to appear in postbit etc, until I manually SAVE the user record in AdminCP or run the "update user titles and ranks" manually to get the now expired rank graphic for the member to disappear.

I came here and searched the forum for a simple way of having the "update user titles and ranks" job run nightly as a maintenance function, as I'm really getting tired of having to go in and SAVE every user record after they get a new usergroup checked off, or their subscription expires.

Can anyone tell me how to add this job as an overnight run, or provide me a fix for this long standing bug?

Thanks in advance ... :)

Regards,
Doug

brandondrury 01-20-2011 08:30 AM

I'm in the same boat.

Actually, when upgrading the user to the premium usergroup in 3.8.6, it worked instantly. Using the same upgrade script (even with define('DISABLE_HOOKS', true);) I have to run the Update User Titles script.

I've considered tearing out the code used for updating users and running it for just a single instance, but that sounds like trouble (at least with me doing it).

I'm not sure what changed from vb3.8 to vb4.1.1, but then again, I've been saying that all month. :D

DirtRider 04-16-2012 09:08 AM

Well I now have the same issue and the funny thing when I do it all manually it will work the way it should removing the rank and badge associated with it. However when subscription does it only the additional user group will be removed leaving the rank and badge. I cannot see how this is supposed to be like this as you have associated that rank with that user group so if the user group is taken away the rank and badge should not be available as well

joshskeety 08-04-2012 01:10 AM

Quote:

Originally Posted by DirtRider (Post 2320553)
Well I now have the same issue and the funny thing when I do it all manually it will work the way it should removing the rank and badge associated with it. However when subscription does it only the additional user group will be removed leaving the rank and badge. I cannot see how this is supposed to be like this as you have associated that rank with that user group so if the user group is taken away the rank and badge should not be available as well

Same issue here. This can't be expected behavior.

gsk8 09-10-2012 02:39 AM

I would also like to update the User Titles via a scheduled task. VB can't help and sent me here.

I have a hack that auto-bans spammers, but I still have to update the counters manually in order for the "banned" to show in the User Title.....

Been trying to figure this out off and on for a few years :)

Smitty 09-03-2013 06:42 PM

Quote:

Originally Posted by gsk8 (Post 2364163)
<snip> Been trying to figure this out off and on for a few years :)

Same here. And running the update manually with over 250,000 registered people takes a *long* time.

TheLastSuperman 09-03-2013 11:36 PM

Quote:

Originally Posted by gsk8 (Post 2364163)
I would also like to update the User Titles via a scheduled task. VB can't help and sent me here.

I have a hack that auto-bans spammers, but I still have to update the counters manually in order for the "banned" to show in the User Title.....

Been trying to figure this out off and on for a few years :)

Quote:

Originally Posted by Smitty (Post 2442956)
Same here. And running the update manually with over 250,000 registered people takes a *long* time.

What mod? Please link me to it ;).

For now try editing a cron job and by that I mean the file for instance one related to a scheduled task that runs at least daily. Where can you add the code? Ensure your scheduled tasks are enabled then edit the file cleanup.php OR cleanup2.php OR dailycleanup.php which is located in the /includes/cron/ folder and add the query just below:

PHP Code:

// ########################################################################
// ######################### START MAIN SCRIPT ############################
// ######################################################################## 


PHP Code:

// Update usertitles for banned members
$vbulletin->db->query_write("UPDATE " TABLE_PREFIX "user
SET usertitle = 'Banned'
WHERE usergroupid = '8' AND usertitle != 'Banned'
"
);

// Update user ranks to none for banned members
$vbulletin->db->query_write("UPDATE " TABLE_PREFIX "user AS user
LEFT JOIN " 
TABLE_PREFIX "usertextfield AS usertextfield
ON user.userid = usertextfield.userid
SET usertextfield.rank = NULL
WHERE usergroupid = '8'
"
); 

If you utilize cleanup.php, its the file ran when the Hourly Cleanup scheduled task runs, so with that being said the username update would take place every hour. If you have quite a few members as some noted, you may wish to do this once per day and would then instead edit the file dailycleanup.php instead, now the user title update takes place once per day - less queries and less often unless updating something live is a good rule of thumb.

Enjoy!


Note: Should delete entries in ranks table using query similar to the below as well HOWEVER this sets usertitle to guest and removes user info from post and requires fix broken user profiles to be used so just an example query for now until I have time to adjust it properly i.e. insert into instead of delete:

PHP Code:

// Delete the entry in ranks table for the banned members
$vbulletin->db->query_write("DELETE " TABLE_PREFIX "usertextfield
FROM " 
TABLE_PREFIX "usertextfield LEFT JOIN " TABLE_PREFIX "user
ON usertextfield.userid = user.userid
WHERE usertextfield.rank IS NULL
"
); 

Edit: In all honesty using the data manager via a custom script would be best in a situation like this versus queries running via cron jobs just so your aware, the above queries will work though (don't use the bottom one, that deletes entries it was scratch code but works just throws the data manager for a loop per say).

Smitty 09-08-2013 03:59 PM

Thanks for the tip.

joeychgo 05-20-2014 01:53 AM

What about updating rank badges when paid subscriptions expire?


All times are GMT. The time now is 01: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.01863 seconds
  • Memory Usage 1,824KB
  • 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
  • (3)bbcode_php_printable
  • (15)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (23)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