Пример #1
0
 /**
  * @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);
 }
Пример #2
0
/**
 * 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));
}
Пример #3
0
/**
 * 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;
        }
    }
}
Пример #4
0
/**
 * 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);
        }
    }
}
Пример #5
0
 /**
  * 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;
             }
         }
     }
 }
Пример #6
0
/**
 * 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);
    }
}
Пример #7
0
 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');
 }