AUTH_ALL, 'auth_read' => AUTH_ALL, 'auth_post' => AUTH_REG, 'auth_reply' => AUTH_REG, 'auth_edit' => AUTH_REG, 'auth_delete' => AUTH_REG, 'auth_sticky' => AUTH_MOD, 'auth_announce' => AUTH_MOD, 'auth_vote' => AUTH_REG, 'auth_pollcreate' => AUTH_REG, 'auth_attachments' => AUTH_REG, 'auth_download' => AUTH_REG, ]; $mode = isset($_REQUEST['mode']) ? (string)$_REQUEST['mode'] : ''; $cat_forums = get_cat_forums(); if ($orphan_sf_sql = get_orphan_sf()) { fix_orphan_sf($orphan_sf_sql, true); } $forum_parent = $cat_id = 0; $forumname = ''; if (isset($_REQUEST['addforum']) || isset($_REQUEST['addcategory'])) { $mode = isset($_REQUEST['addforum']) ? 'addforum' : 'addcat'; if (isset($_POST['addforum'], $_POST['forumname']) && $mode == 'addforum' && is_array($_POST['addforum'])) { $req_cat_id = array_keys($_POST['addforum']); $cat_id = reset($req_cat_id); $forumname = stripslashes($_POST['forumname'][$cat_id]); } } // Check for demo mode if (IN_DEMO_MODE && in_array($mode, ['deletecat', 'deleteforum'])) { bb_die($lang['CANT_EDIT_IN_DEMO_MODE']); } $show_main_page = false; if ($mode) { switch ($mode) { case 'addforum': case 'editforum': // // Show form to create/modify a forum // if ($mode == 'editforum') { // $newmode determines if we are going to INSERT or UPDATE after posting? $l_title = $lang['EDIT_FORUM']; $newmode = 'modforum'; $buttonvalue = $lang['UPDATE']; $forum_id = (int)$_GET[POST_FORUM_URL]; $row = get_info('forum', $forum_id); $cat_id = $row['cat_id']; $forumname = $row['forum_name']; $forumdesc = $row['forum_desc']; $forumstatus = $row['forum_status']; $forum_display_sort = $row['forum_display_sort']; $forum_display_order = $row['forum_display_order']; $forum_parent = $row['forum_parent']; $show_on_index = $row['show_on_index']; $prune_days = $row['prune_days']; $forum_tpl_id = $row['forum_tpl_id']; $allow_reg_tracker = $row['allow_reg_tracker']; $allow_porno_topic = $row['allow_porno_topic']; $self_moderated = $row['self_moderated']; } else { $l_title = $lang['CREATE_FORUM']; $newmode = 'createforum'; $buttonvalue = $lang['CREATE_FORUM']; $forumdesc = ''; $forumstatus = FORUM_UNLOCKED; $forum_display_sort = 0; $forum_display_order = 0; $forum_id = ''; $show_on_index = 1; $prune_days = 0; $forum_tpl_id = 0; $allow_reg_tracker = 0; $allow_porno_topic = 0; $self_moderated = 0; } if (isset($_REQUEST['forum_parent'])) { $forum_parent = (int)$_REQUEST['forum_parent']; if ($parent = get_forum_data($forum_parent)) { $cat_id = $parent['cat_id']; } } elseif (isset($_REQUEST[POST_CAT_URL])) { $cat_id = (int)$_REQUEST[POST_CAT_URL]; } $catlist = get_list('category', $cat_id, true); $forumlocked = $forumunlocked = ''; $forumstatus == FORUM_LOCKED ? $forumlocked = 'selected' : $forumunlocked = 'selected'; $statuslist = '\n'; $statuslist .= '\n'; $forum_display_sort_list = get_forum_display_sort_option($forum_display_sort, 'list', 'sort'); $forum_display_order_list = get_forum_display_sort_option($forum_display_order, 'list', 'order'); $s_hidden_fields = ''; $s_parent = '\n'; $sel_forum = ($forum_parent && !isset($_REQUEST['forum_parent'])) ? $forum_id : $forum_parent; $s_parent .= sf_get_list('forum', $forum_id, $sel_forum); $template->assign_vars(array( 'TPL_EDIT_FORUM' => true, 'S_FORUM_DISPLAY_SORT_LIST' => $forum_display_sort_list, 'S_FORUM_DISPLAY_ORDER_LIST' => $forum_display_order_list, 'S_FORUM_ACTION' => 'admin_forums.php', 'S_HIDDEN_FIELDS' => $s_hidden_fields, 'S_SUBMIT_VALUE' => $buttonvalue, 'S_CAT_LIST' => $catlist, 'S_STATUS_LIST' => $statuslist, 'SHOW_ON_INDEX' => $show_on_index, 'S_PARENT_FORUM' => $s_parent, 'CAT_LIST_CLASS' => $forum_parent ? 'hidden' : '', 'SHOW_ON_INDEX_CLASS' => (!$forum_parent) ? 'hidden' : '', 'TPL_SELECT' => get_select('forum_tpl', $forum_tpl_id, 'html', $lang['TEMPLATE_DISABLE']), 'ALLOW_REG_TRACKER' => build_select('allow_reg_tracker', array($lang['DISALLOWED'] => 0, $lang['ALLOWED'] => 1), $allow_reg_tracker), 'ALLOW_PORNO_TOPIC' => build_select('allow_porno_topic', array($lang['NONE'] => 0, $lang['YES'] => 1), $allow_porno_topic), 'SELF_MODERATED' => build_select('self_moderated', array($lang['NONE'] => 0, $lang['YES'] => 1), $self_moderated), 'L_FORUM_TITLE' => $l_title, 'PRUNE_DAYS' => $prune_days, 'FORUM_NAME' => htmlCHR($forumname), 'DESCRIPTION' => htmlCHR($forumdesc), )); break; case 'createforum': // // Create a forum in the DB // $cat_id = (int)$_POST[POST_CAT_URL]; $forum_name = (string)$_POST['forumname']; $forum_desc = (string)$_POST['forumdesc']; $forum_status = (int)$_POST['forumstatus']; $prune_days = (int)$_POST['prune_days']; $forum_parent = ($_POST['forum_parent'] != -1) ? (int)$_POST['forum_parent'] : 0; $show_on_index = $forum_parent ? (int)$_POST['show_on_index'] : 1; $forum_display_sort = (int)$_POST['forum_display_sort']; $forum_display_order = (int)$_POST['forum_display_order']; $forum_tpl_id = (int)$_POST['forum_tpl_select']; $allow_reg_tracker = (int)$_POST['allow_reg_tracker']; $allow_porno_topic = (int)$_POST['allow_porno_topic']; $self_moderated = (int)$_POST['self_moderated']; if (!$forum_name) { bb_die('Can not create a forum without a name'); } if ($forum_parent) { if (!$parent = get_forum_data($forum_parent)) { bb_die('Parent forum with id ' . $forum_parent . ' not found'); } $cat_id = $parent['cat_id']; $forum_parent = $parent['forum_parent'] ?: $parent['forum_id']; $forum_order = $parent['forum_order'] + 5; } else { $max_order = get_max_forum_order($cat_id); $forum_order = $max_order + 5; } // Default permissions of public forum $field_sql = $value_sql = ''; foreach ($default_forum_auth as $field => $value) { $field_sql .= ", $field"; $value_sql .= ", $value"; } $forum_name_sql = DB()->escape($forum_name); $forum_desc_sql = DB()->escape($forum_desc); $columns = ' forum_name, cat_id, forum_desc, forum_order, forum_status, prune_days, forum_parent, show_on_index, forum_display_sort, forum_display_order, forum_tpl_id, allow_reg_tracker, allow_porno_topic, self_moderated' . $field_sql; $values = "'$forum_name_sql', $cat_id, '$forum_desc_sql', $forum_order, $forum_status, $prune_days, $forum_parent, $show_on_index, $forum_display_sort, $forum_display_order, $forum_tpl_id, $allow_reg_tracker, $allow_porno_topic, $self_moderated" . $value_sql; DB()->query('INSERT INTO ' . BB_FORUMS . " ($columns) VALUES ($values)"); renumber_order('forum', $cat_id); $datastore->update('cat_forums'); CACHE('bb_cache')->rm(); bb_die($lang['FORUMS_UPDATED'] . '

