/** * @covers ::bbp_forum_permalink * @covers ::bbp_get_forum_permalink */ public function test_bbp_get_forum_permalink() { if (is_multisite()) { $this->markTestSkipped('Skipping URL tests in multiste for now.'); } // Public category. $c = $this->factory->forum->create(array('post_title' => 'Public Category')); $category = bbp_get_forum_permalink($c); $this->assertSame('http://' . WP_TESTS_DOMAIN . '/?forum=public-category', $category); // Public forum of public category. $f = $this->factory->forum->create(array('post_title' => 'Public Forum', 'post_parent' => $c)); $forum_permalink = bbp_get_forum_permalink($f); $this->expectOutputString($forum_permalink); bbp_forum_permalink($f); $forum = bbp_get_forum_permalink($f); $this->assertSame('http://' . WP_TESTS_DOMAIN . '/?forum=public-category/public-forum', $forum); // Private category. $c = $this->factory->forum->create(array('post_title' => 'Private Category')); $category = bbp_get_forum_permalink($c); $forum = bbp_get_forum_permalink($f); $this->assertSame('http://' . WP_TESTS_DOMAIN . '/?forum=private-category', $category); // Private forum of private category. $f = $this->factory->forum->create(array('post_title' => 'Private Forum', 'post_parent' => $c)); bbp_privatize_forum($c); $forum = bbp_get_forum_permalink($f); $this->assertSame('http://' . WP_TESTS_DOMAIN . '/?forum=private-category/private-forum', $forum); // Hidden category. $c = $this->factory->forum->create(array('post_title' => 'Hidden Category')); bbp_hide_forum($c); $category = bbp_get_forum_permalink($c); $this->assertSame('http://' . WP_TESTS_DOMAIN . '/?forum=hidden-category', $category); // Hidden forum of hidden category. $f = $this->factory->forum->create(array('post_title' => 'Hidden Forum', 'post_parent' => $c)); $forum = bbp_get_forum_permalink($f); $this->assertSame('http://' . WP_TESTS_DOMAIN . '/?forum=hidden-category/hidden-forum', $forum); }
/** * 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; } } }
/** * 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); } } }
/** * 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); } }
public function test_send_notification() { $roles = array('administrator'); // Non-hidden forum update_option('bbpress_notify_newtopic_recipients', $roles); $bbpnns = bbPress_Notify_NoSpam::bootstrap(); $users = get_users(array('role' => join(', ', $roles))); $recipients = array(); foreach ($users as $u) { $recipients[$u->ID] = $u; } list($got_recipients, $body) = $bbpnns->send_notification($recipients, 'test subject', 'test_body'); $this->assertEquals($recipients, $got_recipients, 'Test mode got expected recipients'); // Hidden forum returns admins only bbp_hide_forum($this->forum_id); $roles = array('administrator', 'subscriber'); $roles = (array) apply_filters('bbpress_notify_recipients_hidden_forum', $roles, $this->forum_id); $users = get_users(array('role' => join(', ', $roles))); $recipients = array(); foreach ($users as $u) { $recipients[$u->ID] = $u; } list($got_recipients, $body) = $bbpnns->send_notification($recipients, 'test subject', 'test_body'); $this->assertTrue(is_array($got_recipients), 'Got an array back'); $result = array_intersect_key($recipients, $got_recipients); $this->assertTrue(!empty($result), 'Filtered send_notification returns users'); }