fetch_rowset("SELECT forum_id FROM ". BB_FORUMS) as $row)
{
sync('forum', $row['forum_id']);
}
}
function sync ($type, $id)
{
switch ($type)
{
case 'forum':
if (!$forum_csv = get_id_csv($id))
{
break;
}
// sync posts
$tmp_sync_forums = 'tmp_sync_forums';
DB()->query("
CREATE TEMPORARY TABLE $tmp_sync_forums (
forum_id SMALLINT UNSIGNED NOT NULL DEFAULT '0',
forum_last_post_id INT UNSIGNED NOT NULL DEFAULT '0',
forum_posts MEDIUMINT UNSIGNED NOT NULL DEFAULT '0',
forum_topics MEDIUMINT UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (forum_id)
) ENGINE = MEMORY
");
DB()->add_shutdown_query("DROP TEMPORARY TABLE IF EXISTS $tmp_sync_forums");
// начальное обнуление значений
$forum_ary = explode(',', $forum_csv);
DB()->query("REPLACE INTO $tmp_sync_forums (forum_id) VALUES(". join('),(', $forum_ary) .")");
DB()->query("
REPLACE INTO $tmp_sync_forums
(forum_id, forum_last_post_id, forum_posts, forum_topics)
SELECT
forum_id,
MAX(topic_last_post_id),
SUM(topic_replies) + COUNT(topic_id),
COUNT(topic_id)
FROM ". BB_TOPICS ."
WHERE forum_id IN($forum_csv)
GROUP BY forum_id
");
DB()->query("
UPDATE
$tmp_sync_forums tmp, ". BB_FORUMS ." f
SET
f.forum_last_post_id = tmp.forum_last_post_id,
f.forum_posts = tmp.forum_posts,
f.forum_topics = tmp.forum_topics
WHERE
f.forum_id = tmp.forum_id
");
DB()->query("DROP TEMPORARY TABLE $tmp_sync_forums");
break;
case 'topic':
$all_topics = ($id === 'all');
if (!$all_topics AND !$topic_csv = get_id_csv($id))
{
break;
}
// Проверка на остаточные записи об уже удаленных топиках
DB()->query("DELETE FROM ". BB_TOPICS ." WHERE topic_first_post_id NOT IN (SELECT post_id FROM ". BB_POSTS .")");
$tmp_sync_topics = 'tmp_sync_topics';
DB()->query("
CREATE TEMPORARY TABLE $tmp_sync_topics (
topic_id INT UNSIGNED NOT NULL DEFAULT '0',
total_posts INT UNSIGNED NOT NULL DEFAULT '0',
topic_first_post_id INT UNSIGNED NOT NULL DEFAULT '0',
topic_last_post_id INT UNSIGNED NOT NULL DEFAULT '0',
topic_last_post_time INT UNSIGNED NOT NULL DEFAULT '0',
topic_attachment INT UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (topic_id)
) ENGINE = MEMORY
");
DB()->add_shutdown_query("DROP TEMPORARY TABLE IF EXISTS $tmp_sync_topics");
$where_sql = (!$all_topics) ? "AND t.topic_id IN($topic_csv)" : '';
DB()->query("
INSERT INTO $tmp_sync_topics
SELECT
t.topic_id,
COUNT(p.post_id) AS total_posts,
MIN(p.post_id) AS topic_first_post_id,
MAX(p.post_id) AS topic_last_post_id,
MAX(p.post_time) AS topic_last_post_time,
IF(MAX(a.attach_id), 1, 0) AS topic_attachment
FROM ". BB_TOPICS ." t
LEFT JOIN ". BB_POSTS ." p ON(p.topic_id = t.topic_id)
LEFT JOIN ". BB_ATTACHMENTS ." a ON(a.post_id = p.post_id)
WHERE t.topic_status != ". TOPIC_MOVED ."
$where_sql
GROUP BY t.topic_id
");
DB()->query("
UPDATE
$tmp_sync_topics tmp, ". BB_TOPICS ." t
SET
t.topic_replies = tmp.total_posts - 1,
t.topic_first_post_id = tmp.topic_first_post_id,
t.topic_last_post_id = tmp.topic_last_post_id,
t.topic_last_post_time = tmp.topic_last_post_time,
t.topic_attachment = tmp.topic_attachment
WHERE
t.topic_id = tmp.topic_id
");
if ($topics = DB()->fetch_rowset("SELECT topic_id FROM ". $tmp_sync_topics ." WHERE total_posts = 0", 'topic_id'))
{
topic_delete($topics);
}
DB()->query("DROP TEMPORARY TABLE $tmp_sync_topics");
break;
case 'user_posts':
$all_users = ($id === 'all');
if (!$all_users AND !$user_csv = get_id_csv($id))
{
break;
}
$tmp_user_posts = 'tmp_sync_user_posts';
DB()->query("
CREATE TEMPORARY TABLE $tmp_user_posts (
user_id INT NOT NULL DEFAULT '0',
user_posts MEDIUMINT UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (user_id)
) ENGINE = MEMORY
");
DB()->add_shutdown_query("DROP TEMPORARY TABLE IF EXISTS $tmp_user_posts");
// Set posts count = 0 and then update to real count
$where_user_sql = (!$all_users) ? "AND user_id IN($user_csv)" : "AND user_posts != 0";
$where_post_sql = (!$all_users) ? "AND poster_id IN($user_csv)" : '';
DB()->query("
REPLACE INTO $tmp_user_posts
SELECT user_id, 0
FROM ". BB_USERS ."
WHERE user_id != ". GUEST_UID ."
$where_user_sql
UNION
SELECT poster_id, COUNT(*)
FROM ". BB_POSTS ."
WHERE poster_id != ". GUEST_UID ."
$where_post_sql
GROUP BY poster_id
");
DB()->query("
UPDATE
$tmp_user_posts tmp, ". BB_USERS ." u
SET
u.user_posts = tmp.user_posts
WHERE
u.user_id = tmp.user_id
");
DB()->query("DROP TEMPORARY TABLE $tmp_user_posts");
break;
}
}
function topic_delete ($mode_or_topic_id, $forum_id = null, $prune_time = 0, $prune_all = false)
{
global $lang, $log_action;
$prune = ($mode_or_topic_id === 'prune');
if (!$prune AND !$topic_csv = get_id_csv($mode_or_topic_id))
{
return false;
}
$log_topics = $sync_forums = array();
if ($prune)
{
$sync_forums[$forum_id] = true;
}
else
{
$where_sql = ($forum_csv = get_id_csv($forum_id)) ? "AND forum_id IN($forum_csv)" : '';
$sql = "
SELECT topic_id, forum_id, topic_title, topic_status
FROM ". BB_TOPICS ."
WHERE topic_id IN($topic_csv)
$where_sql
";
$topic_csv = array();
foreach (DB()->fetch_rowset($sql) as $row)
{
$topic_csv[] = $row['topic_id'];
$log_topics[] = $row;
$sync_forums[$row['forum_id']] = true;
}
if (!$topic_csv = get_id_csv($topic_csv))
{
return false;
}
}
// Get topics to delete
$tmp_delete_topics = 'tmp_delete_topics';
DB()->query("
CREATE TEMPORARY TABLE $tmp_delete_topics (
topic_id INT UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (topic_id)
) ENGINE = MEMORY
");
DB()->add_shutdown_query("DROP TEMPORARY TABLE IF EXISTS $tmp_delete_topics");
$where_sql = ($prune) ? "forum_id = $forum_id" : "topic_id IN($topic_csv)";
$where_sql .= ($prune && $prune_time) ? " AND topic_last_post_time < $prune_time" : '';
$where_sql .= ($prune && !$prune_all) ? " AND topic_type NOT IN(". POST_ANNOUNCE .",". POST_STICKY .")": '';
DB()->query("INSERT INTO $tmp_delete_topics SELECT topic_id FROM ". BB_TOPICS ." WHERE $where_sql");
// Get topics count
$row = DB()->fetch_row("SELECT COUNT(*) AS topics_count FROM $tmp_delete_topics");
if (!$deleted_topics_count = $row['topics_count'])
{
DB()->query("DROP TEMPORARY TABLE $tmp_delete_topics");
return 0;
}
// Update user posts count
$tmp_user_posts = 'tmp_user_posts';
DB()->query("
CREATE TEMPORARY TABLE $tmp_user_posts (
user_id INT NOT NULL DEFAULT '0',
user_posts MEDIUMINT UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (user_id)
) ENGINE = MEMORY
");
DB()->add_shutdown_query("DROP TEMPORARY TABLE IF EXISTS $tmp_user_posts");
DB()->query("
INSERT INTO $tmp_user_posts
SELECT p.poster_id, COUNT(p.post_id)
FROM ". $tmp_delete_topics ." del, ". BB_POSTS ." p
WHERE p.topic_id = del.topic_id
AND p.poster_id != ". GUEST_UID ."
GROUP BY p.poster_id
");
// Get array for atom update
$atom_csv = array();
foreach (DB()->fetch_rowset('SELECT user_id FROM '.$tmp_user_posts) as $at)
{
$atom_csv[] = $at['user_id'];
}
DB()->query("
UPDATE
$tmp_user_posts tmp, ". BB_USERS ." u
SET
u.user_posts = u.user_posts - tmp.user_posts
WHERE
u.user_id = tmp.user_id
");
DB()->query("DROP TEMPORARY TABLE $tmp_user_posts");
// Delete votes
DB()->query("
DELETE pv, pu
FROM ". $tmp_delete_topics ." del
LEFT JOIN ". BB_POLL_VOTES ." pv USING(topic_id)
LEFT JOIN ". BB_POLL_USERS ." pu USING(topic_id)
");
// Delete attachments (from disk)
$attach_dir = get_attachments_dir();
$result = DB()->query("
SELECT
d.physical_filename
FROM
". $tmp_delete_topics ." del,
". BB_POSTS ." p,
". BB_ATTACHMENTS ." a,
". BB_ATTACHMENTS_DESC ." d
WHERE
p.topic_id = del.topic_id
AND a.post_id = p.post_id
AND d.attach_id = a.attach_id
");
while ($row = DB()->fetch_next($result))
{
if ($filename = basename($row['physical_filename']))
{
@unlink("$attach_dir/". $filename);
@unlink("$attach_dir/". THUMB_DIR .'/t_'. $filename);
}
}
unset($row, $result);
// Delete posts, posts_text, attachments (from DB)
DB()->query("
DELETE p, pt, ps, a, d, ph
FROM ". $tmp_delete_topics ." del
LEFT JOIN ". BB_POSTS ." p ON(p.topic_id = del.topic_id)
LEFT JOIN ". BB_POSTS_TEXT ." pt ON(pt.post_id = p.post_id)
LEFT JOIN ". BB_POSTS_HTML ." ph ON(ph.post_id = p.post_id)
LEFT JOIN ". BB_POSTS_SEARCH ." ps ON(ps.post_id = p.post_id)
LEFT JOIN ". BB_ATTACHMENTS ." a ON(a.post_id = p.post_id)
LEFT JOIN ". BB_ATTACHMENTS_DESC ." d ON(d.attach_id = a.attach_id)
");
// Delete topics, topics watch
DB()->query("
DELETE t, tw
FROM ". $tmp_delete_topics ." del
LEFT JOIN ". BB_TOPICS ." t USING(topic_id)
LEFT JOIN ". BB_TOPICS_WATCH ." tw USING(topic_id)
");
// Delete topic moved stubs
DB()->query("
DELETE t
FROM ". $tmp_delete_topics ." del, ". BB_TOPICS ." t
WHERE t.topic_moved_id = del.topic_id
");
// Delete torrents
DB()->query("
DELETE tor, tr, dl
FROM ". $tmp_delete_topics ." del
LEFT JOIN ". BB_BT_TORRENTS ." tor USING(topic_id)
LEFT JOIN ". BB_BT_TRACKER ." tr USING(topic_id)
LEFT JOIN ". BB_BT_DLSTATUS ." dl USING(topic_id)
");
// Log action
if ($prune)
{
// TODO
}
else
{
foreach ($log_topics as $row)
{
if ($row['topic_status'] == TOPIC_MOVED)
{
$row['topic_title'] = ''. $lang['TOPIC_MOVED'] .' '. $row['topic_title'];
}
$log_action->mod('mod_topic_delete', array(
'forum_id' => $row['forum_id'],
'topic_id' => $row['topic_id'],
'topic_title' => $row['topic_title'],
));
}
}
// Sync
sync('forum', array_keys($sync_forums));
// Update atom feed
foreach ($atom_csv as $atom)
{
update_atom('user', $atom);
}
DB()->query("DROP TEMPORARY TABLE $tmp_delete_topics");
return $deleted_topics_count;
}
function topic_move ($topic_id, $to_forum_id, $from_forum_id = null, $leave_shadow = false, $insert_bot_msg = false)
{
global $log_action;
$to_forum_id = (int) $to_forum_id;
// Verify input params
if (!$topic_csv = get_id_csv($topic_id))
{
return false;
}
if (!forum_exists($to_forum_id))
{
return false;
}
if ($from_forum_id && (!forum_exists($from_forum_id) || $to_forum_id == $from_forum_id))
{
return false;
}
// Get topics info
$where_sql = ($forum_csv = get_id_csv($from_forum_id)) ? "AND forum_id IN($forum_csv)" : '';
$sql = "SELECT * FROM ". BB_TOPICS ." WHERE topic_id IN($topic_csv) AND topic_status != ". TOPIC_MOVED ." $where_sql";
$topics = array();
$sync_forums = array($to_forum_id => true);
foreach (DB()->fetch_rowset($sql) as $row)
{
if ($row['forum_id'] != $to_forum_id)
{
$topics[$row['topic_id']] = $row;
$sync_forums[$row['forum_id']] = true;
}
}
if (!$topics OR !$topic_csv = get_id_csv(array_keys($topics)))
{
return false;
}
// Insert topic in the old forum that indicates that the topic has moved
if ($leave_shadow)
{
$shadows = array();
foreach ($topics as $topic_id => $row)
{
$shadows[] = array(
'forum_id' => $row['forum_id'],
'topic_title' => $row['topic_title'],
'topic_poster' => $row['topic_poster'],
'topic_time' => TIMENOW,
'topic_status' => TOPIC_MOVED,
'topic_type' => POST_NORMAL,
'topic_vote' => $row['topic_vote'],
'topic_views' => $row['topic_views'],
'topic_replies' => $row['topic_replies'],
'topic_first_post_id' => $row['topic_first_post_id'],
'topic_last_post_id' => $row['topic_last_post_id'],
'topic_moved_id' => $topic_id,
'topic_last_post_time' => $row['topic_last_post_time'],
);
}
if ($sql_args = DB()->build_array('MULTI_INSERT', $shadows))
{
DB()->query("INSERT INTO ". BB_TOPICS . $sql_args);
}
}
DB()->query("UPDATE ". BB_TOPICS ." SET forum_id = $to_forum_id WHERE topic_id IN($topic_csv)");
DB()->query("UPDATE ". BB_POSTS ." SET forum_id = $to_forum_id WHERE topic_id IN($topic_csv)");
DB()->query("UPDATE ". BB_BT_TORRENTS ." SET forum_id = $to_forum_id WHERE topic_id IN($topic_csv)");
// Bot
if ($insert_bot_msg)
{
foreach ($topics as $topic_id => $row)
{
insert_post('after_move', $topic_id, $to_forum_id, $row['forum_id']);
}
sync('topic', array_keys($topics));
}
// Sync
sync('forum', array_keys($sync_forums));
// Log action
foreach ($topics as $topic_id => $row)
{
$log_action->mod('mod_topic_move', array(
'forum_id' => $row['forum_id'],
'forum_id_new' => $to_forum_id,
'topic_id' => $topic_id,
'topic_title' => $row['topic_title'],
));
}
return true;
}
// $exclude_first - в режиме удаления сообщений по списку исключать первое сообщение в теме
function post_delete ($mode_or_post_id, $user_id = null, $exclude_first = true)
{
global $log_action;
$del_user_posts = ($mode_or_post_id === 'user'); // Delete all user posts
// Get required params
if ($del_user_posts)
{
if (!$user_csv = get_id_csv($user_id)) return false;
}
else
{
if (!$post_csv = get_id_csv($mode_or_post_id)) return false;
// фильтр заглавных сообщений в теме
if ($exclude_first)
{
$sql = "SELECT topic_first_post_id FROM ". BB_TOPICS ." WHERE topic_first_post_id IN($post_csv)";
if ($first_posts = DB()->fetch_rowset($sql, 'topic_first_post_id'))
{
$posts_without_first = array_diff(explode(',', $post_csv), $first_posts);
if (!$post_csv = get_id_csv($posts_without_first))
{
return false;
}
}
}
}
// Collect data for logs, sync..
$log_topics = $sync_forums = $sync_topics = $sync_users = array();
if ($del_user_posts)
{
$sync_topics = DB()->fetch_rowset("SELECT DISTINCT topic_id FROM ". BB_POSTS ." WHERE poster_id IN($user_csv)", 'topic_id');
if ($topic_csv = get_id_csv($sync_topics))
{
foreach (DB()->fetch_rowset("SELECT DISTINCT forum_id FROM ". BB_TOPICS ." WHERE topic_id IN($topic_csv)") as $row)
{
$sync_forums[$row['forum_id']] = true;
}
}
$sync_users = explode(',', $user_csv);
}
else
{
$sql = "
SELECT p.topic_id, p.forum_id, t.topic_title
FROM ". BB_POSTS ." p, ". BB_TOPICS ." t
WHERE p.post_id IN($post_csv)
AND t.topic_id = p.topic_id
GROUP BY t.topic_id
";
foreach (DB()->fetch_rowset($sql) as $row)
{
$log_topics[] = $row;
$sync_topics[] = $row['topic_id'];
$sync_forums[$row['forum_id']] = true;
}
$sync_users = DB()->fetch_rowset("SELECT DISTINCT poster_id FROM ". BB_POSTS ." WHERE post_id IN($post_csv)", 'poster_id');
}
// Get all post_id for deleting
$tmp_delete_posts = 'tmp_delete_posts';
DB()->query("
CREATE TEMPORARY TABLE $tmp_delete_posts (
post_id INT UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (post_id)
) ENGINE = MEMORY
");
DB()->add_shutdown_query("DROP TEMPORARY TABLE IF EXISTS $tmp_delete_posts");
if ($del_user_posts)
{
$where_sql = "poster_id IN($user_csv)";
$exclude_posts_ary = array();
foreach (DB()->fetch_rowset("SELECT topic_first_post_id FROM ". BB_TOPICS ." WHERE topic_poster IN($user_csv)") as $row)
{
$exclude_posts_ary[] = $row['topic_first_post_id'];
}
if ($exclude_posts_csv = get_id_csv($exclude_posts_ary))
{
$where_sql .= " AND post_id NOT IN($exclude_posts_csv)";
}
}
else
{
$where_sql = "post_id IN($post_csv)";
}
DB()->query("INSERT INTO $tmp_delete_posts SELECT post_id FROM ". BB_POSTS ." WHERE $where_sql");
// Deleted posts count
$row = DB()->fetch_row("SELECT COUNT(*) AS posts_count FROM $tmp_delete_posts");
if (!$deleted_posts_count = $row['posts_count'])
{
DB()->query("DROP TEMPORARY TABLE $tmp_delete_posts");
return 0;
}
// Delete attachments (from disk)
$attach_dir = get_attachments_dir();
$result = DB()->query("
SELECT
d.physical_filename
FROM
". $tmp_delete_posts ." del,
". BB_ATTACHMENTS ." a,
". BB_ATTACHMENTS_DESC ." d
WHERE
a.post_id = del.post_id
AND d.attach_id = a.attach_id
");
while ($row = DB()->fetch_next($result))
{
if ($filename = basename($row['physical_filename']))
{
@unlink("$attach_dir/". $filename);
@unlink("$attach_dir/". THUMB_DIR .'/t_'. $filename);
}
}
unset($row, $result);
// Delete posts, posts_text, attachments (from DB)
DB()->query("
DELETE p, pt, ps, tor, a, d, ph
FROM ". $tmp_delete_posts ." del
LEFT JOIN ". BB_POSTS ." p ON(p.post_id = del.post_id)
LEFT JOIN ". BB_POSTS_TEXT ." pt ON(pt.post_id = del.post_id)
LEFT JOIN ". BB_POSTS_HTML ." ph ON(ph.post_id = del.post_id)
LEFT JOIN ". BB_POSTS_SEARCH ." ps ON(ps.post_id = del.post_id)
LEFT JOIN ". BB_BT_TORRENTS ." tor ON(tor.post_id = del.post_id)
LEFT JOIN ". BB_ATTACHMENTS ." a ON(a.post_id = del.post_id)
LEFT JOIN ". BB_ATTACHMENTS_DESC ." d ON(d.attach_id = a.attach_id)
");
// Log action
if ($del_user_posts)
{
$log_action->admin('mod_post_delete', array(
'log_msg' => 'user: '. get_usernames_for_log($user_id) ."
posts: $deleted_posts_count",
));
}
else if (!defined('IN_CRON'))
{
foreach ($log_topics as $row)
{
$log_action->mod('mod_post_delete', array(
'forum_id' => $row['forum_id'],
'topic_id' => $row['topic_id'],
'topic_title' => $row['topic_title'],
));
}
}
// Sync
sync('topic', $sync_topics);
sync('forum', array_keys($sync_forums));
sync('user_posts', $sync_users);
// Update atom feed
foreach ($sync_topics as $atom_topic)
{
update_atom('topic', $atom_topic);
}
foreach ($sync_users as $atom_user)
{
update_atom('user', $atom_user);
}
DB()->query("DROP TEMPORARY TABLE $tmp_delete_posts");
return $deleted_posts_count;
}
function user_delete ($user_id, $delete_posts = false)
{
global $bb_cfg, $log_action;
if (!$user_csv = get_id_csv($user_id))
{
return false;
}
if (!$user_id = DB()->fetch_rowset("SELECT user_id FROM ". BB_USERS ." WHERE user_id IN($user_csv)", 'user_id'))
{
return false;
}
$user_csv = get_id_csv($user_id);
// LOG
$log_action->admin('adm_user_delete', array(
'log_msg' => get_usernames_for_log($user_id),
));
// Avatar
$result = DB()->query("SELECT user_id, avatar_ext_id FROM ". BB_USERS ." WHERE avatar_ext_id > 0 AND user_id IN($user_csv)");
while ($row = DB()->fetch_next($result))
{
delete_avatar($row['user_id'], $row['avatar_ext_id']);
}
if ($delete_posts)
{
post_delete('user', $user_id);
}
else
{
DB()->query("UPDATE ". BB_POSTS ." SET poster_id = ". DELETED ." WHERE poster_id IN($user_csv)");
}
DB()->query("UPDATE ". BB_GROUPS ." SET group_moderator = 2 WHERE group_single_user = 0 AND group_moderator IN($user_csv)");
DB()->query("UPDATE ". BB_TOPICS ." SET topic_poster = ". DELETED ." WHERE topic_poster IN($user_csv)");
DB()->query("UPDATE ". BB_BT_TORRENTS ." SET poster_id = ". DELETED ." WHERE poster_id IN($user_csv)");
DB()->query("
DELETE ug, g, a, qt1, qt2
FROM ". BB_USER_GROUP ." ug
LEFT JOIN ". BB_GROUPS ." g ON(g.group_id = ug.group_id AND g.group_single_user = 1)
LEFT JOIN ". BB_AUTH_ACCESS ." a ON(a.group_id = g.group_id)
LEFT JOIN ". BB_QUOTA ." qt1 ON(qt1.user_id = ug.user_id)
LEFT JOIN ". BB_QUOTA ." qt2 ON(qt2.group_id = g.group_id)
WHERE ug.user_id IN($user_csv)
");
DB()->query("
DELETE u, ban, pu, s, tw, asn
FROM ". BB_USERS ." u
LEFT JOIN ". BB_BANLIST ." ban ON(ban.ban_userid = u.user_id)
LEFT JOIN ". BB_POLL_USERS ." pu ON(pu.user_id = u.user_id)
LEFT JOIN ". BB_SESSIONS ." s ON(s.session_user_id = u.user_id)
LEFT JOIN ". BB_TOPICS_WATCH ." tw ON(tw.user_id = u.user_id)
LEFT JOIN ". BB_AUTH_ACCESS_SNAP ." asn ON(asn.user_id = u.user_id)
WHERE u.user_id IN($user_csv)
");
DB()->query("
DELETE btu, tr
FROM ". BB_BT_USERS ." btu
LEFT JOIN ". BB_BT_TRACKER ." tr ON(tr.user_id = btu.user_id)
WHERE btu.user_id IN($user_csv)
");
// PM
DB()->query("
DELETE pm, pmt
FROM ". BB_PRIVMSGS ." pm
LEFT JOIN ". BB_PRIVMSGS_TEXT ." pmt ON(pmt.privmsgs_text_id = pm.privmsgs_id)
WHERE pm.privmsgs_from_userid IN($user_csv)
AND pm.privmsgs_type IN(". PRIVMSGS_SENT_MAIL .','. PRIVMSGS_SAVED_OUT_MAIL .")
");
DB()->query("
DELETE pm, pmt
FROM ". BB_PRIVMSGS ." pm
LEFT JOIN ". BB_PRIVMSGS_TEXT ." pmt ON(pmt.privmsgs_text_id = pm.privmsgs_id)
WHERE pm.privmsgs_to_userid IN($user_csv)
AND pm.privmsgs_type IN(". PRIVMSGS_READ_MAIL .','. PRIVMSGS_SAVED_IN_MAIL .")
");
DB()->query("UPDATE ". BB_PRIVMSGS ." SET privmsgs_from_userid = ". DELETED ." WHERE privmsgs_from_userid IN($user_csv)");
DB()->query("UPDATE ". BB_PRIVMSGS ." SET privmsgs_to_userid = ". DELETED ." WHERE privmsgs_to_userid IN($user_csv)");
// Delete user feed
foreach (explode(',', $user_csv) as $user_id)
{
$file_path = $bb_cfg['atom']['path'] .'/u/'. floor($user_id/5000) .'/'. ($user_id % 100) .'/'. $user_id .'.atom';
@unlink($file_path);
}
}
function get_usernames_for_log ($user_id)
{
$users_log_msg = array();
if ($user_csv = get_id_csv($user_id))
{
$sql = "SELECT user_id, username FROM ". BB_USERS ." WHERE user_id IN($user_csv)";
foreach (DB()->fetch_rowset($sql) as $row)
{
$users_log_msg[] = "$row[username] [$row[user_id]]";
}
}
return join(', ', $users_log_msg);
}