Log in

View Full Version : Updating Counters Automatically


dancue
04-12-2008, 12:36 PM
Is there any way to set up a cron job to automatically update a certain counter?

The one I'm interested in is the "Delete Duplicate Threads". I'd like to also only do this for a certain forum. Is it possible?

Lynne
04-12-2008, 03:10 PM
Sure, you can write a cron job to run any query.

Here's a basic template for your cron job:

<?php

// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

if (!is_object($vbulletin->db))
{
exit;
}

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


Your query would go here.

?>

dancue
04-12-2008, 09:01 PM
So all I would do is enter a query where it says "your query would go here."?

Excuse me if I still sound like a noob, but what do I put there?

Lynne
04-12-2008, 09:52 PM
Basically, yeah, and then upload the page to your cron folder and make a new cron job to run that page at a set time. However, I would run it on a test site before putting it on a real site.

sdsvtdriver
04-13-2008, 12:21 PM
I'm interested in this too. How does one find what query is used when this is invoked manually in the maintenance area?

Lynne
04-13-2008, 01:58 PM
You look at the source code in the page and see what form action is being taken when you click on the Submit button. Then, open that page in an editor and see what query they are calling.

TrevsRevenge
04-18-2008, 07:32 PM
First off Lynne thank you for helping out in this matter here is the code I have would this be correct.

<?php

// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

if (!is_object($vbulletin->db))
{
exit;
}

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

// ###################### Start build search index #######################
if ($_REQUEST['do'] == 'buildpostindex')
{
$vbulletin->input->clean_array_gpc('r', array(
'doprocess' => TYPE_UINT,
'autoredirect' => TYPE_BOOL,
'totalposts' => TYPE_UINT,
));

$starttime = microtime();

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

echo '<p>' . $vbphrase['building_search_index'] . ' ';
vbflush();

$foruminfo = array('indexposts' => 1);
$firstpost = array();

$posts = $db->query_read("
SELECT postid, post.title, post.pagetext, post.threadid, thread.title AS threadtitle
FROM " . TABLE_PREFIX . "post AS post
INNER JOIN " . TABLE_PREFIX . "thread AS thread ON(thread.threadid = post.threadid)
INNER JOIN " . TABLE_PREFIX . "forum AS forum ON(forum.forumid = thread.forumid)
WHERE (forum.options & " . $vbulletin->bf_misc_forumoptions['indexposts'] . ")
AND post.postid >= " . $vbulletin->GPC['startat'] . "
ORDER BY post.postid
LIMIT " . $vbulletin->GPC['perpage']
);

echo $vbphrase['posts_queried'] . '</p><p>';
vbflush();

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

while ($post = $db->fetch_array($posts) AND (!$vbulletin->GPC['doprocess'] OR $vbulletin->GPC['totalposts'] < $vbulletin->GPC['doprocess']))
{
$vbulletin->GPC['totalposts']++;

echo construct_phrase($vbphrase['processing_x'], $post['postid']) . ' ... ';
vbflush();

if (empty($firstpost["$post[threadid]"]))
{
echo '<i>' . $vbphrase['querying_first_post_of_thread'] . '</i> ';
vbflush();
$getfirstpost = $db->query_first("
SELECT MIN(postid) AS postid
FROM " . TABLE_PREFIX . "post
WHERE threadid = $post[threadid]
");
$firstpost["$post[threadid]"] = $getfirstpost['postid'];
}

build_post_index($post['postid'], $foruminfo, iif($post['postid'] == $firstpost["$post[threadid]"], 1, 0), $post);

echo $vbphrase['done'] . "<br />\n";
vbflush();

$finishat = ($post['postid'] > $finishat ? $post['postid'] : $finishat);
}

$finishat++;

require_once(DIR . '/includes/functions_misc.php');
$pagetime = vb_number_format(fetch_microtime_difference($start time), 2);
echo '</p><p><b>' . construct_phrase($vbphrase['processing_time_x'], $pagetime) . '<br />' . construct_phrase($vbphrase['total_posts_processed_x'], $vbulletin->GPC['totalposts']) . '</b></p>';
vbflush();

if (($vbulletin->GPC['totalposts'] < $vbulletin->GPC['doprocess'] OR !$vbulletin->GPC['doprocess']) AND $checkmore = $db->query_first("SELECT postid FROM " . TABLE_PREFIX . "post WHERE postid >= $finishat LIMIT 1"))
{
if ($vbulletin->GPC['autoredirect'] == 1)
{
print_cp_redirect("misc.php?" . $vbulletin->session->vars['sessionurl'] . "do=buildpostindex&startat=$finishat&pp=" . $vbulletin->GPC['perpage'] . "&autoredirect=" . $vbulletin->GPC['autoredirect'] . "&doprocess=" . $vbulletin->GPC['doprocess'] . "&totalposts=" . $vbulletin->GPC['totalposts']);
}
echo "<p><a href=\"misc.php?" . $vbulletin->session->vars['sessionurl'] . "do=buildpostindex&amp;startat=$finishat&amp;pp=" . $vbulletin->GPC['perpage'] . "&amp;autoredirect=" . $vbulletin->GPC['autoredirect'] . "&amp;doprocess=" . $vbulletin->GPC['doprocess'] . "&amp;totalposts=" . $vbulletin->GPC['totalposts'] . "\">" . $vbphrase['click_here_to_continue_processing'] . "</a></p>";
}
else
{
define('CP_REDIRECT', 'misc.php');
print_stop_message('rebuilt_search_index_successfu lly');
}
}

?>