' . sprintf($lang['CLICK_RETURN_FORUMADMIN'], '', '') . '

' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '', '')); break; case 'modforum': // // Modify a forum in the DB // $cat_id = (int)$_POST[POST_CAT_URL]; $forum_id = (int)$_POST[POST_FORUM_URL]; $forum_name = (string)$_POST['forumname']; $forum_desc = (string)$_POST['forumdesc']; $forum_status = (int)$_POST['forumstatus']; $prune_days = (int)$_POST['prune_days']; $forum_parent = ($_POST['forum_parent'] != -1) ? (int)$_POST['forum_parent'] : 0; $show_on_index = $forum_parent ? (int)$_POST['show_on_index'] : 1; $forum_display_order = (int)$_POST['forum_display_order']; $forum_display_sort = (int)$_POST['forum_display_sort']; $forum_tpl_id = (int)$_POST['forum_tpl_select']; $allow_reg_tracker = (int)$_POST['allow_reg_tracker']; $allow_porno_topic = (int)$_POST['allow_porno_topic']; $self_moderated = (int)$_POST['self_moderated']; $forum_data = get_forum_data($forum_id); $old_cat_id = $forum_data['cat_id']; $forum_order = $forum_data['forum_order']; if (!$forum_name) { bb_die('Can not modify a forum without a name'); } if ($forum_parent) { if (!$parent = get_forum_data($forum_parent)) { bb_die('Parent forum with id ' . $forum_parent . ' not found'); } $cat_id = $parent['cat_id']; $forum_parent = $parent['forum_parent'] ?: $parent['forum_id']; $forum_order = $parent['forum_order'] + 5; if ($forum_id == $forum_parent) { bb_die('Ambiguous forum ID. Please select other parent forum'); } } elseif ($cat_id != $old_cat_id) { $max_order = get_max_forum_order($cat_id); $forum_order = $max_order + 5; } elseif ($forum_data['forum_parent']) { $old_parent = $forum_data['forum_parent']; $forum_order = $cat_forums[$old_cat_id]['f'][$old_parent]['forum_order'] - 5; } $forum_name_sql = DB()->escape($forum_name); $forum_desc_sql = DB()->escape($forum_desc); DB()->query(' UPDATE ' . BB_FORUMS . " SET forum_name = '$forum_name_sql', cat_id = $cat_id, forum_desc = '$forum_desc_sql', forum_order = $forum_order, forum_status = $forum_status, prune_days = $prune_days, forum_parent = $forum_parent, show_on_index = $show_on_index, forum_tpl_id = $forum_tpl_id, allow_reg_tracker = $allow_reg_tracker, allow_porno_topic = $allow_porno_topic, self_moderated = $self_moderated, forum_display_order = $forum_display_order, forum_display_sort = $forum_display_sort WHERE forum_id = $forum_id "); if ($cat_id != $old_cat_id) { change_sf_cat($forum_id, $cat_id, $forum_order); renumber_order('forum', $cat_id); } renumber_order('forum', $old_cat_id); $cat_forums = get_cat_forums(); $fix = fix_orphan_sf(); $datastore->update('cat_forums'); CACHE('bb_cache')->rm(); $message = $lang['FORUMS_UPDATED'] . '

