<?php
/**
* MyBB 1.6
* Copyright 2010 MyBB Group, All Rights Reserved
*
* Website: http://mybb.com
* License: http://mybb.com/about/license
*
* $Id$
*/
function task_delayedmoderation($task)
{
global $db, $lang;
require_once MYBB_ROOT."inc/class_moderation.php";
$moderation = new Moderation;
require_once MYBB_ROOT."inc/class_custommoderation.php";
$custommod = new CustomModeration;
// Iterate through all our delayed moderation actions
$query = $db->simple_select("delayedmoderation", "*", "delaydateline <= '".TIME_NOW."'");
while($delayedmoderation = $db->fetch_array($query))
{
$tids = explode(',', $delayedmoderation['tids']);
$input = unserialize($delayedmoderation['inputs']);
if(my_strpos($delayedmoderation['type'], "modtool") !== false)
{
list(, $custom_id) = explode('_', $delayedmoderation['type'], 2);
$custommod->execute($custom_id, $tids);
}
else
{
switch($delayedmoderation['type'])
{
case "openclosethread":
$closed_tids = $open_tids = array();
$query2 = $db->simple_select("threads", "tid,closed", "tid IN({$delayedmoderation['tids']})");
while($thread = $db->fetch_array($query2))
{
if($thread['closed'] == 1)
{
$closed_tids[] = $thread['tid'];
}
else
{
$open_tids[] = $thread['tid'];
}
}
if(!empty($closed_tids))
{
$moderation->open_threads($closed_tids);
}
if(!empty($open_tids))
{
$moderation->close_threads($open_tids);
}
break;
case "deletethread":
foreach($tids as $tid)
{
$moderation->delete_thread($tid);
}
break;
case "move":
foreach($tids as $tid)
{
$moderation->move_thread($tid, $input['new_forum']);
}
break;
case "stick":
$unstuck_tids = $stuck_tids = array();
$query2 = $db->simple_select("threads", "tid,sticky", "tid IN({$delayedmoderation['tids']})");
while($thread = $db->fetch_array($query2))
{
if($thread['sticky'] == 1)
{
$stuck_tids[] = $thread['tid'];
}
else
{
$unstuck_tids[] = $thread['tid'];
}
}
if(!empty($stuck_tids))
{
$moderation->unstick_threads($stuck_tids);
}
if(!empty($unstuck_tids))
{
$moderation->stick_threads($unstuck_tids);
}
break;
case "merge":
if(count($tids) != 1)
{
continue;
}
// explode at # sign in a url (indicates a name reference) and reassign to the url
$realurl = explode("#", $input['threadurl']);
$input['threadurl'] = $realurl[0];
// Are we using an SEO URL?
if(substr($input['threadurl'], -4) == "html")
{
// Get thread to merge's tid the SEO way
preg_match("#thread-([0-9]+)?#i", $input['threadurl'], $threadmatch);
preg_match("#post-([0-9]+)?#i", $input['threadurl'], $postmatch);
if($threadmatch[1])
{
$parameters['tid'] = $threadmatch[1];
}
if($postmatch[1])
{
$parameters['pid'] = $postmatch[1];
}
}
else
{
// Get thread to merge's tid the normal way
$splitloc = explode(".php", $input['threadurl']);
$temp = explode("&", my_substr($splitloc[1], 1));
if(!empty($temp))
{
for($i = 0; $i < count($temp); $i++)
{
$temp2 = explode("=", $temp[$i], 2);
$parameters[$temp2[0]] = $temp2[1];
}
}
else
{
$temp2 = explode("=", $splitloc[1], 2);
$parameters[$temp2[0]] = $temp2[1];
}
}
if($parameters['pid'] && !$parameters['tid'])
{
$query = $db->simple_select("posts", "*", "pid='".intval($parameters['pid'])."'");
$post = $db->fetch_array($query);
$mergetid = $post['tid'];
}
else if($parameters['tid'])
{
$mergetid = $parameters['tid'];
}
$mergetid = intval($mergetid);
$query = $db->simple_select("threads", "*", "tid='".intval($mergetid)."'");
$mergethread = $db->fetch_array($query);
if(!$mergethread['tid'])
{
continue;
}
if($mergetid == $delayedmoderation['tid'])
{
// sanity check
continue;
}
if($input['subject'])
{
$subject = $input['subject'];
}
else
{
$query = $db->simple_select("thread", "subject", "tid='{$delayedmoderation['tids']}'");
$subject = $db->fetch_field($query, "subject");
}
$moderation->merge_threads($mergetid, $delayedmoderation['tids'], $subject);
break;
case "removeredirects":
foreach($tids as $tid)
{
$moderation->remove_redirects($tid);
}
break;
case "removesubscriptions":
$moderation->remove_thread_subscriptions($tids, true);
break;
case "approveunapprovethread":
$approved_tids = $unapproved_tids = array();
$query2 = $db->simple_select("threads", "tid,visible", "tid IN({$delayedmoderation['tids']})");
while($thread = $db->fetch_array($query2))
{
if($thread['visible'] == 1)
{
$approved_tids[] = $thread['tid'];
}
else
{
$unapproved_tids[] = $thread['tid'];
}
}
if(!empty($approved_tids))
{
$moderation->unapprove_threads($approved_tids);
}
if(!empty($unapproved_tids))
{
$moderation->approve_threads($unapproved_tids);
}
break;
}
}
$db->delete_query("delayedmoderation", "did='{$delayedmoderation['did']}'");
}
add_task_log($task, $lang->task_delayedmoderation_ran);
}
?>