/** * Create the forum subscriptions CSV when requested. * * @since 1.0.0 */ public function run_forum_subscriptions_csv() { // Output headers so that the file is downloaded rather than displayed. header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=cc-forum-subscriptions.csv'); // Create a file pointer connected to the output stream. $output = fopen('php://output', 'w'); // Write a header row. $row = array('user_id', 'user_email', 'subscribed_to_forum_id', 'subscribed_to_forum_title', 'subscribed_to_forum_by_user_id', 'subscribed_to_forum_by_user_email', 'forum_date'); fputcsv($output, $row); // Use a WP_User_Query meta_query to find users who have subscribed to forums. $args = array('meta_key' => 'wp__bbp_forum_subscriptions', 'meta_compare' => 'EXISTS'); $user_query = new WP_User_Query($args); // User Loop if (!empty($user_query->results)) { foreach ($user_query->results as $user) { $subscriptions = bbp_get_user_subscribed_forum_ids($user->ID); if (empty($subscriptions)) { continue; } $topics = new WP_QUERY(array('post_type' => 'forum', 'post__in' => $subscriptions, 'cache_results' => false, 'update_post_meta_cache' => false, 'update_post_term_cache' => false)); if (!empty($topics->posts)) { foreach ($topics->posts as $item) { $op = get_userdata($item->post_author); $row = array($user->ID, $user->user_email, $item->ID, $item->post_title, $item->post_author, $op->user_email, $item->post_date); fputcsv($output, $row); } } } } fclose($output); exit; }
/** * Check if a forum is in user's subscription list or not * * @since 2.5.0 bbPress (r5156) * * @param int $user_id Optional. User id * @param int $forum_id Optional. Topic id * @param array $subscribed_ids Optional. Array of forum ID's to check * @uses bbp_get_user_id() To get the user id * @uses bbp_get_forum() To get the forum * @uses bbp_get_forum_id() To get the forum id * @uses bbp_is_object_of_user() To check if the user has a subscription * @uses apply_filters() Calls 'bbp_is_user_subscribed' with the bool, user id, * forum id and subsriptions * @return bool True if the forum is in user's subscriptions, otherwise false */ function bbp_is_user_subscribed_to_forum($user_id = 0, $forum_id = 0, $subscribed_ids = array()) { // Assume user is not subscribed $retval = false; // Validate user $user_id = bbp_get_user_id($user_id, true, true); if (!empty($user_id)) { // Get subscription ID's if none passed if (empty($subscribed_ids)) { $subscribed_ids = bbp_get_user_subscribed_forum_ids($user_id); } // User has forum subscriptions if (!empty($subscribed_ids)) { // Checking a specific forum id if (!empty($forum_id)) { $forum = bbp_get_forum($forum_id); $forum_id = !empty($forum) ? $forum->ID : 0; // Using the global forum id } elseif (bbp_get_forum_id()) { $forum_id = bbp_get_forum_id(); // Use the current post id } elseif (!bbp_get_forum_id()) { $forum_id = get_the_ID(); } // Is forum_id in the user's subscriptions if (!empty($forum_id)) { $retval = bbp_is_object_of_user($forum_id, $user_id, '_bbp_subscription'); } } } return (bool) apply_filters('bbp_is_user_subscribed_to_forum', (bool) $retval, $user_id, $forum_id, $subscribed_ids); }
/** * Remove a forum from user's subscriptions * * @since bbPress (r5156) * * @param int $user_id Optional. User id * @param int $forum_id Optional. forum id * @uses bbp_get_user_subscribed_forum_ids() To get the user's subscriptions * @uses update_user_option() To update the user's subscriptions * @uses delete_user_option() To delete the user's subscriptions meta * @uses do_action() Calls 'bbp_remove_user_subscription' with the user id and * forum id * @return bool True if the forum was removed from user's subscriptions, * otherwise false */ function bbp_remove_user_forum_subscription($user_id, $forum_id) { if (empty($user_id) || empty($forum_id)) { return false; } $subscriptions = (array) bbp_get_user_subscribed_forum_ids($user_id); if (empty($subscriptions)) { return false; } $pos = array_search($forum_id, $subscriptions); if (false === $pos) { return false; } array_splice($subscriptions, $pos, 1); $subscriptions = array_filter($subscriptions); if (!empty($subscriptions)) { $subscriptions = implode(',', wp_parse_id_list($subscriptions)); update_user_option($user_id, '_bbp_forum_subscriptions', $subscriptions); } else { delete_user_option($user_id, '_bbp_forum_subscriptions'); } wp_cache_delete('bbp_get_forum_subscribers_' . $forum_id, 'bbpress_users'); do_action('bbp_remove_user_forum_subscription', $user_id, $forum_id); return true; }
/** * @covers ::bbp_get_user_subscribed_forum_ids */ public function test_bbp_get_user_subscribed_forum_ids() { $u = $this->factory->user->create(); $f = $this->factory->forum->create_many(3); // Add forum subscriptions. bbp_add_user_forum_subscription($u, $f[0]); bbp_add_user_forum_subscription($u, $f[1]); bbp_add_user_forum_subscription($u, $f[2]); $subscriptions = bbp_get_user_subscribed_forum_ids($u); $this->assertEquals(array($f[0], $f[1], $f[2]), $subscriptions); // Remove forum subscription. bbp_remove_user_forum_subscription($u, $f[1]); $subscriptions = bbp_get_user_subscribed_forum_ids($u); $this->assertEquals(array($f[0], $f[2]), $subscriptions); }