'; $message .= $fix ? "$fix

" : ''; $message .= sprintf($lang['CLICK_RETURN_FORUMADMIN'], '', '') . '

' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '', ''); bb_die($message); break; case 'addcat': // // Create a category in the DB // if (!$new_cat_title = trim($_POST['categoryname'])) { bb_die($lang['CATEGORY_NAME_EMPTY']); } check_name_dup('cat', $new_cat_title); $order = DB()->fetch_row('SELECT MAX(cat_order) AS max_order FROM ' . BB_CATEGORIES); $args = DB()->build_array('INSERT', array( 'cat_title' => (string)$new_cat_title, 'cat_order' => (int)$order['max_order'] + 10, )); DB()->query('INSERT INTO ' . BB_CATEGORIES . $args); $datastore->update('cat_forums'); CACHE('bb_cache')->rm(); bb_die($lang['FORUMS_UPDATED'] . '

' . sprintf($lang['CLICK_RETURN_FORUMADMIN'], '', '') . '

' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '', '')); break; case 'editcat': // // Show form to edit a category // $cat_id = (int)$_GET[POST_CAT_URL]; $cat_info = get_info('category', $cat_id); $hidden_fields = array( 'mode' => 'modcat', POST_CAT_URL => $cat_id, ); $template->assign_vars(array( 'TPL_EDIT_CATEGORY' => true, 'CAT_TITLE' => htmlCHR($cat_info['cat_title']), 'S_HIDDEN_FIELDS' => build_hidden_fields($hidden_fields), 'S_SUBMIT_VALUE' => $lang['UPDATE'], 'S_FORUM_ACTION' => 'admin_forums.php', )); break; case 'modcat': // // Modify a category in the DB // if (!$new_cat_title = trim($_POST['cat_title'])) { bb_die($lang['CATEGORY_NAME_EMPTY']); } $cat_id = (int)$_POST[POST_CAT_URL]; $row = get_info('category', $cat_id); $cur_cat_title = $row['cat_title']; if ($cur_cat_title && $cur_cat_title !== $new_cat_title) { check_name_dup('cat', $new_cat_title); $new_cat_title_sql = DB()->escape($new_cat_title); DB()->query(' UPDATE ' . BB_CATEGORIES . " SET cat_title = '$new_cat_title_sql' WHERE cat_id = $cat_id "); } $datastore->update('cat_forums'); CACHE('bb_cache')->rm(); bb_die($lang['FORUMS_UPDATED'] . '

' . sprintf($lang['CLICK_RETURN_FORUMADMIN'], '', '') . '

' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '', '')); break; case 'deleteforum': // // Show form to delete a forum // $forum_id = (int)$_GET[POST_FORUM_URL]; $move_to_options = ''; $move_to_options .= sf_get_list('forum', $forum_id, 0); $foruminfo = get_info('forum', $forum_id); $hidden_fields = array( 'mode' => 'movedelforum', 'from_id' => $forum_id, ); $template->assign_vars(array( 'TPL_DELETE_FORUM' => true, 'WHAT_TO_DELETE' => htmlCHR($foruminfo['forum_name']), 'DELETE_TITLE' => $lang['FORUM_DELETE'], 'CAT_FORUM_NAME' => $lang['FORUM_NAME'], 'S_HIDDEN_FIELDS' => build_hidden_fields($hidden_fields), 'S_FORUM_ACTION' => 'admin_forums.php', 'MOVE_TO_OPTIONS' => $move_to_options, 'S_SUBMIT_VALUE' => $lang['MOVE_AND_DELETE'], )); break; case 'movedelforum': // // Move or delete a forum in the DB // $from_id = (int)$_POST['from_id']; $to_id = (int)$_POST['to_id']; if ($to_id == -1) { // Delete everything from forum \TorrentPier\Legacy\Admin\Common::topic_delete('prune', $from_id, 0, true); $datastore->update('stats'); } else { // Move all posts $sql = 'SELECT * FROM ' . BB_FORUMS . " WHERE forum_id IN($from_id, $to_id)"; $result = DB()->query($sql); if (DB()->num_rows($result) != 2) { bb_die('Ambiguous forum ID'); } DB()->query('UPDATE ' . BB_TOPICS . " SET forum_id = $to_id WHERE forum_id = $from_id"); DB()->query('UPDATE ' . BB_BT_TORRENTS . " SET forum_id = $to_id WHERE forum_id = $from_id"); $row = DB()->fetch_row('SELECT MIN(post_id) AS start_id, MAX(post_id) AS finish_id FROM ' . BB_POSTS); $start_id = (int)$row['start_id']; $finish_id = (int)$row['finish_id']; $per_cycle = 10000; while (true) { set_time_limit(600); $end_id = $start_id + $per_cycle - 1; DB()->query(' UPDATE ' . BB_POSTS . " SET forum_id = $to_id WHERE post_id BETWEEN $start_id AND $end_id AND forum_id = $from_id "); if ($end_id > $finish_id) { break; } $start_id += $per_cycle; } \TorrentPier\Legacy\Admin\Common::sync('forum', $to_id); } DB()->query('DELETE FROM ' . BB_FORUMS . " WHERE forum_id = $from_id"); DB()->query('DELETE FROM ' . BB_AUTH_ACCESS . " WHERE forum_id = $from_id"); DB()->query('DELETE FROM ' . BB_AUTH_ACCESS_SNAP . " WHERE forum_id = $from_id"); $cat_forums = get_cat_forums(); fix_orphan_sf(); \TorrentPier\Legacy\Group::update_user_level('all'); $datastore->update('cat_forums'); CACHE('bb_cache')->rm(); bb_die($lang['FORUMS_UPDATED'] . '

' . sprintf($lang['CLICK_RETURN_FORUMADMIN'], '', '') . '

' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '', '')); break; case 'deletecat': // Show form to delete a category $cat_id = (int)$_GET[POST_CAT_URL]; $catinfo = get_info('category', $cat_id); $categories_count = $catinfo['number']; if ($categories_count == 1) { $row = DB()->fetch_row('SELECT COUNT(*) AS forums_count FROM ' . BB_FORUMS); if ($row['forums_count'] > 0) { bb_die($lang['MUST_DELETE_FORUMS']); } else { $template->assign_var('NOWHERE_TO_MOVE', $lang['NOWHERE_TO_MOVE']); } } $hidden_fields = array( 'mode' => 'movedelcat', 'from_id' => $cat_id, ); $template->assign_vars(array( 'TPL_DELETE_FORUM' => true, 'WHAT_TO_DELETE' => htmlCHR($catinfo['cat_title']), 'DELETE_TITLE' => $lang['CATEGORY_DELETE'], 'CAT_FORUM_NAME' => $lang['CATEGORY'], 'S_HIDDEN_FIELDS' => build_hidden_fields($hidden_fields), 'S_FORUM_ACTION' => 'admin_forums.php', 'MOVE_TO_OPTIONS' => get_list('category', $cat_id, 0), 'S_SUBMIT_VALUE' => $lang['MOVE_AND_DELETE'], )); break; case 'movedelcat': // Move or delete a category in the DB $from_id = (int)$_POST['from_id']; $to_id = (int)$_POST['to_id'] ?? -1; if ($to_id === -1) { bb_die($lang['NOWHERE_TO_MOVE']); } if ($from_id == $to_id || !cat_exists($from_id) || !cat_exists($to_id)) { bb_die('Bad input'); } $order_shear = get_max_forum_order($to_id) + 10; DB()->query(' UPDATE ' . BB_FORUMS . " SET cat_id = $to_id, forum_order = forum_order + $order_shear WHERE cat_id = $from_id "); DB()->query('DELETE FROM ' . BB_CATEGORIES . " WHERE cat_id = $from_id"); renumber_order('forum', $to_id); $cat_forums = get_cat_forums(); $fix = fix_orphan_sf(); $datastore->update('cat_forums'); CACHE('bb_cache')->rm(); $message = $lang['FORUMS_UPDATED'] . '

