/** * Repair group forum ID mappings after a bbPress 1.1 to bbPress 2.2 conversion * * @since 2.2.0 bbPress (r4395) * * @uses bbp_get_forum_post_type() To get the forum post type * @return If a wp_error() occurs and no converted forums are found */ function bbp_admin_repair_group_forum_relationship() { // Define variables $bbp_db = bbp_db(); $statement = __('Repairing BuddyPress group-forum relationships… %s', 'bbpress'); $g_count = 0; $f_count = 0; $s_count = 0; // Copy the BuddyPress filter here, incase BuddyPress is not active $prefix = apply_filters('bp_core_get_table_prefix', $bbp_db->base_prefix); $groups_table = $prefix . 'bp_groups'; $groups_meta_table = $prefix . 'bp_groups_groupmeta'; // Get the converted forum IDs $forum_ids = $bbp_db->query("SELECT `forum`.`ID`, `forummeta`.`meta_value`\n\t\t\t\t\t\t\t\tFROM `{$bbp_db->posts}` AS `forum`\n\t\t\t\t\t\t\t\t\tLEFT JOIN `{$bbp_db->postmeta}` AS `forummeta`\n\t\t\t\t\t\t\t\t\t\tON `forum`.`ID` = `forummeta`.`post_id`\n\t\t\t\t\t\t\t\t\t\tAND `forummeta`.`meta_key` = '_bbp_old_forum_id'\n\t\t\t\t\t\t\t\tWHERE `forum`.`post_type` = '" . bbp_get_forum_post_type() . "'\n\t\t\t\t\t\t\t\tGROUP BY `forum`.`ID`;"); // Bail if forum IDs returned an error if (is_wp_error($forum_ids) || empty($bbp_db->last_result)) { return array(2, sprintf($statement, __('Failed!', 'bbpress'))); } // Stash the last results $results = $bbp_db->last_result; // Update each group forum foreach ($results as $group_forums) { // Only update if is a converted forum if (!isset($group_forums->meta_value)) { continue; } // Attempt to update group meta $updated = $bbp_db->query("UPDATE `{$groups_meta_table}` SET `meta_value` = '{$group_forums->ID}' WHERE `meta_key` = 'forum_id' AND `meta_value` = '{$group_forums->meta_value}';"); // Bump the count if (!empty($updated) && !is_wp_error($updated)) { ++$g_count; } // Update group to forum relationship data $group_id = (int) $bbp_db->get_var("SELECT `group_id` FROM `{$groups_meta_table}` WHERE `meta_key` = 'forum_id' AND `meta_value` = '{$group_forums->ID}';"); if (!empty($group_id)) { // Update the group to forum meta connection in forums update_post_meta($group_forums->ID, '_bbp_group_ids', array($group_id)); // Get the group status $group_status = $bbp_db->get_var("SELECT `status` FROM `{$groups_table}` WHERE `id` = '{$group_id}';"); // Sync up forum visibility based on group status switch ($group_status) { // Public groups have public forums case 'public': bbp_publicize_forum($group_forums->ID); // Bump the count for output later ++$s_count; break; // Private/hidden groups have hidden forums // Private/hidden groups have hidden forums case 'private': case 'hidden': bbp_hide_forum($group_forums->ID); // Bump the count for output later ++$s_count; break; } // Bump the count for output later ++$f_count; } } // Make some logical guesses at the old group root forum if (function_exists('bp_forums_parent_forum_id')) { $old_default_forum_id = bp_forums_parent_forum_id(); } elseif (defined('BP_FORUMS_PARENT_FORUM_ID')) { $old_default_forum_id = (int) BP_FORUMS_PARENT_FORUM_ID; } else { $old_default_forum_id = 1; } // Try to get the group root forum $posts = get_posts(array('post_type' => bbp_get_forum_post_type(), 'meta_key' => '_bbp_old_forum_id', 'meta_type' => 'NUMERIC', 'meta_value' => $old_default_forum_id, 'numberposts' => 1)); // Found the group root forum if (!empty($posts)) { // Rename 'Default Forum' since it's now visible in sitewide forums if ('Default Forum' === $posts[0]->post_title) { wp_update_post(array('ID' => $posts[0]->ID, 'post_title' => __('Group Forums', 'bbpress'), 'post_name' => __('group-forums', 'bbpress'))); } // Update the group forums root metadata update_option('_bbp_group_forums_root_id', $posts[0]->ID); } // Remove old bbPress 1.1 roles (BuddyPress) remove_role('member'); remove_role('inactive'); remove_role('blocked'); remove_role('moderator'); remove_role('keymaster'); // Complete results $result = sprintf(__('Complete! %s groups updated; %s forums updated; %s forum statuses synced.', 'bbpress'), bbp_number_format($g_count), bbp_number_format($f_count), bbp_number_format($s_count)); return array(0, sprintf($statement, $result)); }
/** * Handle the saving of core forum metadata (Status, Visibility, and Type) * * @since bbPress (r3678) * @param int $forum_id * @uses bbp_is_forum_closed() To check if forum is closed * @uses bbp_close_forum() To close forum * @uses bbp_open_forum() To open forum * @uses bbp_is_forum_category() To check if forum is a category * @uses bbp_categorize_forum() To turn forum into a category * @uses bbp_normalize_forum() To turn category into forum * @uses bbp_get_public_status_id() To get the public status ID * @uses bbp_get_private_status_id() To get the private status ID * @uses bbp_get_hidden_status_id() To get the hidden status ID * @uses bbp_get_forum_visibility() To get the forums visibility * @uses bbp_hide_forum() To hide a forum * @uses bbp_privatize_forum() To make a forum private * @uses bbp_publicize_forum() To make a forum public * @return If forum ID is empty */ function bbp_save_forum_extras($forum_id = 0) { // Validate the forum ID $forum_id = bbp_get_forum_id($forum_id); // Bail if forum ID is empty if (empty($forum_id) || !bbp_is_forum($forum_id)) { return; } /** Forum Status ******************************************************/ if (!empty($_POST['bbp_forum_status']) && in_array($_POST['bbp_forum_status'], array('open', 'closed'))) { if ('closed' === $_POST['bbp_forum_status'] && !bbp_is_forum_closed($forum_id, false)) { bbp_close_forum($forum_id); } elseif ('open' === $_POST['bbp_forum_status'] && bbp_is_forum_closed($forum_id, false)) { bbp_open_forum($forum_id); } } /** Forum Type ********************************************************/ if (!empty($_POST['bbp_forum_type']) && in_array($_POST['bbp_forum_type'], array('forum', 'category'))) { if ('category' === $_POST['bbp_forum_type'] && !bbp_is_forum_category($forum_id)) { bbp_categorize_forum($forum_id); } elseif ('forum' === $_POST['bbp_forum_type'] && bbp_is_forum_category($forum_id)) { bbp_normalize_forum($forum_id); } } /** Forum Visibility **************************************************/ if (!empty($_POST['bbp_forum_visibility']) && in_array($_POST['bbp_forum_visibility'], array(bbp_get_public_status_id(), bbp_get_private_status_id(), bbp_get_hidden_status_id()))) { // Get forums current visibility $visibility = bbp_get_forum_visibility($forum_id); // What is the new forum visibility setting? switch ($_POST['bbp_forum_visibility']) { // Hidden case bbp_get_hidden_status_id(): bbp_hide_forum($forum_id, $visibility); break; // Private // Private case bbp_get_private_status_id(): bbp_privatize_forum($forum_id, $visibility); break; // Publish (default) // Publish (default) case bbp_get_public_status_id(): default: bbp_publicize_forum($forum_id, $visibility); break; } } }
/** * Set forums' status to match the privacy status of the associated group * * Fired whenever a group is saved * * @param BP_Groups_Group $group Group object. */ public static function update_group_forum_visibility(BP_Groups_Group $group) { // Get group forum IDs $forum_ids = bbp_get_group_forum_ids($group->id); // Bail if no forum IDs available if (empty($forum_ids)) { return; } // Loop through forum IDs foreach ($forum_ids as $forum_id) { // Get forum from ID $forum = bbp_get_forum($forum_id); // Check for change if ($group->status !== $forum->post_status) { switch ($group->status) { // Changed to hidden case 'hidden': bbp_hide_forum($forum_id, $forum->post_status); break; // Changed to private // Changed to private case 'private': bbp_privatize_forum($forum_id, $forum->post_status); break; // Changed to public // Changed to public case 'public': default: bbp_publicize_forum($forum_id, $forum->post_status); break; } } } }
/** * Handle the saving of core forum metadata (Status, Visibility, and Type) * * @since 2.1.0 bbPress (r3678) * * @param int $forum_id * @uses bbp_is_forum_closed() To check if forum is closed * @uses bbp_close_forum() To close forum * @uses bbp_open_forum() To open forum * @uses bbp_is_forum_category() To check if forum is a category * @uses bbp_categorize_forum() To turn forum into a category * @uses bbp_normalize_forum() To turn category into forum * @uses bbp_get_public_status_id() To get the public status ID * @uses bbp_get_private_status_id() To get the private status ID * @uses bbp_get_hidden_status_id() To get the hidden status ID * @uses bbp_get_forum_visibility() To get the forums visibility * @uses bbp_hide_forum() To hide a forum * @uses bbp_privatize_forum() To make a forum private * @uses bbp_publicize_forum() To make a forum public * @return If forum ID is empty */ function bbp_save_forum_extras($forum_id = 0) { // Validate the forum ID $forum_id = bbp_get_forum_id($forum_id); // Bail if forum ID is empty if (empty($forum_id) || !bbp_is_forum($forum_id)) { return; } /** Forum Status **********************************************************/ if (!empty($_POST['bbp_forum_status']) && in_array($_POST['bbp_forum_status'], array('open', 'closed'))) { if ('closed' === $_POST['bbp_forum_status'] && !bbp_is_forum_closed($forum_id, false)) { bbp_close_forum($forum_id); } elseif ('open' === $_POST['bbp_forum_status'] && bbp_is_forum_open($forum_id, false)) { bbp_open_forum($forum_id); } elseif ('open' === $_POST['bbp_forum_status'] && bbp_is_forum_closed($forum_id, false)) { bbp_open_forum($forum_id); } } /** Forum Type ************************************************************/ if (!empty($_POST['bbp_forum_type']) && in_array($_POST['bbp_forum_type'], array('forum', 'category'))) { if ('category' === $_POST['bbp_forum_type'] && !bbp_is_forum_category($forum_id)) { bbp_categorize_forum($forum_id); } elseif ('forum' === $_POST['bbp_forum_type'] && !bbp_is_forum_category($forum_id)) { bbp_normalize_forum($forum_id); } elseif ('forum' === $_POST['bbp_forum_type'] && bbp_is_forum_category($forum_id)) { bbp_normalize_forum($forum_id); } } /** Forum Visibility ******************************************************/ if (!empty($_POST['bbp_forum_visibility']) && in_array($_POST['bbp_forum_visibility'], array_keys(bbp_get_forum_visibilities()))) { // Get forums current visibility $old_visibility = bbp_get_forum_visibility($forum_id); // Sanitize the new visibility $new_visibility = sanitize_key($_POST['bbp_forum_visibility']); // What is the new forum visibility setting? switch ($new_visibility) { // Hidden case bbp_get_hidden_status_id(): bbp_hide_forum($forum_id, $old_visibility); break; // Private // Private case bbp_get_private_status_id(): bbp_privatize_forum($forum_id, $old_visibility); break; // Publish (default) // Publish (default) case bbp_get_public_status_id(): default: bbp_publicize_forum($forum_id, $old_visibility); break; } /** * Allow custom forum visibility save actions * * @since 2.6.0 bbPress (r5855) * * @param int $forum_id The forum ID * @param string $old_visibility The current forum visibility * @param string $new_visibility The new forum visibility */ do_action('bbp_update_forum_visibility', $forum_id, $old_visibility, $new_visibility); } /** Forum Moderators ******************************************************/ // Either replace terms if (bbp_allow_forum_mods()) { if (current_user_can('assign_moderators') && !empty($_POST['bbp_moderators'])) { // Escape tag input $users = sanitize_text_field($_POST['bbp_moderators']); // Explode by comma $users = strstr($users, ',') ? explode(',', $users) : (array) $users; $user_ids = bbp_get_user_ids_from_nicenames($users); // Update forum moderators if (!empty($user_ids)) { // Remove all moderators bbp_remove_moderator($forum_id, null); // Add moderators foreach ($user_ids as $user_id) { bbp_add_moderator($forum_id, $user_id); } } // ...or remove them. } elseif (isset($_POST['bbp_moderators'])) { bbp_remove_moderator($forum_id, null); } } }
/** * Handle the saving of core forum metadata (Status, Visibility, and Type) * * @since 2.1.0 bbPress (r3678) * * @param int $forum_id * @uses bbp_is_forum_closed() To check if forum is closed * @uses bbp_close_forum() To close forum * @uses bbp_open_forum() To open forum * @uses bbp_is_forum_category() To check if forum is a category * @uses bbp_categorize_forum() To turn forum into a category * @uses bbp_normalize_forum() To turn category into forum * @uses bbp_get_public_status_id() To get the public status ID * @uses bbp_get_private_status_id() To get the private status ID * @uses bbp_get_hidden_status_id() To get the hidden status ID * @uses bbp_get_forum_visibility() To get the forums visibility * @uses bbp_hide_forum() To hide a forum * @uses bbp_privatize_forum() To make a forum private * @uses bbp_publicize_forum() To make a forum public * @return If forum ID is empty */ function bbp_save_forum_extras($forum_id = 0) { // Validate the forum ID $forum_id = bbp_get_forum_id($forum_id); // Bail if forum ID is empty if (empty($forum_id) || !bbp_is_forum($forum_id)) { return; } /** Forum Status **********************************************************/ if (!empty($_POST['bbp_forum_status']) && in_array($_POST['bbp_forum_status'], array('open', 'closed'))) { if ('closed' === $_POST['bbp_forum_status'] && !bbp_is_forum_closed($forum_id, false)) { bbp_close_forum($forum_id); } elseif ('open' === $_POST['bbp_forum_status'] && bbp_is_forum_open($forum_id, false)) { bbp_open_forum($forum_id); } elseif ('open' === $_POST['bbp_forum_status'] && bbp_is_forum_closed($forum_id, false)) { bbp_open_forum($forum_id); } } /** Forum Type ************************************************************/ if (!empty($_POST['bbp_forum_type']) && in_array($_POST['bbp_forum_type'], array('forum', 'category'))) { if ('category' === $_POST['bbp_forum_type'] && !bbp_is_forum_category($forum_id)) { bbp_categorize_forum($forum_id); } elseif ('forum' === $_POST['bbp_forum_type'] && !bbp_is_forum_category($forum_id)) { bbp_normalize_forum($forum_id); } elseif ('forum' === $_POST['bbp_forum_type'] && bbp_is_forum_category($forum_id)) { bbp_normalize_forum($forum_id); } } /** Forum Visibility ******************************************************/ if (!empty($_POST['bbp_forum_visibility']) && in_array($_POST['bbp_forum_visibility'], array_keys(bbp_get_forum_visibilities()))) { // Get forums current visibility $old_visibility = bbp_get_forum_visibility($forum_id); // Sanitize the new visibility $new_visibility = sanitize_key($_POST['bbp_forum_visibility']); // What is the new forum visibility setting? switch ($new_visibility) { // Hidden case bbp_get_hidden_status_id(): bbp_hide_forum($forum_id, $old_visibility); break; // Private // Private case bbp_get_private_status_id(): bbp_privatize_forum($forum_id, $old_visibility); break; // Publish (default) // Publish (default) case bbp_get_public_status_id(): default: bbp_publicize_forum($forum_id, $old_visibility); break; } /** * Allow custom forum visibility save actions * * @since 2.6.0 bbPress (r5855) * * @param int $forum_id The forum ID * @param string $old_visibility The current forum visibility * @param string $new_visibility The new forum visibility */ do_action('bbp_update_forum_visibility', $forum_id, $old_visibility, $new_visibility); } }