vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB5 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=263)
-   -   Creating a Scheduled Task: Update User Titles and Ranks (https://vborg.vbsupport.ru/showthread.php?t=309761)

haloamor 03-21-2014 04:26 PM

Creating a Scheduled Task: Update User Titles and Ranks
 
Anybody know how I can go about creating a scheduled task to update user titles and ranks?

Thanks!

Lynne 03-21-2014 07:11 PM

You can probably just copy one of the other tasks (in /core/includes/cron) and just delete out the middle and put in the same queries from the Update User Titles and Ranks file (/core/admincp/misc.php). Then set up a task and point to that file.

haloamor 03-22-2014 12:16 AM

Thanks Lynne for the reply. I'm lost there.
I can't do it at the add new scheduled task area?

I have to write my own php?

Lynne 03-22-2014 02:55 AM

No. You need to write the scheduled task first before you add it.

(You posted in the programming help forum, so I assume you know how to program?)

haloamor 03-23-2014 03:15 PM

Let's assume I don't.
Would you be able to help?

Thanks so much!

Lynne 03-23-2014 04:54 PM

I'd suggest taking the /cron/digestweekly.php file and renaming it. Then remove the require_once line and the exec_digest(3); line. Then you should be able to fill it in with the stuff from the misc.php file. Have you looked at that file and found the section that updates the titles and ranks?

adwade 04-05-2015 03:06 PM

So does the update user titles and ranks function already get run once-a-week, automatically?(i.e. via digestweekly.php)

I'm no programmer either, but THANK YOU Lynne for your posts! I might be able to cobble something together from all that information.

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

I recently installed Paul M's Move inactive users to new usergroup MOD and am looking for a way to keep my user titles accurate each day, after his mod runs nightly.

Is this code section below what needs to be copied/pasted into a new php file, for a new cron job?

Also, since I only want to run the update user titles and ranks function is there anything else in the code below I need to remove?

Code:

// ###################### Start update user #######################
if ($_REQUEST['do'] == 'updateuser')
{
        require_once(DIR . '/includes/functions_infractions.php');

        if (empty($vbulletin->GPC['perpage']))
        {
                $vbulletin->GPC['perpage'] = 1000;
        }

        echo '<p>' . $vbphrase['updating_user_info'] . '</p>';
        $tmp_usergroup_cache = array();

        $infractiongroups = array();
        $groups = $vbulletin->db->query_read("
                SELECT usergroupid, orusergroupid, pointlevel, override
                FROM " . TABLE_PREFIX . "infractiongroup
                ORDER BY pointlevel
        ");
        while ($group = $vbulletin->db->fetch_array($groups))
        {
                $infractiongroups["$group[usergroupid]"]["$group[pointlevel]"][] = array(
                        'orusergroupid' => $group['orusergroupid'],
                        'override'      => $group['override'],
                );
        }

        $users = $db->query_read("
                SELECT user.*, usertextfield.rank,
                IF(user.displaygroupid=0, user.usergroupid, user.displaygroupid) AS displaygroupid
                FROM " . TABLE_PREFIX . "user AS user
                LEFT JOIN " . TABLE_PREFIX . "usertextfield AS usertextfield USING (userid)
                WHERE user.userid >= " . $vbulletin->GPC['startat'] . "
                ORDER BY user.userid
                LIMIT " . $vbulletin->GPC['perpage']
        );

        $finishat = $vbulletin->GPC['startat'];

        while ($user = $db->fetch_array($users))
        {
                $userdm =& datamanager_init('User', $vbulletin, ERRTYPE_CP);
                $userdm->set_existing($user);
                cache_permissions($user, false);

                $userdm->set_usertitle(
                        ($user['customtitle'] ? $user['usertitle'] : ''),
                        false,
                        $vbulletin->usergroupcache["$user[displaygroupid]"],
                        ($user['customtitle'] == 1 OR $user['permissions']['genericpermissions'] & $vbulletin->bf_ugp_genericpermissions['canusecustomtitle']) ? true : false,
                        ($user['customtitle'] == 1) ? true : false
                );

                if ($lastpost = $db->query_first("SELECT MAX(dateline) AS dateline FROM " . TABLE_PREFIX . "post WHERE userid = $user[userid]"))
                {
                        $lastpost['dateline'] = intval($lastpost['dateline']);
                }
                else
                {
                        $lastpost['dateline'] = 0;
                }

                $infractioninfo = fetch_infraction_groups($infractiongroups, $user['userid'], $user['ipoints'], $user['usergroupid']);
                $userdm->set('infractiongroupids', $infractioninfo['infractiongroupids']);
                $userdm->set('infractiongroupid', $infractioninfo['infractiongroupid']);

                $userdm->set('posts', $user['posts']); // This will activate the rank update
                $userdm->set('lastpost', $lastpost['dateline']);
                $userdm->save();
                unset($userdm);

                echo construct_phrase($vbphrase['processing_x'], $user['userid']) . "<br />\n";
                vbflush();

                $finishat = ($user['userid'] > $finishat ? $user['userid'] : $finishat);
        }

        $finishat++;

        if ($checkmore = $db->query_first("SELECT userid FROM " . TABLE_PREFIX . "user WHERE userid >= $finishat LIMIT 1"))
        {
                print_cp_redirect("misc.php?" . $vbulletin->session->vars['sessionurl'] . "do=updateuser&startat=$finishat&pp=" . $vbulletin->GPC['perpage']);
                echo "<p><a href=\"misc.php?" . $vbulletin->session->vars['sessionurl'] . "do=updateuser&amp;startat=$finishat&amp;pp=" . $vbulletin->GPC['perpage'] . "\">" . $vbphrase['click_here_to_continue_processing'] . "</a></p>";
        }
        else
        {
                define('CP_REDIRECT', 'misc.php');
                print_stop_message('updated_user_titles_successfully');
        }
}
// ###################### Finish update user #######################



All times are GMT. The time now is 10:26 AM.

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.01112 seconds
  • Memory Usage 1,751KB
  • 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
  • (1)bbcode_code_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (7)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