'; $message .= $fix ? "$fix

" : ''; $message .= sprintf($lang['CLICK_RETURN_FORUMADMIN'], '', '') . '

' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '', ''); bb_die($message); break; case 'forum_order': // Change order of forums $move = (int)$_GET['move']; $forum_id = (int)$_GET[POST_FORUM_URL]; $forum_info = get_info('forum', $forum_id); renumber_order('forum', $forum_info['cat_id']); $cat_id = $forum_info['cat_id']; $move_down_forum_id = false; $forums = $cat_forums[$cat_id]['f_ord']; $forum_order = $forum_info['forum_order']; $prev_forum = $forums[$forum_order - 10] ?? false; $next_forum = $forums[$forum_order + 10] ?? false; // move selected forum ($forum_id) UP if ($move < 0 && $prev_forum) { if ($forum_info['forum_parent'] && $prev_forum['forum_parent'] != $forum_info['forum_parent']) { $show_main_page = true; break; } if ($move_down_forum_id = get_prev_root_forum_id($forums, $forum_order)) { $move_up_forum_id = $forum_id; $move_down_ord_val = (get_sf_count($forum_id) + 1) * 10; $move_up_ord_val = ((get_sf_count($move_down_forum_id) + 1) * 10) + $move_down_ord_val; $move_down_forum_order = $cat_forums[$cat_id]['f'][$move_down_forum_id]['forum_order']; } } // move selected forum ($forum_id) DOWN elseif ($move > 0 && $next_forum) { if ($forum_info['forum_parent'] && $next_forum['forum_parent'] != $forum_info['forum_parent']) { $show_main_page = true; break; } if ($move_up_forum_id = get_next_root_forum_id($forums, $forum_order)) { $move_down_forum_id = $forum_id; $move_down_forum_order = $forum_order; $move_down_ord_val = (get_sf_count($move_up_forum_id) + 1) * 10; $move_up_ord_val = ((get_sf_count($move_down_forum_id) + 1) * 10) + $move_down_ord_val; } } else { $show_main_page = true; break; } if ($forum_info['forum_parent']) { DB()->query(' UPDATE ' . BB_FORUMS . " SET forum_order = forum_order + $move WHERE forum_id = $forum_id "); } elseif ($move_down_forum_id) { DB()->query(' UPDATE ' . BB_FORUMS . " SET forum_order = forum_order + $move_down_ord_val WHERE cat_id = $cat_id AND forum_order >= $move_down_forum_order "); DB()->query(' UPDATE ' . BB_FORUMS . " SET forum_order = forum_order - $move_up_ord_val WHERE forum_id = $move_up_forum_id OR forum_parent = $move_up_forum_id "); } renumber_order('forum', $forum_info['cat_id']); $datastore->update('cat_forums'); CACHE('bb_cache')->rm(); $show_main_page = true; break; case 'cat_order': $move = (int)$_GET['move']; $cat_id = (int)$_GET[POST_CAT_URL]; DB()->query(' UPDATE ' . BB_CATEGORIES . " SET cat_order = cat_order + $move WHERE cat_id = $cat_id "); renumber_order('category'); $datastore->update('cat_forums'); CACHE('bb_cache')->rm(); $show_main_page = true; break; case 'forum_sync': \TorrentPier\Legacy\Admin\Common::sync('forum', (int)$_GET[POST_FORUM_URL]); $datastore->update('cat_forums'); CACHE('bb_cache')->rm(); $show_main_page = true; break; default: bb_die($lang['NO_MODE']); break; } } if (!$mode || $show_main_page) { $template->assign_vars(array( 'TPL_FORUMS_LIST' => true, 'S_FORUM_ACTION' => 'admin_forums.php', 'L_FORUM_TITLE' => $lang['FORUM_ADMIN_MAIN'], )); $sql = 'SELECT cat_id, cat_title, cat_order FROM ' . BB_CATEGORIES . ' ORDER BY cat_order'; if (!$q_categories = DB()->sql_query($sql)) { bb_die('Could not query categories list'); } if ($total_categories = DB()->num_rows($q_categories)) { $category_rows = DB()->sql_fetchrowset($q_categories); $where_cat_sql = $req_cat_id = ''; if ($c =& $_REQUEST[POST_CAT_URL]) { if ($c !== 'all') { $req_cat_id = (int)$c; $where_cat_sql = "WHERE cat_id = $req_cat_id"; } else { $req_cat_id = 'all'; } } else { $where_cat_sql = "WHERE cat_id = '-1'"; } $sql = 'SELECT * FROM ' . BB_FORUMS . " $where_cat_sql ORDER BY cat_id, forum_order"; if (!$q_forums = DB()->sql_query($sql)) { bb_die('Could not query forums information'); } if ($total_forums = DB()->num_rows($q_forums)) { $forum_rows = DB()->sql_fetchrowset($q_forums); } // Okay, let's build the index $gen_cat = []; $bgr_class_1 = 'prow1'; $bgr_class_2 = 'prow2'; $bgr_class_over = 'prow3'; $template->assign_vars(array( 'U_ALL_FORUMS' => 'admin_forums.php?' . POST_CAT_URL . '=all', 'FORUMS_COUNT' => $total_forums, )); for ($i = 0; $i < $total_categories; $i++) { $cat_id = $category_rows[$i]['cat_id']; $template->assign_block_vars('c', array( 'S_ADD_FORUM_SUBMIT' => "addforum[$cat_id]", 'S_ADD_FORUM_NAME' => "forumname[$cat_id]", 'CAT_ID' => $cat_id, 'CAT_DESC' => htmlCHR($category_rows[$i]['cat_title']), 'U_CAT_EDIT' => "admin_forums.php?mode=editcat&" . POST_CAT_URL . "=$cat_id", 'U_CAT_DELETE' => "admin_forums.php?mode=deletecat&" . POST_CAT_URL . "=$cat_id", 'U_CAT_MOVE_UP' => "admin_forums.php?mode=cat_order&move=-15&" . POST_CAT_URL . "=$cat_id", 'U_CAT_MOVE_DOWN' => "admin_forums.php?mode=cat_order&move=15&" . POST_CAT_URL . "=$cat_id", 'U_VIEWCAT' => "admin_forums.php?" . POST_CAT_URL . "=$cat_id", 'U_CREATE_FORUM' => "admin_forums.php?mode=addforum&" . POST_CAT_URL . "=$cat_id", )); for ($j = 0; $j < $total_forums; $j++) { $forum_id = $forum_rows[$j]['forum_id']; $bgr_class = (!($j % 2)) ? $bgr_class_2 : $bgr_class_1; $row_bgr = " class=\"$bgr_class\" onmouseover=\"this.className='$bgr_class_over';\" onmouseout=\"this.className='$bgr_class';\""; if ($forum_rows[$j]['cat_id'] == $cat_id) { $template->assign_block_vars('c.f', array( 'FORUM_NAME' => htmlCHR($forum_rows[$j]['forum_name']), 'FORUM_DESC' => htmlCHR($forum_rows[$j]['forum_desc']), 'NUM_TOPICS' => $forum_rows[$j]['forum_topics'], 'NUM_POSTS' => $forum_rows[$j]['forum_posts'], 'PRUNE_DAYS' => !empty($forum_rows[$j]['prune_days']) ? delta_time((TIMENOW - 86400 * $forum_rows[$j]['prune_days']), TIMENOW, 'days') : $lang['DISABLED'], 'ORDER' => $forum_rows[$j]['forum_order'], 'FORUM_ID' => $forum_rows[$j]['forum_id'], 'ROW_BGR' => $row_bgr, 'SHOW_ON_INDEX' => (bool)$forum_rows[$j]['show_on_index'], 'FORUM_PARENT' => $forum_rows[$j]['forum_parent'], 'SF_PAD' => $forum_rows[$j]['forum_parent'] ? ' style="padding-left: 20px;" ' : '', 'FORUM_NAME_CLASS' => $forum_rows[$j]['forum_parent'] ? 'genmed' : 'gen', 'ADD_SUB_HREF' => !$forum_rows[$j]['forum_parent'] ? "admin_forums.php?mode=addforum&forum_parent={$forum_rows[$j]['forum_id']}" : '', 'U_VIEWFORUM' => BB_ROOT . FORUM_URL . $forum_id, 'U_FORUM_EDIT' => "admin_forums.php?mode=editforum&" . POST_FORUM_URL . "=$forum_id", 'U_FORUM_PERM' => "admin_forumauth.php?" . POST_FORUM_URL . "=$forum_id", 'U_FORUM_DELETE' => "admin_forums.php?mode=deleteforum&" . POST_FORUM_URL . "=$forum_id", 'U_FORUM_MOVE_UP' => "admin_forums.php?mode=forum_order&move=-15&" . POST_FORUM_URL . "=$forum_id&" . POST_CAT_URL . "=$req_cat_id", 'U_FORUM_MOVE_DOWN' => "admin_forums.php?mode=forum_order&move=15&" . POST_FORUM_URL . "=$forum_id&" . POST_CAT_URL . "=$req_cat_id", 'U_FORUM_RESYNC' => "admin_forums.php?mode=forum_sync&" . POST_FORUM_URL . "=$forum_id", )); } } } } } print_page('admin_forums.tpl', 'admin'); /** * @param $mode * @param $id * @return mixed */ function get_info($mode, $id) { $table = null; $idfield = null; switch ($mode) { case 'category': $table = BB_CATEGORIES; $idfield = 'cat_id'; break; case 'forum': $table = BB_FORUMS; $idfield = 'forum_id'; break; default: bb_die('Wrong mode for generating select list #1'); break; } $sql = "SELECT count(*) as total FROM $table"; if (!$result = DB()->sql_query($sql)) { bb_die('Could not get forum / category information #1'); } $count = DB()->sql_fetchrow($result); $count = $count['total']; $sql = "SELECT * FROM $table WHERE $idfield = $id"; if (!$result = DB()->sql_query($sql)) { bb_die('Could not get forum / category information #2'); } if (DB()->num_rows($result) != 1) { bb_die('Forum / category does not exist or multiple forums / categories with ID ' . $id); } $return = DB()->sql_fetchrow($result); $return['number'] = $count; return $return; } /** * @param $mode * @param $id * @param $select * @return string */ function get_list($mode, $id, $select) { $table = null; $idfield = null; $order = null; $namefield = null; switch ($mode) { case 'category': $table = BB_CATEGORIES; $idfield = 'cat_id'; $namefield = 'cat_title'; $order = 'cat_order'; break; case 'forum': $table = BB_FORUMS; $idfield = 'forum_id'; $namefield = 'forum_name'; $order = 'cat_id, forum_order'; break; default: bb_die('Wrong mode for generating select list #2'); break; } $sql = "SELECT * FROM $table"; if ($select == 0) { $sql .= " WHERE $idfield <> $id"; } $sql .= " ORDER BY $order"; if (!$result = DB()->sql_query($sql)) { bb_die('Could not get list of categories / forums #1'); } $catlist = ''; while ($row = DB()->sql_fetchrow($result)) { $s = ''; if ($row[$idfield] == $id) { $s = ' selected'; } $catlist .= '\n'; } return $catlist; } /** * @param $mode * @param int $cat */ function renumber_order($mode, $cat = 0) { $table = null; $catfield = null; $orderfield = null; $idfield = null; switch ($mode) { case 'category': $table = BB_CATEGORIES; $idfield = 'cat_id'; $orderfield = 'cat_order'; $cat = 0; break; case 'forum': $table = BB_FORUMS; $idfield = 'forum_id'; $orderfield = 'forum_order'; $catfield = 'cat_id'; break; default: bb_die('Wrong mode for generating select list #3'); break; } $sql = "SELECT * FROM $table"; if ($cat != 0) { $sql .= " WHERE $catfield = $cat"; } $sql .= " ORDER BY $orderfield ASC"; if (!$result = DB()->sql_query($sql)) { bb_die('Could not get list of categories / forums #2'); } $i = 10; while ($row = DB()->sql_fetchrow($result)) { $sql = "UPDATE $table SET $orderfield = $i WHERE $idfield = " . $row[$idfield]; if (!DB()->sql_query($sql)) { bb_die('Could not update order fields'); } $i += 10; } if (!$result = DB()->sql_query($sql)) { bb_die('Could not get list of categories / forums #3'); } } /** * @param bool $cat_id * @return array */ function get_cat_forums($cat_id = false) { $forums = []; $where_sql = ''; if ($cat_id = (int)$cat_id) { $where_sql = "AND f.cat_id = $cat_id"; } $sql = 'SELECT c.cat_title, f.* FROM ' . BB_FORUMS . ' f, ' . BB_CATEGORIES . " c WHERE f.cat_id = c.cat_id $where_sql ORDER BY c.cat_order, f.cat_id, f.forum_order"; if (!$result = DB()->sql_query($sql)) { bb_die('Could not get list of categories / forums #4'); } if ($rowset = DB()->sql_fetchrowset($result)) { foreach ($rowset as $rid => $row) { $forums[$row['cat_id']]['cat_title'] = $row['cat_title']; $forums[$row['cat_id']]['f'][$row['forum_id']] = $row; $forums[$row['cat_id']]['f_ord'][$row['forum_order']] = $row; } } return $forums; } /** * @param $forum_id * @return int */ function get_sf_count($forum_id) { global $cat_forums; $sf_count = 0; foreach ($cat_forums as $cid => $c) { foreach ($c['f'] as $fid => $f) { if ($f['forum_parent'] == $forum_id) { $sf_count++; } } } return $sf_count; } /** * @param $forums * @param $curr_forum_order * @return bool */ function get_prev_root_forum_id($forums, $curr_forum_order) { $i = $curr_forum_order - 10; while ($i > 0) { if (isset($forums[$i]) && !$forums[$i]['forum_parent']) { return $forums[$i]['forum_id']; } $i -= 10; } return false; } /** * @param $forums * @param $curr_forum_order * @return bool */ function get_next_root_forum_id($forums, $curr_forum_order) { $i = $curr_forum_order + 10; $limit = (count($forums) * 10) + 10; while ($i < $limit) { if (isset($forums[$i]) && !$forums[$i]['forum_parent']) { return $forums[$i]['forum_id']; } $i += 10; } return false; } /** * @return string */ function get_orphan_sf() { global $cat_forums; $last_root = 0; $bad_sf_ary = []; foreach ($cat_forums as $cid => $c) { foreach ($c['f'] as $fid => $f) { if ($f['forum_parent']) { if ($f['forum_parent'] != $last_root) { $bad_sf_ary[] = $f['forum_id']; } } else { $last_root = $f['forum_id']; } } } return implode(',', $bad_sf_ary); } /** * @param string $orphan_sf_sql * @param bool $show_mess * @return string */ function fix_orphan_sf($orphan_sf_sql = '', $show_mess = false) { global $lang; $done_mess = ''; if (!$orphan_sf_sql) { $orphan_sf_sql = get_orphan_sf(); } if ($orphan_sf_sql) { $sql = 'UPDATE ' . BB_FORUMS . " SET forum_parent = 0, show_on_index = 1 WHERE forum_id IN($orphan_sf_sql)"; if (!DB()->sql_query($sql)) { bb_die('Could not change subforums data'); } if ($affectedrows = DB()->affected_rows()) { $done_mess = 'Subforums data corrected. ' . $affectedrows . ' orphan subforum(s) moved to root level.'; } if ($show_mess) { $message = $done_mess . '

'; $message .= sprintf($lang['CLICK_RETURN_FORUMADMIN'], '', '') . '

'; $message .= sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '', ''); bb_die($message); } } return $done_mess; } /** * @param $mode * @param int $exclude * @param int $select * @return string */ function sf_get_list($mode, $exclude = 0, $select = 0) { global $cat_forums, $forum_parent; $opt = ''; if ($mode == 'forum') { foreach ($cat_forums as $cid => $c) { $opt .= ''; foreach ($c['f'] as $fid => $f) { $selected = ($fid == $select) ? HTML_SELECTED : ''; $disabled = ($fid == $exclude && !$forum_parent) ? HTML_DISABLED : ''; $style = $disabled ? ' style="color: gray" ' : (($fid == $exclude) ? ' style="color: darkred" ' : ''); $opt .= '\n"; } $opt .= ''; } } return $opt; } /** * @param $forum_id * @return bool */ function get_forum_data($forum_id) { global $cat_forums; foreach ($cat_forums as $cid => $c) { foreach ($c['f'] as $fid => $f) { if ($fid == $forum_id) { return $f; } } } return false; } /** * @param $cat_id * @return int */ function get_max_forum_order($cat_id) { $row = DB()->fetch_row(' SELECT MAX(forum_order) AS max_forum_order FROM ' . BB_FORUMS . " WHERE cat_id = $cat_id "); return (int)$row['max_forum_order']; } /** * @param $mode * @param $name * @param bool $die_on_error * @return mixed */ function check_name_dup($mode, $name, $die_on_error = true) { $name_sql = DB()->escape($name); if ($mode == 'cat') { $what_checked = 'category'; $sql = 'SELECT cat_id FROM ' . BB_CATEGORIES . " WHERE cat_title = '$name_sql'"; } else { $what_checked = 'forum'; $sql = 'SELECT forum_id FROM ' . BB_FORUMS . " WHERE forum_name = '$name_sql'"; } $name_is_dup = DB()->fetch_row($sql); if ($name_is_dup && $die_on_error) { bb_die('This ' . $what_checked . ' name taken, please choose something else'); } return $name_is_dup; } /** * Change subforums cat_id if parent's cat_id was changed * * @param $parent_id * @param $new_cat_id * @param $order_shear */ function change_sf_cat($parent_id, $new_cat_id, $order_shear) { DB()->query(' UPDATE ' . BB_FORUMS . " SET cat_id = $new_cat_id, forum_order = forum_order + $order_shear WHERE forum_parent = $parent_id "); }