/** * @group canonical * @covers ::bbp_insert_forum */ public function test_bbp_insert_forum() { $f = $this->factory->forum->create(array('post_title' => 'Forum 1', 'post_content' => 'Content of Forum 1')); $now = time(); $post_date = date('Y-m-d H:i:s', $now - 60 * 60 * 100); $t = $this->factory->topic->create(array('post_parent' => $f, 'post_date' => $post_date, 'topic_meta' => array('forum_id' => $f))); $r = $this->factory->reply->create(array('post_parent' => $t, 'post_date' => $post_date, 'reply_meta' => array('forum_id' => $f, 'topic_id' => $t))); // Get the forum. $forum = bbp_get_forum($f); // Forum post. $this->assertSame('Forum 1', bbp_get_forum_title($f)); $this->assertSame('Content of Forum 1', bbp_get_forum_content($f)); $this->assertSame('open', bbp_get_forum_status($f)); $this->assertSame('forum', bbp_get_forum_type($f)); $this->assertTrue(bbp_is_forum_public($f)); $this->assertSame(0, bbp_get_forum_parent_id($f)); $this->assertEquals('http://' . WP_TESTS_DOMAIN . '/?forum=' . $forum->post_name, $forum->guid); // Forum meta. $this->assertSame(0, bbp_get_forum_subforum_count($f, true)); $this->assertSame(1, bbp_get_forum_topic_count($f, false, true)); $this->assertSame(1, bbp_get_forum_topic_count($f, true, true)); $this->assertSame(0, bbp_get_forum_topic_count_hidden($f, true)); $this->assertSame(1, bbp_get_forum_reply_count($f, false, true)); $this->assertSame(1, bbp_get_forum_reply_count($f, true, true)); $this->assertSame(2, bbp_get_forum_post_count($f, false, true)); $this->assertSame(2, bbp_get_forum_post_count($f, true, true)); $this->assertSame($t, bbp_get_forum_last_topic_id($f)); $this->assertSame($r, bbp_get_forum_last_reply_id($f)); $this->assertSame($r, bbp_get_forum_last_active_id($f)); $this->assertSame('4 days, 4 hours ago', bbp_get_forum_last_active_time($f)); }
/** * Record an activity stream entry when a reply is created * * @since bbPress (r3395) * @param int $topic_id * @param int $forum_id * @param array $anonymous_data * @param int $topic_author_id * @uses bbp_get_reply_id() * @uses bbp_get_topic_id() * @uses bbp_get_forum_id() * @uses bbp_get_user_profile_link() * @uses bbp_get_reply_url() * @uses bbp_get_reply_content() * @uses bbp_get_topic_permalink() * @uses bbp_get_topic_title() * @uses bbp_get_forum_permalink() * @uses bbp_get_forum_title() * @uses bp_create_excerpt() * @uses apply_filters() * @return Bail early if topic is by anonywous user */ public function reply_create($reply_id, $topic_id, $forum_id, $anonymous_data, $reply_author_id) { // Do not log activity of anonymous users if (!empty($anonymous_data)) { return; } // Bail if site is private if (!bbp_is_site_public()) { return; } // Validate activity data $user_id = $reply_author_id; $reply_id = bbp_get_reply_id($reply_id); $topic_id = bbp_get_topic_id($topic_id); $forum_id = bbp_get_forum_id($forum_id); // Bail if user is not active if (bbp_is_user_inactive($user_id)) { return; } // Bail if reply is not published if (!bbp_is_reply_published($reply_id)) { return; } // Setup links for activity stream $user_link = bbp_get_user_profile_link($user_id); // Reply $reply_url = bbp_get_reply_url($reply_id); $reply_content = get_post_field('post_content', $reply_id, 'raw'); // Topic $topic_permalink = bbp_get_topic_permalink($topic_id); $topic_title = get_post_field('post_title', $topic_id, 'raw'); $topic_link = '<a href="' . $topic_permalink . '" title="' . $topic_title . '">' . $topic_title . '</a>'; // Forum $forum_permalink = bbp_get_forum_permalink($forum_id); $forum_title = get_post_field('post_title', $forum_id, 'raw'); $forum_link = '<a href="' . $forum_permalink . '" title="' . $forum_title . '">' . $forum_title . '</a>'; // Activity action & text $activity_text = sprintf(__('%1$s replied to the topic %2$s in the forum %3$s', 'bbpress'), $user_link, $topic_link, $forum_link); $activity_action = apply_filters('bbp_activity_reply_create', $activity_text, $user_id, $reply_id, $topic_id); $activity_content = apply_filters('bbp_activity_reply_create_excerpt', bp_create_excerpt($reply_content), $reply_content); // Compile the activity stream results $activity = array('id' => $this->get_activity_id($reply_id), 'user_id' => $user_id, 'action' => $activity_action, 'content' => $activity_content, 'primary_link' => $reply_url, 'type' => $this->reply_create, 'item_id' => $reply_id, 'secondary_item_id' => $topic_id, 'recorded_time' => get_post_time('Y-m-d H:i:s', true, $reply_id), 'hide_sitewide' => !bbp_is_forum_public($forum_id, false)); // Record the activity $activity_id = $this->record_activity($activity); // Add the activity entry ID as a meta value to the reply if (!empty($activity_id)) { update_post_meta($reply_id, '_bbp_activity_id', $activity_id); } }
/** * Is the forum public? * * @since bbPress (r2997) * * @param int $forum_id Optional. Forum id * @param bool $check_ancestors Check if the ancestors are public (only if * they're a category) * @uses get_post_meta() To get the forum public meta * @uses bbp_get_forum_ancestors() To get the forum ancestors * @uses bbp_is_forum_category() To check if the forum is a category * @uses bbp_is_forum_closed() To check if the forum is closed * @return bool True if closed, false if not */ function bbp_is_forum_public($forum_id = 0, $check_ancestors = true) { $forum_id = bbp_get_forum_id($forum_id); $visibility = bbp_get_forum_visibility($forum_id); // If post status is public, return true $retval = bbp_get_public_status_id() == $visibility; // Check ancestors and inherit their privacy setting for display if (!empty($check_ancestors)) { $ancestors = bbp_get_forum_ancestors($forum_id); foreach ((array) $ancestors as $ancestor) { if (bbp_is_forum($ancestor) && bbp_is_forum_public($ancestor, false)) { $retval = true; } } } return (bool) apply_filters('bbp_is_forum_public', (bool) $retval, $forum_id, $check_ancestors); }
/** * Check if the user can access a specific forum * * @since 2.0.0 bbPress (r3127) * * @uses bbp_get_current_user_id() * @uses bbp_get_forum_id() * @uses bbp_allow_anonymous() * @uses bbp_parse_args() * @uses bbp_get_user_id() * @uses current_user_can() * @uses bbp_is_user_keymaster() * @uses bbp_is_forum_public() * @uses bbp_is_forum_private() * @uses bbp_is_forum_hidden() * @uses current_user_can() * @uses apply_filters() * * @return bool */ function bbp_user_can_view_forum($args = array()) { // Parse arguments against default values $r = bbp_parse_args($args, array('user_id' => bbp_get_current_user_id(), 'forum_id' => bbp_get_forum_id(), 'check_ancestors' => false), 'user_can_view_forum'); // Validate parsed values $user_id = bbp_get_user_id($r['user_id'], false, false); $forum_id = bbp_get_forum_id($r['forum_id']); $retval = false; // User is a keymaster if (!empty($user_id) && bbp_is_user_keymaster($user_id)) { $retval = true; // Forum is public, and user can read forums or is not logged in } elseif (bbp_is_forum_public($forum_id, $r['check_ancestors'])) { $retval = true; // Forum is private, and user can see it } elseif (bbp_is_forum_private($forum_id, $r['check_ancestors']) && user_can($user_id, 'read_private_forums')) { $retval = true; // Forum is hidden, and user can see it } elseif (bbp_is_forum_hidden($forum_id, $r['check_ancestors']) && user_can($user_id, 'read_hidden_forums')) { $retval = true; } return apply_filters('bbp_user_can_view_forum', $retval, $forum_id, $user_id); }
/** * @group canonical * @covers ::bbp_create_initial_content */ public function test_bbp_create_initial_content() { $category_id = $this->factory->forum->create(array('forum_meta' => array('_bbp_forum_type' => 'category', '_bbp_status' => 'open'))); bbp_create_initial_content(array('forum_parent' => $category_id)); $forum_id = bbp_forum_query_subforum_ids($category_id); $forum_id = (int) $forum_id[0]; $topic_id = bbp_get_forum_last_topic_id($forum_id); $reply_id = bbp_get_forum_last_reply_id($forum_id); // Forum post $this->assertSame('General', bbp_get_forum_title($forum_id)); $this->assertSame('General chit-chat', bbp_get_forum_content($forum_id)); $this->assertSame('open', bbp_get_forum_status($forum_id)); $this->assertTrue(bbp_is_forum_public($forum_id)); $this->assertSame($category_id, bbp_get_forum_parent_id($forum_id)); // Topic post $this->assertSame($forum_id, bbp_get_topic_forum_id($topic_id)); $this->assertSame('Hello World!', bbp_get_topic_title($topic_id)); remove_all_filters('bbp_get_topic_content'); $topic_content = "I am the first topic in your new forums."; $this->assertSame($topic_content, bbp_get_topic_content($topic_id)); $this->assertSame('publish', bbp_get_topic_status($topic_id)); $this->assertTrue(bbp_is_topic_published($topic_id)); // Reply post $this->assertSame($forum_id, bbp_get_reply_forum_id($reply_id)); $this->assertSame('Reply To: Hello World!', bbp_get_reply_title($reply_id)); $this->assertSame($reply_id, bbp_get_reply_title_fallback($reply_id)); remove_all_filters('bbp_get_reply_content'); $reply_content = "Oh, and this is what a reply looks like."; $this->assertSame($reply_content, bbp_get_reply_content($reply_id)); $this->assertSame('publish', bbp_get_reply_status($reply_id)); $this->assertTrue(bbp_is_reply_published($reply_id)); // Category meta $this->assertSame(1, bbp_get_forum_subforum_count($category_id, true)); $this->assertSame(0, bbp_get_forum_topic_count($category_id, false, true)); $this->assertSame(0, bbp_get_forum_topic_count_hidden($category_id, true)); $this->assertSame(0, bbp_get_forum_reply_count($category_id, false, true)); $this->assertSame(1, bbp_get_forum_topic_count($category_id, true, true)); $this->assertSame(1, bbp_get_forum_reply_count($category_id, true, true)); $this->assertSame(0, bbp_get_forum_post_count($category_id, false, true)); $this->assertSame(2, bbp_get_forum_post_count($category_id, true, true)); $this->assertSame($topic_id, bbp_get_forum_last_topic_id($category_id)); $this->assertSame('Hello World!', bbp_get_forum_last_topic_title($category_id)); $this->assertSame($reply_id, bbp_get_forum_last_reply_id($category_id)); $this->assertSame('Reply To: Hello World!', bbp_get_forum_last_reply_title($category_id)); $this->assertSame($reply_id, bbp_get_forum_last_active_id($category_id)); $this->assertSame('1 day, 16 hours ago', bbp_get_forum_last_active_time($category_id)); // Forum meta $this->assertSame(0, bbp_get_forum_subforum_count($forum_id, true)); $this->assertSame(1, bbp_get_forum_topic_count($forum_id, false, true)); $this->assertSame(0, bbp_get_forum_topic_count_hidden($forum_id, true)); $this->assertSame(1, bbp_get_forum_reply_count($forum_id, false, true)); $this->assertSame(1, bbp_get_forum_topic_count($forum_id, true, true)); $this->assertSame(1, bbp_get_forum_reply_count($forum_id, true, true)); $this->assertSame(2, bbp_get_forum_post_count($forum_id, false, true)); $this->assertSame(2, bbp_get_forum_post_count($forum_id, true, true)); $this->assertSame($topic_id, bbp_get_forum_last_topic_id($forum_id)); $this->assertSame('Hello World!', bbp_get_forum_last_topic_title($forum_id)); $this->assertSame($reply_id, bbp_get_forum_last_reply_id($forum_id)); $this->assertSame('Reply To: Hello World!', bbp_get_forum_last_reply_title($forum_id)); $this->assertSame($reply_id, bbp_get_forum_last_active_id($forum_id)); $this->assertSame('1 day, 16 hours ago', bbp_get_forum_last_active_time($forum_id)); // Topic meta $this->assertSame('127.0.0.1', bbp_current_author_ip($topic_id)); $this->assertSame($forum_id, bbp_get_topic_forum_id($topic_id)); $this->assertSame(1, bbp_get_topic_voice_count($topic_id, true)); $this->assertSame(1, bbp_get_topic_reply_count($topic_id, true)); $this->assertSame(0, bbp_get_topic_reply_count_hidden($topic_id, true)); $this->assertSame($reply_id, bbp_get_topic_last_reply_id($topic_id)); $this->assertSame($reply_id, bbp_get_topic_last_active_id($topic_id)); $this->assertSame('1 day, 16 hours ago', bbp_get_topic_last_active_time($topic_id)); // Reply Meta $this->assertSame('127.0.0.1', bbp_current_author_ip($reply_id)); $this->assertSame($forum_id, bbp_get_reply_forum_id($reply_id)); $this->assertSame($topic_id, bbp_get_reply_topic_id($reply_id)); }
/** * Check if the user can access a specific forum * * @since bbPress (r3127) * * @uses bbp_get_current_user_id() * @uses bbp_get_forum_id() * @uses bbp_allow_anonymous() * @uses bbp_parse_args() * @uses bbp_get_user_id() * @uses current_user_can() * @uses is_super_admin() * @uses bbp_is_forum_public() * @uses bbp_is_forum_private() * @uses bbp_is_forum_hidden() * @uses current_user_can() * @uses apply_filters() * * @return bool */ function bbp_user_can_view_forum($args = '') { // Default arguments $defaults = array('user_id' => bbp_get_current_user_id(), 'forum_id' => bbp_get_forum_id(), 'check_ancestors' => false); $r = bbp_parse_args($args, $defaults, 'user_can_view_forum'); extract($r); // Validate parsed values $user_id = bbp_get_user_id($user_id, false, false); $forum_id = bbp_get_forum_id($forum_id); $retval = false; // User is a super admin if (is_super_admin()) { $retval = true; } elseif (bbp_is_forum_public($forum_id, $check_ancestors)) { $retval = true; } elseif (bbp_is_forum_private($forum_id, $check_ancestors) && current_user_can('read_private_forums')) { $retval = true; } elseif (bbp_is_forum_hidden($forum_id, $check_ancestors) && current_user_can('read_hidden_forums')) { $retval = true; } return apply_filters('bbp_user_can_view_forum', $retval, $forum_id, $user_id); }
/** * @covers ::bbp_is_forum_public */ public function test_bbp_is_forum_public() { $f = $this->factory->forum->create(); $forum = bbp_get_forum_visibility($f); $this->assertSame('publish', $forum); $forum_status_id = bbp_get_public_status_id($f); $this->assertSame('publish', $forum_status_id); $forum = bbp_is_forum_public($f); $this->assertTrue(bbp_is_forum_public($f)); }
public static function view_forum($can, $forum_id, $user_id) { $forum_id = bbp_get_forum_id($forum_id); if (!$forum_id || !($use_custom = self::use_custom($forum_id))) { return $can; } if (user_can($user_id, 'moderate')) { return $can; } if (bbp_is_forum_public($forum_id, true)) { // only filter public forums $perms = self::get_forum_perms($use_custom, 'read'); $user_role = bbpresskr()->get_user_role($user_id); $can = in_array($user_role, $perms); } return $can; }