';
if ($topic_id && $mode != 'delete') {
$message .= sprintf($lang['CLICK_RETURN_TOPIC'], '', '');
$message .= '
';
} elseif (count($req_topics) != 1) {
$message .= sprintf($lang['CLICK_RETURN_MODCP'], '', '');
$message .= '
';
}
$message .= sprintf($lang['CLICK_RETURN_FORUM'], '', '');
return $message;
}
function validate_topics($forum_id, &$req_topics, &$topic_titles)
{
$valid_topics = $valid_titles = [];
if ($topic_csv = get_id_csv($req_topics)) {
$sql = "SELECT topic_id, topic_title FROM " . BB_TOPICS . " WHERE topic_id IN($topic_csv) AND forum_id = $forum_id";
foreach (DB()->fetch_rowset($sql) as $row) {
$valid_topics[] = $row['topic_id'];
$valid_titles[] = $row['topic_title'];
}
}
$req_topics = $valid_topics;
$topic_titles = $valid_titles;
}
/**
* @param $request_index
* @param $mod_action
* @return bool
*/
function validate_mode_condition($request_index, $mod_action = '')
{
if (!$mod_action) {
$mod_action = $request_index;
}
return (isset($_REQUEST[$request_index]) || (isset($_POST['mod_action']) && $_POST['mod_action'] === $mod_action));
}
// Start session management
$user->session_start(['req_login' => true]);
// Obtain initial vars
$forum_id = $_REQUEST[POST_FORUM_URL] ?? 0;
$topic_id = $_REQUEST[POST_TOPIC_URL] ?? 0;
$post_id = $_REQUEST[POST_POST_URL] ?? 0;
$start = isset($_REQUEST['start']) ? abs((int)$_REQUEST['start']) : 0;
$confirmed = isset($_POST['confirm']);
$mode = $topic_title = '';
if (isset($_REQUEST['mode'])) {
$mode = (string)$_REQUEST['mode'];
} else {
if (validate_mode_condition('delete', 'topic_delete')) {
$mode = 'delete';
} elseif (validate_mode_condition('move', 'topic_move')) {
$mode = 'move';
} elseif (validate_mode_condition('lock', 'topic_lock')) {
$mode = 'lock';
} elseif (validate_mode_condition('unlock', 'topic_unlock')) {
$mode = 'unlock';
} elseif (validate_mode_condition('post_pin')) {
$mode = 'post_pin';
} elseif (validate_mode_condition('post_unpin')) {
$mode = 'post_unpin';
}
}
// Obtain relevant data
if ($topic_id) {
$sql = "
SELECT
f.forum_id, f.forum_name, f.forum_topics, f.self_moderated,
t.topic_first_post_id, t.topic_poster
FROM " . BB_TOPICS . " t, " . BB_FORUMS . " f
WHERE t.topic_id = $topic_id
AND f.forum_id = t.forum_id
LIMIT 1
";
if (!$topic_row = DB()->fetch_row($sql)) {
bb_die($lang['INVALID_TOPIC_ID_DB']);
}
$forum_id = $topic_row['forum_id'];
$forum_name = $topic_row['forum_name'];
$forum_topics = (!$topic_row['forum_topics']) ? 1 : $topic_row['forum_topics'];
} elseif ($forum_id) {
$sql = "SELECT forum_name, forum_topics FROM " . BB_FORUMS . " WHERE forum_id = $forum_id LIMIT 1";
if (!$topic_row = DB()->fetch_row($sql)) {
bb_die($lang['FORUM_NOT_EXIST']);
}
$forum_name = $topic_row['forum_name'];
$forum_topics = (!$topic_row['forum_topics']) ? 1 : $topic_row['forum_topics'];
} else {
bb_die('Invalid request');
}
// Check if user did or did not confirm. If they did not, forward them to the last page they were on
if (isset($_POST['cancel']) || IS_GUEST) {
$redirect = 'index.php';
if ($topic_id || $forum_id) {
$redirect = ($topic_id) ? TOPIC_URL . $topic_id : FORUM_URL . $forum_id;
}
redirect($redirect);
}
// Start auth check
$is_auth = auth(AUTH_ALL, $forum_id, $userdata);
$is_moderator = (IS_AM);
if ($mode == 'ip') {
// Moderator can view IP in all forums
$is_auth['auth_mod'] = $is_moderator;
} elseif ($mode == 'move' && !$is_auth['auth_mod']) {
// User can move his own topic if this forum is "self_moderated"
if ($topic_id && $topic_row['self_moderated'] && $topic_row['topic_poster'] == $userdata['user_id']) {
$is_auth['auth_mod'] = true;
$_POST['insert_bot_msg'] = 1;
unset($_POST['topic_id_list'], $_POST['move_leave_shadow']);
}
}
// Exit if user not authorized
if (!$is_auth['auth_mod']) {
bb_die($lang['NOT_MODERATOR']);
}
// Redirect to login page if not admin session
if ($is_moderator && !$userdata['session_admin']) {
$redirect = $_POST['redirect'] ?? $_SERVER['REQUEST_URI'];
redirect(LOGIN_URL . "?redirect=$redirect&admin=1");
}
//
// Get required vars
//
$req_topics = $topic_csv = $topic_titles = $hidden_fields = [];
switch ($mode) {
case 'delete':
case 'move':
case 'lock':
case 'unlock':
case 'set_download':
case 'unset_download':
case 'post_pin':
case 'post_unpin':
if (empty($_POST['topic_id_list']) && empty($topic_id)) {
bb_die($lang['NONE_SELECTED']);
}
$req_topics = $_POST['topic_id_list'] ?? $topic_id;
validate_topics($forum_id, $req_topics, $topic_titles);
if (!$req_topics || !($topic_csv = get_id_csv($req_topics))) {
bb_die($lang['NONE_SELECTED']);
}
$hidden_fields = [
'sid' => $userdata['session_id'],
'mode' => $mode,
POST_FORUM_URL => $forum_id,
POST_TOPIC_URL => $topic_id
];
foreach ($req_topics as $req_topic_id) {
$hidden_fields['topic_id_list'][] = $req_topic_id;
}
break;
}
//
// Perform action or show confirm message
//
switch ($mode) {
case 'delete':
if (!$is_auth['auth_delete']) {
bb_die(sprintf($lang['SORRY_AUTH_DELETE'], $is_auth['auth_delete_type']));
}
if ($confirmed) {
$result = \TorrentPier\Legacy\Admin\Common::topic_delete($req_topics, $forum_id);
//Обновление кеша новостей на главной
$news_forums = array_flip(explode(',', $bb_cfg['latest_news_forum_id']));
if (isset($news_forums[$forum_id]) && $bb_cfg['show_latest_news'] && $result) {
$datastore->enqueue([
'latest_news'
]);
$datastore->update('latest_news');
}
$net_forums = array_flip(explode(',', $bb_cfg['network_news_forum_id']));
if (isset($net_forums[$forum_id]) && $bb_cfg['show_network_news'] && $result) {
$datastore->enqueue([
'network_news'
]);
$datastore->update('network_news');
}
$msg = $result ? $lang['TOPICS_REMOVED'] : $lang['NO_TOPICS_REMOVED'];
bb_die(return_msg_mcp($msg));
} else {
print_confirmation([
'QUESTION' => $lang['CONFIRM_DELETE_TOPIC'],
'ITEMS_LIST' => implode("\n\n\n", $topic_titles),
'FORM_ACTION' => 'modcp.php',
'HIDDEN_FIELDS' => build_hidden_fields($hidden_fields)
]);
}
break;
case 'move':
if ($confirmed) {
$new_forum_id = (int)$_POST['new_forum'];
$result = \TorrentPier\Legacy\Admin\Common::topic_move($req_topics, $new_forum_id, $forum_id, isset($_POST['move_leave_shadow']), isset($_POST['insert_bot_msg']), $_POST['reason_move_bot']);
//Обновление кеша новостей на главной
$news_forums = array_flip(explode(',', $bb_cfg['latest_news_forum_id']));
if ((isset($news_forums[$forum_id]) || isset($news_forums[$new_forum_id])) && $bb_cfg['show_latest_news'] && $result) {
$datastore->enqueue([
'latest_news'
]);
$datastore->update('latest_news');
}
$net_forums = array_flip(explode(',', $bb_cfg['network_news_forum_id']));
if ((isset($net_forums[$forum_id]) || isset($net_forums[$new_forum_id])) && $bb_cfg['show_network_news'] && $result) {
$datastore->enqueue([
'network_news'
]);
$datastore->update('network_news');
}
$msg = $result ? $lang['TOPICS_MOVED'] : $lang['NO_TOPICS_MOVED'];
bb_die(return_msg_mcp($msg));
} else {
if (IS_ADMIN) {
$forum_select_mode = 'admin';
} else {
$not_auth_forums_csv = $user->get_not_auth_forums(AUTH_VIEW);
$forum_select_mode = explode(',', $not_auth_forums_csv);
}
$forum_select = get_forum_select($forum_select_mode, 'new_forum', $forum_id);
$template->assign_vars([
'TPL_MODCP_MOVE' => true,
'SHOW_LEAVESHADOW' => $is_moderator,
'SHOW_BOT_OPTIONS' => $is_moderator,
'MESSAGE_TITLE' => $lang['CONFIRM'],
'MESSAGE_TEXT' => $lang['CONFIRM_MOVE_TOPIC'],
'TOPIC_TITLES' => implode("\n\n\n", $topic_titles),
'S_FORUM_SELECT' => $forum_select,
'S_MODCP_ACTION' => 'modcp.php',
'S_HIDDEN_FIELDS' => build_hidden_fields($hidden_fields),
]);
$template->set_filenames(['body' => 'modcp.tpl']);
}
break;
case 'lock':
case 'unlock':
$lock = ($mode == 'lock');
$new_topic_status = ($lock) ? TOPIC_LOCKED : TOPIC_UNLOCKED;
$sql = "
SELECT topic_id, topic_title
FROM " . BB_TOPICS . "
WHERE topic_id IN($topic_csv)
AND forum_id = $forum_id
AND topic_status != " . TOPIC_MOVED . "
AND topic_status != $new_topic_status
";
$topic_csv = [];
foreach (DB()->fetch_rowset($sql) as $row) {
$topic_csv[] = $row['topic_id'];
$log_topics[$row['topic_id']] = $row['topic_title'];
}
if (!$topic_csv = get_id_csv($topic_csv)) {
bb_die($lang['NONE_SELECTED']);
}
DB()->query("
UPDATE " . BB_TOPICS . " SET
topic_status = $new_topic_status
WHERE topic_id IN($topic_csv)
");
// Log action
$type = ($lock) ? 'mod_topic_lock' : 'mod_topic_unlock';
foreach ($log_topics as $topic_id => $topic_title) {
$log_action->mod($type, [
'forum_id' => $forum_id,
'topic_id' => $topic_id,
'topic_title' => $topic_title
]);
}
$msg = ($lock) ? $lang['TOPICS_LOCKED'] : $lang['TOPICS_UNLOCKED'];
bb_die(return_msg_mcp($msg));
break;
// Set or unset topics DL-type
case 'set_download':
case 'unset_download':
$set_download = ($mode == 'set_download');
$new_dl_type = $set_download ? TOPIC_DL_TYPE_DL : TOPIC_DL_TYPE_NORMAL;
DB()->query("
UPDATE " . BB_TOPICS . " SET
topic_dl_type = $new_dl_type
WHERE topic_id IN($topic_csv)
AND forum_id = $forum_id
AND topic_moved_id = 0
");
if ($mode == 'unset_download') {
clear_dl_list($topic_csv);
}
// Log action
$type = ($set_download) ? 'mod_topic_set_downloaded' : 'mod_topic_unset_downloaded';
$log_action->mod($type, [
'forum_id' => $forum_id,
'topic_id' => $topic_id,
'topic_title' => get_topic_title($topic_id)
]);
$msg = ($set_download) ? $lang['TOPICS_DOWN_SETS'] : $lang['TOPICS_DOWN_UNSETS'];
bb_die(return_msg_mcp($msg));
break;
case 'split':
//mpd
$delete_posts = isset($_POST['delete_posts']);
$split = (isset($_POST['split_type_all']) || isset($_POST['split_type_beyond']));
$posts = $_POST['post_id_list'] ?? [];
$start = /* (isset($_POST['start'])) ? intval($_POST['start']) : */
0;
$topic_first_post_id = $topic_row['topic_first_post_id'] ?? '';
$post_id_sql = $req_post_id_sql = [];
if (($split || $delete_posts) && ($posts && $topic_id && $forum_id && $topic_first_post_id) && $confirmed) {
foreach ($posts as $post_id) {
if ($pid = (int)$post_id) {
$req_post_id_sql[] = $pid;
}
}
if ($req_post_id_sql = implode(',', $req_post_id_sql)) {
$sql = "SELECT post_id
FROM " . BB_POSTS . "
WHERE post_id IN($req_post_id_sql)
AND post_id != $topic_first_post_id
AND topic_id = $topic_id
AND forum_id = $forum_id";
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not get post id information');
}
if ($rowset = DB()->sql_fetchrowset($result)) {
foreach ($rowset as $rid => $row) {
$post_id_sql[] = $row['post_id'];
}
$post_id_sql = implode(',', $post_id_sql);
}
}
}
if ($post_id_sql && $split) {
//mpd end
$sql = "SELECT post_id, poster_id, topic_id, post_time
FROM " . BB_POSTS . "
WHERE post_id IN ($post_id_sql)
ORDER BY post_time ASC";
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get post information');
}
if ($row = DB()->sql_fetchrow($result)) {
$first_poster = $row['poster_id'];
$topic_id = $row['topic_id'];
$post_time = $row['post_time'];
$user_id_sql = '';
$post_id_sql = '';
do {
$user_id_sql .= (($user_id_sql != '') ? ', ' : '') . (int)$row['poster_id'];
$post_id_sql .= (($post_id_sql != '') ? ', ' : '') . (int)$row['post_id'];
} while ($row = DB()->sql_fetchrow($result));
$post_subject = clean_title($_POST['subject']);
if (empty($post_subject)) {
bb_die($lang['EMPTY_SUBJECT']);
}
$new_forum_id = (int)$_POST['new_forum_id'];
$topic_time = TIMENOW;
$sql = 'SELECT forum_id FROM ' . BB_FORUMS . ' WHERE forum_id = ' . $new_forum_id;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not select from forums table');
}
if (!DB()->sql_fetchrow($result)) {
bb_die('New forum does not exist');
}
DB()->sql_freeresult($result);
$first_post_id = min(explode(',', $post_id_sql));
$sql = "INSERT INTO " . BB_TOPICS . " (topic_title, topic_poster, topic_time, forum_id, topic_status, topic_type, topic_first_post_id)
VALUES ('" . DB()->escape($post_subject) . "', $first_poster, " . $topic_time . ", $new_forum_id, " . TOPIC_UNLOCKED . ", " . POST_NORMAL . ", $first_post_id)";
if (!(DB()->sql_query($sql))) {
bb_die('Could not insert new topic');
}
$new_topic_id = DB()->sql_nextid();
// Update topic watch table, switch users whose posts
// have moved, over to watching the new topic
$sql = "UPDATE " . BB_TOPICS_WATCH . "
SET topic_id = $new_topic_id
WHERE topic_id = $topic_id
AND user_id IN ($user_id_sql)";
if (!DB()->sql_query($sql)) {
bb_die('Could not update topics watch table');
}
$sql_where = (!empty($_POST['split_type_beyond'])) ? " post_time >= $post_time AND topic_id = $topic_id" : "post_id IN ($post_id_sql)";
$sql = "UPDATE " . BB_POSTS . " SET topic_id = $new_topic_id, forum_id = $new_forum_id WHERE $sql_where";
if (!DB()->sql_query($sql)) {
bb_die('Could not update posts table');
}
//bot
if (isset($_POST['after_split_to_old'])) {
\TorrentPier\Legacy\Post::insert_post('after_split_to_old', $topic_id, $forum_id, '', $new_topic_id, trim($_POST['subject']));
}
if (isset($_POST['after_split_to_new'])) {
\TorrentPier\Legacy\Post::insert_post('after_split_to_new', $new_topic_id, $new_forum_id, $forum_id, $new_topic_id, '', $topic_id);
}
\TorrentPier\Legacy\Admin\Common::sync('topic', [$topic_id, $new_topic_id]);
\TorrentPier\Legacy\Admin\Common::sync('forum', [$forum_id, $new_forum_id]);
//bot
$message = $lang['TOPIC_SPLIT'] . '
' . $lang['TOPIC_SPLIT_OLD'] . '';
$message .= ' :: ' . $lang['TOPIC_SPLIT_NEW'] . '';
// Log action
$log_action->mod('mod_topic_split', [
'forum_id' => $forum_id,
'forum_id_new' => $new_forum_id,
'topic_id' => $topic_id,
'topic_title' => get_topic_title($topic_id),
'topic_id_new' => $new_topic_id,
'topic_title_new' => htmlCHR($_POST['subject'])
]);
bb_die($message);
}
} elseif ($post_id_sql && $delete_posts) {
if (!$is_auth['auth_delete']) {
bb_die(sprintf($lang['SORRY_AUTH_DELETE'], $is_auth['auth_delete_type']));
}
// Delete posts
$result = \TorrentPier\Legacy\Admin\Common::post_delete(explode(',', $post_id_sql));
$msg = $result ? $lang['DELETE_POSTS_SUCCESFULLY'] : $lang['NO_POSTS_REMOVED'];
bb_die(return_msg_mcp($msg));
} else {
$sql = "SELECT u.username, u.user_rank, p.*, pt.post_text, p.post_username
FROM " . BB_POSTS . " p, " . BB_USERS . " u, " . BB_POSTS_TEXT . " pt
WHERE p.topic_id = $topic_id
AND p.poster_id = u.user_id
AND p.post_id = pt.post_id
AND p.poster_id != " . BOT_UID . "
ORDER BY p.post_time ASC";
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get topic / post information');
}
$s_hidden_fields = '';
if (($total_posts = DB()->num_rows($result)) > 0) {
$postrow = DB()->sql_fetchrowset($result);
$template->assign_vars([
'FORUM_NAME' => htmlCHR($forum_name),
'U_VIEW_FORUM' => FORUM_URL . $forum_id,
'S_SPLIT_ACTION' => 'modcp.php',
'S_HIDDEN_FIELDS' => $s_hidden_fields,
'S_FORUM_SELECT' => get_forum_select('admin', 'new_forum_id', $forum_id),
]);
for ($i = 0; $i < $total_posts; $i++) {
$post_id = $postrow[$i]['post_id'];
$poster_id = $postrow[$i]['poster_id'];
$poster = $postrow[$i]['username'];
$poster_rank = $postrow[$i]['user_rank'];
$post_date = bb_date($postrow[$i]['post_time'], $bb_cfg['post_date_format']);
$message = $postrow[$i]['post_text'];
//
// If the board has HTML off but the post has HTML
// on then we process it, else leave it alone
//
$message = bbcode2html($message);
$row_class = !($i % 2) ? 'row1' : 'row2';
$template->assign_block_vars('postrow', [
'ROW_CLASS' => $row_class,
'POSTER_NAME' => profile_url(['username' => $poster, 'user_id' => $poster_id, 'user_rank' => $poster_rank]),
'POST_DATE' => $post_date,
'MESSAGE' => $message,
'CHECKBOX' => defined('BEGIN_CHECKBOX'),
'POST_ID' => $post_id,
'ROW_ID' => $i,
'CB_ID' => 'cb_' . $i
]);
if ($post_id == $topic_first_post_id) {
define('BEGIN_CHECKBOX', true);
}
}
}
}
$template->set_filenames(['body' => 'modcp_split.tpl']);
break;
case 'ip':
$anon = GUEST_UID;
$rdns_ip_num = (isset($_GET['rdns'])) ? $_GET['rdns'] : '';
if (!$post_id) {
bb_die($lang['NO_SUCH_POST']);
}
// Look up relevant data for this post
$sql = "SELECT * FROM " . BB_POSTS . " WHERE post_id = $post_id AND forum_id = $forum_id";
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get poster IP information');
}
if (!($post_row = DB()->sql_fetchrow($result))) {
bb_die($lang['NO_SUCH_POST']);
}
$no_lookup = false;
if (!$ip_this_post = \TorrentPier\Helpers\IPHelper::long2ip_extended($post_row['poster_ip'])) {
$ip_this_post = $lang['NOT_AVAILABLE'];
$no_lookup = true;
}
$ip_this_post = ($rdns_ip_num == $ip_this_post) ? gethostbyaddr($ip_this_post) : $ip_this_post;
$poster_id = $post_row['poster_id'];
$template->assign_vars([
'TPL_MODCP_IP' => true,
'IP' => $ip_this_post,
'U_LOOKUP_IP' => !$no_lookup ? "modcp.php?mode=ip&" . POST_POST_URL . "=$post_id&" . POST_TOPIC_URL . "=$topic_id&rdns=$ip_this_post&sid=" . $userdata['session_id'] : '',
]);
unset($no_lookup);
//
// Get other IP's this user has posted under
//
$where_sql = ($poster_id == $anon) ? "post_username = '{$post_row['post_username']}'" : "poster_id = $poster_id";
$sql = "SELECT poster_ip, COUNT(*) AS postings FROM " . BB_POSTS . " WHERE $where_sql GROUP BY poster_ip ORDER BY postings DESC LIMIT 100";
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get IP information for this user');
}
if ($row = DB()->sql_fetchrow($result)) {
$i = 0;
do {
if ($row['poster_ip'] == $post_row['poster_ip']) {
$template->assign_vars(['POSTS' => $row['postings']]);
continue;
}
$no_lookup = false;
if (!$ip = \TorrentPier\Helpers\IPHelper::long2ip_extended($row['poster_ip'])) {
$ip = $lang['NOT_AVAILABLE'];
$no_lookup = true;
}
$ip = ($rdns_ip_num == $ip || $rdns_ip_num == 'all') ? gethostbyaddr($ip) : $ip;
$template->assign_block_vars('iprow', [
'ROW_CLASS' => !($i % 2) ? 'row4' : 'row5',
'IP' => $ip,
'POSTS' => $row['postings'],
'U_LOOKUP_IP' => !$no_lookup ? "modcp.php?mode=ip&" . POST_POST_URL . "=$post_id&" . POST_TOPIC_URL . "=$topic_id&rdns=" . $ip . "&sid=" . $userdata['session_id'] : '',
]);
unset($no_lookup);
$i++;
} while ($row = DB()->sql_fetchrow($result));
}
//
// Get other users who've posted under this IP
//
$sql = "SELECT
u.user_id, u.user_rank,
IF(u.user_id = $anon, p.post_username, u.username) AS username,
COUNT(*) as postings
FROM " . BB_USERS . " u, " . BB_POSTS . " p
WHERE p.poster_id = u.user_id
AND p.poster_ip = '" . $post_row['poster_ip'] . "'
GROUP BY u.user_id, p.post_username
ORDER BY postings DESC
LIMIT 100";
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get posters information based on IP');
}
if ($row = DB()->sql_fetchrow($result)) {
$i = 0;
do {
$template->assign_block_vars('userrow', [
'ROW_CLASS' => !($i % 2) ? 'row4' : 'row5',
'USERNAME' => profile_url($row),
'POSTS' => $row['postings'],
'U_SEARCHPOSTS' => "search.php?search_author=1&uid={$row['user_id']}",
]);
$i++;
} while ($row = DB()->sql_fetchrow($result));
}
$template->set_filenames(['body' => 'modcp.tpl']);
break;
case 'post_pin':
case 'post_unpin':
$pin = ($mode == 'post_pin');
$new_topic_status = $pin ? 1 : 0;
if (count((array)$topic_csv)) {
$sql = "
SELECT topic_id, topic_title
FROM " . BB_TOPICS . "
WHERE topic_id IN($topic_csv)
AND forum_id = $forum_id
AND topic_show_first_post != " . TOPIC_MOVED . "
AND topic_show_first_post != $new_topic_status
";
$topic_csv = [];
foreach (DB()->fetch_rowset($sql) as $row) {
$topic_csv[] = $row['topic_id'];
$log_topics[$row['topic_id']] = $row['topic_title'];
}
if (!$topic_csv = get_id_csv($topic_csv)) {
bb_die($lang['NONE_SELECTED']);
}
DB()->query("
UPDATE " . BB_TOPICS . " SET
topic_show_first_post = $new_topic_status
WHERE topic_id IN($topic_csv)
");
// Log action
$type = $pin ? 'mod_post_pin' : 'mod_post_unpin';
foreach ($log_topics as $topic_id => $topic_title) {
$log_action->mod($type, [
'forum_id' => $forum_id,
'topic_id' => $topic_id,
'topic_title' => $topic_title
]);
}
$msg = $pin ? $lang['POST_PINNED'] : $lang['POST_UNPINNED'];
bb_die(return_msg_mcp($msg));
} elseif ($topic_id) {
$sql = "
SELECT topic_id, topic_title
FROM " . BB_TOPICS . "
WHERE topic_id = $topic_id
AND forum_id = $forum_id
AND topic_show_first_post != " . TOPIC_MOVED . "
AND topic_show_first_post != $new_topic_status
LIMIT 1
";
$topic_csv = [];
foreach (DB()->fetch_rowset($sql) as $row) {
$topic_csv[] = $row['topic_id'];
$log_topics[$row['topic_id']] = $row['topic_title'];
}
if (!$topic_csv = get_id_csv($topic_csv)) {
bb_die($lang['NONE_SELECTED']);
}
DB()->query("
UPDATE " . BB_TOPICS . " SET
topic_show_first_post = $new_topic_status
WHERE topic_id IN($topic_csv)
");
// Log action
$type = $pin ? 'mod_post_pin' : 'mod_post_unpin';
foreach ($log_topics as $topic_id => $topic_title) {
$log_action->mod($type, [
'forum_id' => $forum_id,
'topic_id' => $topic_id,
'topic_title' => $topic_title,
]);
}
$msg = $pin ? $lang['POST_PINNED'] : $lang['POST_UNPINNED'];
bb_die(return_msg_mcp($msg));
}
break;
default:
bb_die('invalid action');
break;
}
$template->assign_vars(['PAGE_TITLE' => $lang['MOD_CP']]);
require(PAGE_HEADER);
$template->pparse('body');
require(PAGE_FOOTER);